Un interviu cu Brian Kernighan

Mihai Budiu -- mihaib+@cs.cmu.edu
http://www.cs.cmu.edu/~mihaib/

iulie 2000


Cuprins




Introducere

Pentru al doilea an consecutiv am avut șansa de a obține o slujbă de vară la laboratoare Bell (Bell Labs) ale companiei Lucent. Aceste laboratoare de cercetare sunt printre cele mai prestigioase din lume, numărînd nu mai puțin de 11 premii Nobel. De Bell Labs se leagă evenimente epocale din istoria tehnicii de calcul: John Bardeen, Walter Brattain și William Shockley au descoperit aici în 1947 efectul de tranzistor, Arthur L. Schawlow, și Charles H. Townes au inventat în 1958 Laserul, Claude Shannon a fundamentat teoria informației în 1948, Ken Thomson și Dennis Ritchie au creat sistemul de operare Unix în 1969 pentru care Ritchie a sintetizat limbajul C, care a evoluat apoi tot aici prin munca lui Bjarne Stroustrup în 1984 în C++.

Anul trecut m-am ``aventurat'' să cer autorilor cărții care descrie limbajul C, Dennis Ritchie și Brian Kernighan, un autograf. Anul acesta mi-am luat inima în dinți și am solicitat un interviu domnului Brian Kernighan. Acesta a răspuns cu foarte mare amabilitate:

    Date: Mon, 10 Jul 2000 14:52:15 -0400
    To: Mihai Budiu
    From: Brian Kernighan
    Subject: re: odd request
    
    sure, no problem.  i'm probably pretty boring, but since
    i don't read romanian, you can make things up...
    
    come by any time; i'm mostly around.
    
    brian

(sigur, nici o problemă. sunt probabil destul de plictisitor, dar pentru că nu citesc românește poți inventa tot felul de lucruri. vino oricînd, sunt prin preajmă.)

Iată aici textul interviului transcris după înregistrarea făcută cu ajutorul unui calculator echipat cu un microfon. Versiunea în limba engleză a interviului va fi disponibilă din pagina mea de web, pentru a demonstra că de fapt nu am inventat mare lucru.

Versiunea în limba română

M:Care e modul corect în care se pronunță numele dumneavoastră? Am auzit că nu este chiar cum ne-am astepta.

K:Se pronunță Kărnihăn. Litera ``g'' nu se aude.

Figura 1: Brian Kernighan
\begin{figure}\centerline{\epsfxsize=8cm\epsffile{kernighan.eps}}\end{figure}

M:Ați ales să lucrați în informatică într-o perioadă în care aceasta nu era cea mai evidentă alegere pentru o carieră. Ce ne puteți spune despre cum ați făcut această alegere și ce gîndiți retroactiv despre această decizie?

K:E adevărat că am început să lucrez cu calculatoarele, probabil pe la mijlocul anilor șaizeci, cînd lucrurile erau destul de la început, și am făcut-o din accident. Cred că am văzut primul meu calculator în 1963, era un IBM 650 destul de vechi; nu am început programarea serioasă decît prin 1964 cînd eram în student în ultimul an. Dar era foarte amuzant, și era înainte ca informatica să fie un ``domeniu'' de sine-stătător. Cînd am mers la studii postuniversitare exista un program de informatică în departamentul de inginerie electrică de la universitatea Princeton; asta era destul de tipic pentru multe alte locuri: nu exista un domeniu academic separat al informaticii, ci doar o parte a unui departament care avea un calculator sau ceva oameni interesați de calcule, așa că am intrat și eu în domeniu, în întregime accidental. Dar a fost un accident norocos, pentru că în mod evident au fost o mulțime de întîmplări interesante în domeniu.

M:Ați lucrat în acest domeniu multă vreme, și ați fost un jucător important în evoluția informaticii. Unele din lucrările dumneavoastră au influențat profund domeniul. Puteți arăta unele dintre lucrurile pe care le considerați avansuri fundamentale în informatică în ultimii 30 de ani; ce schimbări de paradigmă crede,ti că s-au petrecut?

K:Cred că a fost un număr mare de schimbări, nu neapărat în informatică [ca știință], ci în calculatoare în general. Evident, faptul că hardware-ul a devenit enorm de rapid: legea lui Moore, deși e o schimbare cantitativă, cînd este aplicată ca o creștere exponențială timp de 30 de ani are un impact enorm; unele părți ale acestei schimbări depind de informatică, dar nu toate. Pe de altă parte, lucrurile cu care sunt mai familiar, și în care sunt mai interesat tehnologic, este folosirea feluritelor limbaje de programare în așa fel încît să fim mai capabili să transmitem mașinilor ceea ce vrem să facem. Creșterea în domeniul limbajelor de programare, a tehnologiilor care ne permit să înțelegem cum să exprimăm comenzile pentru mașini, a avut de asemenea un impact enorm. Desigur, pe măsură ce mașinile deveneau mai puternice îți puteai permite să aloci mai multe resurse pentru a folosi limbaje care nu ar fi fost eficiente cu 25 sau 30 de ani în urmă, dar care acum sunt perfect utilizabile. Alte schimbări importante sunt îmbunătățirile algoritmice, teoria NP-completitudinii, care ne permite să gîndim despre ceea ce este greu și ceea ce este ușor de calculat. Dar în ceea ce mă privește lucrurile pe care le găsesc cele mai interesante sunt dezvoltările în domeniul limbajelor de programare.

