Per quanto ci piaccia pensarci come menti brillanti tese alla formazione continua, quella di leggere libri che in qualche modo confermano quello che sappiamo già, è una pratica assai diffusa tra gli sviluppatori.
Anzi in molti casi, quando per costrizione, caso fortuito o regalo azzeccato, riceviamo un testo che riguarda un argomento che conosciamo a menadito, lo usiamo quasi sempre come scudo contro le critiche che si fanno a questa o quella teoria/pratica.
Ma siamo proprio sicuri che i libri che abbiamo letto quando eravamo dei piccoli programmatori in erba, riportassero proprio quei concetti che adesso formano le nostre rocciose convinzioni, o siamo talmente pieni di bias cognitivi che è per pura fortuna se azzecchiamo una decisione su tre ?
Se una notte d’inverno un programmatore..
E che dire di quei manuali che pensavamo di aver finito e che invece abbiamo lasciato colpevolmente a metà, interrotti da questo o quell’evento come nel celebre romanzo di Calvino.
Certo rispetto alla narrativa tradizionale , il vantaggio dei libri tecnici è che ogni capitolo ha un assassino a parte e che si scopre abbastanza presto.
Non arrivare alla fine è una scelta che si prende abbastanza alla leggera anche se poi, trovandomi molto spesso in contesti aperti e popolosi, cerco sempre di rispondere o citare questo o quel libro facendo un bel pò di check perchè niente mette più in imbarazzo un programmatore che essere smascherato , a parte i programmatori cartesiani, ma per quelli di solito c’è l’esilio.
Non è raro che alla fine di convention e meetup , un gruppo di programmatori vestiti male e pettinati peggio, si trasformi in una moderna scuola di Atene’ e cominci a parlare di questo o quel libro come se fosse la Bibbia, pronti a lapidare chiunque abbia opinioni contrarie.
Io, che mi identifico sempre in Zenone lo stoico perchè continuo a parlare di php, ho sempre molta simpatia per i bastian contrari, se non altro ne apprezzo il coraggio o l’incoscienza.
Ma se dovessi ricominciare oggi, quali sono i 10 libri che vorrei rileggere per poter fare meglio questo mestiere :
I classici sono quei libri di cui si sente dire di solito: «Sto rileggendo…» e mai «Sto leggendo…»
10 libri “oldies but goodies”
Ecco una lista di 10 libri che, mia personalissima opinione, sono dei classici.
Mi hanno aiutato nel prendere decisioni o in qualche modo hanno influenzato il mio modo di pensare. Ma soprattutto sono libri che ritornano spesso nelle suddette discussioni, questo a garantire che, sebbene mi ritenga un programmatore costantemente junior, gente molto più in gamba di me ne parla con toni entusiasti e quindi occhio a parlarne male e poi siamo in “un settore ben circoscritto come quello dei libri, dove può andarti male o andarti bene, ma il rischio della delusione non è grave”
“Clean Code: A Handbook of Agile Software Craftsmanship” di Robert C. Martin
Un libro che gode di un sacco di tentativi di imitazione, al pari di settimanali nostrani che sono altrettanto enigmatici. Alcuni passaggi rimangono fondamentali per tutti quelli che aspirano a diventare dei programmatori migliori, per altri sono solo una serie di pratiche che nel mondo reale non riescono ad essere applicate. Potete capire chi fa parte del secondo gruppo citando i test automatici così di botto, senza senso, vedendoli arrossire di vergogna o di rabbia.
“Introduction to Algorithms” di Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
Il cartaceo originale ha lo stesso valore della bibbia di Gutenberg, fortunatamente il pdf è free e potete trovarlo su molte piattaforme. Più di mille pagine di algoritmi, essenziali per definirsi un programmatore completo, ma letali se si tenta di leggerli tutto di un fiato. Un testo che non sfigurerebbe in molte università, ma, per chi vuole leggerlo per capire cosa c’è dietro molti degli strumenti che usiamo quotidianamente, il consiglio è di approcciarlo un pò alla volta , come un qualsiasi libro di ricette.
“The Pragmatic Programmer: Your Journey To Mastery” di Andrew Hunt e David Thomas
Non so quante volte l’ho letto, ancora oggi, ogni volta che passo davanti alla mia libreria e ne vedo la copertina consunta, lo riapro a caso per cercare di infilarmi in testa uno dei tanti passaggi fondamentali. Uno dei libri che ho preso su kindle e che ho dovuto ricomprare cartaceo perchè sottolineare sul kindle è come scrivere sull’acqua a meno che non usiate una matita vera.
“Code Complete” di Steve McConnell
Rimane una risorsa imprescindibile per i professionisti del software, fornendo strumenti e tecniche essenziali che sono cruciali per lo sviluppo di software di qualità, un must have anche se l’ultima edizione è del 2004
“Accelerate: The Science of Lean Software and DevOps di Nicole Forsgren, Jez Humble, e Gene Kim
Il devops come religione ma supportate da prove inconfutabili e metriche inoppugnabili. A parte i campanelli d’allarme che sento ogni volta che leggo la parola ‘performance’, è sicuramente un libro che mette una pietra tombale sull “abbiamo sempre fatto così” di tutte le aziende condannate a veder passare i treni senza salirci sopra.
“Don’t Make Me Think” di Steve Krug
“Don’t Make Me Think” è riconosciuto per il suo impatto duraturo sul design del web e l’usabilità. Ha influenzato generazioni di designer e sviluppatori web, ed è spesso citato come una delle prime letture raccomandate a chi entra nel campo dell’UX. La capacità di Krug di spiegare concetti complessi in termini semplici e applicabili ha contribuito alla diffusione di pratiche di design migliorate che pongono l’utente al centro dell’esperienza digitale. Consigliato anche a chi pensa di fare solo back end.
Un classico è un libro che non ha mai finito di dire quel che ha da dire
“The Mythical Man-Month” di Frederick P. Brooks Jr.
La legge di Brook recita “Adding manpower to a late software project makes it later” il suo corollario , in una frase non sua (di Theodore von Kármán) è che “Everyone knows it takes a woman nine months to have a baby. But you Americans think if you get nine women pregnant, you can have a baby in a month.”.
Ho riportato le frasi in inglese perchè quando ero ancora molto giovane ho più volte tentato di inciderle sulla fronte di molti PM in stile “Bastardi senza gloria”, in italiano sarebbero state troppo lunghe.
“Refactoring: Improving the Design of Existing Code” di Martin Fowler
“Il tuo codice emana cattivi odori” potrebbe essere l’incipit di ogni bravo consulente chiamato a risolvere problemi su codice legacy. Un vero e proprio manuale con descrizioni delle singole tecniche di refactoring ma anche molte intuizioni che lo rendono ancora un testo attualissimo.
Design Patterns: Elements of Reusable Object-Oriented Software” di Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Si lo so che il singleton ha fatto più danni delle cavallette, che nel frattempo sono usciti tanti altri libri sull’argomento e che leggere esempi in UML porta spesso alla follia, però rimane una lettura consigliatissima anche per capire la storia di certe scelte.
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems by Martin Kleppmann
Lo metto per ultimo perchè è attualmente la mia ossessione: tutto quello che avreste voluto sapere sulla gestione dei dati ma non osavate chiedere. L’ho scoperto l’anno scorso grazie a un post sui social , io che pensavo di essere abbastanza preparato sui database relazionali mi sono dovuto, piacevolmente, ricredere.Ed è solo una parte del libro…
Alla fine 10 libri sono veramente pochi, anche se consideriamo solo quelli agnostici. Un percorso di formazione è unico e irripetibile perché la lettura rimane un viaggio molto soggettivo anche sui manuali. Consideriamo poi che, fortunatamente, i nuovi libri nel nostro settore sono all’ordine del giorno e che quindi, probabilmente, il manuale più importante deve ancora essere pubblicato : per dirla come Calvino, che abbiamo citato a più riprese , “Quale storia laggiù attende la fine? “.