Python (1991) i Ruby (1995)
Jedan Nizozemac se dosađivao za Božić, jedan Japanac je htio da programeri budu sretni — i tako su, bez ikakve žurbe, nastala dva jezika koja danas tiho pokreću pola interneta.
Amsterdam, prosinac 1989. Blagdani, ulice puste, institut zatvoren — Centrum Wiskunde & Informatica (CWI), ozbiljna nizozemska ustanova gdje se ozbiljni ljudi bave ozbiljnom matematikom i informatikom — a jedan mršavi Nizozemac sjedi kod kuće i ne zna što bi sa sobom. Nema kave s kolegama, nema sastanaka, nema krajnjih rokova. Samo tjedan dana praznog vremena i jedna sitna frustracija koja mu već mjesecima nagriza mozak: jezik ABC, na kojem je radio u institutu, lijep je za učenje — jednostavan, pregledan, zamišljen kao zamjena za BASIC — ali nikamo ne vodi. Zatvoren sustav, nema proširivosti, nema budućnosti. Netko normalan bi otvorio knjigu ili gledao televiziju. Guido van Rossum otvara uređivač teksta (program u kojem se piše kod, informatička verzija pisaćeg stroja) i počinje pisati novi jezik. Ne zato što mu je netko naručio, ne zato što je vidio rupu na tržištu — nego zato što je bio, da budemo iskreni, dosadan tjedan i trebalo je nešto s rukama.
Naziv? Uzeo ga je od svoje omiljene emisije, britanske komedije *Monty Python's Flying Circus* — kultne serije skečeva iz sedamdesetih, punih apsurdnog humora i ljudi koji glume glupo namjerno — jer mu se svidjelo da nešto zvuči malo šašavo. Nikakva dublja poruka, nikakva metafora o zmijama koje će doći tek kasnije, s logotipom. Samo umoran čovjek koji je htio da mu projekt zvuči zabavno dok ga gleda u dva ujutro.
Devet tisuća kilometara dalje — ili točnije, u sasvim drugom desetljeću mentalno, čak i kad su kalendari isti — Yukihiro Matsumoto, kojeg će cijeli svijet programiranja jednog dana zvati samo Matz, radi ono što malo Japanaca radi: razmišlja o Bogu, o programerima i o sreći, sve u istoj rečenici. Mormon u zemlji gdje se takvi broje u promilima, inženjer u zemlji koja obožava disciplinu i hijerarhiju — a on sanja jezik koji ne služi stroju, nego čovjeku koji sjedi ispred njega. Ne jezik koji je brži. Ne jezik koji je moćniji. Jezik koji čini programere sretnima. Zamisli da to izneseš na sastanku uprave neke ozbiljne firme 1993. godine — dobio bi pogled kao da si upravo predložio da se kod piše u haiku formi, onoj japanskoj pjesničkoj formi od tri stiha i sedamnaest slogova gdje se cijela poanta stisne u prostor veličine SMS poruke.
Nijedan od njih dvojice ne gleda prema Silicijskoj dolini. Nijedan ne piše poslovni plan, nijedan ne traži investitore, nijedan ne sanja o IPO-u — onom trenutku kad firma prvi put prodaje svoje dionice na burzi i njeni osnivači, teoretski, postanu bogati preko noći. Guido je državni službenik s hobijem koji je izmakao kontroli. Matz je programer koji se, po vlastitim riječima, jednostavno umorio od jezika koji ga nisu voljeli.
Tržište neće ni primijetiti ova dva jezika još punih petnaest godina. Kad ih napokon primijeti, bit će to eksplozija — Ruby će odjednom postati sinonim za Rails, alat koji će web programerima omogućiti da stranice sastavljaju u danima umjesto u mjesecima, dok će Python postati jezik znanosti i strojnog učenja — ali to je priča za kasnije. Zasad su ovo samo dva čovjeka: jedan na sjeveru Europe, umoran od praznika, i jedan u Japanu, umoran od jezika koji ne mare za osjećaje svojih korisnika.
Guido van Rossum nije sjedio u garaži, nije sanjao o milijardama, nije čak ni mislio da radi na nečemu što će mu ime pretvoriti u instituciju. Bio je istraživač u Amsterdamu, na institutu CWI, i imao je jedan konkretan problem: dosadu. Božićni praznici 1989., ured praktički pust, a on je htio nešto s čime bi se zabavio dok čeka da se svijet vrati s odmora. Rezultat te dosade danas pokreće pola interneta, tvoj klimatski model i, ako smo iskreni, i onaj AI model koji je možda pisao nacrt ovog teksta. Ali krenimo od početka, jer Guido nije izmislio Python iz ničega — naslijedio je jednu ideju koju je vrijedno spomenuti prije svega ostalog.
Prije Pythona, Guido je radio na jeziku zvanom ABC. Ne, to nije skraćenica za nešto pametno — samo jezik za učenje programiranja, dizajniran da bude jednostavan i logičan početnicima. Prepoznaješ li taj cilj? Isti impuls koji je desetljećima prije toga pokrenuo Kemenya i Kurtza kad su smišljali BASIC, jezik za studente koji nisu inženjeri i koji samo žele da im stroj nešto odradi bez doktorata iz informatike. ABC je bio komercijalni i tehnički promašaj u smislu širenja, ali Guido je iz njega izvukao jednu lekciju koju nikad nije zaboravio: jezik se ne piše za stroj. Piše se za čovjeka koji ga čita u tri ujutro, umoran, pod pritiskom, i mora shvatiti što se točno ovdje događa.
I onda je došla odluka koja je, gledano danas, potpuno luda — a gledano unatrag, genijalna. Guido je odlučio da uvlake (razmaci na početku redaka koji vizualno ugniježđuju jedan dio koda unutar drugog) nisu kozmetika. Nisu stvar ukusa, stvar toga hoćeš li kod pisati uredno ili kao svinjac. U Pythonu, uvlaka JEST sintaksa. Makneš razmak na krivo mjesto i program se ne pokreće. Zvuči kao noćna mora za developera naviknutog na jezike poput C-a ili Jave, gdje vitičaste zagrade { } rade sav taj posao razgraničavanja, a uvlačenje je čisto pitanje osobnog stila — možeš pisati kod poravnat kao vojnička postrojba ili razbacan kao da je pao sa stepenica, računalu je svejedno. Cijela generacija programera je vrištala kad je to prvi put vidjela. Kako to misliš da me bjelina u tekstu tjera u pogrešku?
To je bila poanta koju je malo tko skužio odmah: kad forsiraš format, ukidaš cijelu kategoriju svađa. Kod u Pythonu izgleda skoro isto kod svih, jer sam jezik ne dopušta da izgleda drugačije — nema više beskrajnih rasprava po uredima oko toga tko će zagrade stavljati na svoj način, jer zagrada tu i nema. Nije to estetska diktatura zbog dosade — iako, prisjeti se, dosada je i pokrenula cijeli projekt — nego praktična odluka da čitljivost pobjeđuje slobodu izražavanja. Guido je programere spasio od njih samih, prije nego što su znali da im spašavanje treba.
Ta filozofija je dobila i svoju formulu, gotovo religijsku: „There should be one — and preferably only one — obvious way to do it.” (U prijevodu: treba postojati jedan — po mogućnosti samo jedan — očit način da se nešto napravi.) Jedan očit način. Ne pet, ne deset, jedan. Ako ti sad u glavi zvoni na uzbunu — dobro, tako i treba, jer to je direktan, namjeran udarac na filozofiju suprotnog pola svemira, na Perl, čiji moto glasi otprilike obrnuto: postoji više od jednog načina da se to napravi, i to je dobro. Larry Wall, tvorac Perla, vjerovao je u izražajnu slobodu — da jezik treba nuditi alate i pustiti tebe da biraš oružje. Guido je vjerovao da je previše oružja opasno u rukama umornog čovjeka pod rokom predaje.
Dvije potpuno suprotne teorije o tome što programer zaslužuje — slobodu ili ogradu. Perl je pobijedio kratkoročno; u devedesetima je bio kralj weba i sistemskih skripti, jer je za sve to vrijeme upravo on bio alat kojim se najbrže nešto sklepalo. Python je bio spor, uporan, dosadan u dobrom smislu te riječi. I baš ta dosadnost, ta predvidljivost, na kraju je postala njegova najveća prodajna prednost — samo što je trebalo desetak godina da svijet to skuži.

