Titolo originale:Teach Yourself Programming in Ten Years
Autore:Peter Norvig
Versione originale:http://norvig.com/21-days.html
Traduzione a cura di:Fabio Z Tessitore

Impara a Programmare in Dieci Anni

Peter Norvig

Perché vanno tutti di fretta?

Passeggia in qualsiasi libreria e vedrai come accanto a Impara Java in 7 Giorni sono presenti infinite variazioni sul tema che pretendono di insegnare Visual Basic, Windows, Internet e altro in pochi giorni o addirittura ore. Ho fatto la seguente ricerca power search su Amazon.com:

pubdate: after 1992 e title: days e
(title: learn o title: teach yourself)

e ho ottenuto 248 risultati. I primi 78 erano libri di informatica (il 79-esimo era Impara il Bengalese in 30 giorni). Ho allora sostituito days con hours ed ho ottenuto un risultato simile: 253 libri, di cui 77 di informatica seguiti da Impara la Grammatica e lo Stile in 24 ore alla 78-esima posizione. Dei primi 200, il 96% erano libri di informatica.

La conclusione è che le persone vanno molto di fretta quando devono imparare qualcosa sui computer, oppure che i computer sono qualcosa di favolosamente facile da imparare rispetto a qualsiasi altra cosa. Non ci sono libri su come studiare Beethoven, la Fisica dei Quanti o perfino l'Addestramento dei Cani in pochi giorni. Felleisen et al. accennano a questa tendenza nel loro libro How to Design Programs, quando dicono Programmare male è facile. Gli idioti possono impararlo in 21 giorni, anche se sono stupidi.

Proviamo ad analizzare cosa un titolo del tipo Impara il C++ in Tre Giorni potrebbe significare:

Impara a Programmare in Dieci Anni

Alcuni ricercatori (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) hanno dimostrato che sono necessari circa dieci anni per sviluppare esperienza in una gran varietà di campi, inclusi il gioco degli scacchi, la composizione musicale, la telegrafia, la pittura, il suonare il pianoforte, il nuoto, il tennis, le ricerche in neuropsicologia e in topologia. La chiave è la pratica intenzionale: non semplicemente farlo ancora e ancora, ma impegnarsi in un compito appena oltre le proprie abilità, provare, analizzare il proprio rendimento mentre e dopo l'esecuzione e correggere gli errori. Quindi ripetere. E ripetere ancora. Non sembrano esserci scorciatoie: anche per Mozart, che era un prodigio musicale a 4 anni, ci vollero altri 13 anni prima di iniziare a produrre musica di levello mondiale. In un altro genere, i Beatles sembrano comparire sulle scene con una hit e un'apparizione nello show di Ed Sullivan nel 1964. Ma hanno suonato in piccoli club a Liverpool e Amburgo fin dal 1957, e nonostante siano piaciuti immediatamente, il loro primo grande successo, Sgt. Peppers, fu inciso nel 1967. Malcolm Gladwell riporta una ricerca su studenti dell'Accademia della Musica di Berlino in cui veniva comparato il migliore, il medio e l'ultimo terzo della classe e veniva chiesto loro quante ore avevano fatto pratica.

Tutti, di tutti i gruppi, avevano iniziato a suonare pressappoco alla stessa età - attorno ai cinque anni. Nei primi anni tutti hanno fatto pratica per lo stesso tempo - circa due o tre ore alla settimana. Ma verso gli otto anni iniziavano ad emergere le vere differenze. Gli studenti che risultavano essere i migliori del loro corso iniziarono a far pratica più degli altri: sei ore a settimana a nove anni, otto a dodici anni, sedici a settimana a quattordici anni, e sempre a salire, fino all'età di venti anni alla quale praticavano ben oltre le trenta ore settimanali. Dall'età di venti anni, l'elite aveva totalizzato 10.000 ore di pratica lungo il corso della vita. Gli studenti bravi avevano totalizzato, a confronto, 8.000 ore, e i futuri insegnanti di musica appena sopra le 4.000 ore.

