Interviu: Despre Java şi educaţie cu Cristian Olaru - 26 Feb
Ne-am gândit ca sub forma unor interviuri, să vă aducem o serie de sfaturi şi idei de la programatori cu ceva ani buni de experienţă în spate.
Cristian Olaru este autorul cărţilor Java de la O la expert şi Dezvoltarea aplicaţiilor web folosind Java. În prezent este Java developer la IBM Romania. Cristi a dezvoltat de la 0 şi întreţine şi javaromania.com unde puteţi găsi articole java şi elementele aferente acestui limbaj. Având o experienţă de peste 8 ani în programarea Java l-am invitat pe Cristi să povestim puţin despre Java şi programare în general.
Salutare! De ce Java? De ce ai început să faci development în Java sau de ce nu l-ai schimbat de-a lungul timpului cu un alt limbaj?
Bună! Aproape din întâmplare! Prima oară m-am întalnit cu Java în facultate când a trebuit sa-mi aleg şi să mă specializez într-un limbaj de programare pentru dezvoltarea proiectelor din acea vreme. Ce m-a oprit să caut alt limbaj după terminarea facultăţii este faptul că Java este deja un limbaj destinat producţiei (nu doar studiului academic chiar dacă se studiază în universităţi) care la momentul apariţiei pe piaţă a fructificat toată experienţa acumulată în limbaje de programare ale vremii precum Smalltalk, C++, etc. Este o implementare excelentă a paradigmei obiectuale, care pare a fi cea mai productivă paradigmă de dezvoltare pentru aplicaţii nespecifice. De asemenea s-a dovedit a fi un domeniu extrem de vast prin bibliotecile, framework-urile şi tehnologiile aferente, atât de vast datorită numărului mare de minţi implicate în folosirea lui (Oracle estimează în 2010 în jur de 9 milioane de utilizatori). Deci nu poate fi abandonat ci doar completat eventual prin învăţarea unui limbaj de scripting, etc.
Cum crezi că va evolua Java în următorii 2-3 ani? Crezi că se va schimba modul de abordare al acestui limbaj?
După cum se ştie, firma Sun Microsystems care a creat şi susţinea limbajul Java a fost cumparată de Oracle în 2009, deci în acest moment Oracle este firma care dictează într-un fel viitorul limbajului (nu abuziv deoarece limbajul este specificat prin JSR-uri pe www.jcp.org, într-un mod liber şi colaborativ şi are o licenţă foarte deschisă pentru cei care îl utilizează). În acest moment este foarte interesant suportul oferit pentru limbajele de scripting (Scala, Groovy) care pot rula în JVM, suport care se va amplifica şi în următorii ani. De asemenea modularitatea dinamica via OSGi pare a fi un bun înlocuitor pentru vechiul sistem de module din Java. În partea de aplicaţii enterprise, unde Java excelează, noul JEE 6 aduce o serie de elemente noi care se vor consolida de abia în anii următori prin apariţia de implementări efective. Totuşi în partea enterprise consider ca în acest moment a intervenit un fel de stabilitate în bibliotecile enterprise: oarecum persistenţa s-a stabilizat prin JPA, partea de prezentare prin JSF, etc.
Ce sfaturi ai pentru cineva care ştie elementele de baza în programare şi vrea să “se apuce” de java?
Să înceapă să foloseasca limbajul Java în viaţa de zi cu zi în dezvoltarea de aplicaţii efective, începând de la API-ul standard dat de JSE şi continuând cu bibliotecile şi framework-urile enterprise. Să citeasca puţin şi să scrie mai mult cod. O bună idee este să disece o aplicaţie deja făcută în Java chiar dacă este imperfectă şi să înveţe din experienţa altora. Să se implice atât în partea de dezvoltare de aplicaţii pentru desktop cât şi în partea de Web pentru a-şi lărgi domeniul de experienţă. Să se acomodeze cu tool-urile specifice limbajului: IDE-uri, unelte de build, servere de aplicaţii, etc. Să nu se limiteze doar la cunoaşterea teoretică!
Care este, în opinia ta, diferenţa dintre un developer bun şi unul mediocru?
Consider că un adevărat dezvoltator, pe care eu îl numesc “pur sange” este cel care şi-a făcut o profesie (meserie) din programare. În sensul că nu este ataşat doar de un job sau o firma sau un proiect ci de limbaj, tehnologii, şi programare în general, cele din urmă având un scop şi o durată de viaţă mult mai mare decât primele. Desigur, e imposibil să ştii totul. Părerea mea este că ideea de “cache levels” este aplicabilă şi în afara programării. Întotdeauna avem un set de informaţii foarte des folosite pe care le ţinem în memorie la îndemână, dar ne vine uşor să căutăm dupa alte informaţii mai rar folosite pe Web, în cărţi, etc. Dar în general un bun programator are o înţelegere mai profundă a limbajului şi a tehnologiilor venită din pasiunea pentru programare deoarece este afectiv legat de acestea şi drept consecinţă acumulează mai uşor cunoştinţe.
Ce sfaturi ai avea pentru cineva care este începător în “ale programării” indiferent de limbajul folosit? Cum ajungi un developer bun?
Sunt un susţinător al experienţei (şi oarecum împotriva sistemului academic) pe care o consider singura care poate să dea un folos efectiv învăţării. Teoria foarte rar are o aplicabilitate practică imediata mai ales dacă este adusă la un grad înalt de formalizare aşa cum se întâmplă în facultate. Consider ca anii consumaţi în facultate aproape inutil trebuie să fie răscumpăraţi prin ani de munca în producţie folosind efectiv tehnologii, unelte, etc.
Dacă ar fi să recomanzi cuiva o singură carte despre Java, care ar fi aceea (bineînţeles în afară de cărţile tale)? De ce ţi se pare aceasta carte ca fiind “cea mai tare”?
Dacă ar fi să recomand o carte despre Java aceasta ar fi “Effective Java” de Joshua Bloch (există o traducere foarte bună a ei în română la editura Teora). Site-ul cărţii este acesta: http://java.sun.com/docs/books/effective. O consider o carte de bază deoarece trece dincolo de chestiuni de sintaxa ale limbajului spre modul de folosire a limbajului efectiv în practică în viaţa de zi cu zi (autorul a participat activ în implementarea unor librării ale limbajului). Consider ca ar fi prima carte care ar trebui citită după ce ne-am deprins oarecum cu fundamentele limbajului Java.
Alte articole si tutoriale:
| « Funcţii de text in Excel – partea a II-a | Funcţii de text in Excel – partea a III-a » |

