5
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: En 3 días no tendrás tiempo de escribir varios programas significativos, y de aprender de tus éxitos y errores con ellos. No tendrás tiempo de trabajar con un programador experimentado y entender lo que es vivir en ese ambiente. En resumen, no tendrás tiempo de aprender mucho. Así que esos libros sólo podrán lograr una familiaridad superficial, no un entendimiento profundo. Como dijo Alexander Pope, poco aprendizaje es asunto peligroso. Pascal: En 3 días puedes aprender la sintaxis de Pascal (si ya conoces un lenguaje similar), pero no podrás aprender mucho cómo usarla. En síntesis, si fueras, digamos, un programador Basic, podrías aprender a escribir programas en el estilo de Basic usando la sintaxis de Pascal, pero no aprenderías realmente para lo que Pascal es bueno (o malo). Entonces ¿cuál es el objetivo? Alan Perlis dijo alguna vez: "Un lenguaje que no afecte tu manera de pensar acerca de la programación, no merece conocerse". Un objetivo posible es que tienes que aprender

Aprender a Programar Toma 10 Años

Embed Size (px)

DESCRIPTION

Aprender a programar toma diez años.Si deseas dominar una habilidad , pues te tomara nada mas y nada menos que diez años.

Citation preview

  • 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