Arhiva pentru februarie, 2009

Programator Java

februarie 26, 2009

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 ?

Control asupra nasterii, control asupra mortii?

februarie 24, 2009

Din ce am observat, in ziua de azi detinem controlul asupra nasterii, dar nu si asupra mortii. Oare il vom obtine vreodata ?

Controlul nasterii o fi un lucru “bun” ? Evident, nu. De ce ? De ce ar fi ? De ce n-ar fi ? Exista doua tabere, fiecare tabara cu argumentele ei. Din pacate, tabara cu raspunsul “da” nu prea are argumente, insa cealalta tabara nu are ideile foarte bine argumentate.

De ce nu are prima tabara argumente ?

Pentru ca, in primul rand, sunt subiectivi – privesc problema doar din punctul lor de vedere, iar raspunsul pe care-l dau ii favorizeaza intr-un fel sau altul – si nu vor sa fie responsabili -  e mai usor sa intorci spatele cuiva decat sa-l ajuti.

De ce a doua tabara nu are ideile foarte bine argumentate ?

Pentru ca, de multe ori, apeleaza la paragrafe din Biblie, iar acum e la moda sa fii ateu (independent, puternic etc.). Daca vrei sa demonstrezi unui ateu ca laptele e alb, atunci fie incerci sa-i aduci argumente in care el se increde, fie ii demontezi argumentele. Vreau sa spun ca si un ateu, chiar daca nu crede in Dumnezeu, crede in ceva :) , iar acel ceva trebuie folosit “impotriva” lui. Ca o generalizare, in ceva tot trebuie sa crezi, fie ca e vorba de Dumnezeu sau satana, evolutie sau rationament uman, altfel risti sa devii paranoic si sa te invarti in jurul cozii. Revenind la raspunsul intrebarii, eu am impresia ca biserica insista pe citate din Biblie, care nu vor afecta, in vreun fel, parerile ateilor despre controlul nasterii, si ca ar trebui sa le demonteze argumentele folosind ca si arma de atac rationamentul lor.

Duminica seara, am vazut o scena dintr-un film, in care protagonistii erau o domnisoara si tatal ei. Fata a ramas insarcinata cu un barbat insurat si vroia sa faca avort; tatal ei nu era de acord si a incercat sa-si impuna punctul de vedere. Replica fetei este un argument “solid” al primei tabere : (incercare de citat) “Fac ce vreau cu corpul meu, asa ca eu am dreptul sa decid daca pastrez copilul sau nu!” (continuare : cu ce drept hotarasc altii ce trebuie facut cu corpul meu?).

Nu comentez aceasta scena pentru ca vreau sa va spuneti parerea voastra :) .

E posibil controlul mortii ? Teoretic si practic, da. In primul rand, am spus practic pentru ca prin controlul mortii m-am referit la actiuni de genul sinuciderilor si eutanasierilor – moartea omului este controlata, intentiile fiind “bune”. In al doilea rand, partea teoretica se refera la controlul evolutiei celulelor. Evident, daca timpul ar sta in loc, am fi nemuritori. Dar daca timpul s-ar scurge si celule noastre n-ar mai evolua sau, mai simplu, daca ar exista substante miraculoase care ar opri evolutia lor, ce implicatii credeti ca ar fi ? Eu nu stiu ce sa cred, poate lupta pentru supravietuire ar fi mai crancena si rata criminalitatii va creste. De ce sa creasca criminalitatea ? Pentru ca daca mortalitatea este zero, atunci la un moment dat planeta va fi suprapopulata (momentan nu mi se pare ca planeta ar fi suprapopulata, desi exista diverse pareri si pe aceasta tema) si lupta pentru supravietuire se va da intre oameni, nu intre oameni si problemele pe care le avem de rezolvat. Oare am fi fericiti daca am fi nemuritori pe acest pamant ? Eu unul as raspunde nu. Voi ce parere aveti ?

O alta poveste legata de implantarea chip-urilor in pasapoarte. Biserica a intervenit print-un comunicat si argumentul a fost stupid ( chiar si pentru mine ) : contine 666 numarul diavolului; practic, n-a stiut sa-si argumenteze parerea. Argumente sunt destule, mai ales ca este prima etapa a marelui proiect de implantare a chip-urilor in oameni si asta va duce la obtinerea, de catre anumite persoane, a controlului _absolut_ asupra celorlalti.

Controlul nasterii reprezinta crimele voluntare ( pentru a elimina orice dubiu, aici intra avortul ) si pe care il avem(desi nu este neaparat legal, oricine poate ucide pe oricine). De ce intra in “nastere” toate crimele voite ? Dupa parerea mea, omul se “naste” de mai multe ori in viata lui, eu privesc “nasterea” unei persoane ca fiind o schimbare a contextului ei curent. Spre exemplu castigarea unui premiu la LOTO te face alt om, te “nasti” pentru a N-a oara, iar uciderea unei persoane controleaza urmatoarea nastere.

Controlul mortii abordeaza doua aspecte : chemarea mortii si sfidarea ei. Chemarea mortii se refera la crime voluntare de genul eutanasierii si sinuciderii. Sfidarea permanenta se poate obtine doar prin oprirea evolutiei celulelor. Prima parte a controlului o avem deja, cand reusim sa o cucerim si pe a doua ? Oare voi trai timpul in care oamenii vor putea sa nu moara ?

“Cuz who are we to say who lives or dies”

Inca 3 si ma duc

februarie 16, 2009

S-a incheiat cea de-a 5-a si cea mai usoara sesiune. Desi nu are rost sa intru in detalii, eu am impresia ca la multe cursuri se predau lucruri fara a se explica contextul general.

Ca sa iau un exemplu, la _marele_ curs de APD (algoritmi paraleli si distribuiti) nu tin minte sa mi se fi explicat care sunt cele mai utilizate biblioteci pentru programarea paralela si care sunt cele mai importante diferentele intre ele; am lucrat _direct_ cu openMP in C, in conditiile in care toata lumea lucreaza ori cu pthread, ori cu WinAPI, ori cu boost, ori cu Intel® Threading Building Blocks (TBB) ori cu wrappere (QT are niste chestii destul de misto implementate).

O sa ziceti : principiile sunt cam aceleasi, si concepte trebuiesc invatate la facultate; de acord, insa fara a avea o privire de ansamblu asupra domeniului e cam greu sa intelegi ce se intampla. Tot la aceasta materie s-a lucrat cu o biblioteca despre care eu nu am o parere prea buna : openMPI; de fapt, nu biblioteca/implementarea in sine imi e antipatica, ci chiar interfata MPI. Daca o sa scriu un program distribuit, cred c-o sa folosesc sockets API, daca viteza este foarte importanta, sau un middleware si in nici un caz MPI.

Cursul LFA (limbaje formale si automate) nu prea stiu cum a fost – vineri, 8 dimineata, nu ma pot scula – dar a respectat An Introduction to Formal Languages and Automata, carte pe care daca o citeai, nu foarte atent, luai lejer 10.

La RL (retele locale) insa, se prezenta the “big picture-ul”, insa era atat de big incat era destul de greu sa _intelegi_ foarte bine ce se intampla.

Au mai fost alte doua cursuri, EGC si CN2, despre care nu are rost sa-mi exprim parerea proprie si personala. Oricum, daca vroiai sa inveti, puteai, dar acelasi lucru il poti face si acasa, nu si la facultate.

Per total, semestrul a fost ok, am invatat destul de multe chestii. Am ramas cu senzatia ca se putea invata totul in sesiune si ca, asta vara, ar fi trebuit sa fi continuat cu un job part-time.