El camino para ser un buen Developer

Una de las preguntas más comunes que me toca responder es “¿Como aprendo a programar?” y en este articulo tratare de responder eso para personas que estén buscando convertir la programación en su trabajo de tiempo completo y desarrollar aplicaciones complejas.

Nota importante: Si quieres ser un hobbyist y programar cosas en tu tiempo libre o quieres agregar un poco de programación y automatizaciones a tu trabajo, probablemente hay mejores maneras de lograrlo.

La profesión de programador tiene múltiples etapas para pasar del primer día en el que tocamos código a cuando nos convertimos en expertos. Este proceso toma tiempo, y como todo lo que toma tiempo, requiere paciencia y planeación. Es un camino gratificante por ratos y bastante ingrato por otros, pero al final es muy satisfactorio.

Primer paso

El primer paso implica aprender la sintaxis de un lenguaje y lograr escribir código, piensen en este paso como entrar a Rosetta Stone y repetir frases de un lenguaje extranjero, hasta estar suficientemente cómodo para poder tener una plática en ese idioma, en este paso sitios como Code Academy son el punto correcto para empezar.

Este paso deberas dedicarle suficiente tiempo hasta que te sientas cómodo escribiendo y leyendo código. Piensa que el objetivo de este paso es poder viajar a un país donde no hablan tu idioma, poder pedir comida y que te llegue lo que esperabas.

Segundo paso

El segundo paso implica aprender 2 cosas muy importantes al mismo tiempo, a generar aplicaciones y las bases de la computer science como algoritmos, estructuras de datos, ciclos y la sintaxis del lenguaje para lograr tener un pequeño compilador en la cabeza. Esta segunda etapa deberá de tomar por lo menos un año de práctica deliberada y para terminar este segundo paso requieres poder construir aplicaciones que puedas usar con tus amigos y haber implementado algunos algoritmos clásicos desde cero.

Para empezar a construir aplicaciones te recomiendo que realizes varios Hello Worlds y después crezcas estos Hello Worlds en aplicaciones que utilices todos los días, una vez que te sientas feliz utilizándola aplicación todos los días, invita a algunos amigos a utilizarla y recibe feedback de ellos. Sitios como Treehouse o Platzi son muy buena opción para mejorar estos skills.

A la par hay que practicar en problemas de programación en sitios como The Euler Project o tomar clases de Computer Science 101 de Stanford o MIT que están disponibles en linea.

Al pasar esta etapa deberías de buscar un trabajo que te permita programar 8 horas al día en algo interesante, ademas leer y practicar de programación por nuestra cuenta una hora o dos después del trabajo y/o un rato el fin de semana. Idealmente deberías de buscar un mentor que te ayude a enfocarte en los problemas correctos y generar buenas practicas de programación como usar Git, escribir código limpio y mantenible.

Al terminar estas etapas se termina el tronco común de los developers y necesitaras empezar a especializarte. Este es el punto donde las cosas se empiezan a poner interesantes por que tendrás suficientes herramientas para resolver problemas complejos y crear aplicaciones que resuelvan problemas del mundo real.

Especialización

Para iniciar esta etapa de especialización tienes que avanzar en 3 frentes, entender problemas del mundo real, desarrollo de producto y dominar los temas de computer science.

El primero de estos frentes es buscar que tipo de problemas nos interesan resolver y profundizar en ellos. Lo cual implica comenzar a atacar una industria específica, conocer como opera y que cosas podemos mejorarla. A fin de cuentas la parte interesante de ser programador es resolver problemas del mundo real.

El segundo frente es desarrollar nuestra habilidad de construir productos. Hay múltiples temas importantes en este paso, desde entender a nuestros usuarios, estructurar los procesos que se llevan acabo en la aplicación que estamos desarrollando, automatización de procesos, patrones de UI y muchos temas más para poder estructurar productos coherentes.

El tercer frente es dominar los temas importantes de computer science. Esta profesión esta basada en conceptos claros estudiados por personas más inteligentes que nosotros por mucho tiempo. Para los que no sepan por donde empezar, hay 4 grandes bloques que podemos explorar:

  • Algoritmos y estructuras de datos: Las mejores formas de resolver problemas generalmente recaen en modelar nuestros datos de la manera correcta para que representen el mundo y sean fáciles de manipular y utilizar los algoritmos correctos contra estos datos. Todo esto es generalmente ya fue estudiado y es mucho mas fácil leer que reinventar la rueda.
  • Server management y performance: Esto implica manejar los servidores que correrán nuestras aplicaciones de manera eficiente y que estos server contesten cada URL en muy poco tiempo(~100ms). Este tema es muy interesante y ademas paga muy bien, les recomiendo que le dediquen mucho tiempo.
  • Arquitectura de aplicaciones: Tener bases sólidas en una aplicación va a permitir desarrollar rápido y que la aplicación sea escale, por lo cual vale la pena invertirle mucho tiempo a generar un stack para construir nuestras aplicaciones y entender los layers sobre los cuales estas contruyendolas.

Para estos temas hay muchos cursos en linea, plática con amigos que estén resolviendo problemas similares y libros especializados en cada tema. Ademas de estos temas, el camino te llevará a curiosear en distintos lenguajes de programación y tal vez encontremos alguno que nos guste mas que el que aprendimos cuando dimos nuestros primeros pasos.

Cada uno de estos temas son habilidades que pueden irse aprendiendo en conjunto para generar una especialización y convertirnos en un developer con un set único de habilidades. Al llegar a este punto, tendremos algo muy cercano a la magia, tendremos la habilidad de aparecer aplicaciones de la nada que resuelven problemas del mundo real.

#AlwaysKeepLearning