El mito del programador y codificador


 

El mito del programador

Considerando la distinción histórica entre codificador y programador.

 En las narrativas de la informática de los años 50, la distinción entre programadores y codificadores es un elemento común, siendo estos últimos considerados “técnicos de bajo nivel” que realizan el trabajo rutinario de convertir diagramas de flujo o pseudoinstrucciones en instrucciones codificadas para máquinas (véase, por ejemplo, Campbell-Kelly et al. y Ensmenger ). Esta división del trabajo entre codificadores y programadores suele ir acompañada de distinciones sociales de educación y género.  Sin embargo, al investigar los primeros usos de las palabras “programación” y “codificación”, nos enfrentamos a la casi ausencia de pruebas de esta distinción entre codificador y programador en la práctica . Si bien las actividades de codificación y programación se pueden distinguir más o menos claramente, no se corresponden con trabajos diferentes, sino que las realizaban las mismas personas. Por lo tanto, parecía que la distinción entre el codificador y el programador no pertenece a la realidad, sino a la mitología de la informática temprana. Surgió a raíz de la programación automática en los años 50, creando un discurso que ha sido influyente hasta hoy.

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.

 


Publicar un comentario

0 Comentarios