viernes, febrero 15, 2008

De Arquitectos y Albañiles

Durante mis años de universitario existía una preocupación (casi una obsesión) de muchos docentes por transmitirnos la importancia de ser “Ingenieros”. Y como suele ser habitual a la hora de diferenciarse, se busca siempre de qué diferenciarse: los “programadores” (léase con tono despectivo, el mismo con el que nos lo pronunciaban a nosotros). No dejaba de parecerme paradójico en una carrera donde gran parte del contenido práctico era la programación nos dijesen que la peor chusma eran los programadores.

Para cualquier discurso hay justificación y en este caso la encontraron en una analogía con otra titulación: la de Arquitecto. Nos formaban como arquitectos y no como albañiles, decían; el programador ponía ladrillos. Nosotros haríamos planos, nada de mancharse las manos con el cemento…

En general (digo “en general” porque nunca se puede ser extremista y en el mundo del software menos) estoy en desacuerdo con esa teoría.

Me cuesta creer que alguien pueda diseñar una arquitectura multicapa, o aplicar buenos patrones de diseño si nunca ha construido eso. Sigo pensando que la mejor forma de entender un diseño o un patrón es haberlo implementado. Hoy, todavía, un buen ingeniero del software, en general, debe ser o ha tenido que ser en algún momento un buen programador.

Quizás dentro de algunos años se logre un nivel de madurez, de ingeniería, en el desarrollo de software permita equipar el trabajo de un ingeniero software a la un arquitecto (arquitecto del mundo físico quiero decir), y quizás estemos dando ya los primeros pasos para ello, pero nos queda mucho camino por recorrer.

Por otra parte, hasta creo cuestionable que la evolución hacía una ingeniería de verdad, o madura (hoy estamos más cerca del trabajo de un artesano) sea necesariamente alejarse del código. ¿Sería posible haber producido Google sólo mediante planos, sin haber tirado líneas de código y haber ajustado los algoritmos a golpe de programación? No, y no hace falta tomar Google como ejemplo..

Por muchas herramientas para generar código y diseñar planos que construyamos en los próximos años, el constante grado de innovación tecnológica que caracteriza al desarrollo del software junto con la propia naturaleza del software requiere ingenieros muy preparados para construir (diseñar y programar) ese software con esas tecnologías. Es esa naturaleza abstracta la que invalida la comparación con arquitectos y albañiles.

Tendremos casos en los que la programación se convierta en algo tan poco diferencial como pueda serlo el agua o la luz, pero también habrá ámbitos en los que la programación no llegue a convertirse en la commodity que llevamos años anticipando. Sí es cierto que cada vez lo será más, pero nunca del todo.

Y esto lo digo yo, que llevo años sin tirar ni una sola línea de código…