Quindi potrebbe essere 10.000 ore, non 10 anni, il numero magico. (Henri Cartier-Bresson (1908-2004) disse Le tue prime 10.000 fotografie saranno le peggiori, ma lui ne scattava più di una all'ora). Samuel Johnson (1709-1784) pensava ci volesse anche di più: L'eccellenza in un campo qualsiasi può essere raggiunta solo attraverso il lavoro di una vita; non si può acquistare ad un prezzo inferiore. E Chaucer (1340-1400) aggiunse La vita è così breve, l'arte così lunga da imparare. Ippocrate (c. 400 AC) è noto per la massima ars longa, vita brevis, che è parte della citazione più lunga Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile, che in Italiano suona come La vita è breve, l'arte è lunga, l'occasione è fugace, l'esperienza ingannevole, il giudizio difficile. Sebbene in Latino, ars può significare sia arte che mestiere, nell'originale Greco la parola techne significa solo abilità, non arte.

Vuoi essere un programmatore

Questa è la mia ricetta per avere successo nella programmazione:

Tenendo a mente tutto ciò, è opinabile quanto lontano puoi arrivare imparando solo dai libri. Prima che il mio primo figlio nascesse, lessi tutti i libri della serie Come Fare, e ancora mi sentivo come un novizio senza speranza. 30 mesi dopo, quando nacque il mio secondo figlio, tornai indietro ai libri per una rinfrescata? No. Invece mi rifeci all'esperienza personale che risultò essere molto più utile e rassicurante per me rispetto alle migliaia di pagine scritte da esperti.

Fred Brooks, nel suo saggio No Silver Bullets ha identificato un piano in tre parti per trovare grandi progettisti di software:

  1. Identificare sistematicamente i migliori progettisti il prima possibile.

  2. Assegnare un mentore responsabile per lo sviluppo del prospetto e tenere con cura un archivio della carriera.

  3. Provvedere opportunità per progettisti in crescita di interagire e stimolarsi gli uni con gli altri.

Tutto ciò assumendo che qualcuno ha già le qualità necessarie per diventare un grande progettista; il lavoro consiste nel motivarlo correttamente. Alan Perlis più succintamente: A chiunque può essere insegnato a scolpire: a Michelangelo si poteva insegnare come non farlo. Così è per i grandi programmatori. Perlis dice che i migliori hanno un talento che prescinde dall'allenamento. Ma da dove viene questo talento? È innato? O viene sviluppato con la diligenza? Auguste Gusteau (lo chef di Ratatouille) dice: tutti possono cucinare, ma solo gli impavidi possono essere grandi. Penso sia volontà di dedicare una larga parte della propria vita alla pratica. Ma forse impavidi è un termine per sintetizzare questo concetto. Oppure, come dice Anton Ego, il critico di Gusteau: Non tutti possono diventare grandi artisti, ma un grande artista può venir fuori da ovunque.

Quindi vai avanti e compra quel libro su Java/Ruby/Javascript/PHP; probabilmente ne farai un qualche uso. Ma non cambierai la tua vita, o la tua reale esperienza come programmatore in 24 ore, giorni, o anche settimane. Che succede lavorando sodo per 24 mesi? Bene, adesso sei partito ...


Riferimenti

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Bryan, W.L. & Harter, N. "Studies on the telegraphic language: The acquisition of a hierarchy of habits. Psychology Review, 1899, 8, 345-375

Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.

Chase, William G. & Simon, Herbert A. Perception in Chess Cognitive Psychology, 1973, 4, 55-81.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.


Risposte

Tempi approssimativi per varie operazioni su un tipico PC:

esecuzione di una tipica istruzione 1/1.000.000.000 sec = 1 nanosec
leggere dalla cache L1 0.5 nanosec
predizione di flusso errata 5 nanosec
leggere dalla cache L2 7 nanosec
Mutex lock/unlock 25 nanosec
leggere dalla memoria principale 100 nanosec
inviare 2KB su una rete 1Gbps 20.000 nanosec
leggere 1MB sequenzialmente dalla memoria 250.000 nanosec
leggere da una nuova posizione sul disco (seek) 8.000.000 nanosec
leggere 1MB sequenzialmente dal disco 20.000.000 nanosec
inviare pacchetti dagli USA all'Europa e viceversa 150 millisec = 150.000.000 nanosec

Appendice: Scelta del Linguaggio

Svariate persone hanno chiesto quale linguaggio di programmazione dovrebbero imparare per primo. Non c'è un'unica risposta, ma considera questi punti:

Dati questi criteri, la mia raccomandazione per un primo linguaggio di programmazione è Python o Scheme. Ma le circostanze possono cambiare e ci sono altre buone scelte. Se la tua età è a singola cifra probabilmente preferirai Alice o Squeak (anche i più anziani potrebbero preferirli). La cosa importante è scegliere e partire.


Appendice: Libri e Altre Risorse

Svariate persone hanno chiesto da quali libri e pagine web dovrebbero studiare. Ripeto che imparare solo dai libri non basta ma posso consigliare i seguenti:


Note

T. Capey ha fatto notare che la pagina Complete Problem Solver su Amazon ora ha i libri Impara il Bengalese in 21 giorni e Impara la Grammatica e lo Stile nella sezione Utenti che hanno acquistato questo libro hanno anche acquistato questi oggetti. Immagino che la maggior parte delle persone che guardano il libro provengano da questa pagina. Grazie a Ross Cohen per il suo aiuto con Ippocrate.


Peter Norvig (Copyright 2001)