Mihai Budiu -- mihaib+@cs.cmu.edu
http://www.cs.cmu.edu/~mihaib/
iulie 2000
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.
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.
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?
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șă?
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!
http://www.research.bell-labs.com/who/bwk