Gospodar prstena
Kakvo li je to moralo biti razočarenje za malog Frodoa, kada je shvatio da je upravo uništen Prsten tek samo jedan od mnogih. Mračnih gospodara ima na pretek: JavaSkript, Java, Skala, C#, Python, Go, Rust…; žare i pale prstenjem moći, dok neizmerne predele gutaju senke noći.
Toliko programskih jezika ima, da ni vilenjaci Lotlorijena više nisu u stanju da ih isprate. A koliko tek rešenja za iste probleme, da ni svi čarobnjaci ne umeju da ih prebroje i prekroje. Možda je to razlog zašto su zauvek napustili Sredozemlje.
Bavljenje raznolikim programskim jezicima je zabava za Polušane. Često im se pridružim; privlači me razmišljanje kroz fiksnu sintaksu i traženje balansa između delotvornosti koda i njegove razumljivosti.
Mudar ratnik Rohana, Dragiša, podsetio me je nedavno - postoji li suštinski napredak sa svim tim jezicima? Zašta nam trebaju stalno neki novi programski alati koji su i dalje sporiji, energetski zahtevniji i ne uvode nove koncepte; u kojima pišemo kod na isti način kako bi pisali i u, čak, bejziku (UserService.bas
)? Da li posle C++ postoji nešto što može da ga zameni?
Odgovor na ovo pitanje je nestalno kao narav patuljaka.
Ishitreno možemo odbaciti tvrdnju navodeći sijaset primera iz modernih jezika koji su koncizni, jasni, lepi (šta god to značilo). Ima razloga zašto više volim jedan kod u odnosu na drugi. Postoji nekakav teško kvantifikovan osećaj koji se javlja kada alatka koju koristimo radi posao; kada programskim jezikom efikasno zapisujemo ideju rešenja, sigurni u ishod napisanog.
Tada se ugrizem za jezik: pre nekoliko razdoblja, kada sam se služio samo asemblerom i C-om, potpuno sam gospodario kodom. Štaviše, bio sam neuporedivo sigurniji u napisano nego danas kada otkucam nešto u JavaScriptu ili Pythonu. Od racionalnog agnostika postao sam nesigurni vernik - napravim izmenu u kodu i molim se Iluvataru da sve to nekako (pro)radi.
Da bi ispravno odgovorili na izazov, moramo da izuzmemo naviku. Štos je u tome što većina praksi kojima se služimo postaju, razumljivo, navika. Jednom kada se naviknemo, stvara se komfor praktikovanja; nema veće opsene od takvog mentalnog stanja udobnosti. Od drveta ne vidimo Mračnu šumu; gledamo i vagamo na isti način, iznova. Preostalo oko nas postaje nedovoljno da ga zagrizemo i usvojimo: može nam biti interesantno, čudno, lepo, nečitljivo, izazovno, dosadno… kakav god epitet mu prilepimo, suštinski ga ne razumemo. Zato skalaši lepo plivaju efekatima, skriptaši ne razumeju kompajliranje, javaši misle da je sve OOP, a devops vidi samo konfiguracije.
Većina koncepata programiranja koje iznova otkrivamo postoje već puno razdoblja. Naporedo postoje jezici koji ih implementiraju; vremenom se unapređuju. Programirati u C++ danas, na primer, izgleda potpuno drugačije nego pre deset godina. U njima se stvari zovu svojim imenima: klasa je struktura, a funkcija pointer na izvršni blok koda. Zašto nam treba više od toga?
Zašto nastaju novi programski jezici? Osim ekonomske gramzivosti veštaca Mordora, uobičajen odgovor je da učini razvoj “lakšim” i “bržim” i “sigurnijim”. Grohotom se smeju svi Orci sada; izgovori, izgovori, izgovori! Da li zaista brže programiramo danas? Da li pravimo manje grešaka samo zbog programskog jezika? Da li je slučajno svakodnevni proces bildovanja i restartovanja razvojne verzije značajno brži? Zašto pristajemo na mnogostruko sporiji izvršni kod i dajemo novce trećim stranama da ga izvršavaju za nas? Šta je toliko nerazumljivo u postojećim programskim jezicima da je moralo da bude zamenjeno nečim drugim? Kome smetaju vitičaste zagrade? Da li je čitljivost u korelaciji sa sintaksom? Kakva je vrednost jezika “višeg” nivoa, koji se neprestano vraća na osnove (volatile
, niti, primitivi, soketi)? Da li je u toku konceptualna kompresija? Ili smo prosto lenji, pa nam se mora dodvoravati slatkim sintaksama? Pre i kasnije, sve dođe na naplatu.
Pažnja sada: zamisli tu enormnu, kumulativnu ljudsku mentalnu energiju svih tih napora koja neprestano stvara nove i nove programske jezike! Kada bi se bar deo nje fokusirao na jedan ekosistem, jedan jezik, jedan standard! Zmajevi Ankalagon Crni i Šmaug bi se zavuklu u rupe svojih planina pred tako strahotnom, blještavom energijom uma.
Prisetimo se okupa svih rasa u Rivendelu: ne tragamo za jednim najboljim programskim jezikom, savršenim programskim okvirima, najsnažnijim među nama da nosi teret Prstena… Tragamo za Jednim koji će nam biti dovoljan - dakle, za nama samima: prvo moramo da razumemo šta je to dovoljno.
Nije ovo krišom sipan reklamni prašak za C++ koji popiješ uz vrč medovine u lokalnoj krčmi. Neka bude drugi neki jezik, nešto treće. Šta god. Ali hajde da prestanemo da se trošimo iznova i iznova na programske jezike i ekosisteme koji su tek malo izmenjeni, a ne donose ništa novo. Sve to smo već odavno rešili. Idemo dalje.
Patuljci se vrpolje, čujem ih već: sa programskim jezicima ćemo mi lako, pevaju oni iz dubina rudnika. Šta ćemo sa svim tim softverskim rešenjima, alatima, muku mučimo, nikako da ih izučimo!
Reč je o nastavku iste teme - koliko tek postoji različitih načina da se uradi iste stvari! Štos je što je svaki na početku dovoljno dobar; hajd’ sad ti proberi i uloži se potpuno u jedan. Standardizacije nema, open-source je zabavna ideja obečašćena izjednačavanjem sa nepostojanjem cene, gledaš u Palantir šta se koristi po tehnološkom Mordoru, jecaš od sreće kada neko iz podrške konačno razume tvoj tiket. Postoje neslaganja čak i sa osnovnim konceptima: strukturom foldera, imenovanjem artifakta, verzionisanjem, modulima. Dokle?
Takav pristup nas prati samog početka učenja veštine programiranja. “Hello World” je jedan od toksičnijih primera koji postoji: fokusira se na lakoću izrade, a ne na ispravnost. I to se nastavlja kroz dalju edukaciju, preliva na prve poslove; bubri grozničavo do momenta kada je potrebno zaboraviti sve naučeno da bi tek počeo da učiš. Ah, kakav gubitak! Ako je korektan kod toliko težak, hajde da to rešavamo, a ne da ga menjamo neupotrebljivim lakoćama.
Vraćam se na mudrost Elronda: pisanje koda je najmanji deo razvoja softvera. Čemu onda toliko halabuke oko njega?
Izobilje ne doprinosi napretku. Pre ga utamniči.
Nisam neki ljubitelj Tolkina. Više sam za Zemljomorje.