终极程序员跨过的艰难六步

1 No te quejes. Prepárate para un largo viaje, o déjalo de lado y ve a observar pájaros

Para aquellos que realmente quieren convertirse en un buen programador, en un experto, en la persona definitiva, si realmente vale la pena, invertir diez años en ello no es nada, ¿verdad?

El primer paso es tragarse esta bala. Acepta que este proceso llevará no solo diez años, sino una búsqueda de por vida. Hazlo solo porque quieres hacerlo. Si alguien no está dispuesto a hacer algo, no se convertirá en experto en ello.

2 Escribe mucho, mucho código

A la vez, escribe muchísimo código. No tiene que ser buen código. Durante mucho tiempo, el código que escribas no será buen código. El buen código, el buen gusto, requiere mucha práctica para desarrollarse. Interésate por nuevas herramientas, nuevos algoritmos, nuevos problemas, o si encuentras algún problema, escribe código para practicar e intenta usarlo tanto como sea posible.

El proceso de aprendizaje nunca se detiene. Si estudias con la actitud de aprender todo lo posible cada día y obtener el máximo "kilometraje" que puedas, llegarás muy lejos. Entra en un estado en el que cualquier día/semana/mes sin aprender algo interesante sea un fracaso. Cada día hay suficientes cosas geniales e interesantes esperando que las aprendas. Incluso si has estado aprendiendo durante 15 años, aunque es más difícil encontrarlas, todavía es posible. Nadie puede dominar todo el conocimiento del mundo de la programación, así que si sientes que no hay nada más que aprender, encuentra un nuevo proyecto y escribe más código.

Mientras haces estas cosas, presta atención: debes buscar patrones intermedios, como aquellos que pueden automatizar cosas útiles, o código que has escrito mucho y puede separarse como bibliotecas compartidas, u otros lugares centralizados. Busca lenguajes de programación simples para tareas específicas. Encuentra lenguajes de programación que no sean buenos para las mismas tareas y piensa por qué algunos lenguajes son más productivos que otros para estas tareas.

Pero lo más importante es escribir muchísimo código. Pero recuerda: si lo que haces ya no es divertido, no hay necesidad de continuar, si no puedes disfrutar del proceso mientras tanto.

3 Lee más código

Cuando hayas acumulado algunos proyectos, empieza a leer el código de otras personas. Al principio, esto es difícil. Hacen muchas cosas que nunca has hecho, o usan estilos a los que no estás acostumbrado, o incluso usan lenguajes de programación que no has aprendido. Si te resulta interesante, lee ese código tanto como puedas. No te preocupes por analizar a fondo el código de ningún proyecto en particular, al menos no al principio.

Leer código nuevo puede mostrarte nuevas formas de pensar, lo que ayuda a expandir tu mente. Expandir la mente es muy importante para mantener el progreso. Te ayuda a asegurar que, a medida que avanzas, puedas seguir descubriendo cosas nuevas que aprender.

Asegúrate de comunicarte con otros programadores. Pregúntales cómo y por qué hacen esas cosas específicas, si adoptan ángulos diferentes al hacerlas, y pregúntales si tienen sugerencias sobre tu código. Sé cortés, porque los programadores senior están muy ocupados. El respeto te llevará lejos; es una industria muy conectada, y la reputación es importante.

4 Aprende muchos lenguajes de programación. Conviértete en experto en algunos de ellos

En realidad no tendrás mucho tiempo libre, al menos no suficiente para aprender muchos idiomas al mismo tiempo, a menos que seas excepcionalmente afortunado. Así que puedes aprender muchos lenguajes de programación a un nivel superficial, lo suficiente para entender qué los hace populares, qué los hace buenos en sus áreas habituales y cuáles son sus defectos. La expansión es importante. No te limites a un tipo de lenguaje, como los imperativos o los lenguajes orientados a objetos; amplía y aprende algunos lenguajes funcionales o declarativos.

Aprende un dialecto de Lisp. No lo usarás para tu código diario. Pero aprenderlo y practicarlo te convertirá en un mejor pensador, y comprenderás más profundamente el encanto de los sistemas recursivos simples. Sigue aprendiéndolo y practicándolo hasta que llegue el momento en que no puedas evitar gritar "¡Ajá!". Antes de ese momento, pensarás que es una sintaxis extraña y un uso torpe. Durante el resto de tu carrera, se convertirá en el concepto más asombrosamente elegante que la humanidad haya diseñado.

Después, aprende un lenguaje puramente funcional. Recomiendo Haskell. Te obliga a usar el pensamiento funcional puro de una manera que otros lenguajes funcionales, incluidas las variantes de Lisp, no usan. Cuando entiendas el propósito del diseño de las mónadas, u otros momentos "ajá", entrarás en un nivel superior de capacidad de pensamiento y de capacidad para diseñar sistemas elegantes.

Finalmente, aprende un lenguaje declarativo. SQL también cuenta, aunque es bastante débil. Prolog es a menudo recomendado. También XAML, XSLT y XQuery. Un lenguaje declarativo es aquel en el que le dices a la computadora lo que quieres que haga, y la computadora averigua cómo hacerlo; mientras que en los lenguajes imperativos es al revés: le dices a la computadora cómo hacer algo y esperas que haga correctamente lo que quieres; y en los lenguajes funcionales, describes cómo se transforman los tipos de datos.

5 Crea tu propio lenguaje de programación

No necesita ser muy complejo, ni avanzado, ni siquiera especialmente elegante. Ni siquiera necesita ser una idea original. A menudo recomiendo escribir un intérprete de Lisp (mejor si está escrito en un dialecto de Lisp). Esta es una excelente manera de aprender los fundamentos. De hecho, puedes adquirir un buen sentido de los fundamentos del diseño de programación de computadoras: análisis léxico, análisis sintáctico, compilación, interpretación, máquinas virtuales, y cómo las decisiones de diseño básicas afectan la utilidad práctica de un lenguaje en diversos campos.

Obtendrás las siguientes 3 cosas durante este proceso:

1) Tendrás una comprensión más profunda de cómo funcionan las herramientas que elijas, para que puedas escribir código más eficiente.

2) Empezarás a darte cuenta de las razones detrás de las decisiones de diseño de los lenguajes y herramientas convencionales. Esto te permitirá elegir las herramientas que uses de manera más eficaz.

3) Vislumbrarás algunas posibilidades aún no descubiertas que existen en las herramientas y lenguajes, lo que ampliará tu horizonte y te permitirá descubrir cosas nuevas, interesantes y geniales para aprender y experimentar.

6 Aprende cosas que otros nunca han aprendido

Este es el paso más difícil y el último. Otros diez años más. Mantén el interés y haz cosas interesantes; deja atrás aquello que no te haga disfrutar.

Fuente en inglés:become-a-good-programmer-in-six-really-hard-steps/