M:De-a lungul timpului ați lucrat în foarte multe domenii: algoritmi pentru grafuri, software engineering, scule software, tipografie digitală, dar cea mai mare parte din cercetarea dumneavoastră este în limbaje de programare. Care sunt interesele dumneavoastră curente în cercetare?

K:[rîzînd] E interesant, ceea ce am făcut în ultimele zile este să meșteresc (hack-uiesc) la probabil cele mai vechi rădăcini ale mele în domeniul prezentării computerizate de documente, sau tipografie digitală, dacă preferi. Am luat eqn, care e un program pe care Lorinda Cherry și cu mine l-am scris în 1974, și îl convertesc pentru a produce rezultate în XML sau HTML, în așa fel încît să putem pune mai ușor formule matematice în pagini de web. Mai multe persoane au încercat să facă acest lucru în felurite moduri, dar nici unul dintre ele nu pare să meargă prea bine, sau să fie terminat. Noi avem nevoie de așa ceva, așa că eu lucrez la un program C pe care l-am scris literal cu mai mult de 25 de ani în urmă. E un program C foarte mic, și mă distrează foarte tare să încerc să-l transform. Ăsta e unul din lucrurile pe care le fac, un lucru mărunt, dar e amuzant să te întorci și să faci ceva la care te-ai ostenit cu atîta vreme în urmă.

Un alt lucru la care lucrez acum este un limbaj numit AMPL, pe care David Gay și cu Bob Fourer și cu mine l-am creat. AMPL este un limbaj folosit pentru a specifica probleme de optimizare, ca de exemplu pentru a descrie probleme de programare lineară, dar nu numai. Încercăm să finisăm produsul pentru a putea fi folosit în procese mai complicate: de exemplu am învelit sistemul cu o interfață orientată pe obiecte ca să poată fi îngropat în alte programe sau folosit ca un obiect CORBA sau COM.

Astea sunt cele două lucruri de care mă ocup acum.

M:Dacă tot am vorbit despre limbaje de programare, se mai compilează vechiul program eqn?

K:Da, se mai compilează. Probabil că nu l-am mai compilat de cinci sau zece ani, și s-a compilat fără nici o problemă. E un program C foarte mic și simplu; cred că l-am convertit la ANSI C la sfîrșitul anilor '80. Ceea ce fac acum este mai ales să tai din el, pentru că limbajul de ieșire este mult mai simplu decît înainte.

M:Cei mai mulți oameni vă cunosc probabil din cauza cărții de C, așa că o să vă pun două întrebări legate de C. Limbajul C a avut o influență enormă; care credeți că sunt trăsăturile sale cele mai valoroase?

Figura 2: Cartea de C
\begin{figure}\centerline{\epsfxsize=5cm\epsffile{book.eps}}\end{figure}

K:C are cel mai bun echilibru pe care l-am văzut vreodată între putere și expresivitate. Poți face aproape orice vrei programînd într-un fel destul de evident și ai întotdeauna un model mental bun a ceea ce se va întîmpla pe calculator; poți prezice destul bine cît de repede o să meargă, înțelegi ce se petrece și îți dă libertate totală să faci ce vrei. C nu te constrînge în vreun fel, nu te obligă să folosești un anumit stil de programare; pe de altă parte nu îți oferă o grămadă de facilități, nu are o bibliotecă gigantică, dar în ceea ce privește realizarea a ceva fără prea mult efort, nu am văzut nimic mai bun pînă în ziua de azi. Există alte limbaje reușite pentru aplicații specifice, dar dacă ar fi să eșuez pe o insulă pustie cu un singur compilator, aș vrea un compilator de C.

M:De fapt C este și limbajul meu de programare favorit, și pe care l-am folosit pentru majoritatea programelor mele. Dar de cînd am început să scriu compilatoare pentru C, trebuie să mărturisesc că limbajul mi se pare mai puțin plăcut: unele optimizări sunt foarte greu de făcut. Care sunt din punctul dumneavoastră de vedere trăsăturile negative ale limbajului?

K:Nu pot comenta despre trăsăturile negative; îți reamintesc că C este în întregime creația lui Dennis Ritchie. Eu am contribuit doar la popularizarea sa, și în particular nu pot spune ce e greu și ce e ușor de compilat în C. Sunt cîteva lucruri trivial greșite în C: instrucțiunea switch putea fi mai bine proiectată, precedența unora dintre operatori este greșită, dar astea sunt lucruri mărunte și lumea a învățat să le evite. Cred că adevărata problemă a limbajului C este că nu-ți pune la dispoziție destule mecanisme pentru a scrie programe cu adevărat mari, pentru a crea ziduri de protecție în interiorul programelor, care izolează feluritele bucăți. Nu se pune problema că nu poți face astfel de lucruri, ca nu poți simula programare orientată pe obiecte sau alte metodologii de programare în C, poți să faci toate astea, dar compilatorul și limbajul nu te vor ajuta. Dar dacă luăm în considerare că C are aproape 30 de ani și că a fost creat cînd calculatoarele erau minuscule în comparație cu ceea ce avem acum, cred că e o creație admirabilă, care a trecut de testul scurgerii timpului extrem de bine. Nu sunt multe lucruri pe care le-aș schimba în C.

