Aprender a Programar Toma 10 Años
-
Upload
dervinvictorianobremont -
Category
Documents
-
view
223 -
download
3
description
Transcript of Aprender a Programar Toma 10 Años
-
Aprende a programar en diez aos
Por Peter Norvig. Teach Yourself Programming in Ten Years.
Traduccin libre al espaol por Carlos Rueda - http://loro.sf.net
Por qu todos tienen tanto afn?
Entra a cualquier librera y encontrars Aprende Java en 7 Das y dems variaciones interminables ofreciendo ensear Visual Basic, Windows,
Internet, etc., en unos pocos das u horas. Yo hice la siguiente bsqueda
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 computacin (el nmero 79 era Aprende Bengali en 30 das -- Learn Bengali
in 30 days ). Remplac "days" (das) por "hours" (horas) y obtuve,
sorprendentemente, resultados similares: 253 libros ms, con 77 libros de computacin seguidos de Aprende Gramtica y Estilo en 24 horas (Teach
Yourself Grammar and Style in 24 Hours) en el nmero 78. Del total de los
primeros 200, 96% fueron libros de computacin.
La conclusin es que, o bien la gente tiene un gran afn por saber de computadoras, o bien las computadoras son algo fabulosamente ms fcil de
aprender que cualquiera otra cosa. No hay libros sobre cmo aprender Beethoven, o Fsica Cuntica, o incluso Esttica Perruna en pocos das.
Analicemos lo que podra significar un ttulo como Aprende Pascal en Tres Das (Learn Pascal in Three Days):
Aprende: En 3 das no tendrs tiempo de escribir varios programas significativos, y de aprender de tus xitos y errores con ellos. No
tendrs tiempo de trabajar con un programador experimentado y
entender lo que es vivir en ese ambiente. En resumen, no tendrs
tiempo de aprender mucho. As que esos libros slo podrn lograr una familiaridad superficial, no un entendimiento profundo. Como dijo
Alexander Pope, poco aprendizaje es asunto peligroso.
Pascal: En 3 das puedes aprender la sintaxis de Pascal (si ya conoces un lenguaje similar), pero no podrs aprender mucho cmo usarla. En
sntesis, si fueras, digamos, un programador Basic, podras aprender a
escribir programas en el estilo de Basic usando la sintaxis de Pascal, pero no aprenderas realmente para lo que Pascal es bueno (o malo).
Entonces cul es el objetivo? Alan Perlis dijo alguna vez: "Un
lenguaje que no afecte tu manera de pensar acerca de la programacin,
no merece conocerse". Un objetivo posible es que tienes que aprender
-
un poco de Pascal (o ms probablemente, algo como Visual Basic o
JavaScript) porque necesitas tener una interface con una herramienta
existente para realizar una cierta tarea. Pero entonces no ests
aprendiendo cmo programar; ests aprendiendo cmo realizar esa tarea.
en Tres Das: Desafortunadamente, no son suficientes, como se
describe en la siguiente seccin.
Aprende a programar en diez aos
Algunos investigadores (Hayes , Bloom) han mostrado que toma
aproximadamente diez aos desarrollar habilidades en cualquiera de una
amplia variedad de reas, incluyendo el juego de ajedrez, la composicin musical, la pintura, el piano, la natacin, el tenis, y la investigacin en
neurosicologa y topologa. Parece no haber atajos: incluso Mozart, prodigio
musical a los 4 aos, se tom 13 ms antes de empezar a producir msica de calidad mundial. En otro gnero, parece que los Beatles llegan a escena
apareciendo en el espectculo de Ed Sullivan en 1964. Pero ellos haban
estado tocando desde 1957, y aunque tenan una masa de seguidores desde
antes, su primer gran xito, Sgt. Peppers , apareci en 1967. Samuel Johnson pensaba que se requieren ms de diez aos: "La excelencia en cualquier rea
puede lograrse slo 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 programacin:
Intersate en la programacin, y haz programacin porque es divertida.
Asegrate que se mantiene tan divertida que estars en disposicin de invertir diez aos.
Habla con otros programadores. Lee otros programas. Esto es ms
importante que cualquier libro o curso.
Programa. El mejor tipo de aprendizaje es aprender haciendo (learning by doing) . Para decirlo ms tcnicamente, "El mximo nivel de
desempeo de los individuos en un dominio dado, no se logra
automticamente como funcin de experiencia extendida, sino que el nivel de desempeo puede incrementarse incluso en individuos
altamente experimentados como resultado de esfuerzos deliberados por
mejorar." (p. 366) y "el aprendizaje ms efectivo requiere una tarea bien definida con un apropiado nivel de dificultad acorde con el
individuo, retroalimentacin informativa, y oportunidades de repeticin
y correccin de errores." (p. 20-21) El libro Cognition in Practice:
Mind, Mathematics, and Culture in Everyday Life es una interesante referencia sobre este punto de vista.
-
Si quieres, dedica cuatro o cinco aos en una universidad (o ms en una
escuela de graduados). Esto te dar acceso a algunos posiciones que
requieren credenciales, y te dar un entendimiento ms profundo del
campo, pero si no disfrutas la escuela, puedes (con algo de dedicacin) obtener una experiencia similar trabajando. Como sea, la lectura de
libros por s sola no ser suficiente. "La educacin en computacin no
puede hacer a nadie un expero programador ms que el estudio de pinceles y pigmentos puede hacer a alguien un pintor experto" dice Eric
Raymond, autor de The New Hacker's Dictionary. Unos de los mejores
programadores que yo haya contratado alguna vez tena slamente un grado de bachiller (High School); pero ha producido una gran cantidad
de excelentesprogramas , tiene su propio grupo de noticias (news
group) , y sin duda es mucho ms rico de lo que yo llegue a ser.
Trabaja en proyectos con otros programadores. S el mejor programador en algunos proyectos; s el peor en otros. Cuando eres el
mejor, tienes que poner a prueba tus habilidades para liderar un
proyecto y para inspirar a otros con tu visin. Cuando eres el peor, aprendes lo que los maestros hacen, y aprendes lo que a ellos no les
gusta hacer (pues te ponen a hacerlo por ellos).
Trabaja en proyectos despus que otros programadores. Proponte entender un programa escrito por otra persona. Mira cunto toma
entenderlo y hazle correcciones cuando los programadores originales
no estn all. Piensa en cmo disear tus programas para facilitarles el
trabajo a aquellos que le harn mantenimiento despus de t. Aprende por lo menos una media docena de lenguajes de
programacin. Incluye uno con soporte para abstracciones de clases
(como Java o C++), uno que d soporte a la abstraccin functional (como Lisp o ML), uno que d soporte a la abstraccin sintctica (como
Lisp), uno que d soporte a especificationes declarativas (como Prolog
o plantillas C++), uno que d soporte a corutinas (como Icon o Scheme), y uno que d soporte al paralelismo (como Sisal).
Recuerda que hay "computadoras" en la "ciencia de la computacin".
Conoce cunto le toma a tu computadora ejecutar una instruccin,
alcanzar una palabra de la memoria (con y sin cache), leer palabras consecutivas de disco, y ubicar una nueva localizacin en disco.
(Respuestas aqu.)
Involcrate en un plan de estandarizacin de algn lenguaje. Podra ser en el mismo comit ANSI C++, o podra ser simplemente decidir si tu
estilo de codificacin tendr niveles de identacin de 2 4 espacios.
Como sea, averigua lo que les gusta a otras personas en un lenguaje, cmo lo perciben, y quiz incluso un poco de por qu lo perciben como
lo hacen.
Ten el buen juicio para lanzar el plan de estandarizacin del lenguaje tan pronto como sea posible.
-
Con todo lo anterior en mente, es cuestionable qu tan lejos puedes llegar slo
leyendo libros. Antes de que naciera mi primer hijo, le todos los
libros Aprende a (How To), y sin embargo me senta como un tonto
principiante. 30 meses despus, cuando naci mi segundo hijo, acaso regres a los libros? No. Al contrario, me apoy en mi experiencia personal, que me
result mucho ms til y confiable que las miles de pginas escritas por los
expertos.
Fred Brooks, en su ensayo No Silver Bullets, identific un plan de tres partes
para encontrar grandes diseadores de programas:
1. Sistemticamente identificar a los diseadores lderes lo ms 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 diseadores en crecimiento para que interacten y se motiven mutuamente.
Esto asume que algunas personas ya tienen las cualidades necesarias para ser
grandes diseadores; la tarea es persuadirlos apropiadamente. Alan Perlis lo dice de manera ms sucinta: "A cualquiera se le puede ensear a esculpir: A
Miguel Angel habra que habrsele enseado cmo no hacerlo. As pasa con
los grandes programadores".
As que adelante, compra ese libro de Java; probablemente obtendrs algo de
l. Pero no cambiar tu vida o tus reales habilidades como programador en 24 horas, das 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 tpica 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