Un programador es alguien que conoce el lenguaje de programación utilizado en un proyecto. El crea código. Más y más código. Este es más o menos el nivel al que se llega en una escuela mediocre. Puedes escribir código, casi siempre funciona, la mayor parte del tiempo.
Un ingeniero de software es alguien que puede realizar el proceso completo de creación y soporte de software en un proceso moderno y bien estructurado. Esta persona puede formular y entender los requisitos, crear un diseño, revisar los diseños creados por otros. Puede escribir código, puede revisar el código. Puede crear casos de prueba para un sistema de prueba automatizado. Puede corregir errores. Pueden responder a los problemas que surgen sobre el terreno una vez que se ha lanzado el producto. Pueden entender y gestionar el proceso de creación de la siguiente versión de una pieza de software.
El nivel de habilidad y conocimiento que se necesita para ser un buen ingeniero de software es aproximadamente el triple que el de la programación.
La programación es un subconjunto de la ingeniería de software. Si quieres ser un buen ingeniero de software, la programación es la habilidad más básica y más importante. Puedes enseñarte a ti mismo a programar. Lee algunos libros, escribe algo de código. Por lo general, se necesita algo de experiencia laboral para aprender la ingeniería de software.
Cuando una empresa de alta tecnología comienza a tener dificultades relacionadas con el negocio, es probable que se deba a que no entendieron la distinción entre la programación y la ingeniería de software.
Un ingeniero no comienza a construir algo hasta que se ha convencido de que la cosa se puede construir, y funcionará. Es como construir un puente. No se vierte el hormigón hasta que los cálculos están completos, estamos seguros de que funcionará.
Los programadores tienden a empezar a codificar de inmediato. A veces esto funciona.