Cîteodată scriu în C++ în loc de C. Cred că C++ este practic un limbaj prea mare, deși pentru fiecare din elementele lui există un motiv de a exista. Cînd scriu un program C de orice dimensiune folosesc probabil 75, 80 sau chiar 90% din elementele limbajului. Cu alte cuvinte, cea mai mare parte a C-ului este folositoare indiferent de programul pe care îl scrii. Pe de altă parte, cînd scriu C++, folosesc probabil mai puțin de 10% din elementele sale, iar despre celelalte 90% a's putea zice c'a nu le 'in'teleg. 'In sensul asta pot argumenta că C++ este un limbaj prea mare, deși C++ îți oferă multe din mecanismele de care ai nevoie pentru a scrie programe mari: îți permite să construiești obiecte, și să protejezi reprezentările lor interne cu o fațadă solidă de care nu poți trece. C++ are o cantitate enormă de mecanisme utile pe care C nu ți le dă.

M:Am o întrebare despre cercetarea în limbaje de programare. E interesant de exemplu că Java este foarte mult ridicat în slăvi; comunitatea programatorilor se împarte între cei care laudă meritele și cei care critică lipsurile limbajului. Java într-adevăr a fost înzestrat cu niște trăsături care derivă din cercetare (cum ar fi colectorul de deșeuri -- garbage collection), dar tot cercetătorii arată oricui vrea să-i asculte erori de proiectare (cum ar fi vectorii, care sunt covarianți). O cantitate enormă de cercetare se desfășoară în limbaje de programare, și foarte multă cercetare interesantă în domeniul limbajelor de programare funcționale, dar nu se prea văd rezultatele acestei cercetări în ``lumea reală'', adică în limbajele pe care le folosesc programatorii obișnuiți în munca de lor de zi cu zi. În locul acestor limbaje academice apar din senin limbaje ad-hoc, cum ar fi Perl și Python. Unde vedeți buba, ce nu funcționează cum trebuie?

K:Asta este din păcate o întrebare foarte bună, și există o oarecare rivalitate aici la Bell Labs între un grup extrem de puternic de limbaje funcționale și un grup care folosește limbaje ad-hoc, mai pragmatice. Sincer să fiu, nu știu de ce limbajele funcționale nu au succes. De exemplu ML, care este probabil cea mai bună combinație, cea care ar trebui să domine: chiar dacă e un limbaj extrem de atent proiectat, la care au contribuit mult timp o mulțime de cercetători, care a dat naștere la o cantitate enormă de tehnologii de compilare, nu pare să fie adoptat pe scară largă. Simplificînd extrem, și probabil supărînd pe unii dintre prietenii mei, aparent singurul lucru care se face în ML sunt compilatoare de ML [rîde]. În mod intenționat exagerez, dar de fapt lucrurile cam așa stau, și nu știu exact de ce. Din punctul meu de vedere unul dintre motivele pentru care ML și alte limbaje funcționale nu au mai mult succes este pentru că necesită o oarecare abilitate matematică și o gîndire mai abstractă, pe care o grămadă de lume, în care mă includ și eu, nu o posedă. În schimb limbajele ca C sunt extrem de operaționale și poți vedea foarte clar cum fiecare bucățică dintr-un program se translatează direct într-o acțiune a calculatorului. Poate dacă aș fi fost crescut și educat în alt fel aș fi mulțumit cu ML și aș găsi C cam nesigur (unsafe), periculos și nu prea expresiv. Dar impresia mea este că limbajele funcționale au fost create de o comunitate de oameni cu puternice înclinații matematice și că au nevoie de un raționament matematic substanțial, și ca atare nu vor fi pe placul omului de rînd.

M:Deci sugestia dumneavoastră ar fi ca cercetătorii să coboare nivelul limbajului, pentru a-i promova calitățile pozitive?

K:Nu am răspuns de fapt la partea a doua a întrebării tale, de ce cercetarea în limbaje nu a avut mai mult efect. Cred că de fapt cercetarea a avut un efect, în domenii ca tehnologia parserelor, generarea de cod, indiferent de limbajul în chestiune. Cercetarea a produs scule de mare succes pentru a manipula limbaje, dar a avut mai puțin efect în proiectarea limbajelor însele.

