jueves, octubre 18, 2007

El programador (una apología)

Me apetece hacer apología del puesto de programador, porque creo que es necesario por dos motivos fundamentales y relacionados: no se le considera un puesto apetecible por ser jerárquicamente bajo y no se tiene conciencia de que la experiencia en la programación sea útil. En resumen, que el puesto de programador no se considera de futuro[1]. Pero no es el futuro profesional del programador[2] de lo que quiero hacer apología, sino de la labor del programador en si: difícil pero necesaria y apasionante[3].

Los buenos programadores son imprescindibles para que este mundo funcione. En la eterna, manida y estéril discusión de las atribuciones profesionales se suele denostar la labor de programador en favor de la figura del arquitecto de software. No voy a entrar aquí en lo importante de una buena dirección y coordinación en un proyecto de desarrollo (que lo es), sino de lo importante que es el trabajo de base. Porque el de programador en un puesto intrínsecamente bajo desde el punto de vista jerárquico. ¿Significa eso que es un trabajo rutinario, sin retos ni creatividad? En absoluto. Es un trabajo muy decisivo, a veces creativo y de gran responsabilidad casi por definición.

Es difícil porque hacer software es intrínsecamente difícil[4][5] Y el creer que toda la dificultad se puede abstraer del programador hacia arriba en la jerarquía no deja de ser una especie de pensamiento mágico alejado de toda realidad. Es prácticamente imposible hacer un análisis y diseño completos sin resquicios y teniendo en cuenta todos los detalles del sistema final, tanto funcionales como de rendimiento y seguridad. Es muy frecuente que aparezcan aspectos dependientes de que la implementación sea óptima y adecuada al uso del sistema final.

Es de una gran responsabilidad porque, entre otras cosas, es muy fácil hacerlo mal y no es trivial descubrirlo[6]. El programador moldea con sus manos el sistema final que va estar funcionando, transforma en realidad, en funcional, un concepto ideal. Y es el que más directamente que se da de bruces con las limitaciones del mundo real, de las herramientas y los sistemas. Es el que, si es brillante, es capaz de dar soluciones a esas limitaciones o al menos no acrecentarlas. Pero un programador no muy hábil o simplemente poco disciplinado o descuidado puede provocar errores, tanto fáciles de detectar como demasiado sutiles para ser detectados cuando deben, en la fase más temprana posible del desarrollo.[7]

Tengo que decir que lo que yo entiendo por programador es lo que a veces se denomina "desarrollador", algo un poco más amplio que solo tirar líneas, pero me niego a renunciar a usar el término: me gusta decir programador, me gusta programar.

[1] Y es posible que no lo sea :( Me gustaría pensar que, por lo que cuento después, lo es.
[2] Bueno, hay muchos futuros dentro del desarrollo. Uno, ascender. Otro, especializarse. Pero bueno del futuro profesional prefiero que hablen los comentaristas...
[3] Obviamente hay mucho que comentar de los aspectos sociales del programador, que pueden condicionar, pero no hablaré de ellos. Para saber más pasa por aquí ( bueno, o por aquí)
[4] "The complexity of software is an essential property, not an accidental one. Hence, descriptions of a software entity that abstract away its complexity often abstract away its essence" No silver Bullet, Frederick P. Brooks
[5] Un poco más actual: Software Is Hard, Kyle Wilson
[6] Me gusta mucho la frase de Brian Kernighan: "Depurar es el doble de difícil que escribir el código por primera vez. Entonces, si escribes código tan inteligentemente como te sea posible, no vas a ser, por definición, suficientemente listo para depurarlo" Depurar es otra habilidad quizás no demasiado valorada del programador experto.
[7] Metodologías de desarrollo y/o testeo adecuadas y acordes con el proyecto aceleran la caza de errores, pero la disciplina y experiencia del programador son la base del desarrollo de calidad.

"El programador (una apología)" en barrapunto

3 comentarios:

Betawriter dijo...

Muy acertada reflexión desde mi punto de vista. Por aportar algo, yo creo que el "problema" viene de diversas partes.

Primero, de la propia definición (ya obsoleta) de "programador", todavía en la mente de todos. Esa persona que recibe "algo" y sigue ciégamente las instrucciones para producir un resultado. Una especie de compilador humano. En estos tiempos, si eso fuera así, dicha figura no existiría. Cualquiera que haya realizado un proyecto mediano sabe que el programador es imprescindible y que no se dedica únicamente a "codificar".

Segundo, el propio desprestigio "gremial" que comentas, muy relacionado con el primero. Ya en los centros de formación y por supuesto en los centros de trabajo, el programador siempre es la escala más baja, el de menor creatividad, el más sustituible y alquien que no necesita de formación ni experiencia.

Tercero, la soledad y la dificultad del trabajo. Estar siempre programando quema y los problemas de programación habituales suelen ser muy aburridos.

Cuarto y último, la poca satisfacción, reconocimiento social y recompensa. Tanto a nivel económico, como de "prestigio". Prestigio que suele ir a parar siempre en la misma dirección: la gente que tuvo o vendió la idea y los software astronauts :) que "hicieron posible" el producto, aunque buena parte de la definición final y funcionalidades hayan sido rediseñadas por los programadores, como es habitual.

La prueba de todo esto es clara. Incluso a los programadores más vocacionales les gusta hacerlo con moderación, en sus ratos libres o como diversión. Probar nuevos lenguajes, plataformas, o desarrollar para su uso y disfrute personal.

Casi todos, incluso los que más la defienden en todos los sentidos, han escapado de la programación "empresarial" o "a tiempo completo" en cuanto han podido: a sistemas, a jefe de proyectos, a consultor, a profesor/formador, a comercial, etc...

Es algo que siempre me ha resultado muy, muy curioso :)

Daniel dijo...

Bravo !
Comparto al 100% tu opinión.

A veces parece (a ojos de los demas) que somos automatas realizando una tarea en la que las "cosas" se crean casi solas o sin ningun esfuerzo por nuestra parte.

Creatividad y experiencia es por encima de todo, fundamental, y eso solo es sinonimo de horas y horas desarrollando y aprendiendo.

mig21 dijo...

Hola BW

Gracias por tu comentario. Estupendo y de acuerdo con él

Me gustaría también hacer referencia a tu reflexión posterior Software Practices - Sandwich Design. ¡Me ha gustado mucho! Va más allá de lo que trato aquí y se adentra en las metodologías de desarrollo, tema apasionante ;)

daniel: Gracias por el comentario. Si, creo que es necesaria una pequeña reinvindicación de lo importante del trabajo sucio del programador. Lo malo es que estas reinvindicaciones solo las leemos nosotros ;)