Titolo originale: Teach Yourself Programming in Ten Years
Autore:Peter Norvig
Versione originale:http://norvig.com/21-days.html
Traduzione aggiornata al:12 Luglio, 2009
A cura di:Fabio Z Tessitore
Licenza:Questo documento è pubblicato con il consenso dall'autore.

Impara a Programmare in Dieci Anni

Peter Norvig

Perché tutti vanno di fretta?

Passeggiate in qualsiasi libreria, e vedrete 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 ore. Ho fatto la seguente ricerca di tipo 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 imparare Beethoven, o 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 Pascal in Tre Giorni potrebbe significare:

Impara a Programmare in Dieci Anni

Alcuni ricercatori (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simon & 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 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 con un compito appena oltre le proprie abilità attuali, 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 #1 hits 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 delle loro vite. Gli studenti bravi avevano totalizzato, a confronto, 8.000 ore, e i futuri insegnanti di musica appena sopra le 4.000 ore.

Quindi è 10.000 ore, non 10 anni, il numero magico. Samuel Johnson pensava ci volessero più di dieci anni: 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 aggiunse La vita è così breve, l'arte così lunga da imparare. Ippocrate (c. 400 A.C.) è 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.

Questa è la mia ricetta per avere successo nella programmazione:

Tenendo a mente tutto ciò, è opinabile quanto lontano potrete arrivare imparando 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 (Niente Pallottole d'Argento) 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.

Ciò assumendo che qualcuno già abbia le qualità necessarie per diventare un grande progettista; il lavoro consiste nel motivarli 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.

Quindi andate avanti e comprate quel libro su Java; probabilmente ne farete un qualche uso. Ma non cambierete la vostra vita, o la vostra reale esperienza come programmatori in 24 ore, giorni, o anche mesi.


Riferimenti

Bloom, Benjamin (ed.) Sviluppare il Talento nei Giovani, 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 da 1GHz nell'estate 2001:

esecuzione di una singola istruzione 1 nsec = (1/1.000.000.000) sec
leggere una parola dalla cache L1 2 nsec
leggere una parola dalla memoria principale 10 nsec
leggere parole da posizioni sul disco consecutive 200 nsec
leggere una parola da una nuova posizione sul disco (seek) 8,000,000 nsec = 8 msec

Appendice: Scelta del Linguaggio

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

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


Appendice: Libri e Altre Risorse

Molte persone hanno chiesto da quali libri e pagine web dovrebbero studiare. Ripeto che imparare solo dai libri non è abbastanza 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)