¿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 punto máximo 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++. 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.
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. 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.
Tener unas nociones básicas de cómo funciona una red, sobre todo a nivel de protocolos, es también importante cuando hacemos aplicaciones que deben funcionar en el mundo real. La diferencia entre UDP y TCP, lo que puede aportarnos usar un protocolo de más alto nivel como HTTP, las variaciones de latencia entre usar una red wifi, una red de datos móvil o una red cableada, etc., son factores muy importantes a la hora de desarrollar una aplicación.
Conclusión
En conclusión 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.