¿Por qué es divertido programar? ¿Qué recompensa esperan obtener quienes programan? Frederick Brooks, autor del clásico The mythical man-month, reflexiona sobre el arte de la programación, las cosas positivas que generan la pasión por esta actividad, y también los contratiempos y problemas inherentes que surgen casi de forma inevitable.
Lo positivo del arte
Primero, es simplemente disfrutar creando cosas. Así como los chicos disfrutan con sus tortas de barro, los adultos disfrutna construir cosas, especialmente cosas que ellos mismos hayan diseñado. Supongo que esta alegría surge como imagen del goce de Dios en hacer cosas, una pasión que se ve en la frescura y originalidad de cada hoja y cada copo de nieve.
Segundo, es el placer de crear cosas que resultan útiles para otras personas. Muy adentro nuestro, queremos que otros usen nuestro trabajo y lo encuentren de utilidad. En este aspecto, programar sistemas es esencialmente igual al primer portalápices de madera que arma un niño con el texto "para la oficina de papá".
Tercero, es la fasinación de imaginar objetos complejos de diferentes partes móviles, que funcionan como un reloj, y poder verlos en funcionamiento en ciclos, viendo las consecuencias de los distintos principios que construimos de antemano. Un computadora programada genera la misma fasinación que los mecanismos de un pinball o un jukebox, llevados al extremo.
Cuarto, es la alegria de aprender algo siempre, que se deriva de la naturaleza no repetitiva de las tareas. De una forma u otra el problema es siempre nuevo, y quien lo resuelve aprende algo: a veces práctico, a veces teórico, a veces ambos.
Por último, está la alegría de trabajar en un medio tan seguible. El programador, como el poeta, trabaja apenas alejado del pensamiento puro. Construye sus castillos en el aire, de aire, creados por el uso de su imaginación. Hay pocos medios de creación que son tan flexibles, tan fáciles de pulir y retrabajar, tan fáciles para crear grandes estructuras conceptuales.
Y sin embargo, la construcción de un programa, a diferencia de las palabras del poeta, es real en el sentido de que se mueve y trabaja, produce salidas visibles independientes de la construcción en si misma. Imprime resultados, realiza dibujos, genera sonidos, mueve brazos. La magia del mito y la leyenda se ha vuelto realidad en nuestros tiempos. Si se escribe el encantamiento correcto en un teclado, una pantalla va a cobrar vida y mostrará cosas que nunca fueron ni podían ser.
Entonces, la programación es divertida porque satisface las necesidades creativas que viven dentro de nosotros, y deleita sentidos que tenemos en comun con todos los hombres.
Los contratiempos del arte
Sin embargo, no todo es disfrutar, y conocer los contratiempos que existen hace que resulta más facil poder superarlos.
Primero, debemos ejecutar todo a la perfección. La computadora también se parece a la magia de las leyendas también en este aspecto. Si algo de la encantación no está estrictamente en su forma correcta, la magia no funciona. Los seres humanos no estamos acostumbrados a ser perfectos, y hay pocas áreas de la actividad humana que lo demanden. Creo que el tener que ajustar el requerimiento a la perfección es la parte más dificil de aprender a programar.
Por otro lado, otras personas nos establecen nuestros objetivos, nos brindan los recursos y la información. Muy raramente uno puede controlar las circunstancias de su trabajo, o su objetivo. En términos de gestión, la autoridad que uno tiene no es suficiente para su responsabilidad. Sin embargo, pareciera que en todos los campos donde el trabajo se realiza, nunca hay una autoridad formal proporcional a la responsabilidad. En la práctica, la autoridad real (en contraste con la formal) se adquiere por los mismos hechos de los logros.
La dependencia con terceros es un caso particularmente doloroso para el programador de sistemas. Depende de los programas de otras personas. En general estos programas están mal diseñados, implementados pobremente, entregados de forma incompleta (sin código fuente o casos de prueba), y con documentación pobre. Así que debemos pasar horas estudiando y arreglando cosas que en un mundo ideal estarían completas, disponibles y utilizables.
Otro contratiempo es que resulta divertido diseñar grandes conceptos; pero encontrar pequeños bugs es sólo trabajo. Con cualquier actividad creativa vienen las temidas horas de tedioso trabajo, y la programación no es una excepción.
Luego, uno se da cuenta que el debug tiene una convergencia lineal, o peor, cuando alguien espera una aproximación cuadrática hacia el final. Así el testing se demora cada vez más, y los últimos bugs dificiles llevan más tiempo de resolver que los primeros.
El último problema es que el producto sobre el cual uno estuvo elaborando por largo tiempo parece ser obsoleto antes de estar terminado. Seguro que ya existirán colegas y competidores que están en búsqueda de ideas nuevas y mejores.
Esto siempre parece peor de lo que realmente es. En general, este producto nuevo y mejor no está disponible cuando uno termina el propio; tan sólo es una idea. También va a necesitar meses de desarrollo.
Por supuesto que la base tecnológica sobre la que construimos siempre está avanzando. Ni bien se congela el diseño se vuelve obsoleto en términos de sus conceptos. Pero la implementación de productos reales requiere de establecer fases y cuantificar. Se tiene que medir la obsolecencia de la implementación contra otras implementaciones existentes, no contra conceptos sin realizar. El desafio y la misión es encontrar soluciones reales a problemas reales, en tiempos coherentes con los recursos disponibles.
Esto es la programación, una actividad creativa con todas las alegrías y contratiempos propios. Por suerte, para muchos las alegrías superan ampliamente a los contratiempos.