Sećanje na Delphi i tužno stanje web komponenti
14. Februara, se navršilo 30 godina od kako je izašao Delphi 1.0. Ovaj članak opisuje niz detalja oko tog lansiranja. To je baš dosta godina i baš mi je žao što ni Borland ni Delphi više nisu sa nama u obliku i sa uticajem koji su imaju tokom osamdesetih i devedesetih.
Delphi se oduvek prodavao kao RAD (Rapid Application Development) alat. Postojao je niz šablona za projekte, a najtipičnji je bio Win32 aplikacija. Kada biste kreirali takav projekat, dočekala bi vas prazna forma (Form1):
Novi Delphi 1.0 projekat i About dijalog
U paleti iznad se nalazio niz standardnih i namenskih komponenti koje biste na forme dodavali u dva klika. Komponente su se podešavale i povezile kroz svojstva, a ponašanje se definisalo obradom događaja. Dvoklik na dugme npr bi iz pozadine izvukao odgovarajuć Object Pascal fajl gde biste onda programirali šta treba da se desi na klik.
Stvari poput glavnog menija, kontekstnih menija, dijaloga za čuvanje i otvaranje fajlova, dugmadi, statusne linije itd su dolazile kao deo standardne biblioteke komponenti. Puno toga je pružao sam Windows i dosta programera se trudilo da koriste nativan izgled i ponašanje, u duhu platforme. Ako bi kojim slučajem zafalila neka komponenta, lako ste je mogli naći na sajtovima kao što je bio Torry.net ili napraviti sami.
Daleko je sve to bilo od savršenog, ali celu stvar treba staviti u perspektivu - to je bilo pre više od 25 godina!
Web Components logo
Web je tokom godina nekako došao do toga da su nam potrebne komponente. Taj put je bio jako krivudav, a mesto na koje smo stigli je daleko od idealnog. Danas ne diktira browser koje ćemo komponente koristiti i kako, već framework. Programeri po pravilu beže od nativnog izgleda komponenti. Dugmad su još koliko-toliko bliska nativnim, ali select box je pravi divlji zapad implementacija, restilizacija i prekrajanja ponašanja.
Mislim da problem dolazi iz odsustva ambicije i jasne vizije za to šta HTML može i treba da bude. HTML se nikada nije trudio da pruži opširan i moćan skup osnovnih komponenti za razvoj aplikacija. Ono što dolazi po specifikaciji i način na koji to browseri implementiraju je sramotno loše. Na stranu to što je bilo vrlo malo osnovnih komponenti, nego su i te što postoje traljavo osmišljene i loše implementirane. Evo par primera: komponenta za unos teksta i odabir fajla koriste isti HTML element, select je nefleksibilan, a combo box misaona imenica, content editable je opšte rasulo itd.
Pored loših osnovnih komponenti, decenijama nije postojao standardan način da se dodaju i lako dele nove komponente. Zato smo i završili sa nizom popularnih paketa UI komponenti koje su sve oročene na desetak godina korisnog života i lagani sunset posle toga (ExtJS, jQuery UI, ubaci neku danas aktuelnu biblioteku).
Čak i kada je napokon napravljen standard za to (Web Components), pružio je premalo, prekasno. Programeri ih uglavnom ignorišu i nastavljaju da teraju kao i do sada iako bi nam dugoročno verovatno bilo bolje da koristimo web standard. Često pomenem i stojim iza toga - ako komponentu razvijemo kao Web Component biće lakša za održavanje i dugovečnija nego npr React komponenta. Web standardi su to, uvek se ide na kompatibilnost, ali avaj.
Kada uporedim svoje sećanje na Delphi i rani Windows razvoj sa papazjanijom koja vlada na webu, moram da gunđam. Naš ogroman kolektivni propust je to što zajednica izmišlja silne dizajn sisteme, pa iznova i iznova pravi pakete komponenti, vezane za ovaj ili framework, gde je cela stvar oročena da budu aktuelna deceniju, najviše dve. Puno bi nam bolje bilo da imamo bogatije standardne HTML komponente i bolji mehanizam za proširenje i deljenje istih. Nedostaje jasna i agresivna strategija po tom pitanje i osuđeni smo na izmišljanje točka svakih 5-10 godina, uz prateće lutanje, loš accessibility, nizove nepokrivenih “graničnih” slučajeva i sav prateći ponovni trošak. Na kraju dana, sav trošak razvoja negde mora da bude plaćen - ili ćemo ga preneti na korisnike (ako do njih dođemo), ili na investitore, ili subvencionisati iz svog džepa kroz open source razvoj i side projekte.
Svo to rasipanje me izuzetno nervira. Umesto da HTML i browseri ozbiljno shvate svoju ulogu aplikativne platforme i pruže niz kvalitetnih, dobro osmišljenih i moćnih komponenti, oni se utrkuju koji će bolje da tera megabajte i megabajte naduvanog, redudantnog i loše optimizovanog JavaScript koda.
Pojavi se s vremena tračaj nade. Projekti kao što je HTMX pokazuju u kom smeru browseri mogu da se kreću da bi smanjili kompleksnost client side koda, ali nigde nisam primetio ambicije i želje zajednice da radi na proširenju i unapređenju komponenti koje browser pruža. Pogledaš kako su rešili dialog element i tu sva dalja priča staje - beskonačno fleksibilan i beskonačno beskoristan po defaultu. To je HTML pristup.
Delphi je imao drugačiji pristup - vrlo brzo se stizalo od 0 do korisne aplikacije u preporučenom stilu za Windows aplikacije. To je to R u RAD koje je desktop i mobile razvoj donekle zadržao, a web možda imao u prvih par godina postojanja, pa posle izgubio. Paradoks u kome živimo i radimo je to što je razvoj za web u isto vreme i besplatan i preskup. To na kraju plaćamo svi.