De ce este bun un curs de compilatoare si cunoasterea pe net

silviug
Silviu-Ionut Ganceanu
30 octombrie 2008

Virgil Palanciuc este olimpic international "din garda veche" si Software Engineer de 8 ani. A lucrat in departamentul de compilatoare al Freescale Romania iar momentan este Project Manager la Evo Software. Impreuna cu Bogdan Nitulescu si o armata de asistenti (printre care ma numar si eu) preda cursul de compilatoare la UPB. Recent Virgil a trimis un email catre studentii acestui curs pe lista de discutii asociata. Noua ni s-a parut interesant si util mesajul transmis si ne-am gandit sa vi-l impartasim si voua prin intermediul blogului :)

Silviu Ganceanu

Doamna profesoara Athanasiu obisnuia sa scrie articole in PC Magazine, prin care sa transmita mesaje studentilor, sa corecteze unele perceptii pe care le considera gresite, si asa mai departe. Unele dintre ele le mai gasiti inca pe pagina Utile a cursului CPL. Poate ca in timp, vor deveni "obsolete", poate ca au devenit deja, sau poate ca vor fi mereu actuale.

Eu din pacate nu am talentul epic al ei, si nici experienta sa. Dar de data asta o sa ma risc, sa scriu un "articol" similar cu articolele ei incercand sa raspund la intrebarea "De ce e important pentru voi acest curs de compilatoare". Am observat in ultimul timp o atitudine care tinde sa prinda elan odata cu raspandirea accesului la internet - am auzit mult prea des parerea ca "De ce e nevoie sa stiu asta? Daca am nevoie, caut pe net". O parere partial corecta... totusi doar partial. Invitat intr-o emisiune TV, acum cativa ani, Neagu Djuvara a recunoscut că nu stie data bataliei de la Podul Inalt: "Am totul notat pe fise, nu retin datele". Asa e, nu trebuie sa retii toate datele pentru a fi un mare istoric. Nu trebuie sa retii toate metodele si interfetele din Java API pentru a fi un programator bun - e un exercitiu de memorare complet inutil.

Insa: atitudinea aceasta e, din pacate, prea des dusa in extrem - pana la punctul la care, cand unui student de la A/C i s-a cerut sa incrementeze o variabila, a scris pe tabla doar "++" (fara numele varibilei), scuzandu-se ca "nu are nevoie sa stie sintaxa C, poate sa o caute in manual oricand". Desigur ca voi intelegeti absurditatea acestei atitudini - dar exista forme mult mai "nevinovate" de manifestare a unei atitudini similare. Cea mai comuna este atitudinea studentului care atunci cand are o tema de facut la scoala, cauta ceva similar pe internet si adapteaza. Scuza, invariabil, este ca "reutilizarea e extrem de importanta" si ca "la serviciu nimeni nu-ti cere sa scrii totul de la 0, refolosesti tot ce poti". Asa este, la serviciu refolosesti. Dar voi acum sunteti intr-o perioada in care nu trebuie sa produceti cod util, ci trebuie sa intelegeti. E prea putin relevant cu ce nota terminati scoala, mai nimeni nu o sa va intrebe de asta. E mult mai important sa intelegeti cat mai mult cum functioneaza lucrurile, sa intelegeti ca lucrurile nu functioneaza "by magic" in calculatoare, ci urmeaza o logica foarte clara, ca daca faci ceva intr-un anumit fel poate fi eficient, sau ineficient, si asa mai departe. Sa intelegeti ca un "+=" nu e intotdeauna operatia inocenta care pare a fi, daca ne uitam strict la sintaxa. De aceea e important cursul de compilatoare (si cel de sisteme de operare), fiindca, poate mai mult decat oricare alte cursuri, fac legatura intre 2 lumi: cea a limbajelor de nivel inalt, a "abstractizarilor" - in care programatorul "zboara deasupra lucrurilor" si pierde de multe ori legatura cu "realitatea hardware" - si lumea "de jos" - in care lucrurile trebuie puse cap la cap, legate intre ele, adaptate la procesor, simplificate, facute sa functioneze ca un tot unitar. E ceva ce nu veti gasi niciodata pe google - nu fara a sti deja ce cautati. Daca stiti paradigmele de programare, daca stiti cum si de ce functioneaza constructiile si mecanismele dintr-un limbaj de programare - atunci va va fi mult mai usor sa adaptati la un orice alt limbaj nou fiindca veti intelege ca limbajul e doar un instrument facut pentru a va mari productivitatea, la fel ca si un IDE, debugger samd. Si nu veti cadea in capcana de a va auto-intitula "Programator Java" / "Programator .NET".

