TSM - Recenzia cărții: Thinking in Java de Bruce Eckel

Silviu Dumitrescu - Line manager@Telenav

Această recenzie va fi un pic altfel. Cartea pe care o voi descrie este "un clasic". Pentru ea voi scrie… altfel. Este, dacă-mi permiteţi, prima mea mare dragoste informatică. De când mă ştiu sunt pasionat de informatică. Legăturile mele cu acest domeniu al ştiinţei şi tehnologiei au rădăcini în găsirea algoritmilor de rezolvare a problemelor matematice, dar nu numai. Poate că le-am pus în valoare atunci când am intrat la liceul cu profil informatic, dar atractivitatea a fost, aşa precum am spus, mult mai veche.

În domeniul la dezvoltarii de soft am lucrat în multe limbaje, de la Asiris, Fortran, Cobol pâna la mai modernele Pascal sau C. Fiecare a avut frumuseţe şi utilitate la un anumit moment.

Spre sfârşitul anului 1998 descoperisem plăcerea utilizării Delphi-ului. Cred că începusem să mă modernizez… Numeroasele tool-uri vizuale pe care le oferea, posibilitatea utilizării formularelor de completare a proprietăţilor sau acţiunilor mi se păreau fascinante. M-am mai răzgândit apoi, când mi-am dat seama cât de puţină flexibilitate ofereau aceste tool-uri.

Fiind dornic de a fi în temă cu noutăţile în domeniul informatic am citit un articol despre noul limbaj Java şi de buna impresie pe care o lăsase în lumea dezvoltatorilor de soft. Nu ştiu de ce am încercat să dezvolt prima aplicaţie în Java. Nu îmi recomandase nimeni asta şi nici nu ştiam pe cineva care lucra în Java. Niciodată nu am ştiut să explic de ce am fost atras de anumite lucruri sau persoane, poate este doar rezultatul unui impuls. Editam în Notepad, compilam şi rulam în linia de comandă. Atracţia a fost totală şi de atunci au trecut 14 ani şi atracţia continuă şi se intensifică.

Nu pot spune că nu am mai lucrat şi în alte limbaje de programare: PHP, Symfony, Smarty, JavaScript, Ruby on Rails, C, C++ sau chiar Delphi, poate şi în altele de care nu îmi aduc aminte acum, dar plăcerea a fost unidirecţională: Java.

Şi totuşi, de ce Java? Mulţi dintre noi ştim că Java a adus unele schimbări faţă de limbajele de programare ale vremurilor respective. Spre exemplu, Java permitea doar moştenirea simplă, Java elimina pointerii, şamd. Dar, întreaga construcţie a limbajului Java a fost orientată spre programator. Java permite implementări de aplicaţii complexe, cu flexibilitate sporită, implementări ale punctelor de extensie, scalabilitate şi multe altele. Există studii prin care s-a dovedit că timpul de dezvoltare al unei aplicaţii în Java este de două ori mai mic decât în cazul folosirii limbajului C++. Mulţi însă, pot aduce ca minus al limbajului Java timpul de rulare al aplicaţiilor. Este adevărat, interpretorul Java face multe operaţii până când codul compilat este executat. Acestea ţin printre altele de portabilitatea limbajului. Deşi s-au făcut progrese importante în acest sens, pentru aplicaţiile stand alone timpul de execuţie este uşor mărit faţă de al aplicaţiilor C++. Pentru aplicaţii enterprise însă, acest timp este comparabil acelaşi cu al altor limbaje ce permit dezvoltarea de aplicaţii enterprise.

Thinking în Java de Bruce Eckel, a fost prima carte cu adevărat completă pe care am citit-o despre Java. De prima ediţie am făcut rost, după multe căutări, de la un prieten din Germania în format… pe hartie de copiator şi expediată printr-o cunoştintă. Cred că versiunea de Java de atunci era 1.2, maxim 1.3. Platforma enterprise nu apăruse încă, dar se putea programa în reţea.

Citind-o mi-am dat seama că nu ştiam nimic despre Java. Au fost frustrări maxime, dar am parcurs-o toată şi multe dintre conceptele prezentate le-am şi înţeles. Ca urmare am şi scris o carte despre Java, cu un prieten, în martie 2002. Voiam să transmitem şi altora ce am înţeles noi.

