Larry Wall este cunoscut cel mai bine drept creatorul limbajului Perl. Ne-am bucurat să vorbim cu el la conferința anuală de Perl, YAPC::EU (22 - 25 August 2016), ținută la Cluj.
Care credeți că au fost factorii care au făcut ca Perl să aibă succes? În ce moment ați realizat impactul său global? Ați pregătit ceva pentru asta?
M-am pregătit pentru acest lucru, deși nu conștient. M-am asigurat că va fi un limbaj care să îmi placă. Am vrut să mă ocup și de procesare de text, și de recunoașterea tiparelor. Eram administrator de sistem la acel moment și doream să pot accesa bazele de date disponibile pe calculatorul meu. Deci semăna cu C, puteai să folosești Perl pentru programarea de sistem.
În ceea ce privește Perl 4, am constatat că oamenii creau versiuni speciale de Perl ca să comunice cu diverse baze de date - Sybase, Oracle, etc.. Am considerat că acesta este un lucru rău pentru că s-ar putea să doresc să comunic cu două baze de date simultan. Deci în Perl 5 ne-am asigurat că există un mecanism de exindere care să ne permită să comunicăm cu diferite baze de date pe care le poți încărca în diferite module. Astfel, poți încărca modulul Sybase și modulul Oracle în același timp și poți transfera date. Perl a devenit acel tip de limbaj cu care poți lipi lucrurile între ele.
Perl a devenit un produs de succes mai ales datorită World Wide Web, deși nu am planificat nimic în această privință. WWW funcționează pe baza HTML – care este text – și folosește baze de date, asa ca oamenii au început să folosească Perl pentru a-și crea website-urile și pentru a comunica cu bazele lor de date.
Perl a fost folosit și pentru alte scopuri. BioPerl a avut un real succes. Încercăm să facem ceva similar cu Perl 6. Nu știm care va fi “aplicația bombă” pentru Perl 6, dar vrem să punem bucățile de puzzle la locul lor pentru ca oamenii să poată crea aplicații.
De ce ar trebui să învețe oamenii Perl 6?
Din multe puncte de vedere, Perl 6 este un limbaj cu totul nou și ne așteptăm ca utilizatorilor să le ia ceva timp până se obișnuiesc și răspândesc vestea. Nu dorim marketing agresiv, vrem să creștem natural. Dacă este suficient de bun, Perl 6 va crește.
Pentru cei mai mulți programatori este distractiv. Este foarte puternic prin faptul ca nu îți stă în drum și îți oferă instrumentele de care ai nevoie. Din punct de vedere creativ, este cel mai bun limbaj de programare.
A fost creat astfel încât să fie nu doar pe placul programatorilor, ci și pe placul șefilor lor. Unul dintre motivele pentru care șefii aleg limbaje “instituționalizate” precum Java se datorează așteptărilor pe care aceștia le au la nivel de scalabilitate și mentenanță, iar noi oferim aceste lucruri cu Perl 6. Este portabil pe JVM. Perl 6 are propriul VM numit MoarVM, dar funcționează și pe JVM.
Perl 6 vrea să revoluționeze programarea la nivel de limbaj. Aveți în vedere și metode de a-l îmbunătăți, precum IDE-uri?
Desigur, limbaje precum Java au folosit eficient IDE-urile. Astfel de limbaje au nevoie de IDE-uri pentru că aceasta este natura lor. Au nevoie de ajutor pentru a reține toate numele metodelor și toate tipurile de obiecte. Sunt multe lucruri ce trebuie memorate, iar IDE-urile ajută.
În Perl 6 nu ne-am axat pe acest lucru, dar l-am avut în vedere. Există multe moduri de a face programare, multe paradigme, iar pe unele le-am și abordat direct: programarea orientată pe obiect sau programarea funcțională. În ceea ce privește alte aspecte – precum programarea logică – noi nu facem build la tot, precum Prolog, dar facem cât se poate de mult ca oamenii să poată merge în orice direcție.
Același lucru e valabil și pentru un IDE: Perl 5 este compilat într-un format intern care nu este expus. Odată cu Perl 6 compilatorul este scris în Perl 6, structurile de date sunt scrise în Perl 6 și pot fi serializate în JSON sau YAML. Cu alte cuvinte, va fi mult mai ușor să luați compilatorul Perl 6 și să îi atașați un IDE. Am realizat acest lucru pentru a ne asigura că ne va fi ușor când vom ajunge la un stagiu când și alții vor fi motivați să facă ceva similar. Ar putea fi un programator Emacs. Există și alte IDE-uri, evident.
Cum arată o zi de muncă? Ce editoare folosiți?
Am folosit Emacs dar degetul meu mic a obosit, așa că am învățat să folosesc vim (de fapt atunci era vi).
Ziua mea de lucru arată astfel: de îndată ce mă trezesc, trebuie să studiez tot ce s-a întâmplat peste noapte. Sunt mulți programatori Perl și Perl 6 în Europa care se trezesc cu 8 sau 9 ore înainte să mă trezesc în California. Deci, se întâmplă foarte multe lucruri peste noapte, iar eu trebuie să fiu la curent cu acestea. Există și un backlog pe IRC. Apoi mă uit peste rapoartele de bug-uri și decid pe care ar trebui să îl rezolv primul. Uneori trebuie să iau decizii cu privire la design, iar apoi trebuie să îi conving pe oameni că acestea sunt deciziile corecte.
Care este procesul pe care îl aplicați când faceți development? Utilizați TDD?
Folosesc TDD, dar nu mereu. Nu îmi scriu toate testele de la început cum poate ar trebui să o fac. Uneori am un test informal care este doar un mic program pe care îl tot rulez până când bug-ul este rezolvat, iar apoi transform programul într-un test adevărat. Stilul meu de programare este iterativ: fac o schimbare și rulez, fac o schimbare și rulez etc.. Așa funcționează creierul meu, mă lasă să experimentez.
Gândesc vizual. Am scopuri stabilite, dar nu știu foarte clar cum le pot atinge. Un lucru foarte important, când ești designer de limbaj, este să poți să recunoști ambiguitatea. Trebuie să poți spune: acesta este lucrul pe care oamenii vor să îl facă, dar prima soluție pe care o voi găsi s-ar putea să nu fie cea mai bună. Trebuie să privești munca ta din multe puncte de vedere și trebuie să pui în balanță compromisurile. Unele soluții pot fi tentante la prima vedere, dar dacă te gândești în detaliu, îți dai seama că nu este neapărat modul în care vrei să faci acest lucru. Uneori, cu cât te gândești mai mult, cu atât mai mult poți unifica cerințele pentru a obține ceea ce vrei să faci. Totul se întâmplă subconștient – bolborosește undeva pe fundal – tot ce își doresc oamenii, ideile pentru a atinge obiectivele, apoi o idee ajunge la suprafață și îmi dau seama că este răspunsul corect, conștient, dar care nu a fost generat de partea conștientă.
Operatorul smart match nu a mai fost întreținut din 5.18, deși promitea multe. V-ați gândit să îl aduceți înapoi?
Motivul pentru care funcționează în Perl 6 este că știe mereu care este tipul variabilelor. Perl 5 e uneori confuz în această privință. Uneori nu știe dacă o variabilă conține un string sau un număr. Deci, dacă faceți smart matching și vă așteptați să faceți string matching sau number matching s-ar putea să existe o confuzie în această privință dacă nu utilizați un literal. Acesta ar trebui să fie non-ambiguu, chiar și în Perl.
Mai există și alte feature-uri în Perl 6 care fac ca „smart match matching” să funcționeze foarte bine. Logica juncțională ne permite să avem “orice” sau “tot” pentru liste, din punct de vedere semantic. Perl 5 nu are asta.
Având studii și o pasiune pentru lingvistică, credeți că limba nativă a unei persoane poate să influențeze modul în care scrie cod? Ați observat vreun tipar?
E o întrebare foarte interesantă. Cred că cea mai deosebită limbă pe care o cunosc este japoneza. În limbile europene avem structura “subiect - verb – obiect/complement”, dar în japoneză verbul este mereu la sfârșit. În loc de prepoziții, japoneza are postpoziții. Totul este invers. Este surpinzător că în ciuda acestui fapt, japonezii nu programează mai mult în limbaje RPN, precum Forth sau Postscript. Limbajele orientate pe obiecte tind să pună verbul la final. Asta poate explica de ce Ruby a început cu programarea orientată pe obiecte.
Aveți o limbă moartă/vie preferată?
Am studiat greaca clasică. Am studiat germana acum mulți ani. Meine Deutsch kannst vergessen. În ultimii 15 ani am învățat de unul singur japoneză și puțină chineză. Nu sunt încă foarte bun. Datorită cunoștințelor mele de lingvistică, pot pune întrebările corect, dar nu pot înțelege răspunsurile. Nativii vorbesc prea repede sau poate eu ascult prea încet.
Când merg în Japonia sau China pot citi majoritatea semnelor stradale, dar nu aș putea să le pronunț pentru că le citesc doar pentru a înțelege semnificația caracterelor. Acesta este cel mai interesant lucru al limbilor ideografice precum chineza: poți înțelege sensul fără a ști cum se pronunță cuvântul. Acesta este un lucru foarte interesant, deoarece ne gândim la chineză ca la o limbă unitară, când, de fapt, aceasta are aproximativ 10 dialecte. Oamenii pot să ajungă să nu se înțeleagă între ei, dar pot să comunice prin scris deoarece folosesc aceleași caractere.
Visați în alte limbi?
Nu visez prea mult în engleză. Gândirea mea este non-verbală. Unii oameni gândesc prin intermediul limbii. Soția mea o face. Gândurile ei se materializează sub formă de cuvinte. Eu gândesc în imagini și relații, apoi mă străduiesc să le exprim în cuvinte. Nu visez în cuvinte.
Vă mulțumesc foarte mult!
Cu plăcere.
de Iulia Bicu
de Vlad Vesa