Limbajele care au succes sunt foarte pragmatice, și sunt adesea ``pătate'' pentru că încearcă să rezolve probleme reale. C++ este un exemplu excelent de limbaj care are o grămadă de hibe. Una dintre ele este că încearcă foarte tare să rămînă compatibil cu C: e compatibil la nivelul fișierelor obiect, și e aproape compatibil la nivelul surselor. Din cauza asta sunt o grămadă de lucruri urîte în limbaj, probleme sintactice ciudate, comportări semantice bizare. Într-un anume sens asta e foarte rău și nimeni nu ar trebui să facă așa ceva, dar unul dintre motivele pentru care C++ a avut atîta succes este exact motivul că este compatibil cu C, și deci putea folosi bibliotecile C, putea fi învățat ușor de comunitatea programatorilor C, care deci puteau face tranziția destul de ușor fără a trebui să-și schimbe peste noapte obiceiurile. Ori asta nu e de loc adevărat în cazul ML, care a fost proiectat în același timp și în mare parte în același loc [tot la Bell Labs], dar care a atacat problema într-un mod foarte radical. Din punct de vedere pragmatic C++ are un succes enorm, dar pentru care a plătit prețul compatibilității.

M:Deci sunteți avocatul evoluției incrementale.

Văd ca sunteți autorul a cel puțin opt cărți, toate din ele scrise în colaborare. Deduc de aici că stilul dumneavoastră de cercetare este colaborativ?

K:Dacă ai de gînd să scrii o carte, e al naibii de ușor să mai găsești pe altul să facă o parte din treabă [rîde]. Am fost foarte norocos să am colaboratori excelenți la toate cărțile mele, și în sensul ăsta a fost foarte ușor. E mult mai simplu de lucrat la o chestie mare, cum e o carte, și care îți ia șase luni sau un an, dacă ai pe cineva care lucrează cu tine. Asta te ține și cu picioarele pe pămînt: dacă o iei razna prea tare ai pe cineva care poate să te cîrmească la loc pe direcția cea bună.

Cred că tot ce am făcut am făcut cu altcineva: e mai amuzant să lucrezi cu alți oameni decît să te încui în birou și să te chinui de unul singur. Și probabil că sunt mai bun la a găsi și a asculta pe cineva care are o idee bună, pentru ca apoi să lucrez cu acea persoană la dezvoltarea ideii decît la a găsi ideile eu însumi.

M:Dacă tot am vorbit de statul cu picioarele pe pămînt, lucrez la un proiect care dezvoltă niște programe mari, unele din funcții fiind modificate de mai mulți autori, care schimbă fiecare stilul de așezare în pagină după preferințele proprii. Ați publicat cîteva cărți despre tehnici și stil de programare; s-a potrivit întotdeauna stilul dumneavoastră cu al co-autorilor, sau ați avut probleme în a reconcilia gusturile?

K:[rîzînd] Asta e de asemenea o întrebare drăguță. Ocazional am avut, nu ``probleme'', nu e cuvîntul potrivit, dar am avut discuții despre unde se pun acoladele, unde se pun spațiile și cum se scriu numele de variabile. Cele mai multe din lucrurile astea au fost mărunte, în parte pentru că coautorii mei sunt prin preajmă și am crescut în același mediu cultural. Dar, de exemplu, cînd Rob Pike și cu mine lucram la ``The Practice of Programming'', cu cîțiva ani în urmă, am avut discuții destul de intense despre lucruri minore cum ar fi ``unde pui spațiile''. Tu cîte spații pui? Eu pun spații după cuvinte ca if, while și for, dar Rob nu pune. Am cîștigat bătălia aia, dar sunt alte bătălii pe care le-am pierdut, nu mai țin minte exact care. Cu siguranță că nu am fost de acord 100%, dar am rezolvat amiabil disputele.

Cu cît mai mulți oameni lucrează la ceva, și cu cît e programul mai mare, cu atît mai greu o să fie, și de la un moment dat trebuie să stabilești standarde pe care toată lumea le respectă și metode mecanice ca de exemplu pretty-printer-e care te obligă să joci după reguli, pentru că altfel pierzi prea mult timp și crește probabilitatea să faci greșeli.

M:Ați menționat pretty-printer-ele; ce alte scule și medii de programare folosiți?

K:Cînd am de ales programez în Unix. Folosesc editorul de texte sam scris de Rob Pike; nu folosesc Emacs. Cînd nu pot folosi sam folosesc vi din motive istorice, și sunt chiar foarte mulțumit de ed [rîzînd]; știu, ăsta a apărut înainte ca tu să te naști. Și e parțial un motiv istoric: îl știam pe Bill Joy cînd lucra la vi.

Nu folosesc debugger-e sofisticate, folosesc instrucțiuni de tipărire inserate în cod; singurul lucru pentru care folosesc un debugger este să obțin o listă a procedurilor de pe stivă cînd un program moare în mod neașteptat. Cînd scriu cod pe Windows în mod normal folosesc sculele Microsoft de dezvoltare: ele știu exact unde sunt fișierele header și alte fișiere importante, deci trebuie să le folosesc chiar dacă nu se potrivesc cu stilul meu preferat de lucru. De asemenea în Windows îmi instalez pachete de scule cum ar fi mks care oferă utilitarele tipice Unix și programele standard cu care sunt obișnuit pentru a căuta, compara, și așa mai departe.

