Într-un interviu acordat unei reviste de specialitate în
1997 -- cu puţin înainte de a se retrage din activitate -- profesorul
Niklaus Wirth (inventatorul Pascal-ului, printre altele) relatează o
întâmplare petrecută la un înalt seminar academic prin anii 70. Se vorbea
la aceea vreme despre o veritabilă "criză a software-ului",
datorată creşterii complexităţii aplicaţiilor şi
inevitabila înmulţire a erorilor. În acest context, profesorul C. A. R.
Hoare (laureat al premiului Turing) a expus o serie de principii de verificare
formală a corectitudinii programelor, ca o alternativă la testare. În
discuţiile aprinse care au urmat, Jim Morris (decan la Carnegie Mellon)
s-a ridicat şi a spus: "Dar Tony, ce-ai zice dacă ţi-am
mărturisi sincer că ne place la nebunie să depanăm programe?
Vrei să ne abandonăm această pasiune?"
Într-adevăr, ne place debugging-ul. De fapt, bucuria pe
care ţi-o procură un program cuminte, pe care l-ai migălit cu
grijă şi îşi face treaba cum trebuie, este o bucurie
liniştită. Lipsită de entuziasm de moment. În schimb, fericirea
care te cuprinde când după ore sau chiar zile de căutări
găseşti scama care-ţi dădea programul peste cap este adesea
echivalentă cu o veritabilă descoperire iar bucuria e intensă.
Din foarte multe erori pe care le faci ai ce învăţa şi poate
că programatorii cei mai buni sunt cei care au scos cele mai multe
bug-uri. Odată ce ai învăţat -- de exemplu -- că
identificatorii fără semnificaţie sunt un pericol mortal, vei
începe să scrii un cod mult mai lizibil, iar erorile -- inevitabile -- vor
fi mai rare... şi mai interesante.
Adevărul este că îmi amintesc mult mai multe erori
spectaculoase pe care le-am depistat (pentru că, desigur, tot eu le-am
comis) decât de trucuri sau rezolvări interesante. Însă vremurile
s-au schimbat şi depanarea începe să-şi piardă din farmec.
Pe vremuri, lucrai de obicei pe un singur calculator, cu un singur sistem de
operare, foloseai un singur limbaj şi, într-un fel, te mişcai într-o
lume închisă, în care aveai certitudinea că eroarea îţi
aparţine şi, mai devreme sau mai târziu, o vei găsi. Într-un
astfel de mediu aveai şansa să foloseşti diverse instrumente
ajutătoare... Nu spun că astăzi nu se mai poate, însă sunt
din ce în ce mai rare programele închise, compacte, care-şi cuprind
complet funcţionalitatea. Eşti în reţea, foloseşti un
sistem de baze de date de pe un calculator care nici nu ştii dacă-i
în camera de alături sau peste ocean, combini proceduri stocate cu
middleware şi servere de aplicaţii care rulează pe sisteme de
operare diferite, iar în partea dinspre utilizator foloseşti alte
instrumente, poate HTML cu JavaScript şi Ajax... Când ceva nu merge bine --
şi cu siguranţă ceva, undeva se va poticni -- lucrurile devin
mult mai complicate şi fără îndoială mai enervante. Nu mai
ai instrumente care să te ajute să afli dacă eroarea este pe un
computer sau pe altul, în backend, în middleware sau în frontend şi, mai
ales, dacă ai comis-o cu propria mână sau e un bug "de firmă". E
firavă consolarea că şi alţii greşesc, chiar şi
la case mult mai mari.
Cu ani în urmă, când un program C de vreo câteva mii de
linii de cod o lua brusc de la început în împrejurări care păreau
aleatorii, m-am amuzat copios. Nici măcar nu se oprea, ca să văd
un mesaj de eroare. Nu puteam nici să pun puncte de întrerupere sau
să afişez mesaje de parcurs pentru că manevram interfaţa.
Până la urmă am recurs la sunete şi bucle de întârziere ca
măcar să "aud" ce se întâmplă. Era un apel cu număr
greşit de argumente care, din întâmplare, arunca în stivă adresa de
start... Acum e ora două din noapte şi o funcţie care trebuie
să indirecteze un apel către baza de date printr-o altă
funcţie din serverul de aplicaţie se comportă ciudat. În zeci de
locuri am procedat la fel şi a funcţionat fără greş
(vorba vine...). În plus, nici măcar nu se comportă la fel în
configuraţii similare. Sunt implicate cinci limbaje de programare şi
trei sisteme de operare, plus browsere diferite. Jur că am fost ordonat,
că n-am făcut trucuri şi că am pus comentarii... Până la
urmă voi descoperi, dar nu voi avea nici o bucurie. S-au dus acele
vremuri.