Aprende a programar en diez años

Por Peter Norvig.  Teach Yourself Programming in Ten Years.
Traducción libre al español por Carlos Rueda - http://loro.sf.net

¿Por qué todos tienen tanto afán?

Entra a cualquier librería y encontrarás Aprende Java en 7 Días y demás variaciones interminables ofreciendo enseñar Visual Basic, Windows, Internet, etc., en unos pocos días u horas. Yo hice la siguiente búsqueda avanzada (power search) en Amazon.com :
     pubdate: after 1992 and title: days and
      (title: learn or title: teach yourself)
y obtuve 248 ítems de resultado. Los primeros 78 fueron libros de computación (el número 79 era Aprende Bengali en 30 días -- Learn Bengali in 30 days ). Remplacé "days" (días) por "hours" (horas) y obtuve, sorprendentemente, resultados similares: 253 libros más, con 77 libros de computación seguidos de Aprende Gramática y Estilo en 24 horas (Teach Yourself Grammar and Style in 24 Hours) en el número 78. Del total de los primeros 200, 96% fueron libros de computación.

La conclusión es que, o bien la gente tiene un gran afán por saber de computadoras, o bien las computadoras son algo fabulosamente más fácil de aprender que cualquiera otra cosa. No hay libros sobre cómo aprender Beethoven, o Física Cuántica, o incluso Estética Perruna en pocos días.

Analicemos lo que podría significar un título como Aprende Pascal en Tres Días (Learn Pascal in Three Days):

Aprende a programar en diez años

Algunos investigadores (Hayes , Bloom) han mostrado que toma aproximadamente diez años desarrollar habilidades en cualquiera de una amplia variedad de áreas, incluyendo el juego de ajedrez, la composición musical, la pintura, el piano, la natación, el tenis, y la investigación en neurosicología y topología. Parece no haber atajos: incluso Mozart, prodigio musical a los 4 años, se tomó 13 más antes de empezar a producir música de calidad mundial. En otro género, parece que los Beatles llegan a escena apareciendo en el espectáculo de Ed Sullivan en 1964. Pero ellos habían estado tocando desde 1957, y aunque tenían una masa de seguidores desde antes, su primer gran éxito, Sgt. Peppers , apareció en 1967. Samuel Johnson pensaba que se requieren más de diez años: "La excelencia en cualquier área puede lograrse sólo mediante el trabajo de toda una vida; no es algo que pueda adquirirse a un menor precio." Y Chaucer se quejaba "the lyf so short, the craft so long to lerne."

Aquí está mi receta para el éxito en programación:

Con todo lo anterior en mente, es cuestionable qué tan lejos puedes llegar sólo leyendo libros. Antes de que naciera mi primer hijo, leí todos los libros Aprende a (How To), y sin embargo me sentía como un tonto principiante. 30 meses después, cuando nació mi segundo hijo, ¿acaso regresé a los libros? No. Al contrario, me apoyé en mi experiencia personal, que me resultó mucho más útil y confiable que las miles de páginas escritas por los expertos.

Fred Brooks, en su ensayo No Silver Bullets, identificó un plan de tres partes para encontrar grandes diseñadores de programas:

  1. Sistemáticamente identificar a los diseñadores líderes lo más pronto posible.
  2. Asignar un tutor de carrera para que sea responsable del desarrollo del prospecto y mantenga cuidadosamente un registro de seguimiento.
  3. Ofrecer oportunidades a los diseñadores en crecimiento para que interactúen y se motiven mutuamente.
Esto asume que algunas personas ya tienen las cualidades necesarias para ser grandes diseñadores; la tarea es persuadirlos apropiadamente. Alan Perlis lo dice de manera más sucinta: "A cualquiera se le puede enseñar a esculpir: A Miguel Angel habría que habérsele enseñado cómo no hacerlo. Así pasa con los grandes programadores".

Así que adelante, compra ese libro de Java; probablemente obtendrás algo de él. Pero no cambiará tu vida o tus reales habilidades como programador en 24 horas, días o incluso meses.

Referencias

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.

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

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

Respuestas

Tiempos de demora de varias operaciones en una PC típica de 1GHz, verano de 2001:
execute single instruction  1 nsec = (1/1,000,000,000) sec 
fetch word from L1 cache memory  2 nsec 
fetch word from main memory  10 nsec 
fetch word from consecutive disk location  200 nsec 
fetch word from new disk location (seek)  8,000,000nsec = 8msec 

Peter Norvig (Copyright 2001)