M:Voi schimba din nou subiectul. Cînd am venit în Statele Unite am fost extrem de surprins să descopăr că se face cercetare de foarte bună calitate, și cercetare fundamentală -- adică cercetare care nu e în mod necesar direcționată spre un produs comercial sau pentru a genera profituri -- nu doar în universități, ci și în cîteva companii mari. Ce ne puteți spune despre cercetarea la Lucent, o companie foarte mare, care e o parte din fostul AT&T, o companie uriașă?

Figura 3: Logo-ul Bell Labs și Lucent
\begin{figure}\centerline{\epsfxsize=14cm\epsffile{lucent.eps}}\end{figure}

K:O să-ți dau sloganul oficial, deși cred că mult din el este în continuare adevărat. Cercetarea a fost o parte importantă a companiei ăsteia de pe cînd se chema ``The Bell System'', și a rămas la AT&T și Lucent; Bell Labs serbează 75 de ani anul acesta. Cred că cercetarea a început pentru că oamenii și-au dat seama că sunt felurite lucruri pe care nu știu cum să le facă dar pe care ar trebui să învețe să le facă dacă vor să îmbunătățească produsele sau serviciile pe care le vindeau. Desigur, în timpuri ancestrale serviciul de bază era cel telefonic; în urmă cu 30 sau 40 de ani tehnologia telefoniei a început să capete o din ce în ce mai puternică componentă informatică, și asta a adus cercetarea în calculatoare aici. Cred că același lucru este adevărat pentru companii ca IBM care are de asemenea laboratoare de cercetare extrem de eficiente. IBM e cu siguranță o altă companie cu o tradiție îndelungată de încurajare a cercetării.

Avem întrebarea interesantă ``cum justifică o companie banii cheltuiți pe cercetare?''. Lucent la ora asta are cam 150 de mii de angajați, deci partea de cercetare, din care facem parte tu și cu mine, e ceva mai puțin de 1%, poate 1000 sau 1500 de oameni. Veniturile anuale ale companiei sunt de 38 de miliarde de dolari în 1999, deci cheltuim cam 400 de milioane de dolari anual pe cercetare ca să ne ținem pe tine și pe mine în birouri comfortabile gîndind gînduri înălțătoare. Ăsta pare un fel destul de rezonabil de a investi, o investiție cu risc mare, dar cu profituri potențiale mari. Trebuie tot timpul să te gîndești ``unde o să fim în cîțiva ani?'', ce fel de probleme ne chinuie acum, la care încă nu cunoaștem soluții, la care ar fi frumos să avem soluții, chiar dacă nu ne trebuie astăzi, pentru că în viitor vom avea nevoie de ele. Din nefericire e greu să-ți dai seama cum să faci astfel de lucruri, adesea e greu să-ți dai seama care sunt problemele importante. Cred că cel mai bun mecanism pe care cineva l-a găsit pînă acum e să ia o mică sumă de bani, să zicem 1%, 'si s'a angajeze o grupă de oameni brilianți, să-i pună într-un mediu în care sunt încurajați să vorbească unul cu altul, să vorbească cu lumea din restul companiei, să afle ce fel de probleme are lumea din restul companiei; lumea din restul companiei este încurajată să vină la ei și să zică ``puteți să ne ajutați cu problema asta?'', și să spere că acest proces aleator, și este un proces în multe feluri absolut aleator...

M:[întrerupînd] Dar nu numai atît: există cercetare-dezvoltare în multe alte companii; dar la Bell Labs cercetătorii sunt și încurajați să publice!

K:...Cred că întrebarea este ``cum diferă compania asta de alte companii prin faptul că publicăm?'' Sunt mai multe lucruri la mijloc. Unul este că scara noastră este mult mai mare; Lucent Bell Labs este probabil în continuare cel mai mare laborator de cercetare industrială din lume, făcînd cercetare de genul celei pe care o găsești în universități în vremurile de demult, esențialmente cercetare fundamentală, nedirecționată pe produse. IBM este cel puțin comparabilă, și Xerox într-o oarecare măsură, și sunt și alte companii de genul ăsta. Una dintre diferențe este că aici, cel puțin în grupul de calculatoare, dar și în toate științele fizice, cercetarea este undeva între cercetare industrială, puternic orientată pe produs, și cercetare academică, în care fac treabă mai ales din curiozitate sau pentru că vor să analizeze problemele în mai mare adîncime. Un laborator industrial mare este întins între extremele astea: e mai focalizat pe lucrurile care sunt practice, dar în același timp are un deget în lumea universitară. Și trebuie să facă asta, pe lîngă alte motive, din cauza mecanismului de angajări. Motivul pentru care tu ești aici și nu la Cisco, să zicem, este că Cisco nu face cercetare, Cisco cumpără companii. Cisco nu e un loc rău, în multe privințe Cisco e un loc minunat, dar își face treaba altfel decît Lucent. Un alt lucru este că, fiind un jucător în lumea academică pe lîngă cea industrială, noi interacționăm cu lumea din universități pe post de colegi egali în rang, deci putem atrage oameni ca tine, care vin aici pentru o vară și după aia poate vin înapoi permanent. În felul ăsta avem un influx permanent de oameni buni. Dar trebuie să-i dăm înapoi ceva sistemului. Trebuie să te primim în companie, să-ți arătăm lucruri interesante, să te lăsăm să publici articole, și trebuie să scriem articole noi înșine, pentru că altfel nimeni nu o să ne creadă că facem lucruri interesante. Deci trebuie să fim în mare parte membri care participă la comunitatea academică, pe lîngă participarea la bunăstarea companiei. Asta e o problemă interesantă și încă nerezolvată, cum să faci ambele lucruri fără să cazi prea tare într-o extremă sau cealaltă.

