Pa, pa, Pajton
Udavi dave.
Decembar u Holandiji zna da bude hladan, promrzao, vlažan. Kako poslednji dani godine odmiču, uzbuđenje oko Božića raste; te uprkos hladnoći Holanđani se izmigolje vani, druže se, odlaze u udobne, ležerne kafiće na topli kakao i kafu. Dani se tako teturaju pretureni hladnim, slanim vetrom sa severa; noć sve više nagriza preostalo svetlo kasnog jutra i rane večeri, čineći da Božićni dan treperi u zimskoj tami kao poslednje utočište odlazeće godine; dok, konačno, i on ne ostane za nama. Kada se sutradan pokupe ostaci svečane večere, baci napukao tanjir koji je teča Ruben polu-pijan ispustio na pod i pronađe zaboravljena tašnica strine Floris, Holanđanima preostaje samo da se zavuku pod pokrove stanova i kućica, i prepuste zimskoj letargiji čekajući da lale opet počnu cvati.
Probaćemo da razumemo postupke sredovečnog g. Guida, pred kojim je nedelju dana prazničnog odmora na koji ne bi otišao da mu kancelarija nije bila zatvorena. Ne znamo sve detalje: možda se prejeo Poffertjes ili nije bilo dovoljno prazničnog crvenog vina, ili prosto samo nije imao s kim da izađe na krug oko kanala. Odlazeća 1989. godina je bila burna: od prostesta na Tjenanmenu, preko Plišane čekoslovačke revolucije, do pada berlinskog zida; možda je i to uticalo na g. Guida da se povuče u kutak svoje sobe i zaroni u veštačko svetlo računarskog ekrana. Kako bilo, rešio je da iskoristi samotnu kratkodanu nedelju i napravi novi skripting jezik. Javaskript je tada još uvek bio samo embrion jezive ideje, a na drugom kraju planete g. Goslin je izvlačio prve verzije Jave iz pregrejanih pametnih tostera. Jasna je, dakle, namera g. Guida; nepobitno možemo da se složimo da je programerski ekosistem vapio za pristojnim jezikom, makar nemaštovito nazvanog po neodoljivo oštroj i neprevaziđeno duhovitoj komičarskoj trupi svih vremena. Evropljani sa severa cene minimalizam, tako je i g. Guido poželeo jezik koji će biti čitljiv, jasan, minimalan; filozofiju jezika je kasnije njegov kolega g. Peters sumirao u 19 zen aforizama (nije 20, jer jedna nije zapisana: komedija ili pijanstvo, nećemo saznati.) Većina stavki ipak ostaje u domenu filozofiranja; ne nekom posebnom greškom, već jer su samo izmaštani i uopšteni.
Pajton bi ostao jedna fina, pitka skriptić pričica da se nije umešala Deus ex machina; omniprisutno tehnološko božanstvo sa viškom slova O
u svom imenu. U prvim godinama nakon 2000., C# je zasluženo dobijao na popularnosti, a Gugl se plašio da nastavi dalje putem Jave zbog bračnih problema sa Oraklom. Potražio je ljubav na drugoj strani, te se tako čike i tete iz Gugla odlučiše da prisvoje Lua, ups, ovaj, Pajton. Naš g. Guido dobija posao i postaje plaćen da završi šta je započeo; te u znak posvećenosti pridružuje još jedno ‘o’ svom imenu kako bi ličio na nove roditelje. Posle godina gmizanja, Pajton dobija krila. Ruku na srce, sintaksa bliska pseudo-kodu je pomogla i pre upliva tehno-papa-božanstva, te su i naučnici prigrabili jezik za svoja naučna proračunavanja, jer, ironije li, nisu hteli da se mnogo bave programiranjem. Sagledajmo apsurd ove izjave: oni kojima je preciznost i valjanost primarni deo životnog poziva, ne mare za način kojim implementiraju tu vrlinu.
Dok ga nisam koristio u produkciji, Pajtonče je uvek bio samo skript jezik o kome nisam previše razmišljao: nadohvat ruke kada zatreba, jednostavan alat, zamena za neupotrebljiv Windows-ov shell, ulickani DOS.
”Od babe ne mož’ napravit’ devojku”, šalila se moja baka. Od jednostavnog skriptić jezika ne mož’ napraviti dobar programski jezik, pa da ga osam. Danas kažem: Pajton je loš programski jezik, ali ima preodličan ekosistem.
Nemam nameru da ikoga ubeđujem u navedeno; niti mi je stalo da taksativno navodim argumente koji govore u prilog. Kada dugo praktikuješ neku veštinu, brže primećuješ šta radi, a šta žulja. Taj osećaj počinje kao nemušto čuđenje, potom prelazi u nevericu usled svakodnevnog trvljenja, da bi završilo kao odbačene cipele na tavanu. Da te neko pita zašto, ne bi umeo da mu odmah odgovoriš; isto kao što znaš da imaš negde taj par cipela, ali nisi siguran gde su baš ovog trenutka. Znaš samo da ne želiš u njima da hodaš dalje.
Pajton danas liči na tapiseriju raznolikih programskih koncepata zašivenih da se nekako drže i čine celinu. Ispostavilo se da jednostavnost kojom je Pajton kupovao srca i prste programera, zamisli, nije dovoljna za ozbiljnije projekte; pa se kalemilo, dodavalo, dopunjavalo. Kada više nije moglo, gurnulo se pod tepih (verzija 2) koji u holandskim kućama i nisu česti, da bi dobili novu verziju - mutanta Midgaardslang, ogromno zmija-čudovište. Početni jednostavni koncepti koje je g. Guido zamislio vapaju za zrelinom koja nije postojala, te je bilo potrebno izmisliti toplu vodu nanovo; ovaj put od strane onih kojima prvobitna jednostavnost i nije zapravo smetala.
Kao i svaki dinamički sistem tipova, kada pređe granicu “malog projekta”, postaje noćna mora za održavanje i izmene. Žao mi je ukoliko mislite drugačije, verovatno niste napisali dovoljno koda da osetite bol dinamičkih jezika. Nepostojanje jakih tipova je u kontradikciji i sa aforizmom “eksplicitno je bolje nego implicitno”, u jeziku u kome se mnogo toga podrazumeva. Dosetili se da “ojačaju” tipove sa mypy
nakon pisanja koda, a pre izvršavanja koda; niko ni da pomene tu strašnu reč “kompajler”, kao da će se izgubiti magija lakoće pisanja i oterati jednorozi? Zašto ne koristiti tipove kako treba i gde treba? Pajton sintaksa važi za čitljiviju: super izgleda u čitankama za prvi razred, ali zapinje u produkciji, kada završiš školu. 100 načina da se interpolira string. map
liste koji ne vraća listu. Nečitljiv list comprehensions, urađen drugačije od svakog jezika. Uvrnuti ternarni operator; koji je super za kratke primere, ali ne i za iole kompleksnije izraze. Preosetljivi tuple: ako zaboraviš zarez, ćao. String literals, zaista? Magija sa __
atributima. Nejasna OO orijentacija, sa 100 top-level metoda. Definicija klase, sa idiotskim ponavljanjem neophodnog self
, te tupava deklaracija propertija u konstruktoru. Pajton voli da ga svi pipaju, ne postoji privatnost. Nomenklatura paketa, moduli, instalacije, pakovanje artifakta; neprestano nova rešenja za isto (venv, pyenv, virtualevn, wtf-env…) Aforizam da se stvari izvode na jedan i samo jedan način ne važi. Razvoj projekta u Pajtonu je spor koliko i njegovo izvršavanje.
Da sumiram: nema ničega elegantnog u Pajton kodu. (Al’ kida sa ekosistemom.)
Tu ću negde stati; nije mi namera da bacam drvlje i kamenje. Niti tinjam gnevom ili nezadovoljstvom; štaviše, takve emocije su ovde potpuno isključene. Da, postoje pajtonisti koji pišu dobar kod; neki slegnu ramenima i opovrgnu sve napisano odgovarajući da ne znam šta je to dobar Pajton. Ah, i ćorava koka zrno nađe - u svakom programskom ekosistemu se može napraviti odličan softver. To što se nešto koristi, ne znači da je i valjano.
Nego, kako smo došli do ovde?
Pajton je interesantna pojava, vredna sociološkog proučavanja. Može da posluži kao prikaz slučaja u kome su korisnici pokušali da se sažive sa nečim, prilagodili se onome što postoji i, na kraju, racionalizovali svoje emocije prema programerskom ekosistemu. Strast je očigledna, te 2014. Pajton postaje najpopularniji programski jezik za učenje programiranja na univerzitetima. Drugim rečima, sa fakulteta nam dolaze armije mladih kojima je Pajton “sve i svja” u programiranju. TIOBE index poslednjih godina označava da je Pajton “programski jezik godine”. Ako se bavite mašinskim učenjem, vrlo verovatno je Pajton vaš izbor, jer postoji toliko korisnih biblioteka. Skriptić jezik koji je nastao samotnog, hladnog Božića 1989. godine, danas je najvažniji programski jezik na svetu.
Šta nam to govori? Da li je ovo ljubavna melodrama sa srećnim završetkom? Da li je ilustracija potčinjavanja tehnološkom gigantu, gde gutamo sve što nam se nameće; ma, tražimo i još? Da li je indikacija da za razvoj softvera ne trebaju precizne, moćne alatke, već banalna rešenja, čije nedostatke zamenjujemo sirovom radnom snagom, koja će držati vodu kada majstori odu? Da li je kasno da (se) popravimo?
Zašto su programski jezici važni? I sam ponavljam da se u svakom programskom ekosistemu može napisati dobar softver. Zar nije dovoljno kada je dovoljno dobro? Opet, potrebno je vreme da čovek dođe do odgovora; takvog koji je jasan i razumljiv, ali je prevashodno empirijski. Tiče se važnog svojstva: jezik oblikuje naš način razmišljanja. Preslikano na programske jezike, osobine jezika se preslikavaju na arhitekturu, način kako organizujemo kod, timove i, prevashodno, kako komuniciramo.
Priča o Pajtonu me podseća na Malog Princa i crtež sestre-zmije Boe koja je progutala slona. Ako se odmaknemo, Pajton kao da se obmotao oko sebe samog, učvorio, zapetljao; ne zna da pusti, nastavlja da steže, pa se još više upetljava, kolariću-paniću; a čvor raste i raste, te više ne liči na zmiju već na kakvo klupko. Simpatično možda za likovni rad, ali sumorna sinteza razvoja softverskog razvoja.