Tot vad pe diverse site-uri de recrutare ( nu dau nume pentru a nu face reclama ) sintagma programator X, unde X e un limbaj de programare : C++, C, Java, C# , Haskell (glumesc).
Intrebarea mea e : daca esti programator, chiar conteaza limbajul atat de mult ?
Well, dupa parerea mea, da, dar foarte putin. De ce conteaza ? Pentru ca managerii se gandesc doar pe termen scurt, si vor sa fii productiv pentru ei cat mai repede. A se intelege prin productiv foarte productiv
. De ce foarte putin ? In primul rand, pentru ca limbajul de programare este doar o unealta; eu nu merg la sapat cu un laptopul ci cu o cazma. (ce-i drept, C++ e un fel de cheie franceza multifunctionala care stie de toate).
Acum, care este problema ta, de fapt ? Problema mea este ca, la noi, am impresia ca se cauta programatori care stiu o singura chestie (bine/foarte bine) si care, la schimbarea tehnologiei din X in Y, vor fi inlocuiti de programatori Y.
Spre exemplu, vara trecuta am lucrat cu Java si tehnologii derivate ( Eclipse API, JUnit etc. ) si, la un moment dat, aveam de incarcat niste fisiere de configurare XML. Din cauza ca unele lucruri isi schimbau numele, trebuia sa iau toate XML-urile de mana si sa le ajustez corespunzator. La 2-3-5 XML-uri treaba era ok, dar la 100 ce ma faceam ? Astfel ca mi-am amintit de un program pe care il facusem in Scheme care genera cod X(HT)ML din expresii Scheme : din (html (head (x1.y1) (x2.y2) )) genera <html> <head x1 = y1 x2 = y2> </head> </html>. Scheme fiind un limbaj de programare destul de puternic, am propus sa generam fisierele de configurare din el, iar cand apare o modificare schimbam define-ul cu pricina. Evident, raspunsul a fost evaziv, nici da nici nu, dar nu s-a pus in aplicare
; s-a ales varianta modificarii de mana a tuturor fisierelor…..
Un alt lucru foarte important este faptul ca un program scris prost nu va cunoaste succes pe piata. Din ce am vazut eu, pe la noi se scrie cod cu picioarele si lucrul asta se vede in succesul pe care-l avem : facem foarte mult outsourcing; lucrurile smechere nu se fac in Romania. De ce oare ? Nu cumva din cauza ca in afara se cauta programatori si la noi programatori X (care e bine sa nu cunoasca Y sau Z pentru a nu avea pretentii salariale prea mari).
Ma mai uit pe anunturi de angajare, de la noi si din afara, si observ cateva diferente importante : la noi nu se pune accent pe studii, iar la ei da.
La noi, in anunt scrie : eu te angajez pentru ce stii sa faci, nu pentru ce diploma ai. Stiu ca invatamantul nu e tocmai perfect, dar mai stiu ca majoritatea oamenilor cu studiile facute ca lumea stapanesc foarte bine multe concepte. Mi se pare foarte ok sa angajezi o persoana pentru ceea ce stie sa faca, dar nu mi se pare de ignorat si gandirea (mind set, pe care, sincer, in facultate ti-o formezi). Sunt si exceptii, stiu ca exista programatori care in Lisp au scris compilator de Haskell intr-un weekend si care nu au facultate. Dar mai stiu ca exista foarte multi programatori doar cu liceul terminat si care scriu un cod mizer, care lucreaza doar procedural si care considera OOP-ul ceva SF. Am dubii ca poti scrie un IDE doar stiind C++( a se intelege C cu clase si maxim functii virtuale, fara RTTI sau MPL – meta programming language ).
In afara, te intreaba cu ce nota ai terminat facultatea. Explicatia cea mai buna am gasit-o la Joel on Software : “Because the GPA, more than any other one number, reflects the sum of what dozens of professors over a long period of time in many different situations think about your work”. Daca tu stapanesti foarte bine conceptele, atunci adaptarea la o noua situatie e destul de simpla. Spre exemplu, eu am facut diverse lucruri in limbaje total necunoscute la vremea respectiva (Lisp si C#); nu mi-a luat mai mult de 1 ora sa scriu confortabil in noul limbaj si stiam exact ce sa caut (prin analogie cu Scheme, respectiv Java/C++).
Am scris mai sus ca un program scris prost nu va avea succes pe piata. Se stie ca 20% din produse au 80% din cota de piata. Sa iau un exemplu : Eclipse. Am lucrat cu Eclipse API si e chiar foarte misto scris, daca ar fi fost scris de persoane care stiu doar Java atunci sigur n-ar fi cunoscut imensul succes de acum. De ce ? Pentru ca scrierea unei modul/arhitecturi cere mai mult decat Java, cere OOP, cere Design Patterns si alte chestii care nu se pot aplica doar intr-un anumit limbaj. Poti scrie OOP si in C daca te chinui (hint: unele compilatoare genereaza din C++ cod C pe care-l compileaza), poti implementa un singleton si in Assembler ( cred
, n-am incercat ) si astfel ajugem la ideea cum ca doar gandirea conteaza.
Ca o concluzie, am impresia ca la noi se vrea totul cat mai ieftin si calitatea nu conteaza. Problema pe termen lunga e ca facem chinezisme, si nu toti avem o parere buna despre adidasii din China. Totul pleaca de la angajatori, care considera ca e mai important sa stii C++ decat sa stii sa programezi, si de la specificul zonei : outsourcing.
Am scris Java in titlu pentru ca am observat ca este la moda. Dupa parerea mea, Java e un limbaj foarte ok, dar faptul ca este destul de simplu a dus la atragerea si multor pseudoprogramatori in domeniu. Astfel ca, sunt destul de multi programatori care scriu in java cod urat (redundant, dupa ureche etc), principalul motiv fiind ca, in java, este usor de programat. Dupa cum spunea, vara trecuta am lucrat, impreuna cu alte persoane, in Java. Problema era ca oamenii (absolventi de electronica, inginerie electrica etc) scriau un cod foarte prost, nici ei nu stiau de ce merge; sincer, n-as vrea sa fac asta toata viata, si din cauza asta nu mai lucrez acolo. Daca java ar fi fost mai complicat, atunci sigur n-ar mai fi fost angajat pe post de programator un absolvent de Litere sau Conservator (exagerez).
Ca si o concluzie, cred ca cel mai important lucru al unui programator (aici intra si Sotfware Architect, Engineer etc. ) este gandirea si nu numarul de tehnologii stapanite. Din pacate, din ce-am observat, la noi se cauta oameni care stiu o tehnologie si nu au, neaparat, o gandire formata : se vede si din testele de angajare – la un interviu am fost chiar compilator de C. Din fericire, in afara se cauta oameni care gandesc intr-un anume mod si care se pot adapta usor noilor tehnologii. Si mi se pare normal, avand in vedere ca life cycle-ul unei tehnologii este de cativa ani (nu mai mult de 5-10).
Exista si la noi firme care te angajeaza pentru mindset si nu pentru MFC, C++, QT, GTK+, .NET ? Daca da, astept raspunsul vostru
.
Voi ce parere aveti ?