M:L-ați menționat pe Rob Pike; vă este coautor la două cărți. Aș vrea să vă întreb despre o prelegere foarte controversată pe care a ținut-o, al cărei rezumat se găsește la
http://www.research.bell-labs.com/who/rob/utah2000.pdf, în care dînsul argumentează că cercetarea în partea de sisteme (aplicată) în informatică este moartă. Ce gîndiți despre acest enunț?

K:Ca să fiu sincer, Rob are aproape întotdeauna dreptate, deși nu aș recunoaște asta în fața lui [rîde]. Doar am văzut textul prezentării lui, fără să fi fost prezent la fața locului, dar cred că în multe privințe are dreptate. Observația lui este că este foarte greu de lucrat în sisteme: lucrurile se fac la scară prea mare pentru mediile academice, iar mecanismul recompenselor în mediile academice este defectuos. Ca rezultat o mare cantitate a muncii din sisteme tinde să fie incrementală, si să constea mai curînd în evaluarea performanței decît în sinteza unor combinații noi și interesante. Nu știu de ce lucrurile stau așa: poate că e greu pentru universități să obțină suportul necesar, poate durează prea mult -- observația lui Rob este că sistemele reale sunt construite în cinci ani sau mai mult, și cam asta e durata unui doctorat -- deci e greu să obții ceva pe măsura carierei unui student. N-aș zice că cercetarea în sisteme este ``moartă'', dar cu siguranță nu este atît de vie cît ar putea fi.

M:Dacă tot am menționat viața universitară, am văzut că ați predat cel puțin două cursuri la Princeton. Aș vrea să vă cer opinia despre educația în informatică. Am auzit plîngeri din partea companiilor că studenții din calculatoare învață prea multă teorie inutilă și nu știu destul despre dezvoltarea de programe reale.

K:Am predat patru cursuri la Princeton și Harvard în ultimii patru sau cinci ani, la nivele felurite, dar asta nu e suficient pentru a face din mine un expert în educația în informatică. Astea sunt niște școli anume și eu am predat mai mult ciudățenii. Nu cred că universitățile ar trebui să predea lucruri pe care trebuie să le înveți la o școală profesională; nu cred că rolul universității este să predea utilizarea lui, să zicem, Visual C++ și a mediului său integrat de dezvoltare. Cred că rolul universității este să învețe studenții cum să programeze într-un anumit tip de limbaje, de exemplu orientate pe obiecte, să ajute studenții să înțeleagă meritele și dezavantajele unei familii de limbaje ca C, C++ și Java, și relația acestora vis-a-vis de limbaje de natură diferită, cum ar fi cele funcționale. Să înveți studenții tehnicile de care au nevoie ca atunci cînd intră într-un atelier Windows de software să fie capabili să scrie imediat programe COM nu e corect. Nu asta trebuie să facă universitățile, ele trebuie să predea lucruri perene, care vor ține pentru o viață, dacă ești norocos, sau măcar pentru 5, 10 sau 20 de ani, și acestea sunt principii și idei. În același timp, ar trebui să ilustreze principiile și ideile cu cele mai bune exemple posibile luate din practica curentă.

La Princeton am predat un curs introductiv, o combinație de software engineering și programare avansată: studenții, mai ales cei din anii mari, erau în general foarte experimentați în felul de lucruri de care probabil că industria are nevoie. Ei erau comfortabili cu Visual C++, știau cum să ia componente de pe rețea și să le asambleze, și puteau scrie aplicații Java destul de sofisticate. Multe din lucrurile astea erau poate învățate din slujbe de vară. Dacă industria vrea oameni care au mai mult decît cunoștințe ``inutile'' teoretice, ce ar trebui să facă este să ia acești copii talentați din școli și să le ofere slujbe de vară interesante, care complementează cunoștințele teoretice cu detaliile particulare ale diferitelor aplicații. Lumea învață astfel de lucruri extrem de repede, și dacă învață lucruri interesante la slujbele de vară vor duce astfel de cunoștințe și în carierele lor academice. Am fost foarte impresionat de cîte lucruri știau studenții, pe care nu le învățaseră neapărat la școală.

M:Vorbind despre studenți, ce sfaturi i-ați da unui student care intenționează să urmeze o carieră de cercetare? Poate unele domenii sunt mai fructuoase decît altele, sau poate unele au devenit neinteresante?

