LOS VERDADEROS PROGRAMADORES NO USAN PASCAL

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). LENGUAJES

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.

    Un verdaderos programador hace su procesamiento de listas en
    FORTRAN. Un verdaderos programador hace su manipulación de cadenas
    en FORTRAN. Un verdaderos programador hace su contabilidad (si la
    requiere) en FORTRAN. Un verdaderos programador hace sus programas
    de inteligencia artificial en FORTRAN.

Si no puede hacerse en FORTRAN, se hacen en Ensamblador. Si no pueden
hacerse en Ensamblador, no vale la pena hacerse. PROGRAMACIÓN
ESTRUCTURADA

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:

    Un verdadero programador carece de miedo a usar GOTO. Un verdadero
    programador puede escribir bucles DO de cinco páginas sin
    confundirse. Un verdadero programador disfruta de las declaraciones
    aritméticas IF porque hacen que el código sea más interesante. Un
    verdadero programador escribe código automodificable, especialmente
    si le ahorra 20 nanosegundos en medio de un ciclo cerrado. Un
    verdadero programador no usa comentarios: el código es obvio. Dado
    que FORTRAN carece de una declaración estructurada IF, REPEAT ...
    UNTIL o CASE, un verdaderos programador no necesita preocuparse por
    usarlas. Por demás, si fuese necesario podría simularlas utilizando
    asignaciones GOTO.

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). SISTEMAS OPERATIVOS

¿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. HERRAMIENTAS DE PROGRAMACION

¿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]. UN VERDADERO
PROGRAMADOR EN EL TRABAJO

¿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!):

    Un verdaderos programador trabaja para el Laboratorio Nacional de
    Los Alamos, escribiendo simulaciones de bombas atómicas para
    ejecutar en supercomputadoras Cray I. Un verdaderos programador
    trabaja para la Agencia de Seguridad Nacional, decodificando
    transmisiones rusas. Ha sido en gran parte debido a los esfuerzos de
    miles de verdaderos programadores que trabajaban en la NASA que
    nuestros muchachos llegasen a la luna y pudieran regresar antes que
    los cosmonautas. Las computadoras del transbordador espacial fueron
    programadas por verdaderos programadores. Los programadores que
    trabajan en Boeing han diseñado los sistemas operativos para misiles
    de crucero.

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. LOS VERDADEROS PROGRAMADORES EN EL JUEGO

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 una fiesta, un Verdaderos Programador es quien está en el rincón
    hablando sobre la seguridad del sistema operativo y cómo
    solucionarlo. En un juego de fútbol, o Verdadero Programador compara
    las jugadas con sus simulaciones impresas en papel continuo. En la
    playa, un Verdadero Programador dibuja diagramas de flujo en la
    arena. En la discoteca, el verdadero programador analiza los
    patrones de luces parpadeantes. En un funeral, un verdadero
    programador dice "Pobre George. Y casi tenía la rutina de trabajar
    antes de la coronaria". En un supermercado, un Verdadero Programador
    insiste en escanear los productos a través del láser él mismo, pues
    nunca ha posido confiar en que las cajeras lo hicieran
    correctamente.

EL HABITAT NATURAL DEL VERDADERO PROGRAMADOR

¿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:

    Listados de todos los programas en los que Verdadero Programador ha
    trabajado alguna vez en su vida, apilados en un orden cronológico
    aproximado en cada superficie plana de la oficina. Aproximadamente
    media docena de tazas de café frío parcialmente llenas.
    Ocasionalmente, habrá colillas de cigarrillos flotando en el café.
    En algunos casos, las tazas contendrán Crush de naranja. A menos que
    sea muy bueno, habrá copias del manual OS JCL y los Principios de
    Funcionamiento abiertos en algunas páginas particularmente
    interesantes. Colgado en la pared habrá un calendario de Snoopy de
    1969 impreso con impresor de líneas. Esparcidos por el piso habrá
    varias envolturas de barras de chocolates rellenas de mantequilla de
    maní. Escondido en el cajón superior izquierdo del escritorio habrá
    una pila de Oreos dobles para ocasiones especiales. Debajo de las
    Oreos habrá una plantilla de diagrama de flujo, dejada allí por el
    ocupante anterior de la oficina. (Los verdaderos programadores
    escriben programas, pero no documentación. Eso debe dejarse al
    personal de mantenimiento).

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:

    Ningún Verdadero Programador trabaja de 9 a 5. (A menos que sean las
    9 de la noche y las 5 de la mañana). Un verdadero programador no usa
    corbata. Un verdadero programador no usa zapatos de tacón alto. Un
    verdadero programador llega al trabajo a tiempo (para el almuerzo).
    [9] Un verdadero programador puede o no saber el nombre de su
    esposa. Sin embargo, conocerá toda la tabla de códigos ASCII (o
    EBCDIC). Un verdadero programador no sabe cocinar. Los minimercados
    a menudo no abren a las 3 de la mañana, por lo que sobreviven con
    Twinkies y café.

EL FUTURO

¿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! RECONOCIMIENTOS

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.


Referencias

    [1] Feirstein, B., "Los hombres de verdad son afrancesados", Nueva
    York, Pocket Books, 1982. [2] Wirth, N., "Algoritmos + Estructuras
    de Datos = Programas", Prentice Hall, 1976. [3] Editores Xerox
    PARC... [4] Finseth, C., "Teoría y práctica de editores de texto - o
    - un libro de cocina para el EMACS", Tesis B.S., MIT / LCS / TM-165,
    Instituto de Tecnología de Massachusetts, mayo de 1980. [5]
    Weinberg, G., "La Psicología de la Programación de Computadoras",
    Nueva York, Van Nostrabd Reinhold, 1971, página 110. [6] Dijkstra,
    E., "Sobre el lenguaje ADA presentado al Departamento de Defensa",
    Jornal Sigplan, Volumen 3, Número 10, octubre de 1978. [7] Rose,
    Frank, "El goce del hacking", Science 82, Volumen 3, Número 9,
    noviembre de 1982, páginas 58-66. [8] "Los papers del Hacker",
    Psicología Hoy, agosto de 1980. [9] Datamation, julio de 1983, págs.
    263-265.