Joshua Bloch: La coscienza della piattaforma Java
"Il linguaggio di programmazione Java ha esaurito il suo budget di complessità con le modifiche introdotte nella versione 5.0". È una frase sorprendente, soprattutto per chi l'ha detta. Joshua Bloch ha trascorso anni presso Sun Microsystems a progettare le aggiunte in questione, e la versione JDK 5.0 che ha contribuito a plasmare è stata l'espansione più ambiziosa che il linguaggio abbia mai avuto. Poi ha detto al mondo che era abbastanza. Quell'istinto — di sorvegliare un sistema che aveva personalmente ampliato, e di pensare in termini di budget piuttosto che di funzionalità — è tutto lui in una sola riga.
Southampton, Columbia, Pittsburgh
Bloch è nato il 28 agosto 1961 a Southampton, New York. Ha conseguito una laurea in informatica presso la School of Engineering and Applied Science della Columbia University, poi è andato alla Carnegie Mellon per un dottorato, completato nel 1990. La sua tesi, "Un approccio pratico alla replica di oggetti di dati astratti", è stata nominata per l'ACM Distinguished Doctoral Dissertation Award.
Il titolo merita di essere letto due volte. Anche come studente laureato, la parola operativa nel lavoro di Bloch era pratico. Non stava attaccando la replica come un problema teorico nei sistemi distribuiti; cercava una versione che gli ingegneri potessero effettivamente distribuire contro oggetti di dati astratti. Ha trascorso il resto della sua carriera in quella stessa stretta e fuori moda lacuna tra ciò che è dimostrabilmente corretto e ciò che un programmatore al lavoro può usare con fiducia.
Sun e il Collections Framework
Dopo un periodo alla Transarc come senior systems designer, Bloch è entrato in Sun Microsystems, dove è diventato Distinguished Engineer e ha guidato la progettazione e l'implementazione di diversi pezzi che rendono Java riconoscibilmente Java. Il Java Collections Framework è il più grande di essi: l'insieme di interfacce e implementazioni — liste, set, mappe e gli algoritmi che operano su di essi — su cui ogni programma Java è stato costruito da allora. Ha anche guidato il pacchetto java.math e il meccanismo di asserzione del linguaggio, e ha guidato importanti miglioramenti nel JDK 5.0.
Questo è un tipo peculiare di paternità. Una libreria di collezioni non è un'applicazione; è un vocabolario. Milioni di programmatori che non hanno mai sentito il nome di Bloch trascorrono la loro vita lavorativa all'interno dei sostantivi e dei verbi che ha scelto, e la forma del loro pensiero è limitata dalla forma delle sue interfacce. Sbagliare non avrebbe prodotto un cattivo programma; avrebbe prodotto un cattivo linguaggio per scrivere programmi, permanentemente.
Venti domande, otto minuti di orologio e un percentile misurato su tutti quelli che l’hanno fatto. Senza registrazione.
Fai il test del QI →Effective Java
Nel 2001 ha pubblicato Effective Java, e ha fatto qualcosa che i libri sui linguaggi di programmazione raramente fanno: è diventato l'autorità morale di una comunità. Strutturato come una serie numerata di elementi indipendenti, ognuno dei quali stabilisce una regola e poi argomenta a partire da reali modalità di errore, ha vinto il Jolt Award nel 2001. La seconda edizione, nel 2008, è cresciuta da cinquantasette a settantotto elementi senza diventare più difficile da leggere; una terza è arrivata nel 2017.
Ha scritto altri due libri con collaboratori. Java Puzzlers, con Neal Gafter nel 2005, è un'antologia delle trappole del linguaggio — codice che si comporta correttamente secondo le specifiche e follemente secondo l'intuizione — presentato come esercizio diagnostico. Java Concurrency in Practice, nel 2006, è stato scritto con cinque collaboratori, tra cui Doug Lea, ed è diventato il riferimento standard sulla cosa più difficile che la piattaforma chiede ai suoi utenti.
Google e la progettazione di API
Bloch è stato l'architetto Java capo di Google da giugno 2004 ad agosto 2012. È stato lì che la sua preoccupazione centrale si è cristallizzata in un argomento pubblico. Il suo documento di conferenza del 2006, "Come progettare una buona API e perché è importante", tratta la progettazione di interfacce come una disciplina con una posta in gioco piuttosto che una questione di gusto, sulla base del fatto che un'API è un contratto che non si può rinegoziare. Ha descritto la frustrazione concretamente: in Google non poteva fornire implementazioni alternative per alcune classi perché erano state dichiarate come tipi concreti piuttosto che come interfacce — una decisione presa anni prima da qualcun altro, che, come ha detto, è il tipo di limitazione che "gli sviluppatori comuni sentono ogni giorno".
Il suo consiglio ha un sapore costante: umiltà riguardo al proprio giudizio. Non ripetersi; cercare una libreria consolidata, in particolare per la concorrenza, piuttosto che scriverne una propria. Diffidare della sensazione che gli avvertimenti generali sull'ottimizzazione prematura non si applichino ad altre persone — "è facile pensare che gli avvertimenti generali sull'ottimizzazione prematura non si applichino a te, perché sai semplicemente quale codice è critico per il tempo". E leggere The Elements of Style, perché "la buona programmazione e la buona scrittura riguardano entrambe la chiarezza e l'economia di espressione".
Perché Joshua è chiamato un genio
La facoltà in questione non è l'invenzione pura ma una cosa più rara: la capacità di vedere un software dalla posizione dell'estraneo che dovrà usarlo, e di progettare per gli errori probabili di quell'estraneo piuttosto che per la propria competenza. Un'API, nell'inquadratura di Bloch, è un linguaggio imposto a persone che non hanno mai acconsentito e non possono modificarlo, il che rende la progettazione un esercizio di anticipazione dell'abuso su larga scala, decenni prima. Il Collections Framework è la prova: un vocabolario usato da un'enorme frazione di tutti i programmatori al lavoro, abbastanza corretto da essere sopravvissuto in gran parte invariato. Il secondo pezzo è la codificazione: Effective Java ha preso l'esperienza tacita che prima viveva solo nelle teste di pochi ingegneri di piattaforma e l'ha trasformata in regole trasferibili e discutibili.
Il contro-argomento merita di essere esposto. Bloch non ha prodotto nuova scienza informatica. La sua tesi è stata nominata per un premio di dissertazione distinta, non ne ha ricevuto uno; il suo lavoro più noto è un libro di migliori pratiche, che è cura e giudizio piuttosto che scoperta. Gli onori registrati sono un premio di pubblicazione commerciale e una lista di riviste, non i principali premi di ricerca del settore, e nessuna fonte consultata qui registra qualcuno che lo chiami genio. Il Collections Framework è stato un grande sforzo di squadra che ha guidato, non una composizione solista. Il verdetto giusto è che Bloch è un praticante e insegnante supremo del giudizio ingegneristico — una disciplina che conta più della novità nel software e riceve molto meno credito.
Eredità
Ha continuato a plasmare il linguaggio dopo aver lasciato Sun, co-proponendo blocchi di Gestione Automatica delle Risorse ed Espressioni di Creazione di Istanze Concise come approcci alle chiusure; i blocchi ARM sono arrivati nel JDK 7. Nel dicembre 2004 il Java Developer's Journal lo ha nominato tra le quaranta persone più importanti al mondo nel settore del software. Da allora è tornato alla Carnegie Mellon, dove è professore di pratica nel Dipartimento di Sistemi Software e Societali — un titolo che si legge come un riassunto della sua carriera, dato che la pratica è sempre stata il punto.
La misura del lavoro è che la sua influenza non è attribuita. Da qualche parte oggi, un programmatore che non ha mai letto una riga della prosa di Bloch cercherà un'interfaccia invece di una classe concreta, o si rifiuterà di creare manualmente una primitiva di concorrenza, perché un collega gli ha detto una volta di non farlo, avendolo letto in un elemento numerato in un libro.