K:Nu urma sfaturile mele despre carieră [rîde]. Din nefericire nu cred că există nici un fel de sfat bun. Cele mai interesante, pardon, nu ar trebui să zic ``interesante'' -- domeniile cele mai dificile sunt doar două: unu, că e prea greu să scrii programe care merg, și doi, că e prea greu să folosești calculatoarele. Deci dacă vrei teme asupra cărora să te apleci, astea sunt două pe care le poți încerca. Desigur, astea sunt destul de generale, [rîde] există o mulțime de cazuri particulare cu care te poți juca. Dacă faci progrese în orice direcție din domeniile astea, atunci ai oportunitatea de a continua cu o carieră academică sau poți încerca să faci avere într-o companie nou creată (start-up). La ora asta se pare că o mulțime de oameni mai curînd ar face avere într- nouă companie decît să petreacă 5 sau 6 ani pentru a obține un doctorat. Poate ești prost orientat [rîde]...Cred că din nefericire cel mai bun sfat pe care i-l poți da cuiva este ``fă ceea ce crezi că este interesant, fă ceva care crezi că este amuzant și merită, pentru că altfel oricum nu o să poți să o faci bine''. Dar asta nu ajută de loc.

M:Poate puteți ajuta fiind mai concret: puteți să ne recomandați niște cărți, de calculatoare sau altceva, care credeți că au avut o influență mare asupra dumneavoastră?

K:Singura carte de calculatoare pe care am recitit-o mai mult de odată, pe care de fapt o iau la fiecare cîțiva ani și din care recitesc părți este ``The Mythical Man-Month'' (Miticul om-lună), de Fred Brooks, o carte mare. În parte este foarte bine scrisă, în parte sfaturile din ea, chiar după 25 de ani, sunt foarte relevante. Sunt desigur detalii care s-au schimbat, unele lucruri le facem altfel din cauză că avem mai multă mecanizare și mai multă putere de calcul, dar este o cantitate enormă de sfaturi utile în cartea aia, așa că o recomand cu mare căldură. Este singura carte de calculatoare la care mă pot gîndi pe care o recitești pentru o combinație de plăcere și viziune.

Sunt alte cărți pe care le recitesc și care sunt foarte relevante pentru oameni din informatică. Cărți despre cum se scrie, în engleză în cazul meu particular, ca ``Elements of Style'' (elemente de stil) de Strunk și White. Mă reîntorc și recitesc cartea asta la fiecare cîțiva ani, pentru că cred că abilitatea de a comunica este probabil la fel de importantă ca cea de a sta la tastatură și a scrie programe. Capacitatea de a explica ceea ce faci este foarte importantă.

Există de asemenea o carte grozavă, ``Cum să minți folosind statistica'', pe care o vei găsi utilă în propria ta cercetare [rîsete].

M:Voi schimba din nou direcția. Unix și C au fost create la AT&T și la ora aceea au fost lansate sub o licență care era virtual o licență open-source, pentru că AT&T trebuia să facă asta: fiind un monopol avea o înțelegere cu guvernul american, din cîte înțeleg, să nu facă bani din calculatoare. O mulțime de oameni afirmă că licența liberală este motivul enormei popularități și influențe pe care atît Unix și C le-au avut. Recent Lucent a lansat Plan 9 sub o licență open-source. Ce credeți despre acest ``nou'' fenomen open-source1?

K:Cred că în mare parte e un lucru bun. Licența originară Unix era, cum zici, făcută în mare parte în acest fel pentru că AT&T nu avea voie să facă orice fel de alte afaceri decît telefonie, deci nu puteau face bani pe software. Din cauza asta au luat decizia foarte înțeleaptă de a da Unix practic pe gratis universităților. L-au vîndut și comercial, dar pe un preț de nimica, dar universitățile l-au primit pe degeaba, și ca atare o întreagă generație de studenți și profesorii lor s-a dezvoltat crezînd că Unix este felul în care se fac calculatoare. Unix era cu siguranță mult mai productiv decît celelalte sisteme de operare comerciale ale timpului, și pentru că codul sursă era disponibil era ușor să-ți dai seama ce se întîmplă și să faci îmbunătățiri. În jurul Unix-ului s-a construit o comunitate de utilizatori, interesați de Unix, motivați de aceleași lucruri și care contribuiau și în felul acesta sporeau valoarea sistemului prin colaborare.

Cred că mișcarea curentă open-source are foarte mult din acest caracter. Multe din sculele dezvoltate open-source sunt bazate pe modele Unix. Linux este cel mai evident, pe dinafară cel puțin fiind clar bazat pe Unix; multe din programele de la Free Software Foundation sunt reimplementări ale unor scule și limbaje standard din Unix.

Sunt desigur și alte proiecte care apar din interese comerciale stranii, cum ar fi Mozilla, codul pentru Netscape, care e acum în domeniul public, și la care lumea de asemenea contribuie.

Cred că fenomenul open-source este în general un lucru bun. Nu sunt sigur că va înlocui vreodată cod specializat, profesional, solid, care este vîndut pentru profit. Dar ce ar putea realiza în multe cazuri, și cred că reușește perfect în cazul compilatoarelor de C, este să ofere o implementare de referință și un standard de o calitate bună, pe care toate celelalte implementări trebuie să-l atingă, pentru că altfel nu le cumpără nimeni. Cred că în sensul ăsta e un lucru bun.

