Programar vs. ingeniería de software

Lamentablemente no existe una definición oficial. La mejor que yo he leído es la de Russ Cox, quien es parte del equipo que desarrolla el lenguaje de programación Go en Google, y dice así:

Ingeniería de software es lo que le pasa a la programación cuando le agregas tiempo y otros programadores.1

Programar es escribir código para resolver un problema. Es como aquella vez que tenias que migrar millones de registros y escribiste un script. O cuando hiciste tu propia aplicación para administrar a quien le has prestado tus libros. En ambos casos viste el proyecto finalizado, le diste uso y quizás algunas actualizaciones pero hasta ahí. El software cumplió su función. Lo cual me lleva a hacer esta observación: no todo el software es escrito con la intención de que perdure.

Sin embargo cuando necesitas que a) dichos programas corran constantemente y que evolucionen, y/o que b) otros programadores, con diferentes niveles de experiencia y trasfondo, trabajen con el código fuente. Entonces programar no es suficiente. Ingeniería de software es programar y que el código fuente sobreviva el paso del tiempo y de las personas que trabajan en dicho código.

Con esta definición no quiero desacreditar a un programador, programar en si ya es una tarea difícil que require tener fuertes habilidades técnicas. Pero pienso que es importante diferenciar entre estos dos perfiles ya que no cualquier programador hace bien el trabajo de ingeniero de software ni viceversa. Nuestra industria todavía es muy joven y estoy seguro que con el paso del tiempo iremos viendo nuevos perfiles aparecer.