La interviu la Google, din cate mi s-a spus, daca un candidat stie de dinainte raspunsul la o intrebare raspunsul lui este complet ignorat. Ceva similar faceam si eu (fara sa stiu ca Google face asta): de exemplu pun candidatii sa scrie o functie de cautare a unui subsir intr-un sir de caractere si daca e evident ca stie algoritmul Boyer-Moore, atunci il pun sa scrie altceva - e prea putin relevant faptul ca a memorat un algoritm. Dar e foarte important daca el intelege complexitatea algoritmului pe care l-a scris, daca atunci cand i se cere sa scrie o varianta mai eficienta, stie "de unde sa apuce problema" pentru a cauta o solutie mai eficienta, si "de ce solutia curenta nu e eficienta".

Cititi de exemplu articolul acesta - fara sa fiu neaparat 100% de acord cu el, mi se par interesante (si probabil extrem de relevante pentru el) intrebarile "de filtrare" pe care le pune la interviu. Nimeni nu va ofera "pe tava" raspunsul la asa ceva si sunt probleme dureros de prezente in anumite medii. E ceva ce nu inveti in mod direct la scoala dar, daca ai inteles cum functioneaza un procesor, cum functioneaza un compilator, cum functioneaza un linker, cum functioneaza un sistem de operare, ai o sansa sa te descurci.

In fine, inchei acest mail cu un link la articolul care m-a facut de fapt sa-l scriu - il gasiti aici. Mi s-a parut impresionant cum un om de varsta tatalui meu reuseste sa inteleaga internetul mai bine decat multi oameni tineri, de 20 ani. Sau ma rog, eu asa cred, ca l-a inteles foarte foarte bine: "Dar a fi cultivat nu înseamnă a şti, înseamnă a şti să cauţi. Nu a şti să utilizezi o „maşină de căutare", ci a transforma căutarea într-un parcurs laborios, imprevizibil, plin de fertile derapaje colaterale. Cultura nu te îmbogăţeşte prin ceea ce îţi livrează în mod expres, ci prin aventura drumului, prin barocul tatonărilor. Cultura e facultatea de a decide ce e de făcut cînd nu ştii ceva: cum să pui întrebarea, la ce uşă să baţi, în care orizont să te mişti."

Dl. Plesu vorbeste despre cultura, dar eu zic ca e perfect valabil in contextul mai larg al "cunoasterii" - fix asta trebuie sa invatati voi din facultate: cum sa pui intrebarea, la ce usa sa bati, in care orizont sa te misti. Asta e lucrul cu care trebuie sa ramaneti - cum se rezolva o tema si in nici un caz cu "am reusit sa fac niste modificari prin analogie intr-un program de pe net, deci se cheama ca m-am descurcat sa o fac".

Spor la lucru la tema 2, apucati-va de lucru din timp ca e mult mai grea ca tema 1 :)

  Virgil.

P.S. Tocmai m-a intrebat ceva un coleg de la alta echipa - nu intelegea de ce in ASP atunci cand pune "listbox" in pagina nu poate face un item din lista sa fie hyperlink, pe cand daca pune "gridview" se poate. Nu i-a trecut prin cap ca ar afla raspunsul extrem de usor daca s-ar uita ce HTML se genereaza in spatele acelor controale ASP ...

Categorii:
remote content