Aprende a programar en 10 años
Peter Norvig, informático y actual director de investigación de Google, tiene una serie de artículos asombrosos. Uno de ellos, titulado "Aprenda a programar en 10 años"(Teach yourself programming in 10 years) es uno de mis favoritos. Fue impactante en mi carrera, especialmente cuando tenía 1 año de experiencia con Java y pensé que era un programador sénior... ¯ *(ツ)/ ¯
Aquí tengo una traducción muy libre de los puntos principales del artículo. No estoy de acuerdo con todo, pero la provocación es excelente.
¿Por qué todo el mundo tiene prisa?
Si vas a cualquier librería, verás un libro "Cómo aprender Java en 24 horas", además de las variaciones que enseñan C,SQL, Ruby, Algoritmos, JavaScript y más. Si realizas una búsqueda avanzada en Amazon, encontrarás más de 500 libros de este tipo. De los 10 primeros, 9 son de programación.
La conclusión es una de dos:o todo el mundo tiene demasiada prisa o la programación es de alguna manera más fácil de aprender que cualquier otra cosa. Felleisen da una muestra de ello en su libro "Cómo diseñar programas" cuando dice "La mala programación es fácil, los idiotas pueden aprender a hacerla en 21 días.". (La opinión de Paulo aquí: la frase es exageradamente fuerte, pero es peligroso salir programando de todos modos).
Intentemos analizar el título de estos libros.
En 24 horas no tendrás tiempo para escribir varios programas significativos, ni para aprender de sus aciertos y errores con ellos.No tendrás tiempo para trabajar con alguien más experimentado y comprender cómo es vivir en un entorno C ++ o Java.
En otras palabras, obviamente no tienes tiempo para aprender mucho, por lo que el libro solo se puede estar refiriendo al entendimiento superficial, no a un entendimiento profundo.
En 24 horas o incluso 21 días, puedes aprender un poco de la sintaxis de un lenguaje de programación, pero realmente no aprendes lo más importante: cómo usar el lenguaje y principalmente, cómo de hecho solucionar problemas con él. Puedes terminar usando lo que aprendiste superficialmente con la lógica de otro lenguaje, sin saber si ese nuevo lenguaje es bueno o malo.
Entonces ¡aprende a programar en 10 años!
Muchos investigadores han demostrado que se necesitan alrededor de 10 años para desarrollar la experiencia en diferentes áreas, como el ajedrez, la música, la pintura, la natación, el tenis y otras. La clave es la práctica deliberada (intencional): no solo haciendo y rehaciendo, sino desafiandote con una tarea que es un poco más difícil de lo que te permite tu habilidad actual, salir de tu zona de confort para avanzar, analizando tu desempeño y corrigiendo errores. Y sí, repetirlo varias (¡y varias!) veces. No hay atajos: incluso Mozart, que era un prodigio a los 4 años, tardó otros 13 años en producir música a nivel profesional.
A pesar de hablar de horas y no de años, Malcolm Gladwell popularizó esta idea, que quizás hayas escuchado en algún momento, que se necesitan 10 mil horas de práctica para hacer algo con excelencia. Henri Cartier-Bresson tiene otra métrica: "Tus primeras 10 mil fotos son las peores". ¡La verdadera experiencia puede llevar toda una vida!
Por supuesto, no existe una cantidad mágica de horas o años que sea la respuesta final a lo que quieres aprender: no parece tener sentido asumir eso para dominar alguna habilidad (programación, ajedrez, música, por ejemplo) necesita exactamente la misma cantidad de tiempo para cada uno de ellos, y no que todas las personas necesitan la misma cantidad de tiempo.
Como dice el profesor Anders Ericsson, "en la mayoría de las áreas es asombroso cuánto tiempo necesitan incluso las personas más talentosas para alcanzar los niveles más altos de éxito. 10 mil horas te da una buena idea de que estamos hablando de años de práctica de 10 a 20 horas semanales para que estas personas, consideradas talentosas por naturaleza, lleguen a la cima.".
Entonces quieres trabajar con programación
La receta de Peter Norvig para el éxito en el campo:
Interésate por la programación y hacer con que eso sea entretenido. Asegúrate disfrutar el proceso de aprendizaje solo para poder seguir una trayectoria de 10 años / 10 mil horas.
Programa. La mejor forma de aprender es haciéndolo. Para ponerlo de forma técnica: "el nivel máximo de rendimiento no se alcanza automáticamente simplemente por una experiencia prolongada, sino que el nivel puede aumentar como resultado de esfuerzos intencionales para mejorar.(de Cognición en la práctica: mente, matemáticas y cultura en la vida cotidiana)
Conversa con desarrolladores, lee código. Es más importante que los libros y los cursos. Si quieres, dedica 4 años de tu vida a la universidad (o más a una maestría). Esto te dará acceso a algunos trabajos que necesitan estas credenciales y entenderás con profundidad del campo. Pero si no te gusta la escuela, puedes (con algo de dedicación) tener una experiencia semejante por tu cuenta o en el trabajo. En cualquier caso, aprender solo de los libros no es suficiente. "La educación en ciencia de la computación no convierte a nadie en un profesional de la programación, del mismo modo que el estudio de los pinceles y la pigmentación no convierte a nadie en un experto en pintura."dice Eric Raymond.
Trabaja en proyectos después de otros programadores. Trabaja en proyectos que ya han comenzado. Entiende un programa escrito por otra persona. Ve lo que se necesita para entender y corregir errores cuando las personas que crearon el sistema ya no trabajan en él. Piensa en cómo diseñar tus programas para que sean fáciles de mantener para otras personas.
Aprende al menos 6 lenguajes. Incluye uno que se centre en la abstracción basada en clases (como Java y C#), uno que se enfoque en la abstracción funcional (Lisp, ML o Haskell), uno que admita la abstracción sintáctica (como Lisp), uno declarativo (como Prologo o template C++) y uno que enfatice el paralelismo (Clojure y Go).
Recuerda que hay una computadora detrás de lo que hacemos. Sepa cuánto tiempo necesita una computadora para ejecutar una instrucción, buscar una palabra en la memoria (con y sin caché), leer datos del disco y acceder un nuevo lugar del disco.
Involúcrate en un proceso de estandarización de lenguaje. Puede ser algo complicado como comite de C++, o decidir si el estilo de código de tu empresa utilizará 2 o 4 espacios de sangría. De cualquier manera, aprenderás qué les gusta a otras personas en un lenguaje, cómo se sienten y cómo tú te sientes.(...)
Así que ve a comprar este libro de Java / Ruby / Javascript / PHP. Probablemente lo aproveches. Pero no cambiará tu vida ni te dará la posibilidad de programar en 24 horas o 21 días. Pero, ¿qué opinas de trabajar duro para mejorar en los próximos 24 meses? Bueno, ahora estás llegando a alguna parte ...
Más referencias. Ese fue el final del artículo de Norvig y algunos de los puntos principales que nos trae sobre por qué debemos tener paciencia (e insistencia) en aprender. Puedes consultar otros consejos y también el artículo completo aquí.
Pero entonces, ¡¿me voy a demorar todo esto para empezar a programar?!
Si estás dando tus primeros pasos, no te asustes. Por supuesto, no tardarás 10 años en empezar a programar, pero lo que quiero dejar aquí para reflexión es que el estudio de la programación es algo continuo y que, de hecho, nunca terminamos de aprender. Siempre aparecerán nuevas tecnologías, frameworks e incluso nuevos lenguajes y es necesario seguir de cerca toda esta evolución. Pero sobre todo, se necesita práctica. Así que no te preocupes, es posible empezar a trabajar en el área de programación cuando aún estás en el inicio de tus estudios, pero debes saber que esto es solo el comienzo de una carrera con mucho estudio y dedicación.
Si te interesas por temas de tecnología te invitamos a conocer los cursos de Alura Latam.