Cît despre Plan 9, cred că e prea tîrziu, din păcate. Cred că Plan 9 a fost o idee măreață și ar fi trebuit lansat sub o licență gen open-source cînd a fost făcut, cu opt ani în urmă, dar ``tutorii'' noștri nu ne-au lăsat. Cred că au făcut o greșeală foarte costisitoare. Licența actuală gen open-source merită categoric, dar nu e clar dacă Plan 9, cel puțin ca sistem de operare general, va avea impact, exceptînd o mică nișă. Are multe calități care-l fac valoros în multe domenii, mai ales unde ai nevoie de un sistem mic și portabil, dar va reuși să smulgă dominația Linux-ului? Nu cred.

M:Mă pregătesc să închei pe o notă mai ușoară, dar întîi voi pune încă o întrebare mai adîncă. Interpolînd din evoluția informaticii de pînă acum, cum vedeți evoluția sa în viitorul apropiat, și nu îndrăznesc să întreb, cel îndepărtat?

K:[rîde] Dacă aș putea prezice viitorul atunci aș investi mai înțelept și nu ar trebui să fac interviurile astea prost plătite [n.b. interviul a fost gratuit]. Știi, de fapt sunt așa de nepriceput la preziceri.... Voi ghici că într-un sens situația din informatică va fi aceeași: vom face multe progrese, vom putea face lucruri mai mari, vom putea construi lucruri care sunt mult mai interesante și sofisticate decît cele pe care le puteam face cu zece ani în urmă. Dacă te uiți la lucrurile care rulează pe PC-ul din față noastră, sunt mult mai puternice și mai flexibile decît cu zece ani în urmă. Dar cantitatea de cod încîlcit, peticit, oribil care zace sub toate astea a crescut și ea enorm. Într-un sens cred că vom continua să facem progrese, dar vor fi tot timpul slinoase și pe jumătate neterminate. Pentru că oamenii mereu se apucă de mai mult decît pot face în mod rezonabil, tot timpul se întind mai mult decît plapuma, și niciodată nu par să se întoarcă să curețe ce au făcut înainte.

Celălalt lucru care mă cam îngrijorează este că acum calculatoarele sunt peste tot, în tot ce faci. Nu poți să te întorci fără să ai de-a face cu ceva care depinde în mod critic de calculatoare, și din ce în ce mai multe din lucrurile astea contează. Nu contează dacă programul de înregistrat sunet din Windows merge sau nu...

M:[întrerupînd] Acum contează! [n.b. interviul acesta a fost făcut folosind un PC și software de captare și compresie de sunet]

K:...dacă pierdem interviul, la naiba cu el. Dar, de exemplu, cînd o să zbori înapoi la Pittsburgh, tu îți dorești din toată inima să meargă bine calculatoarele care controlează echipamentele de pe Airbus 320, și să nu facă nici o greșeală; ăsta este doar un exemplu dintre lucrurile care depind critic de abilitatea noastră de a scrie software care merge și să construim hardware care-l suportă, și cred că încă nu știm să facem asta bine. Facem progrese, e clar mai bine, combinația de limbaje și tehnici ca sculele de verificare ajută, dar avem aceeași problemă: pe măsură ce înțelegem mai bine cum să facem lucrurile mici ne apucăm de unele mai mari și mai complicate și într-un sens suntem mereu între crocodili pînă la gît.

M:Ultima mea întrebare este despre hobby-uri.

K:[rîzînd] Cine are timp de hobby-uri? Dacă mă uit la hobby-urile mele din clipa asta, cred că se rezumă la citit. Cînd nu mă distrez sau meșteresc la calculatoare, sau nu fac chestii legate de slujba mea, citesc. De obicei cărți de istorie, nu știu de ce, e ciudat, dar îmi place să citesc cărți de istorie. De-a lungul vieții mele, în ultimii 20 sau 30 de ani, am trecut prin tot felul de faze lungi de 3, 4, 5 ani in care m-am cufundat adînc în cîte ceva. Am trecut printr-o fază în care am încercat să învăț japoneza, și pot să-ți zic, îți trebuie mai mult de 3 ani ca să înveți japoneza! Deci ăsta a fost un eșec. Cînd eram student doctorand am petrecut cam cinci ani studiind karate, și am ajuns la un nivel în care puteam aproximativ supraviețui, dar am renunțat, și nu mai e parte din viața mea. Apoi am avut o fază în care eram foarte interesat de investiții [la bursă], dar nici asta nu mi-a schimbat viața, deci evident nu eram prea bun. Deci lucrul pe care îl fac acum este să citesc mult.

M:Vă mulțumesc foarte mult!

Cărțile lui Brian Kernighan

http://www.research.bell-labs.com/who/bwk



Note

... open-source1
Despre open-source vedeți și articolul meu ``Noua revoluție în software'', din PC Report din iunie 1998.