Matz: jezik kao ergonomija duše
Dok je Guido u Amsterdamu razmišljao o tome kako kod da izgleda isto kod svih, u Japanu je jedan mladi programer po imenu Yukihiro Matsumoto — cijeli svijet ga zove Matz, jer tko će sto puta dnevno izgovarati Yukihiro — razmišljao o nečem što nitko prije njega nije stavio u dizajnerski dokument programskog jezika: o sreći.
Ne produktivnosti. Ne performansama. Ne broju linija koda po satu. Sreći. Matzova rečenica, koju je izgovorio toliko puta da je postala gotovo moto pokreta, glasi otprilike ovako: Ruby je dizajniran da programere učini sretnima. Zvuči kao slogan sa zida neke startup kantine, znam, ali on je to mislio ozbiljno, i to je — koliko god blijedo zvučalo — bio presedan. Dotad su jezici imali ciljeve poput brzine izvršavanja, kompatibilnosti s hardverom, matematičke elegancije, korporativne kontrole. Nitko nije rekao: cilj ovog jezika je da se ti, čovjek koji ga koristi u dva ujutro, osjećaš dobro.
OK, zvuči mekano, možda i pomalo new-age — kao da je neki jezik dizajniran uz štapiće za tamjan. Ali pogledaj što to znači u praksi, i odmah je manje filozofija, a više inženjerski izbor s konkretnim posljedicama.
Matz je, kao i Guido, bio pod utjecajem Smalltalka — istog jezika koji smo spominjali kod objektno orijentiranog programiranja (K2, poglavlje 4, sjećaš se Alana Kaya i biološke stanice koje šalju poruke?). Ali gdje je Guido iz te tradicije uzeo koncept i ugradio ga kao opciju — u Pythonu možeš pisati objektno, ali ne moraš — Matz je otišao do kraja i rekao: u Rubyju je bukvalno sve objekt. Broj 5. Objekt. Niz znakova. Objekt. `nil`, ono što u drugim jezicima zovemo `null` ili `None` — i on je objekt. Nema iznimki, nema rubnih slučajeva gdje odjednom nešto „nije baš objekt kao ostalo”. Cijeli svijet jezika je jednoličan, dosljedan, i — ako voliš tu vrstu urednosti — lijep.
I upravo tu ulazi dio koji Python nema, a Ruby ima u genima: estetika. Ne slučajno, uostalom — Matz je japanski programer koji je odrastao uz koncept koji Japanci zovu wabi-sabi, otprilike „lijepo u nesavršenom, prirodno u jednostavnom”. Sam je više puta rekao da je htio da čitanje Ruby koda bude poput čitanja prirodnog jezika — engleskog, ili u njegovoj glavi možda japanskog — a ne poput deklamiranja matematičke formule. Otud sintaksa koja je ponekad skoro razgovorna: `3.times { puts "zdravo" }` čita se gotovo kao rečenica — tri puta, ispiši zdravo. Nema `for i in range(3)`, nema petlje koju prvo moraš dekodirati u glavi, samo namjera, izgovorena.
Blokovi — ono u vitičastim zagradama ili `do...end` — Matzova su najpoetičnija odluka, i ako si ikad pisao Ruby, znaš o čemu govorim. Blok je komadić koda koji se ponaša kao predmet koji dodaješ nekom drugom komadu koda — kao paket koji uručiš metodi i kažeš joj: evo, izvrši ovo za svaki element, kako god ti paše. `[1,2,3].each { |broj| puts broj * 2 }`. Bez petlje, bez brojača, bez `i++`. Samo — za svaki broj u ovom nizu, učini ovo. Nekima to djeluje kao čarolija; Matzu je to djelovalo kao prirodan način na koji bi čovjek objasnio zadatak drugom čovjeku.
Ono što Matz i Guido dijele, a što će sljedeći dio poglavlja pokazati da ih spaja unatoč različitim filozofijama — jedan želi jedan očit način da se nešto napravi, drugi eleganciju kroz slobodu — jest to da su oba jezika pisana bez ikakvog pritiska tržišta, uprave ili dioničara. Ruby je nastao 1995. u glavi jednog čovjeka koji je htio jezik koji bi *on sam* volio koristiti. Nije postojao poslovni plan, nije postojao rok. Postojala je samo ideja da programiranje ne mora biti mučenje da bi bilo ozbiljno — i deset godina strpljenja da se ta ideja pokaže istinitom, mnogo prije nego što je Rails, webski okvir koji će Rubyu donijeti pravu slavu, uopće postojao da to dokaže svijetu.

