El mito del programador
Considerando la distinción histórica entre codificador y programador.
El origen del mito del
programador
La distinción entre codificador y programador se
originó en el famoso informe Planificación y codificación de problemas
para un instrumento de computación electrónica de Herman H. Goldstine
y John von Neumann. En él se dan cuatro etapas jerárquicas para la
planificación y la codificación. En la parte superior se encuentra la “etapa
matemática” para la derivación de la forma algorítmica de un problema
matemático. Esta etapa era exclusiva para el matemático y “no tiene nada que
ver con la computación ni con las máquinas”. Después de esto, “puede
comenzar la codificación propiamente dicha”, subdividida en tres etapas:
- Una
etapa macroscópica o dinámica que
captura los aspectos dinámicos o el flujo de un cálculo, incluyendo
bucles, condicionales y modificaciones de direcciones formalizadas
mediante un diagrama de flujo;
- una
etapa microscópica o estática que se
ocupa de la codificación real de cada cuadro de operación del diagrama de
flujo; y
- la
última etapa que consiste (en su mayoría) en asignar ubicaciones de
memoria y conversión a binario
La elaboración de un diagrama de flujo (etapa 1)
debería ser “una tarea rutinaria” para “toda persona con una formación
matemática moderada”. En cuanto a la codificación estática (etapa 2), “una
cantidad moderada de experiencia” la convertirá en “una operación perfectamente
rutinaria”. Después de algunos preparativos, la codificación se convierte en
“operaciones de relleno que pueden efectuarse mediante un único pasaje lineal
sobre toda la secuencia codificada”. La distinción entre la etapa 1 y la 2
proporcionaría el modelo para la distinción entre programación (a menudo
equiparada a planificación o diagrama de flujo) y codificación (es decir,
traducir un diagrama de flujo en instrucciones codificadas para la máquina).
¿Por qué von Neumann y Goldstine querían que la
planificación y la codificación estuvieran separadas? Se explica por su
experiencia con la organización del trabajo para el cálculo
manual. Goldstine conocía el exitoso esquema utilizado para el cálculo
manual de las tablas de tiro en el campo de pruebas de Aberdeen. Rediseñado
poco después de la Primera Guerra Mundial, utilizaba una clara división del
trabajo. Primero estaba la teoría matemática y sus algoritmos, luego
estaban las “hojas de cálculo” (Formulario 5041) que describían paso a paso lo
que las computadoras humanas (soldados o lugareños con calificaciones
razonablemente buenas en aritmética) tenían que hacer. Siguiendo las órdenes de
control de las hojas de cálculo, las computadoras humanas tenían que buscar
valores en tablas, buscar logaritmos y realizar sumas y restas, los resultados
intermedios se escribían en una “hoja de datos”, los resultados finales se
copiaban en una “hoja de trayectoria” (Formulario 5041). Para la gente del
Laboratorio de Investigación Balística, esta organización del cálculo manual se
tradujo con facilidad a la preparación de instrucciones para máquinas
electromecánicas y electrónicas. En el ENIAC recableado para simular una
computadora con programa almacenado (1948), esta división entre programación y
codificación se había probado con cierto éxito, como lo demuestra la
codificación de los diagramas de flujo de Monte Carlo por parte de Klara von
Neumann.
El codificador se fugó
De este modo, las actividades de
programación y codificación se podían distinguir fácilmente. La primera
consistía en planificar en papel utilizando diagramas de flujo algún
pseudocódigo, mientras que la segunda consistía en traducir instrucciones
codificadas en algún medio para controlar la máquina. Aunque se podían disociar
fácilmente, en la práctica a menudo no se las separaba una de otra. Esta fue la
experiencia de UNIVAC, la empresa que Eckert y Mauchly iniciaron después de
haber construido el ENIAC para el ejército.
Antes de entregar su primera máquina, ya habían
estipulado una distinción entre los trabajos del programador y del codificador
(1949). Un año después, incluso se introdujeron “diagramas de flujo
estándar y símbolos y prácticas de codificación” para facilitar su revisión por
“una persona distinta a la que originalmente hizo los diagramas y la
codificación”. UNIVAC tenía un manual detallado de diagramas de flujo que
seguía el formalismo de von Neumann y Goldstine, y los diagramas de flujo se
usaban como “un potente medio de comunicación”. Las casillas del diagrama de
flujo podían llenarse con cualquier cosa, desde “símbolos matemáticos hasta
oraciones”.
Pero una vez que la computadora UNIVAC 1 estuvo lista
(1951), la distinción entre codificador y programador se eliminó de la mesa.
Cuando Ohlinger de Northrop Aircraft Company le preguntó a JL McPherson de
UNIVAC: “¿Cuántos programadores y codificadores se emplearon para mantener a
UNIVAC ocupada a tiempo completo?” McPherson respondió: “No distinguimos entre
programadores y codificadores. Tenemos operadores y programadores”.
Esto es coherente con lo que encontramos en otros
lugares en la década de 1950, tanto en las universidades como en la industria,
donde los "programadores" hacían tanto la planificación como la parte
de codificación de la programación. Cuando se planteó la cuestión durante la
Conferencia de Verano del MIT de 1954 sobre qué grupos distinguían entre
codificador y programador, sólo 8 de más de 50 participantes dijeron que
sí, sólo una empresa se adhirió a esta estricta división del trabajo, Douglas
Aircraft Company.
Esta observación se ve confirmada por los informes
encargados por el gobierno de Estados Unidos a partir de 1957 para evaluar el
impacto de la automatización y trazar un mapa de las necesidades del gobierno
en materia de “procesamiento automático de datos” (ADP). Para establecer
distinciones por nivel de grado y tasas de pago acordes, el Departamento de
Trabajo realizó una amplia encuesta en 1959 y presentó una lista de 13
“ocupaciones en sistemas de procesamiento electrónico de datos”. Si bien el
organigrama funcional de estas ocupaciones implica una división del trabajo
(véase la figura adjunta), el trabajo del codificador es notable por su propia
ausencia. En cambio, se hace una distinción entre un analista de sistemas, un
programador y un empleado de codificación. El primero define el problema y sus
requisitos. Luego, el programador “diseña programas detallados, diagramas de
flujo y diagramas que indican los cálculos matemáticos y la secuencia de
operaciones de la máquina necesarias para copiar y procesar datos e imprimir la
solución”, aunque también puede haber un programador jefe “para asignar,
delinear y coordinar” el trabajo de los programadores. El empleado de
codificación “convierte elementos de información de informes a códigos para su
procesamiento por máquinas automáticas utilizando un sistema de codificación
predeterminado” ; no se trata del “codificador” que convierte los
diagramas de flujo en instrucciones de máquina. Un informe de Weber and
Associates sobre los salarios en ADP de 1960 distingue de manera similar
entre el programador principal, el programador sénior, el programador A, B y C
en el departamento de programación, todos involucrados tanto en la creación de
diagramas de flujo como en la traducción de diagramas en instrucciones codificadas.
Una vez más, el trabajo separado del “codificador” que convertiría los
diagramas de flujo en instrucciones codificadas de máquina está ausente.
Figura. Organigrama
funcional de ocupaciones del ADP.
¿Cómo entró el
codificador en la mitología informática?
¿Cómo se arraigó entonces la idea del codificador
frente al programador y por qué? Si uno mira revistas especializadas como Computers
and Automation o Datamation en la década de 1950,
rara vez se menciona a un codificador (humano), en promedio solo 3 o 4 veces al
año. Pero en 1955, hay 28 apariciones de "codificador" en solo tres
artículos, lo que representa el 60% de todas las apariciones entre 1954 y 1960.
Los tres artículos fueron escritos por Grace Murray Hopper y su equipo. A cargo
del departamento de programación automática de UNIVAC desde 1954, Hopper fue
una defensora incansable de la automatización de la programación y se volvió
muy influyente a través de sus numerosos discursos públicos en la década de
1950.
En mayo de 1954, Hopper presentó la automatización del
codificador como un avance esencial. Describió cómo “hace diez años, un
programador era, por necesidad, muchas cosas”, pero con el “aumento en el
número y la velocidad de las computadoras” llegó la “especialización”. Los
especialistas, en particular “analista, programador, codificador, operador y
encargado de mantenimiento”, estaban separados y se comunicaban solo a través
de herramientas como los diagramas de flujo.
Hopper, sin embargo, admitió que “la distinción entre
programador y codificador nunca se ha hecho claramente. Probablemente, el
codificador fue utilizado en un principio como punto intermedio en la escala
salarial entre aprendiz y programador. Un programador prepara un plan para la
solución de un problema: […] Uno de sus resultados finales, que se le entregará
a un codificador, será un diagrama de flujo. […] La tarea del codificador es
entonces reducir este diagrama de flujo a codificación, a una lista en código
informático”.
Como tuvo que reconocer incluso un supervisor de
Remington-Rand, “la mayoría de las veces […] el programador y el codificador
administrativo [eran] la misma persona” y que “el diagrama de flujo detallado”
simplemente se omitía. ¿Por qué entonces Hopper distinguió a un
codificador separado? Porque ahora podían automatizarse: “Esta función, la del
codificador, que consume mucho tiempo y está plagada de errores, es la primera
operación humana que fue reemplazada por la computadora misma”. Así, fue
la introducción de la “codificación automática” (a veces llamada,
lamentablemente, “programación automática”) lo que explicó la distinción
artificial y retrospectiva entre los trabajos. Como escribió más tarde: “La
codificación automática cobra sentido” cuando “puede liberar al
codificador de la mayor parte de la rutina y el trabajo pesado de producir el
código de instrucciones. Algún día puede reemplazar al codificador o liberarlo
para convertirse en programador”. Nuevamente, la gran ventaja de la codificación
automática se presenta como: “el reemplazo del codificador por la computadora”.
En la década de 1950, muchos no estaban convencidos de
que la codificación automática fuera lo suficientemente eficiente como para
competir con la programación manual. Al introducir la distinción entre
programador y codificador (aunque no reflejara la realidad en el lugar de
trabajo), las charlas promocionales de Grace Hopper hicieron que la idea de la
codificación automática fuera más atractiva.
Conclusión
La influencia de imágenes y retóricas impactantes en el material promocional de la informática no es nueva ni sorprendente. Existe una larga tradición de exagerar la última tecnología, afirmando que será la próxima revolución (industrial) o prometiendo que superará a los seres humanos. Con el paso del tiempo puede resultar difícil reconocer estas ideas e imágenes inventadas que han adquirido vida propia y se han integrado como parte de una narrativa histórica. Ahora que la informática electrónica digital moderna se acerca a su centenario ese reconocimiento no resulta más fácil, aunque es posible que lo necesitemos más que nunca.
Este caso particular, en el que el elogio de la programación automática
implicaba la obsolescencia del codificador, puede ser instructivo para nosotros
hoy. Hay una línea que va desde la venta de la “codificación automática” por
parte de Grace Hopper hasta las promesas actuales de grandes modelos de IA como
Chat-GPT para revolucionar la informática mediante la automatización de la programación
o incluso haciendo obsoletos a los programadores humanos. Entonces como
ahora, es cierto que la automatización de algunas partes de la programación
está avanzando, y alterará o incluso redefinirá la división del trabajo. Sin
embargo, no se trata de un proceso simple y directo que reemplaza al elemento
humano en una o más fases específicas de la programación por la propia
computadora. Más bien, la práctica adopta nuevas técnicas para ayudar con las
tareas y los trabajos existentes. Estos cambios no se generalizan fácilmente, y
el uso de títulos como “codificadores” (o los “ingenieros rápidos” de la
actualidad) aunque memorables, no hace justicia al sutil proceso de cambio de
la práctica.
Por Maarten Bullynck y Liesbeth De Mol
Video : https://vimeo.com/997816374
Articulo Original : https://cacm.acm.org/opinion/the-myth-of-the-coder/
Traducción : Javier Paredes
Referencias
1.
Abbate , J. Recodificando
el género: la cambiante participación de las mujeres en la informática . Massachusetts
Institute of Technology Press , Cambridge, MA , ( 2012) .
2.
Adams , CW , Gill , S. y Combelic , D. Computadoras
digitales: técnicas de codificación avanzadas . Instituto
Tecnológico de Massachusetts , Sesión de verano , ( 1954) .
3.
Bullynck , M. Programación
de hombres y máquinas. Cambios en la organización de los cálculos de artillería
en el campo de pruebas de Aberdeen (1916-1946) . Revue de Synthèse 139 , 3-4 ( 2018 ), 237-261 .
4.
Campbell-Kelly , M. et
al. Computer: A History of the Information Machine (Tercera edición) . Routledge , Nueva
York, NY , ( 2014) .
5.
De Mol , L. y Bullynck , M. ¿Qué
hay en un nombre? Orígenes, transposiciones y transformaciones del tríptico
algoritmo-código-programa . En Abstracciones y encarnaciones de la
computación. J. Abbate y S. Dick ( Eds. ) . Johns
Hopkins Press , ( 2022) , 147 – 168 .
6.
Eckert , PJW , Welsh , JRF y Mitchell , HF El
sistema UNIVAC . En Actas de la Conferencia
conjunta de informática AIEE-IRE, AIEE-IRE '51: Documentos y debates ( 10-12
de diciembre de 1951 ), 6-16 .
7.
Ensmenger , N. Los
chicos de la informática toman el control: computadoras, programadores y la
política de la experiencia técnica . MIT Press , Cambridge,
MA , ( 2010) .
8.
Goldstine , HH y von
Neumann , J. Planificación y codificación de problemas para un
instrumento de computación electrónica, vol. 2 del Informe sobre los
aspectos matemáticos y lógicos de un instrumento de computación electrónica . Informe
en tres partes preparado para el Departamento de Ordenanzas del Ejército de los
EE. UU. según el contrato W-36-034-ORD-7481, 1947–1948 .
9. Grier , DA Cuando
las computadoras eran humanas . Princeton University Press , Princeton, NJ ,
( 2005) .
10. Haigh , T. , Priestley , M. y Rope , C. ENIAC
en acción . MIT Press , Cambridge, MA , ( 2016) .
11. Harrison , JO , Holberton , JV y Lotkin , M. Preparación
de problemas para las máquinas calculadoras BRL . Ballistic
Research Laboratories, Nota técnica 104 , Aberdeen Proving
Ground, Maryland ( 1949) .
12. Hopper , G. Programación
automática: definiciones . En Actas del Simposio sobre
programación automática para computadoras digitales . (13 y 14 de mayo de
1954) . Oficina de Investigación Naval, Departamento de la
Marina , Washington, DC , 1954 .
13. Hopper , G. Codificación
automática para computadoras digitales . Charla presentada en la
Conferencia de computadoras de alta velocidad . Universidad
Estatal de Luisiana ( 16 de febrero de 1955) .
14. Holberton , B. Diagrama
de flujo estándar y convenciones de codificación . Eckert-Mauchly
Computer Corporation , 1950 .
15. Rossheim , RJ La
función de la programación automática de las computadoras en el procesamiento
de datos comerciales . Computers and Automation 5 , 2 ( 1956 ), 6–9 .
16. Stern , N. De
Eniac a Univac: una evaluación de las computadoras Eckert-Mauchly . Digital
Press , Bedford, MA , 1981 .
17. Departamento
de Trabajo de los Estados Unidos . División de Análisis
Ocupacional del Servicio de Empleo de los Estados Unidos, Ocupaciones en
sistemas electrónicos de procesamiento de datos . Washington, DC ,
( 1959) .
18. Weber , PH Determinación
de los salarios del personal informático . Office Appliance Co. , Chicago,
IL , 1960 .
19. Welch , M. El
fin de la programación . Commun. ACM 66 , 1 ( enero
de 2023 ), 34 – 35 .
20. Yellin , D. El
obituario prematuro de la programación . Commun. ACM 66 , 2 ( feb.
2023 ), 41 – 44.


0 Comentarios