In cazul in care vreau sa incep sa invat java credeti ca ar fi bine la inceput sa folosesc un IDE mai simplu gen JCreator sau unul mai complet gen NetBeans sau Eclipse.
Salut Gabi,
Mai cred ca cel mai bine ar fi sa incepi direct cu un IDE mai “destept” pentru ca daca vei lucra pe Java oricum vei ajunge sa folosesti un IDE de productie si nu unul “de scoala”. Recomandarea mea ar fi Eclipse. Singura observatie ar fi ca in cazul in care incepi sa dezvolti aplicatii desktop atunci sa nu folosesti editoare de tip drag&drop, pentru ca mai ales la inceput este foarte important sa intelegi codul (care in mod normal ti-ar fi fost generat de acel editor).
Marea problema in a obtine experienta este ca nimeni nu te angajeaza daca nu ai experienta. In condiile aceastea ce ai putea sa faci ?
E adevarat ce spui. Cu toate ca acum observ ca tinerii au mai multe sanse decat atunci cand am absolvit eu. In sensul ca sunt firme (in general marile companii de IT) care cauta tineri cu potential si isi axeaza viitorul pe o astfel de alegere. Scopul lor este de a plati putin si a profita pe termen lung de cresterea profesionala a respectivilor. E intr-un fel un compromis pe care ambele parti il fac pentru a castiga impreuna.
Intr=un fel e foarte clar ca cineva trebuie sa-ti dea o sansa dar si trebuie sa si cauti aceasta oportunitate, si mai ales nu trebuie sa o irosesti. Nu neaparat o firma mare, poate o mica firma care are un proiect de facut. In general tentatia celor ce au banii si castiga proiecte de a angaja tineri fara experienta este foarte mare pentru faptul ca pretentiile lor financiare sunt foarte mici. Nu am vazut niciodata un proiect in care sa fie alocate persoane care sa fie exact potrivite si la nivelul cerut de post.
Si inca ceva. Cresterea ta in timp poate fi mai mare decat contextul in care te afli. Tu mai ai si timp liber pe care il poti investi in dezvoltarea ta.
Adevărat! E lung drumul ca să devii ninja. Începi de jos şi în timp sigur reuşeşti dacă vrei.
Problema e ca in ziua de azi nici oamenii cu experienta nu prea mai au loc pe piata muncii! Dupa absolvirea facultatii, am reusit dupa ceva timp sa-mi gasesc un loc de munca ca programator. Am lucrat aproape 2 ani la o firma mica in Craiova, in limbajul Java, pe partea de aplicatii desktop (Java Swing) si anul trecut, ca urmare a situatiei economice, probabil, firma s-a restructurat si ca urmare am devenit somer. Ideea e ca e asa o stupizenie in Romania asta, fiindca am cautat, in mod normal, joburi pe Java in special in Bucuresti sau/si alte locatii si majoritatea cereau sa ai experienta in Java EE/Framework-uri. Eu le-am zis ca am experienta in Java dar pe partea de desktop si ca stiu ceva si din tehnologiile Java EE (Servlets, JSP, JAXP, etc.), dar, desigur ca sunt capabil sa invat si alte tehnologii si framework-uri(indeosebi Spring, JBoss Seam/JBPM etc.) si astfel am fost respins pe unde m-am dus. Decat atata au in minte oamenii de la recrutare, doar sa stii tehnologii si framework-uri Web/EE si nu e suficient asta, ci sa ai si experienta cu ele, indeosebi d-soarele de la HR doar asta stiu, au auzit si ele de JSP, Spring, JBoss, etc., dar daca le intrebi cu ce se mananca, habar nu au. Dupa mine asta este o prostie, fiindca in primul rand trebuie sa stii bine POO/Algoritmi, Sabloane de proiectare, Optimizare cod, etc., chestii ce tin strict de activitatea de programare, deoarece tehnologia se invata relativ repede. Si astfel continui sa-mi caut de munca si intre timp m-am apucat sa invat si tehnologiile acestea, dar experienta cu aceste tehnologii unde o fac?