Desetljeće strpljenja
Sad, da razjasnimo jednu stvar prije nego krenemo dalje: ni Python ni Ruby nisu 1995. eksplodirali u popularnosti. Nisu ni 1998. Nisu ni 2003., iskreno. Devedesete su za oba jezika bile desetljeće čekanja u redu, dok su na pozornici stajali drugi. Perl je bio kralj weba — onaj koji je stvarno spajao baze podataka i HTML formulare i radio sve što je internet ranih devedesetih trebao, ružno i brzo. Java je 1995. sletjela s marketinškim budžetom Sun Microsystemsa iza sebe i za nekoliko godina postala jezik kojim se predavalo na faksevima, pisalo za banke i ugrađivalo u svaki mogući appletić — one sitne programčiće koji su nekad znali oživjeti web-stranicu, prije nego što je svijet skužio da ih nitko ne voli čekati da se učitaju. Python i Ruby, u odnosu na sve to? Kućni projekti. Zanimljivi, elegantni, ali kućni.
I to im, začudo, nije smetalo. Guido je nastavio raditi na Pythonu iz akademskog i istraživačkog okruženja — najprije CWI, istraživački institut za matematiku i računarstvo u Amsterdamu, zatim CNRI u Virginiji, pa u firmi Zope — mjesta koja su mu plaćala plaću, ne jezik koji je razvijao u slobodno vrijeme. Matz je u Japanu radio kao programer u firmi i Ruby pisao navečer i vikendima, objavljujući nove verzije na mailing listu ljudi koji su, otprilike, svi jedni druge poznavali po imenu. Nijedan od njih nije imao odjel za odnose s javnošću. Nijedan nije imao rezervirani slot na konferenciji sa stotinama sponzora. Imali su forum, mail listu i ljude koji su se, iz nekog razloga, uvijek vraćali.
I upravo je to bio cijeli model rasta — zajednica koja se širi od usta do usta, ne kampanja koja se širi od billboarda do billboarda. Netko na fakultetu otkrije Python jer mu treba nešto brzo za skriptu koja parsira log datoteke, i onda ga preporuči cimeru. Netko u Japanu naiđe na Rubyja preko posta na Usenetu — mreži diskusijskih grupa iz devedesetih, preteči današnjih foruma, gdje si prije nego što je web postao ono što je danas raspravljao s ljudima širom svijeta o svemu i svačemu — i pomisli: čekaj, ovo je ljepše nego sve što sam dosad pisao. Pa to prevede na engleski i objavi na svom blogu, jer mu je jednostavno drago da postoji. Rast na infuziji entuzijazma, ne na infuziji kapitala. Sporo. Organski. Frustrirajuće sporo, ako pitaš bilo koga tko je 1997. pokušavao ubijediti šefa da mu Python treba za produkcijski kod umjesto Perla.
To ne znači da je Java loš jezik ili da su korporativni projekti osuđeni na propast — dovoljno je pogledati koliko je banaka i danas na njoj da to demantiraš. Znači samo da postoje dvije vrste opstanka u softveru, a devedesete su bile desetljeće u kojem su Python i Ruby tiho birali sporiji put — jer drugog nisu imali — ali, kako će se pokazati, bolji.

