peron:~$ cat verdaderos_programadores.txt
Ed Post
Sistemas de software gráfico
Apartado de correos 673
25117 S.W. Parkway
Wilsonville, OR 97070
Copyright (c) 1982
En los viejos tiempos - la "Era Dorada" del cómputo - era bastante sencillo distinguir entre niños y hombres. En la jerga, se los solía referir como "Afrancesados" u "Hombres Verdaderos". En aquél tiempo los Hombres Verdaderos eran quienes comprendían la programación de computadoras, mientras que los Afrancesados eran incapaces de hacerlo. Un Verdadero Programador de computadoras expresaba cosas como "DO 10 I = 1,10" y "ABEND". Realmente hablaban en mayúsculas. En tanto que el resto del mundo balbuceaba "las computadoras son demasiado complicadas para mí" o "No puedo relacionarme con las computadoras, son tan impersonales". (Un trabajo de investigación anterior [1] postula que los verdaderos Hombres no se "relacionan" con nada, y carecen del miedo a ser impersonales).
Sin embargo, como es costumbre, los tiempos cambian. Nos enfrentamos hoy a un mundo que propone que las ancianas pueden utilizar hornos de microondas computarizados, y los niños de 12 años puedan derrotar a los verdaderos hombres en las pantallas de Asteroids o Pac-Man. ¡Cualquiera puede comprar y incluso entender su propia computadora personal! ¡El verdadero programador se haya en peligro de extinción, y de verse reemplazado por estudiantes de secundaria con sus TRASH-80!
Existe por lo tanto una clara necesidad de señalar las diferencias que existen entre un típico jugador de Pac-Man de secundaria y un verdadero programador. Comprender estas diferencias ayudará a proporcionar a estas criaturas algo a lo que aspirar: un modelo a seguir, una figura paterna. También iluminará a los empleadores de los Verdaderos Programadores al distinguir el error que implicaría reemplazar a Verdaderos Programadores de su planta profesional por jugadores de Pac-Man de 12 años (con un considerable ahorro salarial).
La forma más simple de distinguir a un Verdadero Programador entre una multitud es mediante el lenguaje de programación que utiliza. Los Verdaderos Programadores emplean FORTRAN. Los Afrancesados usan PASCAL. A un tal Nicklaus Wirth - el diseñador de PASCAL - se le preguntó una vez: "¿Cómo debo llamarlo? ". Él respondió: "Podrá llamarme por mi nombre, pronunciándolo 'Veert', o bien llamarme por su valor, 'Worth'". A partir de este comentario podremos afirmar inmediatamente que Nicklaus Wirth es un Afrancesado. El único mecanismo de paso de parámetros respaldado por los Verdaderos Programadores es Llamada por Valor-Retorno, tal como se implementa en los compiladores FORTRAN G y H del IBM/370. A un Verdaderos Programadores se le hacen innecesarios los conceptos abstractos para hacer su trabajo: estará perfectamente satisfecho de consumir teclado, compilador FORTRAN IV y cerveza.
Si no puede hacerse en FORTRAN, se hacen en Ensamblador. Si no pueden hacerse en Ensamblador, no vale la pena hacerse.
De unos años a esta parte, ciertos académicos de informática han dado en meterse en la rutina de la "programación estructurada". Intentan aducir que los programas se entenderían más fácilmente si el programador diese en usar ciertas construcciones y técnicas de lenguaje especiales. Naturalmente, no todos ellos están precisamente de acuerdo en qué construcciones utilizar, por supuesto. Los ejemplos que exponen para validar su punto de vista particular invariablemente caben en una sola página de algún jornal oscuro, y claramente esto no constituye demostración suficiente para convencer a nadie. Al dejar la escuela, imaginaba ser el mejor programador del mundo. Podía escribir programas inmejorables de Ta-Te-Tí, confluir en cinco lenguajes de programación diferentes y desplegar programas de 1000 líneas que FUNCIONABAN. (¡Realmente!). Luego salí al Mundo Real. Mi primera tarea dentro del Mundo Real fue leer y comprender un programa FORTRAN de 200.000 líneas, y luego acelerarlo en un factor de 2. Cualquier verdadero programador conoce que toda la codificación estructurada en el mundo no ayudará en nada a resolver este tipo de problemas de cómputo. Hacerlo requiere Verdadero Talento.
Algunas observaciones rápidas sobre los Verdaderos Programadores y la programación estructurada:
Las estructuras de datos han sido últimamente objeto de mucha prensa. Las tipologías de datos abstractos, estructuras, punteros, listas y cadenas se han vuelto populares dentro de ciertos círculos. Wirth (el Afrancesado anteriormente mencionado) intentó escribir un libro completo [2] afirmando que podría realizar un programa capaz de producir estructuras de datos. En realidad debería haber utilizado estructuras de datos para intentar escribir un libro entero. Como todos los Verdaderos Programadores saben, la única estructura de datos útil es la Matriz. Las cadenas, listas, estructuras, y los conjuntos no son más que tipos de matrices especiales, y pueden operarse tan fácil como ellas, sin necesidad de ensuciar un lenguaje de programación. Lo peor de las tipologías de datos sofisticadas es que debe declarárselos, y los verdaderos lenguajes de programación - como todos sabemos - disponen de una tipificación implícita basada en la primera letra del nombre de la variable (de seis caracteres).
¿Qué tipo de sistema operativo utiliza un Verdadero Programador?
¿CP/M? ¡Dios no lo quiera! CP/M, después de todo, no es más que un sistema operativo para jueguitos. Incluso una anciana o un estudiante de primaria puede entender y operar CP/M.
Unix es mucho más complicado, por supuesto. El hacker típico de Unix es incapaz recordar cómo han llamado esta semana en dicho sistema al comando PRINT. Pero si lo desglosamos detenidamente, Unix no es más que un videojuego glorificado. La gente seria no hace trabajos serios en un sistema Unix. A lo sumo transmiten chistes por todo el mundo por medio del USENET o escriben juegos de aventuras de texto y papers de investigación.
No. Un Verdadero Programador opera OS/370. Un Buen Programador puede encontrar y comprender la descripción del error IJK305I que acaba de recibir en su manual de JCL. Un Gran Programador puede operar JCL sin consultar el manual. Un Verdadero Programador Sobresaliente es capaz de dar con errores enterrados en un volcado de núcleo de 6 megabytes de extemsión sin necesidad de una calculadora hexadecimal. (De hecho, he visto hacer esto).
OS/370 es un sistema operativo verdaderamente notable. Es posible destruir jornadas enteras de trabajo con sólo colocar mal un espacio, por lo que se le recomienda máxima alerta a todo el personal de programación. La mejor forma de operar este sistema es a través de un golpe al teclado. Algunos individuos afirman la existencia de un Sistema de Cómputo a Tiempo Compartido corriendo dentro de OS/370. Sin embargo, luego de estudios pormenorizados, he llegado a la conclusión de que están en un error.
¿Qué herramental utiliza un Verdadero Programador?
En teoría, un Verdadero Programador podría ejecutar sus programas operando directamente el panel frontal de su mainframe. En los días en que las computadoras disponían de paneles frontales, esto se realizaba ocasionalmente. Un Verdadero Programador introducía en hexadecimal todo el cargador de arranque en memoria, y lo corría toda vez que su programa la destruia. Esto se debía a que por aquel entonces la memoria era memoria, y no desaparecía cuando se interrumpía el suministro eléctrico. Hoy en día, la memoria olvida cosas cuando uno no lo desea, y recuerda cosas mucho después de que hubiese sido mejor olvidarlas. Seymour Cray - inventor de la supercomputadora Cray I y la mayoría de las computadoras de Control Data - al encender por primera vez el DVD7600 introdujo su primer sistema operativo directamente desde el panel frontal. Demás está decir que Seymour es un Verdadero Programador.
Uno de mis Verdaderos Programadores favoritos era un programador de sistemas que trabajaba para la Texas Instruments. Cierto día recibió una llamada de larga distancia por parte un usuario cuyo sistema se había bloqueado en medio de un trabajo importante. Jim pudo solucionar el inconveniente telefónicamente, haciendo que el usuario cambiara las instrucciones de E/S del disco por medio del panel frontal en hexadecimal, reparando así las tablas de sistema, leyendo el contenido del registro nuevamente por teléfono. La moraleja de esta historia: "si bien un Verdadero Programador incluye generalmente teclado e impresora de línea en su bolso de herramientas, en el peor de los casos puede arreglarse con solo un panel frontal y un teléfono".
En determinadas empresas, la edición de texto ya no se lleva a cabo con diez ingenieros haciendo cola para utilizar un teclado 029. De hecho, el edificio en el cual trabajo no contiene un solo teclado que aporrear. El verdadero programador que se encuentra en esta situación debe hacer su trabajo con un programa de edición de texto. La mayoría de los sistemas dan a elegir entre varios editores de texto, y el Verdadero Programador debe tener cuidado de escoger uno que refleje su estilo personal. Muchas personas sostienen que los mejores editores de texto del mundo son los escritos en el Centro de Investigación Palo Alto de Xerox para uso en sus computadoras Alto y El Dorado [3]. Desafortunadamente, ningún verdadero programador usaría una computadora cuyo sistema operativo se llama SmallTalk, y ciertamente jamás tocaría una computadora que use un ratón.
Algunos de los conceptos de estos editores de Xerox han sido incorporados en los editores que corren en sistemas operativos bautizados con nombres más razonables. Dentro de esta clase de editores, probablemente EMACS y Vi sean los más conocidos. El problema con estos editores radica en que un Verdaderos Programadores considera al concepto "lo que ve es lo que obtiene" tan inconveniente en los editores de texto como en las mujeres. No. Un Verdadero Programador anhela un editor de texto con el concepto "lo pido, lo obtengo": complicado, críptico, poderoso, implacable, peligroso. TECO, para ser precisos.
Se ha observado que una secuencia de comandos de TECO se asemeja más al ruido de línea de transmisión que a un texto legible [4].
¿Dónde trabaja un Verdadero Programador? ¿Qué tipo de programas son dignos de los esfuerzos de un individuo tan talentoso?
Téngase por seguro que ningún Verdadero Programador será sorprendido escribiendo software de contaduría en COBOL, o clasificando listas de correo para la revista People. Un verdadero programador demanda tareas de importancia que estremezcan la tierra (¡literalmente!):
Algunos de los Verdaderos Programadores más impresionantes de todos trabajan en el Laboratorio de Propulsión a Chorro en California. Muchos de ellos conocen de memoria el sistema operativo completo de la nave espacial Pioneer y Voyager. Por medio de la combinación de grandes programas FORTRAN en la Tierra y pequeños programas en lenguaje ensamblador en ejecución en las sondas espaciales, pudieron hacer increíbles hazañas de navegación e improvisación, como atravesar ventanas de diez kilómetros de ancho en Saturno después de seis años de vuelo en el espacio, o reparar plataformas de sensores, radios y baterías dañadas. Supuestamente, un Verdadero Programador logró introducir un programa de detección de coincidencia de patrones en unos pocos cientos de bytes de memoria remanente en una de las sondas espaciales Voyager, la cual buscó, localizó y fotografió una nueva luna en Júpiter.
El plan para la próxima misión de la sonda espacial Galileo será asistirse gravitacionalmente por Marte para realizar un salto que la coloque en trayectoria a Júpiter. Esta trayectoria pasará dentro de 80 +/- 3 kilómetros de la superficie de Marte. Nadie en su sano juicio confiaría en un programa escrito en PASCAL (o en programador de PASCAL) para navegar con tales tolerancias.
Como es posible ver, muchos de los Verdaderos Programadores del mundo trabajan para el Gobierno de los EE.UU., Principalmente para su Departamento de Defensa. Es así como debe ser. Recientemente, sin embargo, se ha formado una negra nube sobre el horizonte de los Verdaderos Programadores.
Parece que algunos Afrancesados encumbrados en el Departamento de Defensa decidieron que todos los programas de la Defensa deberían estar escritos en un gran lenguaje unificado llamado "ADA" (marca registrada, Departamento de Defensa). Durante un tiempo, parecía que ADA estaba destinado a convertirse en un lenguaje que iba en contra de todos los preceptos de la verdadera programación: un lenguaje estructurado, con tipos de datos, mecanografía fuerte y punto y coma. En resumen, un lenguaje diseñado para paralizar toda creatividad del Verdadero Programador típico. Afortunadamente, el lenguaje adoptado por el Departamento de Defensa tiene las suficientes características interesantes como para que ser accesible: es increíblemente complejo, incluye métodos para jugar con el sistema operativo y reorganizar la memoria, y a Edsgar Dijkstra no le gusta [6]. (Dijkstra, como estoy seguro que sabe, fue el autor de "GoTos Considerados Dañinos", un trabajo histórico en metodología de la programación, aplaudido por los programadores de Pascal y Afrancesados por igual). Además, un Verdadero Programador decidido puede escribir programas FORTRAN en cualquier lenguaje.
Un Verdadero Programador podrá comprometer sus principios y trabajar en algo un poco más trivial que la destrucción de la vida tal como la conocemos, siempre y cuando exista suficiente dinero a cambio. Existen varios Verdaderos Programadores que escriben videojuegos en Atari, por ejemplo. Pero no lo hacen para jugarlos: un Verdadero Programador ya sabe cómo vencer a la máquina: no hay desafío en hacerlo nuevamente. Todos aquellos quienes trabajan para LucasFilm son Verdaderos Programadores: sería una locura rechazar el dinero de 50 millones de fanáticos de La Guerra de las Galaxias. Por otro lado, la proporción de Verdaderos Programadores en la realización de Gráficos por Computadora es algo menor que la norma, principalmente porque aún nadie ha encontrado un uso valedero para los Gráficos por Computadora. En cambio todos los gráficos de computadora valederos está hechos en FORTRAN, por lo cual existe un buen número de personas que realizan gráficos por computadora con el único fin de evitar tener que escribir programas en COBOL.
Por regla general, un Verdadero Programador se recrea de la misma forma en la que trabaja: frente a las terminales de computadora. Se hayan constantemente anonadados de que su empleador le pague un sueldo realmente por hacer lo que de todos modos harían gratuitamente sólo por diversión. No obstante, cuidan de no expresar esta opinión en voz alta. En ocasiones, un Verdadero Programador es capaz de abandonar la oficina para respirar aire fresco y tomar una cerveza o dos.
Algunos consejos para reconocer a los verdaderos programadores fuera del centro de cómputo:
¿En qué tipo de hábitat vive un Verdadero Programador?
Esta es una importante interrogante para los gerentes de los Verdaderos Programadores. Teniendo en cuenta la cantidad de dinero que cuesta mantener uno en la nómina de personal, es mejor colocarlo en un entorno donde pueda hacer su trabajo.
El verdadero programador típico habita frente a una terminal de computadora. Alrededor de esta terminal se encontrarán:
Un Verdadero Programador es capaz de trabajar 30, 40, incluso 50 horas seguidas, bajo intensa presión. De hecho, así lo prefiere. Un Verdadero Programador no se siente molesto por los bajos tiempos de respuesta: le ofrecen una oportunidad cierta de dormitar entre compilaciones. Si no existe suficiente presión en la agenda del Verdadero Programador, tenderá a hacer las cosas más difíciles adrede, trabajando en una rutina pequeña pero interesante del problema durante las primeras nueve semanas, para luego terminar el resto durante la última semana de proyecto, a lo largo de dos o tres maratones de 50 horas. Esto no solo impresionará a su gerente - desesperado por dar término a tiempo - sino que creará una excusa altamente conveniente para no escribir la documentación.
Por regla general:
¿Qué nos depara el futuro?
Motiva cierta preocupación para los Verdaderos Programadores que la última generación de programadores de computadoras no esté siendo educada bajo los mismos preceptos y perspectivas de vida que sus mayores. Muchos de ellos no han visto jamás un mainframe dotado de panel frontal. Casi nadie que se gradúe de una escuela de hoy en día es capaz de realizar cómputo aritmético hexadecimal sin disponer de una calculadora. Los graduados universitarios actuales se escudan de las realidades de la programación mediante depuradores de código fuente, editores de texto que cuentan los paréntesis y sistemas operativos de uso sencillo. ¡Lo peor de todo es que algunos de estos presuntos informáticos han obtenido Títulos sin siquiera haber aprendido FORTRAN! ¿Estamos destinados a convertirnos en una industria de piratas informáticos de Unix y programadores de PASCAL?
Todo lo contrario. Desde mi experiencia, solo puedo informar que el futuro es brillante para los Verdaderos Programadores en todas las ramas de la industria. Ni OS/370 ni FORTRAN muestran signos de desaparición, a pesar de todos los esfuerzos de los programadores de PASCAL en todo el mundo. Incluso han fallado trucos aún más sutiles, como agregar construcciones de codificación estructuradas a FORTRAN. Oh, claro, algunos fabricantes de computadoras han lanzado compiladores FORTRAN 77, pero cada uno de ellos dispone de una forma de volver a convertirse en un compilador FORTRAN 66 al ingresar un wildcard opcional: a fin de compilar bucles DO como Dios lo quiso...
Incluso Unix podría no ser tan malo para los Verdaderos Programadores como alguna vez lo fue. Después de todo, la última versión de Unix dispone del potencial de un sistema operativo digno de cualquier Verdadero Programador. Tiene dos interfaces de usuario diferentes y sutilmente incompatibles, un controlador de terminal arcano y complicado, memoria virtual. Si ignora el hecho de que está estructurado, incluso un Verdadero programador puedría apreciar su programación en C. Después de todo, carece de verificación de tipo, los nombres de las variables tienen siete (¿diez? ¿ocho?) caracteres de largo, e incluye la ventaja adicional de tipología de datos del puntero. Equivale a contar con lo mejor de FORTRAN y el lenguaje ensamblador en un solo mundo (sin mencionar algunos de los usos más creativos para el #define).
No, el futuro no se presenta tan opaco. ¿Por qué, en los últimos años, la prensa popular incluso ha comentado sobre la nueva y brillante cosecha de nerds y hackers informáticos ([7] y [8]) dejando lugares como Stanford y el M.I.T. para el mundo real? Según todas las evidencias, el espíritu de la Verdadera Programación sigue vivo en estos jóvenes hombres y mujeres. Mientras existan objetivos mal definidos, errores extraños y horarios poco realistas, existirán Verdaderos Programadores dispuestos a participar y resolver el problema, dejando la documentación para más adelante. ¡Viva FORTRAN!
Me gustaría agradecer a Jan E., Dave S., Rich G., Rich E. por su ayuda en la caracterización del Verdadero Programador, Heather B. por la ilustración, Kathy E. por soportarlo, y Mark Ada por la inspiración inicial.
peron:~$ █