Você está na página 1de 5

Aprende a programar en diez aos

Texto original: Peter Norvig Traducido por: Carlos Rueda

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 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 Bengal en 30 das). Remplac "days" por "hours" y obtuve, sorprendentemente, resultados similares: 253 libros ms, con 77 libros de computacin seguidos de Aprende Gramtica y Estilo en 24 horas 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:

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 se necesitan 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 programa porque es divertido. Asegrate de que te diviertes tanto como para 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 practicando. 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.

La educacin en computacin no puede hacer a nadie un experto programador ms que el estudio de pinceles y pigmentos puede hacer a alguien un pintor experto
Unos de los mejores programadores que yo haya contratado alguna vez tena slamente un grado de bachiller; pero ha producido una gran cantidad de excelentes programas, tiene su propio grupo de noticias, y sin duda es mucho ms rico de lo que yo pueda llegar 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.

A cualquiera se le puede ensear a esculpir: A Miguel ngel habra que haberle enseado cmo no hacerlo. As pasa con los grandes programadores.
Con todo lo anterior en mente, es cuestionable lo lejos que puedes llegar slo leyendo libros. Antes de que naciera mi primer hijo, le todos los libros Aprende a..., 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 haberle 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.

Respuestas
Tiempos de ejecucin de varias operaciones tpicas en un PC a 1GHz (verano de 2001): Operacin Ejecutar una nica instruccin Tiempo 1 nsec = (1/1.000.000.000) sec

Obtener una palabra de memoria cach L1 Obtener una palabra de memoria RAM

2 nsec 10 nsec

Obtener una palabra de posiciones consecutivas de 200 nsec disco Buscar y obtener una palabra de una posicin de 8.000.000 nsec = 8msec disco (seek)

Este artculo fue publicado originalmente bajo el ttulo "Teach Yourself Programming in Ten Years" por Peter Norvig. La traduccin original es de Carlos Rueda.

Articulo Publicado en http://www.lawebdejm.com/prog/uml/aprende.html

Você também pode gostar