Eksplozije sa zakašnjenjem
Deset godina. Toliko su Guido i Matz gledali svoje jezike kako polako, s dostojanstvom puža, osvajaju šaku entuzijasta po konferenciji, šaku po mailing-listi. Nitko od njih dvoje nije 1998. sjedio i planirao dominaciju svijeta. Planirali su, ako baš hoćeš znati, sljedeće izdanje s popravkom greške — jer to je i sve što je „bugfix” ikad bio: sitna zakrpa da program ne puca na mjestu gdje je zapeo. A onda su se, gotovo istovremeno i gotovo slučajno, dogodile dvije stvari koje su te jezike izvukle iz niše i ugurale u centar pozornice. Ne zato što su se jezici promijenili. Zato što je svijet oko njih napokon dogurao do onoga za što su ti jezici, godinama unaprijed, već bili spremni.
Krenimo s Rubyjem, jer njegova priča ima jasniju eksploziju. Negdje oko 2004. jedan je programer po imenu David Heinemeier Hansson, gradeći alat za upravljanje projektima, primijetio da mu Ruby dopušta da napiše web framework koji radi stvari koje su u drugim jezicima trebale desetke linija „boilerplatea” — u tri. Boilerplate je onaj dosadni, uvijek isti kod koji moraš otipkati prije nego što uopće dođeš do suštine zadatka, otprilike kao da svaki put kad želiš napisati pismo prvo moraš ručno nacrtati zaglavlje, adresu i datum — u drugim jezicima si to radio iznova i iznova, u Rubyju je to netko već riješio za tebe. Taj framework se zvao Rails, i o njemu ćemo pošteno progovoriti kasnije, u petoj knjizi, poglavlje o Rails trenutku — ovo je samo najava, obećanje da se vraćamo na to. Za sada je bitno ovo: Rails nije izmislio ništa fundamentalno novo u web razvoju. Izmislio je način da se sve postojeće radi brže, s manje ceremonije i — evo je ta riječ opet — s više radosti. Matz je 1995. napisao jezik da programeri budu sretni pišući ga. Deset godina kasnije netko je taj jezik upotrijebio da programeri budu sretni gradeći nešto stvarno, s deadlineom, za klijenta koji plaća. Ergonomija duše, pretvorena u ergonomiju startupa. Basecamp, Twitter u ranim danima, cijela generacija web 2.0 firmi — svi na Railsu, svi na jeziku koji je nastao jer je jedan Japanac mislio da su drugi jezici prema programerima nepotrebno grubi.
Python je imao sporiji, ali čudno zanimljiv put do vrha. Nije mu trebao jedan framework-heroj. Trebala mu je znanost. Negdje kroz devedesete i rane 2000-e, ljudi koji su radili numeričke proračune — fizičari, astronomi, statističari — počeli su graditi biblioteke poput Numeric, pa NumPy, koje su Pythonu dale ono što mu je nedostajalo da postane ozbiljan alat za računanje: brze operacije nad nizovima brojeva, matrice, linearnu algebru. I evo poveznice koja zvuči nevjerojatno, ali je istinita: ispod NumPy-a, duboko u utrobi, još i danas rade FORTRAN i C rutine napisane desetljećima ranije — one iste o kojima smo pričali u prvoj knjizi, kad je FORTRAN bio jedini jezik koji je znanost uzimala ozbiljno. Python se, ispada, nije borio s FORTRANOM. Sjeo mu je na leđa. Uzeo je čitljivu, prijateljsku sintaksu koju je Guido dizajnirao za ljude koji uče programirati — i zalijepio je preko motora koji je već znao računati vrtoglavom brzinom. Znanstvenici su prestali pisati FORTRAN skripte i počeli pisati Python skripte koje pozivaju FORTRAN ispod haube, a nisu ni znali ni htjeli znati da je tako. Baš kako je Guido i priželjkivao: jedan očiti način da se stvar napravi, a onaj ispod je nečiji drugi problem.
Pa je onda stigla sljedeća eksplozija, ova još veća: strojno učenje. Kad su se biblioteke za neuronske mreže — o kojima ćemo pošteno progovoriti u šestoj i sedmoj knjizi — morale odlučiti u kojem će jeziku ponuditi svoje sučelje prema svijetu, izbor je bio gotovo bez alternative. Python je već imao NumPy, već imao znanstvenu zajednicu naviklu na njega, već imao tu čitljivost koju je Guido ugradio za studente koji uče, a sad su to bili doktorandi koji treniraju modele. TensorFlow, PyTorch, cijela ta industrija — svi govore Python kao jezik sučelja, dok se stvarno računanje odvija u C++ i CUDA kodu ispod, a CUDA je Nvidijina tehnologija koja teški računski posao — poput treniranja neuronskih mreža — prebacuje s procesora na grafičku karticu, gdje sve ide puno brže, jer grafička kartica u biti radi tisuće sitnih računa istovremeno, umjesto jednog po jednog. Isti trik kao s FORTRANOM, ista formula, samo desetljeće kasnije i s puno više novca u opticaju. Jezik za koji je 1989. jedan dosadan Nizozemac na božićnim praznicima mislio da bi mogao biti ugodan nasljednik ABC-a — danas je jezik u kojem se, statistički, najvjerojatnije piše kod koji trenira model koji upravo čitaš ovaj tekst dok ga generira.
I tu se, ako malo zažmiriš, vidi nešto lijepo simetrično. Guido je čekao da svijet dogura do znanosti kojoj treba čitljiv jezik. Matz je čekao da svijet dogura do weba kojem treba jezik koji ne muči developera do suza. Nijedan od njih dvoje nije mijenjao smjer da uhvati val — val je došao k njima, jer su desetljeće ranije, u dosadi i u potrazi za srećom, slučajno stali na pravo mjesto na plaži.

