NOTA: Traducción de Capítulo 1 Frederick P. Brooks, The Mythical Man-Month, Chapter 1, Addison-Wesley, 1975.

Frederick P. Brooks murió este 17 de noviembreThe Mythical Man-Month fue uno de primeros libros que leí de Ingeniería de Software. Mucho de estos conceptos siguen vigentes hoy, 45 años después.

Esta traducción es un homenaje a Brooks.

Fred Brooks.jpg Mythical man-month (book cover).jpg

Los gozos del oficio

¿Por qué es divertido programar? ¿Qué delicias puede esperar su practicante como recompensa?

Primero está el puro gozo de hacer cosas. Así como el niño se deleita con su pastel de barro, el adulto disfruta construyendo cosas, especialmente cosas de su propio diseño. Creo que este deleite debe ser una imagen del deleite de Dios al hacer las cosas, un deleite que se muestra en la distinción y novedad de cada hoja y cada copo de nieve.

El segundo es el placer de hacer cosas que son útiles para otras personas. En lo profundo, queremos que otros usen nuestro trabajo y lo encuentren útil. En este sentido, el sistema de programación no es esencialmente diferente del primer portalápiz de arcilla del niño «para la oficina de papá».

En tercer lugar, está la fascinación de crear objetos complejos parecidos a un rompecabezas con partes móviles entrelazadas y verlos funcionar en ciclos sutiles, interpretando las consecuencias de los principios incorporados desde el principio. La computadora programada tiene toda la fascinación de la máquina de pinball o del mecanismo de la máquina toca discos, llevada al extremo.

En cuarto lugar está la alegría de aprender siempre, que surge de la naturaleza no repetitiva de la tarea. De una forma u otra, el problema es siempre nuevo y su solucionador aprende algo: a veces práctico, a veces teórico, y a veces ambos.

Finalmente, está el placer de trabajar en un medio tan manejable. El programador, como el poeta, trabaja sólo ligeramente alejado del puro pensamiento. Construye sus castillos en el aire, desde el aire, creando por el esfuerzo de la imaginación. Pocos medios de creación son tan flexibles, tan fáciles de pulir y reelaborar, tan fácilmente capaces de realizar grandes estructuras conceptuales…

Sin embargo, la construcción del programa, a diferencia de las palabras del poeta, es real en el sentido de que se mueve y funciona, produciendo resultados visibles separados de la construcción misma. Imprime resultados, hace dibujos, produce sonidos, mueve brazos. La magia del mito y la leyenda se ha hecho realidad en nuestro tiempo. Uno escribe el conjuro correcto en un teclado y una pantalla cobra vida, mostrando cosas que nunca fueron ni podrían ser.

Entonces programar es divertido porque gratifica los anhelos creativos construidos en lo más profundo de nosotros y deleita las sensibilidades que tenemos en común con todos los hombres.

Las penas del oficio

Sin embargo, no todo es placer, y conocer los males inherentes hace que sea más fácil soportarlos cuando aparecen.

Primero, uno debe funcionar perfectamente. La computadora también se asemeja a la magia de la leyenda en este aspecto. Si un carácter, una pausa, del conjuro no está estrictamente en la forma adecuada, la magia no funciona. El ser humano no está acostumbrado a ser perfecto, y pocas áreas de la actividad humana lo exigen. Ajustarme al requisito de la perfección es, creo, la parte más difícil de aprender a programar.

Luego, otras personas establecen los objetivos de uno, proporcionan los recursos y proporcionan la información. Uno rara vez controla las circunstancias de su trabajo, o incluso su objetivo. En términos de gestión, la autoridad de uno no es suficiente para su responsabilidad. Sin embargo, parece que en todos los campos, los trabajos donde se hacen las cosas nunca tienen una autoridad formal acorde con la responsabilidad. En la práctica, la autoridad real (a diferencia de la formal) se adquiere a partir del ímpetu mismo del logro.

La dependencia de los demás tiene un caso particular que es especialmente doloroso para el programador. Depende de los programas de otras personas. Estos a menudo están mal diseñados, mal implementados, entregados de forma incompleta (sin código fuente o casos de prueba) y mal documentados. Así que debe pasar horas estudiando y arreglando cosas que en un mundo ideal estarían completas, disponibles y usables.

El siguiente problema es que diseñar grandes conceptos es divertido; encontrar pequeños errores es solo trabajo. Con cualquier actividad creativa vienen horas aburridas de trabajo tedioso y minucioso, y la programación no es una excepción.

Luego, uno encuentra que la depuración tiene una convergencia lineal, o peor, donde uno de alguna manera espera un tipo de enfoque cuadrático hacia el final. Por lo tanto, las pruebas se prolongan una y otra vez, y los últimos errores difíciles tardan más en encontrar que los primeros.

El último ay, y a veces el colmo, es que el producto en el que uno ha trabajado durante tanto tiempo parece estar obsoleto al terminar (o antes). Los colegas y competidores ya están en la búsqueda de nuevas y mejores ideas. Nuestra criatura intelectual ya tiene fecha de caducidad.

Esto siempre parece peor de lo que realmente es. El producto nuevo y mejor generalmente no está disponible cuando uno completa el suyo propio; sólo se habla de él. Requerirá meses de desarrollo. El tigre de papel siempre parece mejor que el real, a menos que se desee un uso real. Entonces las virtudes de la realidad tienen una satisfacción propia.

Por supuesto, la base tecnológica sobre la que uno construye siempre está avanzando. Tan pronto como uno congela un diseño, se vuelve obsoleto en términos de sus conceptos. Pero la implementación de productos reales exige fases y métricas. La obsolescencia de una implementación debe medirse frente a otras implementaciones existentes, no frente a conceptos no realizados. El desafío y la misión son encontrar soluciones reales a problemas reales en cronogramas reales con los recursos disponibles.

Esta es entonces la programación, tanto un pozo de alquitrán en el que muchos esfuerzos han fracasado como una actividad creativa con alegrías y aflicciones propias. Para muchos, las alegrías superan con creces las penas….