Uitându-mă în spate, cartea scrisă atunci are o abordare simplistă, dar eu sunt mândru că este, probabil, printre primele din România pe această tehnologie.

Thinking în Java a fost întotdeauna categorisită ca o carte entry, maxim middle level. Eu însă, nu am putut vreodată să o recomand cuiva care nu ştie nimic despre Java. Îl dezarma!

Cartea este foarte completă pe aproape toate topic-urile platformei standard. Din core-ul Java cred că lipsesc doar JDBC, parsarea XML-urilor şi programarea în reţea.

Din păcate versiunile pentru platforma standard ale cărţii nu au fost urmate şi de unele, la fel de reprezentative, pentru platforma enterprise.

De-a lungul timpului am citit toate ediţiile acestei cărţi, iar în ultimii ani mi-am petrecut mult timp actualizând exemplele acestora la versiunea Java Standard 7.

Cel mai important sfat pe care pot să îl dau persoanei care citeşte această carte este: dacă topicul care vă interesează, şi de care nu ştiţi mai nimic, se află la pagina 410, spre exemplu, nu vă duceţi acolo, nici măcar la începutul capitolului, ci la pagina 23, prima a acestui material. Nu săriţi paginile, implementaţi toate aplicaţiile sugerate şi răspundeţi multelor întrebări ataşate, până la pagina cerută. Dacă vi se pare mult căutaţi altă sursă bibliografică. Totuşi, ajunşi la pagina 410 veţi avea un bagaj de cunoştinţe însemnat, pe care veţi clădi cu siguranţă topicul dorit.

Rămân la părerea că, dacă aţi parcurs întregul material al acestei cărti, poate mai puţin partea de interfaţă utilizator, care poate fi în cazul unui dezvoltator enterprise mai puţin interesantă, aţi dobândit cu adevărat un nivel ridicat de cunoştinţe pentru dezvoltarea de aplicaţii utilizând platforma Java Standard 6.

Nu toate lucrurile sunt roz. Bruce Eckel îşi creează o grămadă de pachete, pline de instrumente pe care le foloseşte în exemplele cărţii. Rolul lor este important în ingineria softului, dar pentru cineva care se grăbeşte să găsească informaţia cerută este destul de enervant. Repet, dacă aveţi timpul necesar şi vă recomand să-l găsiţi, citiţi şi înţelegeţi instrumentele folosite de autor.

Cartea abundă, de asemenea, în pattern-uri. Acesta nu este un lucru rău. Folosirea pattern-urilor este următorul pas important pentru un dezvoltator soft, după acela al implementării unei aplicaţii sub ideea "să iasă". Este recomandat să înţelegeţi aceste pattern-uri, să vedeţi utilitatea lor şi să le adaptaţi aplicaţiilor voastre.

Multe dintre pattern-urile prezentate sunt deja implementate în platforma enterprise. Container-ul se bazează pe aceste implementări. Veţi înţelege ceea ce a implementat container-ul şi veţi fi în stare să creaţi o aplicaţie cu o calitate internă a softului ridicată.

Sunt multe lucruri de spus despre această carte din punct de vedere tehnic. Organizată în 22 de capitole, acestea se întrepătrund ca topic-uri, completându-se. Primele sunt relativ de bază şi probabil simple (generalitati OOP, sintaxa limbajului, fluxuri de control), dar ştiţi oare să răspundeţi la întrebarea: Care este ordinea în care se face iniţializarea atributelor unei clase în momentul instanţierii, dacă avem constructor, iniţializare la declarare şi context de iniţializare? Sunt foarte multe astfel de provocări. Dincolo de aceste "basics" se discută amănunţit probleme precum: reflecţia, colecţiile, firele de execuţie, inner şi nested classes, manipularea erorilor, io şi nio, genericele, anotaţiile, garbage collector.

Revin cu sfatul: faceţi rost de timp pentru a citi întregul material! Chiar dacă aveţi impresia că ceea ce aveţi nevoie a fost spus într-un anumit loc, în cele mai multe cazuri există dezvoltări, optimizări şi discuţii pe soluţiile anterioare.

Îmi doresc ca fiecare dintre cei care citesc această carte să găsească ca şi mine plăcerea lucrului în Java. Este dificil şi anevoios, dar reuşita este cu adevărat plină de satistacţii.

Sunt multe altele de adăugat şi de aceea aştept cu mare plăcere comentariile şi discuţiile pe această carte.

Lectură placută!