Depende de lo que entiendas por ingeniero de software. El mejor recurso para la ingeniería de software que he encontrado es la experiencia. Tengan paciencia conmigo un momento. La mayoría de las respuestas aquí parecen ser sobre la programación, y de hecho hay un montón de excelentes recursos sobre la programación (con un montón de buenos ejemplos en las respuestas aquí). Siempre he pensado que el problema se divide en tres categorías:
- Programación. Elige un lenguaje razonable para el tipo de problemas que te gusta abordar hoy en día. Aprenderlo bien. Mucha práctica. Leer mucho el código de otros expertos respetados. Escribe un poco más. Añade un lenguaje cuando lo necesites o te interese.
- Los algoritmos, las estructuras de datos, los lenguajes comparados y el conjunto de conocimientos que generalmente se denominan ciencias de la computación. Esto es lo que eleva el juego desde la resolución de problemas en lo pequeño, hasta la resolución de grandes problemas, resolviéndolos de forma efectiva (no sólo eficiente), y entendiendo los límites de las soluciones para poder explicarlas.
- La «ingeniería del software» es para mí una cosa diferente a las dos ideas anteriores. Es el proceso por el cual el software se entrega a los «clientes». Es la entrega consistente, repetible y fiable de la solución. Es la comprensión de que una interfaz gráfica de usuario es agradable para la construcción de pruebas de concepto/prototipos de soluciones en su escritorio, pero insuficiente para la entrega en «producción». Es la comprensión de la tubería de entrega en cada paso, y por qué se hace cada paso. Es toda la automatización y la disciplina. Sin disciplina, el software no escala. Todavía no he visto un curso sobre esto, porque en su mayor parte se trata de formación en el trabajo. Y muchos sitios se equivocan en esto. Los errores son costosos.
Quizás la mejor metáfora que puedo dar es la de la cocina. Puedes aprender a cocinar por ti mismo muy rápidamente. Puedes llegar a ser bueno en un puñado de recetas y la práctica te hace rápido. Si te atreves a preparar una comida elegante para tus amigos y tu familia, saldrás de tu zona de confort y necesitarás nuevas habilidades, nuevas herramientas y nuevas recetas. Si tomas una o dos clases, puedes mejorar drásticamente tu juego, y las clases abarcan todo, desde clases nocturnas en la universidad local hasta Le Cordon Bleu. Luego está el paso al «restaurante», que lo cambia todo. Ahora se trata de la entrega fiable y repetible de comida a personas con expectativas. La fuente, el lote, el pre-estado, la preparación y la herramienta son diferentes. La «industrialización» del proceso es «ingeniería». Y ahora formas parte de un equipo. Y hay un cliente. No importa si eres un puesto de tacos o un restaurante con estrellas Michelin, es diferente. Ninguna cantidad de trabajo en el aula te prepara completamente para todo el aprendizaje en el trabajo.
Y puedes empezar a aprender las tres cosas a la vez. Sólo tienes que entender en cuál de los tres conjuntos de habilidades estás trabajando, y no te olvides de los otros dos conjuntos de habilidades. Las dos primeras suelen venir con la práctica, pero la última viene con la experiencia.