¿Primero que es ser programador o desarrollador de software?
Un programador es aquella persona que escribe, depura y mantiene el código fuente de un programa informático, es decir, el conjunto de instrucciones que ejecuta el hardware de una computadora, para realizar una tarea determinada.
Es decir... ¡Vas a poder crear lo que te imagines!
¿Qué se supone que debes saber?
Ésta es una lista de cosas que considero básicas para cualquiera que quiera dedicarse al desarrollo y haya dedicado unos cuantos años a formarse para ello. No hace falta ser un experto en nada (eso requiere mucho más tiempo), pero sí tener una idea más o menos clara de los conceptos básicos y una base lo bastante sólida como para poder seguir profundizando en aquello que necesites.
1. Programación orientada a objetos
Algunos dicen que ya ha alcanzado su zenit y empieza a ser desplazada por otros paradigmas, pero la realidad es que a día de hoy sigue siendo la manera de desarrollar la mayoría de aplicaciones.
El lenguaje no es importante, puede ser Java, C#, C++ o incluso cosas más exóticas como Smalltalk. Lo que importa es tener claros los conceptos, lo que es una clase, un objeto, un interfaz, una clase abstracta, un método estático, un método de instancia, herencia, composición, etc.
Dentro de este punto, considero especialmente útil conocer patrones de diseño, no tanto por los patrones en sí, que muchas veces están sobrevalorados, sino porque ayudan a establecer un lenguaje común para comunicarte con otros desarrolladores y la forma de implementarlos es un buen ejemplo de cómo aplicar técnicas de diseño orientado a objetos.
No se trata de conocer el último framework de moda, que seguramente estará anticuado en poco tiempo, sino de manejar los conceptos necesarios para poder comprender y utilizar no sólo ese framework, sino todos los que puedan surgir en el futuro.
2. Programación funcional
Cada vez se usa más, e incluso los lenguajes tradicionalmente orientados a objetos que evolucionan más lento como Java o C++ empiezan a incluir características funcionales. Y eso por no hablar de lenguajes como Ruby, Python o Javascript o el empuje de lenguajes funcionales como Clojure, F# o Haskell.
No hace falta ser un experto en teoría de categorías, ni en el sistema de tipos de Hindley-Milner o en cálculo lambda, pero al menos es necesario tener claro lo que es una función de orden superior, el valor de la inmutabilidad o la utilidad de un cierre lambda.
Aparte de que sea un paradigma de programación que está ganando popularidad actualmente, aporta otra forma de razonar sobre los problemas y eso siempre es positivo.
3. Bases de datos
Casi cualquier aplicación necesita, de una u otra forma, almacenar información, y ésta suele terminar en una base de datos. Hasta hace no mucho, decir base de datos era prácticamente lo mismo que decir base de datos relacional, pero hoy en día hay bastantes alternativas, como bases de datos documentales, de grafos, orientadas a objetos.
Es imposible pretender dominarlas todas durante tu periodo de formación, pero sí es bueno que las conozcas y tengas una idea aproximada de para qué sirven.
Además, merece la pena dedicarle un esfuerzo adicional a aprender algo más sobre SQL para ser capaz de lanzar consultas básicas. Además de su utilidad directa, aprender a expresar cosas de forma declarativa usando lógica de conjuntos es importante.
4. Hardware y redes
Hay programadores que piensan que por dedicarse a programar no necesitan saber nada del hardware que ejecuta sus programas, pero la realidad es muy distinta. Es necesario conocer las características básicas del hardware que utilizamos todos los días para poder tomar decisiones correctas.
Nuevamente, no se trata de convertirte en ingeniero de Intel, sino de entender que no es lo mismo acceder a memoria cache que a RAM, ni a RAM que a disco, y por supuesto no es lo mismo acceder a datos en local que a información en un servidor que está en la otra punta del mundo.
5. Sistemas de Control de Versiones
Tengo que reconocer que tenía mis dudas sobre este punto, pero después de pensarlo creo que hoy en día no hay excusa para que no aprendas a manejar un sistema de control de versiones mientras completas tus estudios.
Existen muchas opciones online gratuitas como Github, Bitbucket (o incluso Team Fundation Service, si no te queda más remedio) y es una herramienta tan útil, aunque sólo sea para coordinarte con tus compañeros de prácticas, que deberías saber manejarla.
Igual que pasa con los lenguajes de programación, no es importante cuál aprendas, pero aprende alguno que te permita practicar las ideas básicas de subir y bajar código, obtener cambios de otras personas, crear ramas, resolver conflictos, etc.
Mira este genial video!
Comienza Ahora: https://www.youtube.com/channel/UC1swshEhPgh8Mn_qXdcY62A