SundaySW > Texts > Peter Norvig: Imparate a programmare in dieci anni

Imparate a programmare in dieci anni

Peter Norvig: Teach Yourself Programming in Ten Years

Perché hanno tutti tanta fretta?

Entrate in qualunque libreria, e vedrete come Imparare da soli Java in 7 giorni, insieme a innumerevoli variazioni che offrono di insegnare Visual Basic, Windows, Internet eccetera in pochi giorni o poche ore. Ho fatto la seguente ricerca avanzata su Amazon.com:

pubdate: after 1992 and title: days and
(title: learn or title: teach yourself)

ottenendo 248 risultati. I primi 78 erano libri di informatica (il settantanovesimo era Imparate il Bengali in 30 giorni). Ho sostituito "giorni" con "ore" ottenendo risultati sorprendentemente simili: altri 253 libri, con 77 libri d'informatica seguiti da Imparate da soli grammatica e stile in 24 ore in settantottesima posizione. Dei primi 200, il 96% erano libri d'informatica.

La conclusione è che le persone hanno una gran fretta di imparare i computer, oppure che i computer sono in qualche modo incredibilmente più semplici da imparare di qualunque altra cosa. Non ci sono libri per imparare in pochi giorni Beethoven, o la fisica quantistica, e nemmeno la toelettatura di un cane.

Proviamo ad analizzare cosa potrebbe significare un titolo come Imparate il Pascal in tre giorni:

Imparate a programmare in dieci anni

Alcuni ricercatori (Hayes, Bloom) hanno mostrato come siano necessari circa dieci anni per padroneggiare un vasto numero di attività, fra cui gli scacchi, la composizione musicale, la pittura, il pianoforte, il nuoto, il tennis, la ricerca in neuropsicologia e in antropologia. Sembra proprio che non esistano scorciatoie: perfino Mozart, che era un fenomeno musicale a 4 anni, ebbe bisogno di altri 13 anni prima di produrre musica di livello mondiale. In un genere differente, i Beatles sembrarono esplodere sulla scena con una serie di numeri uno in classifica e un'apparizione alla trasmissione di Ed Sullivan nel 1964, ma suonavano in piccoli club di Liverpool e Amburgo dal 1957, e da quando iniziarono ad avere successo di massa in poi, il loro primo successo decisivo Sgt. Peppers, apparve nel 1967. Samuel Johnson riteneva ci volessero più di dieci anni: "L'eccellenza in qualunque settore può essere raggiunta con il lavoro di una vita, non la si puņ acquistare a prezzo ridotto". E Chaucer lamentava che "la vita è così breve, l'abilità così lunga da apprendere".

Questa è la mia ricetta per il successo nella programmazione:

Con tutto ciò in mente, ci si può chiedere quanto lontano si possa arrivare col solo apprendimento sui libri. Prima che nascesse il mio primo figlio, lessi tutti i libri Come fare a, e continuavo a sentirmi un novellino inesperto. Trenta mesi dopo, quando stava arrivando il secondo figlio, tornai ai libri per un ripasso? No. Mi basai piuttosto sulla mia esperienza personale, che si rivelò per me molto più utile e rassicurante delle migliaia di pagine scritte da esperti.

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

  1. Identificare il più presto possibile, sistematicamente, i migliori progettisti.
  2. Affidare a un tutore la responsabilità dello sviluppo del prospetto e la tenuta di un registro sulla formazione.
  3. Fornire ai progettisti in crescita l'opportunita di interagire e stimolarsi l'un l'altro

Questo dà per scontato che alcuni abbiano già le qualità necessarie a essere un grande progettista; il compito è di plasmarli correttamente nel frattempo. Alan Perlis lo esprime in modo più sintetico: "A chiunque si può insegnare a scolpire. A Michelangelo si sarebbe dovuto insegnare come non farlo. Lo stesso avviene con i grandi programmatori".

Quindi proseguite e comprate quel libro sul Java, probabilmente vi servirà a qualcosa. Ma non cambierà la vostra vita, né la vostra vera esperienza complessiva in quanto programmatore, in 24 ore, giorni, e nemmeno mesi.

Riferimenti

Bloom, Benjamin (ed.) Developing Talent in Young People [Sviluppare il talento nei giovani], Ballantine, 1985.

Brooks, Fred, No Silver Bullets [Nessun proiettile d'argento], IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Hayes, John R.,Complete Problem Solver [Il completo risolutore di problemi] Lawrence Erlbaum, 1989.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life [La cognizione in pratica: mente, matematica e cultura nella vita quotidiana], Cambridge University Press, 1988.

Risposte

Cronometraggio approssimativo per alcune operazioni con un tipico PC da 1GHz (estate 2001):

esecuzione di una singola istruzione 1 nsec = (1/1.000.000.000) sec
recupero di una parola dalla cache L1 2 nsec
recupero di una parola dalla memoria principale 10 nsec
recupero di una parola da una posizione del disco contigua 200 nsec
recupero di una parola da una nuova posizione del disco (seek) 8.000.000 nsec = 8 msec

Appendice: Scelta del linguaggio

Parecchi hanno chiesto quale linguaggio dovrebbero scegliere per primo. Non c'è un'unica risposta, ma considerate questi punti:

Con questi presupposti, come primo linguaggio di programmazione raccomanderei Python o Scheme. Ma la vostra situazione può essere diversa. Se la vostra età ha una sola cifra, potreste preferire Alice o Squeak (che potrebbe apprezzare anche chi ha più anni). La cosa importante è che scegliate e cominciate.

Appendice: Libri e altre risorse

Parecchie persone hanno chiesto libri e pagine web da cui imparare. Ripeto, l'apprendimento libresco da solo non sarà sufficiente, ma posso raccomandare quanto segue:

Note

T. Capey fa notare che la pagina Complete Problem Solver su Amazon ha ora i libri Teach Yourself Bengali in 21 days e Teach Yourself Grammar and Style nella sezione "i clienti che hanno acquistato questo libro hanno comprato anche questi". Sospetto che una gran parte delle persone che hanno guardato quel libro provengano da questa pagina.

Traduzioni

Grazie ai seguenti traduttori, la pagina di Peter Norvig è disponibile in:
Cinese (Xiaogang Guo)
Cinese tradizionale (Jason Chen)
Coreano (John Hwang)
Francese (P.E. Allary)
Giapponese (yomoyomo)
Norvegese (Andre Reffhaug)
Polacco (Kuba Nowak)
Rumeno (Ştefan Lazăr)
Spagnolo (Carlos Rueda)
Tedesco (Stefan Ram)
Turco (Çağıl Uluşahin)

Peter Norvig (Copyright 2001)