viernes, 20 de septiembre de 2013

¿Ingeniero de Software o Programador?

Hola comunidad. Decidí comenzar, con la pregunta que da título a este, una serie de artículos sobre ingeniería de software, programación y buenas prácticas en sentido general. A pesar del tiempo la interrogante sigue siendo polémica; fundamentalmente cuando nos estamos introduciendo en una especialidad tan amplia como la informática donde, muchas veces, desde cada posición se tiende a menospreciar la importancia del trabajo del otro.

clip_image002Y la pregunta en cuestión para mí sólo tiene una respuesta: AMBOS. No sólo porque son imprescindibles para desarrollar un software de calidad, sino porque, si somos capaces de conocer ambos desempeños seremos mucho mejores programadores e ingenieros de software.

En los inicios de lo que conocemos actualmente como industria del software, los primeros roles establecidos fueron el de analista y programador, en el intento de salir de la era del desarrollo de software “artesanal”. Estos roles aún existen por sus nombres, pero para aquel entonces sus competencias eran mucho más limitadas. El analista tenía como responsabilidad conocer paso a paso la actividad que se deseaba automatizar, la describía en papel detalladamente y era entonces que el programador, con sus conocimientos del lenguaje, las traducía a un programa. Dado que los problemas de comunicación entre estos roles eran considerables, la tendencia fue que el analista conociera de programación para manejar los mismos términos que el programador y que este, a su vez, conociera de la concepción de un programa para que no fuera sólo un traductor, sino un agente activo en la mejora del mismo. Ese proceso de interdisciplinariedad generó una expansión de ambos perfiles y tuvo como resultado el surgimiento de nuevos roles en la ingeniería de un proceso de desarrollo de software cada vez más depurado.

Actualmente, un programador tiene dominio de uno o más lenguajes y sus herramientas, que cada vez son más acabadas y complejas e incluyen definiciones arquitectónicas y patrones de diseño que, inevitablemente, llevan a que el programador esté cada vez más cerca del conocimiento integral del desarrollo de un sistema. Por lo que, si como programador tengo los conocimientos ingenieriles necesarios, se eleva mi rendimiento y obtengo como resultado calidad y eficiencia.

Por otro lado, desde mi punto de vista, un ingeniero de software sin experiencia de programación se verá muy limitado en el desempeño de los diferentes roles para los que supuestamente fue preparado. Pudiera enumerar un conjunto de situaciones frecuentes en las que se vería sumamente limitado su desempeño:

  1. ¿Cómo podría definir el flujo de un proceso a automatizar sin contar con un pensamiento orientado a objetos que dé un acabado al análisis del problema y sea el punto de partida al diseño?
  2. ¿Con qué base pudiera definirse la arquitectura de un sistema y tomar las decisiones arquitectónicas que se requieran en su desarrollo?
  3. ¿Cómo definir un diseño de clases correctamente y decidir que patrones quiero aplicar?
  4. ¿Cómo pudiera crear un diagrama UML de secuencias con las correspondientes llamadas entre clases sin saber que eso que está escribiendo “no compila”?
  5. ¿Cómo pudiera definir correctamente para un problema qué algoritmo utilizar y su complejidad?
  6. ¿Cómo definir correctamente pruebas de caja blanca?
  7. ¿Cómo liderar con efectividad un equipo de programadores sin saber qué es lo que hacen?

En general, salvo algunos roles que pudiera desempeñar con escasos o nulos conocimientos de programación, el ingeniero de software degenera a poco más que a ese primer analista que hablé existía en un principio, negando todos estos años de evolución del proceso de desarrollo de software, donde el ingeniero es quien lo hace posible.


¿Te ha gustado este Post? Compártelo con tus amigos.

No hay comentarios:

Publicar un comentario

IconIconIcon