Un prieten mi-a cerut recent cateva recomandari de carti de programare. Cresti cel mai rapid atunci cand codezi mult, duci un proiect de la inceput la sfarsit, lucrezi la proiecte variate, inveti de la colegi. Rar ai timp sau chef sa citesti o carte tehnica de la un capat la altul. Dar cum tot am fost intrebat va dau lista mea de recomandari:
| !{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?cc.gif 40%! | '*Code complete*':http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ contine multe subiecte care nu sunt abordate prea mult in facultate dar sunt folosite de programatori frecvent cum ar fi unit testing, coding style, software design, debugging etc.. Cartea contine multe reguli de bun simt, dar e bine ca sunt organizate si puse impreuna.E buna pentru un student care a lucrat doar laboratoare sau proiecte mici la scoala si vrea sa se maturizeze putin in plan profesional. |
*Code complete*
!{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?cc.gif 50%!
Cartea contine multe subiecte care nu sunt abordate prea mult la scoala dar sunt folosite de programatori frecvent cum ar fi unit testing, coding style, desing approach debugging. In general cartea contine reguli de bun simt dar e bine ca sunt multe impreuna. I se potriveste unui student care vrea sa inteleaga mai bine cum e viata de programator, dar daca ai facut ceva internshipuri, ai lucrat in industrie sau ai citit multe bloguri pe tema ...
*Effective Java*
!{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?ej.jpg 60%!
O carte cu multe subiecte ceva mai adanci in Java. E foarte buna pentru cineva care poate folosi limbajul la un nivel de baza dar vrea sa il inteleaga in profunzime.
| !{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?ec.jpg ! | '*Effective C++*':http://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876 e o carte importanta daca lucrezi in C++ in industrie. Contine o gramada de sfaturi utile si e mult mai scurta decat alte carti care incearca sa faca acelasi lucru cum ar fi Thinking in C++ sau The C++ Programming Language. |
*Effective C++*
!{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?ec.jpg!
La fel ca effective Java.
*Mythical man month*
!{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?mmm.jpg 50%!
| !{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?ej.jpg 55%! | '*Effective Java*':http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683 are multe subiecte din Java detaliate. E scrisa de Joshua Bloch care a facut pachetul de colectii in Java iar acum lucreaza la Google ca Chief Java Architect. Ea aduce cititorul de la incepator competent in Java la un programator avansat. Mi se pare mai la obiect decat Thinking in Java care foloseste destul de mult text ca sa explice o idee. |
O carte cu o gramada de povesti vanatoresti din software care ilustreaza princpii ... Unul interesant ar fi ca cu 9 femei nu poti face un copil in o luna. Ideea e ca in proiecte software nu poti atinge un deadline daca adaugi mai multi ingineri pe proiect.
| !{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?dp.jpg! | '*Design Patterns*':http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612 e o carte importanta pe care multi programatori o au pe raft, dar putini reusesc sa o citeasca. E greoaie, dar are concepte interesante. Eu am reusit sa parcurg mare parte din ea facand un curs de Desing Patterns la servici, unde impreuna cu alti colegi trebuia sa citim cate un capitol si sa il discutam. Astfel recomand sa incercati sa o parcurgeti in grup. Pe langa ideile din carte, dintre care unele nu sunt foarte complicate, ea ofera programatorilor un limbaj comun. |
*Design Patterns*
!{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?dp.jpg!
O carte importanta pe care multi programatori o au pe raft, dar putini reusesc sa o citeasca. E greoaie dar are concepte interesante. Eu am reusit sa parcurg mare parte din ea facand un curs de Desing Patterns la Google unde impreuna cu alti colegi trebuia sa citim cate un capitol si sa il discutam. Astfel recomand sa incercati sa o parcurgeti in grup.
*Refactoring*
!{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?rf.jpg!
Cand lucrezi cu un codebase mare ajungi sa ai de a face cu cod mai vechi pe care il schimbi sa fie compatibil cu cerinte noi. Astfel trebuie sa refactorizezi de multe ori si sa faci curat. Cartea ... e una fundamentala in domeniu si iti explica o gramada de "code smells" si metode de abordare si curatare a codului.
| !{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?rf.jpg 80%! | Cerintele unui proiect de cateva luni se schimba in mod continuu. Astfel o mare parte a muncii unui programator e sa refactorizeze codul. '*Refactoring: Improving the Design of Existing Code*':http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672 contine multe sabloane care fac partea de modificare si rescriere usoara. Pe langa asta contine o lista de asa numite "code smells", niste sabloane care iti spun ca ai putea imbunatati calitatea codului pe unele locuri. Multe din acestea sunt evidente, dar din nou, cartea ofera un limbaj comun pentru programatori. |
*Programming pearls*
!{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?pp.jpg!
Carte foarte misto pentru cei ce au foarte putina pregatire pe algoritmica. .... are un stil de a explica foarte bun si discuta probleme frumoase si curate. Este destul de abordabila pentru incepatori si mai are unele trucuri misto care sunt interesante si pentru avansati.
| !{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?pp.jpg 112%! | '*Programming pearls*':http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880 e o carte foarte buna pe subiectul algoritmica in industrie. Stilul explicatiilor este foarte clar si curat.Se discuta probleme frumoase si nu exagerat de dificile. Are cateva capitole alocate structurilor de date si compelxitatii algoritmilor precum si unul despre "back of the envelope computations". Este foarte abordabila de incepatori si are destule trucuri si pentru avansati. |
*Introduction to algorithms*
!{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?ia.jpg!
Cartea de baza in algoritmica. Unele demonstratii sunt ceva mai lungi decat ar trebui, accentul pare pus mai mult pe rigoarea matematica decat pe intuitia din spatele demonstratiilor. As recomanda oricui parcurgerea problemelor.
| !{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?ia.jpg 89%! | '*Introduction to algorithms*':http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844 sau Cormen cum ii zic romanii, e biblia algoritmilor. Contine material mult, tratat bine. Astfel parcurgerea ei poate dura multa vreme. Unele demonstratii sunt ceva mai lungi decat ar trebui, iar accentul e pus mai mult pe rigoarea matematica decat pe intuitia din spatele demonstratiilor. As recomanda oricui parcurgerea problemelor, si este cartea de baza pentru pregatirea la olimpiade. |
| !{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?taocp.jpg 37%! | '*The art of computer programming*':http://www.amazon.com/Art-Computer-Programming-Volumes-Boxed/dp/0201485419 e probabil cea mai cunoscuta carte de informatica. Are un continut foarte misto, dar poate prea orientat matematic. Ea din nou e o carte pe care multi programatori o au pe raft dar nu o citesc. Eu mi-am petrecut bucata buna din timpul liber in liceu uitandu-ma peste probleme, dar acum nu cred ca as mai avea timpul liber si setea de cunoastere sa o parcurg. |
| !{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?db.jpg 110%! | '*The non-designer`s design book*':http://www.amazon.com/Non-Designers-Design-Book-Robin-Williams/dp/0321534042 e carte scurta si la subiect pe tema designului. E plina principii de design fundamentale. Expuse frumos si cu exemple. Cunostintele de design sunt foarte utile pentru programatori pentru ca ai frecvent nevoie de interfetele web sau desktop adresate utilizatorilor. |
*Cracking the code interview*
!{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?cci.jpg!
| !{margin: 1px; margin-right: 10px; margin-up: 3px; border: 1px solid gray;}<blog/carti?mmm.jpg 40%! | '*The mythical man-month*':http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959 e o carte clasica despre managementului proiectelor software. Contine mai multe principii si discutii in jurul acestui domeniu. Un principiu interesant porneste de la ideea ca, cu 9 femei nu poti face un copil in o luna. Aplicat la proiecte software, ideea evidenteaza ca adaugarea de ingineri la un proiect care e pe cale sa nu isi atinga termenul limita nu ajuta proiectul. |
Daca sunteti interesati doar de o recapitulare pentru interviuri, asa cum am zis in postul .... recomand Cracking the code interview. Alte carti au probleme ceva mai banale, dar asta contine probleme la un nivel bun si are si rezolvari.
| !{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?cci.jpg 88%! | '*Cracking the code interview*':http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X e cea mai buna carte de pregatire pentru interviuri. V-am mai recomandat-o si in 'Sfaturi pentru interviuri de programare':blog/sfaturi-pentru-interviuri Descrie procesul interviurilor si are o gramada de probleme cu solutii. Ele sunt la nivelul de dificultate al interviurilor din Bay Area. Alte carti ca Programming Interviews Exposed au probleme ceva mai banale. |
*The art of computer programming*
!{margin: 1px; margin-right: 10px; border: 1px solid gray;}<blog/carti?taocp.jpg 50%!
Voi ce parere aveti despre cartile de mai sus si ce alte carti ati recomanda unui student la info ce e la inceput de drum?
Probabil cea mai cunoscuta carte de informatica are un continut foarte misto, dar poate prea orientat matematic si de cand autorul lucreaza la ea i-au luat-o alte carti de algoritmica inainte.