Dva čovjeka, ista pouka
I sad, kad si sve to progutao, spusti se malo i pogledaj kraj priče, jer i ovdje postoji kraj, a nije onakav kakav bi u Hollywoodu naručili. Guido je Python vodio skoro tri desetljeća. Ne kao vlasnik, ne kao direktor, nego kao ono što je zajednica sama nazvala „Benevolentni Diktator Za Život” — titula pola u šali, pola stvarna, jer kad se dvjesto ljudi svađa oko toga treba li nešto biti ugrađeno u jezik ili ne, netko na kraju mora reći dosta, radimo ovako. Guido je bio taj netko. Godinama.
A onda je 2018. izbila svađa oko jedne sitnice — PEP 572, dokument koji je predlagao uvođenje tzv. walrus operatora, malu sintaksnu zgodu koja ti dopušta da dodijeliš vrijednost varijabli usred izraza (PEP, da razjasnimo, stoji za „Python Enhancement Proposal” — formalni prijedlog promjene u jeziku, o kojem cijela zajednica raspravlja prije nego što netko na vrhu kaže da ili ne). Zvuči kao nešto oko čega se ljudi neće čupati. Pa, čupali su se. Mailing liste, forumi, komentari, mjesecima. I Guido je na kraju izašao pred zajednicu i rekao, otprilike: gotov sam, ne želim više biti taj koji odlučuje, dajte da vidim što je to život bez toga da mi svaki dan netko na internetu objašnjava zašto sam pogriješio.
Matz je prošao slično, samo tiše, jer Rubyjeva zajednica nikad nije imala onu masu koju je imao Python, pa su i drame bile kućnog formata. Ali princip identičan: godine benevolentnog vođenja, pa polako puštanje uzdi drugima, pa Matz sve više čovjek koji blagoslivlja smjer nego čovjek koji piše svaku odluku. Ne zato što je izgubio interes za Ruby. Zato što upravljanje ljudima, i to ljudima koji te vole i mrze u istoj raspravi na forumu, nije isto što i pisanje jezika. Jedno je zanat. Drugo je iscrpljivanje.
Nije to recept koji radi svaki put — piši lijep jezik i bogatstvo dolazi, ne, većina lijepih jezika umre u tišini i nitko im ne posveti poglavlje u enciklopediji. Ali kad upali, ono što ostane nije proizvod. Ostane alat koji je milijunima ljudi, od djeteta koje prvi put kuca print(„bok”) do inženjera koji trenira neuronsku mrežu, dao osjećaj da tehnologija ne mora biti neprijateljska. Guido i Matz nisu htjeli vladati. Htjeli su da ti bude lijepo dok kucaš. Ispada da je to, na duge staze, i najbolja strategija za vladanje — samo je nisu tako zvali.