¿Cómo funcionaba la programación cuando los programadores usaban tarjetas perforadas?

11

Vi esto: aprender a programar en tarjetas perforadas

y he visto esto: http://en.wikipedia.org/wiki/Computer_programming_in_the_punched_card_era

pero dejan mucho que desear.

¿Alguien puede explicarme cómo programaron los programadores cuando usaban tarjetas perforadas? Específicamente, el sistema de computadoras de entrada solía derivar instrucciones de la propia tarjeta perforada.

No sé mucho acerca de las retrocomputadoras, por lo que cualquier sistema de entrada con el que esté familiarizado estaría bien. Respuestas más generales también son apreciadas.

Thomas Dignan
fuente

Respuestas:

16

En una palabra, mal.

Al menos en cualquier máquina que haya usado o escuchado, no alimentaste las tarjetas de una en una. Había lectores de tarjetas automáticos que alimentaban y leían cientos de tarjetas por minuto (probablemente alrededor de 1000 / minuto, pero no estoy seguro de las especificaciones exactas).

En un caso típico, escribió el código a mano y luego lo insertó en las tarjetas. Cada tarjeta contiene una línea de código (hasta 80 columnas). Tomaste el mazo de cartas para ser ejecutado. Dependiendo del trabajo atrasado, desde una hora más o menos hasta un día más tarde, recuperaste tu mazo junto con una copia impresa de los resultados.

Probablemente debería agregar: dado que su mazo de cartas se ejecutó como un trabajo, no solo envió el código para el programa en sí, sino que tuvo que escribir algo vagamente similar a un archivo por lotes / script de shell con las instrucciones para compilar y ejecutar su código. IBM JCL (por ejemplo) sigue fuertemente influenciado por sus orígenes de tarjetas Hollerith.

Otro punto menor: en la mayoría de los sistemas, recuerdo, normalmente incluía un número de línea en cada tarjeta perforada. Obviamente evitaste dejar caer un mazo si pudieras, pero cuando (no si) uno se cayó, no fue realmente la tragedia que muchos imaginan. Punto lateral interesante: al menos los clasificadores de tarjetas que vi usaban una clasificación de radix: separaban las tarjetas en 10 compartimientos, en función de un dígito del número de línea, y luego "combinaban" esas juntas (soltar todas las tarjetas en una sola bin en orden) luego repita tantas veces como tenga dígitos en los números de línea.

Las cartas de Hollerith fueron extremadamente influyentes: 80 columnas como límite aún sobreviven en un grado casi inquietante. Al menos en los mainframes de Control Data, cosas como el sistema de archivos también fueron muy influenciadas. Mucho después de que las tarjetas Hollerith desaparecieron, los restos de ellas eran visibles en el sistema operativo; por ejemplo, los archivos de texto a menudo se almacenaban como una serie de registros de 80 caracteres, independientemente de la cantidad de caracteres que contenía una línea. Todavía puedo recordar mi sorpresa por el "atraso" de un sistema como Unix en el que tenía que leer todas las líneas anteriores para encontrar la línea N de un archivo de texto, en lugar de simplemente poder buscarlo directamente.

Jerry Coffin
fuente
Creo que lo que describe es una forma mucho más moderna de hacer las cosas. Clasificador de tarjetas y alimentador? Dios mío, mi madre habría matado por eso ...: - D
littleadv
@littleadv: las tarjetas y alimentadores Hollerith son anteriores a las computadoras. Estoy menos seguro acerca de los clasificadores, pero estoy bastante seguro de que ellos también lo hacen.
Jerry Coffin
1
Solíamos escribir nuestro COBOL y RPGIII en papel a mano y luego perforamos las tarjetas nosotros mismos. Los 4 caracteres correctos en la tarjeta se usaron para el "número de línea" del programa. Sí, he dejado caer una bandeja de tarjetas antes, teníamos un clasificador de tarjetas en la misma habitación que la combinación de teclas. Recuerde, COBOL y RPGIII eran lenguajes muy estrictamente formateados. Tu código tenía que estar en ciertas órdenes para ejecutarse. Luego, se tomaron las bandejas de tarjetas para ejecutarlas y el operador ejecutó el trabajo, entregándole su impresión junto con sus bandejas de tarjetas. Con suerte, no has tenido errores.
MB34
44
Teníamos una habitación con dos máquinas de teclado 029 , pero sin clasificador. Entonces, a pesar de que las tarjetas estaban numeradas, solíamos dibujar líneas diagonales en las partes superiores de esta manera . Si dejaste caer una caja de autos, por lo general terminarían en el piso en varios grupos, lo que podrías armar bastante bien en base a estas líneas para comenzar, y luego terminar el trabajo verificando que los números de tarjeta estaban en orden.
tcrosley
2
No solo se perforaron los programas en las tarjetas, los datos de entrada y salida se perforaron en las tarjetas. Las tarjetas fueron la principal forma de almacenamiento a finales de los 70 y principios de los 80. El espacio en disco era demasiado costoso para ser utilizado para otra cosa que no sea el compilador y el cargador.
Gilbert Le Blanc
6

Usaste el punzón de tarjeta como editor.

  • Insertar == perforar una nueva tarjeta.
  • Mover == recoger la tarjeta y moverla al lugar correcto.
  • Eliminar == sacar la tarjeta y tirarla a la basura
  • Copiar: los mejores golpes de tarjeta tenían una función de copia que podía copiar otra tarjeta columna por columna.
  • Repace un carácter: use la función de copia pero escriba los caracteres de reemplazo cuando llegue al carácter que necesita reemplazar.
  • Eliminar un personaje: use la función de copia, pero mantenga presionada la tarjeta copiada para evitar que se mueva y presione el espacio para cada personaje que desee "eliminar"
  • Insertar caracteres: utilice la función de copia pero mantenga la tarjeta original inmóvil mientras escribe el nuevo texto.

En su mayor parte, las tarjetas eran "inmutables", pero se podían eliminar caracteres pegando los agujeros con una cinta adhesiva delgada y opaca.

Leyó en su programa rodeado por el JCL apropiado y esperó a que la impresora escupiera los resultados. (¡Podrían ser horas!)

James Anderson
fuente
4

Muy lentamente.

Mi madre era una gran programadora, así que tuve toneladas de estas tarjetas en casa mientras crecía. Lo que harían sería codificar el programa en las tarjetas y luego introducir las tarjetas en el lector de tarjetas una por una (similar a cómo funcionan las máquinas de votación ahora). Si deja caer las tarjetas, estaría en muchos problemas, porque solo tiene asignado el tiempo de la máquina X y tendría que organizarlas en el orden correcto y reiniciar la alimentación de la máquina nuevamente e intentar hacer a tiempo antes de que el próximo programador te eche. Un programa trivial (en nuestros estándares actuales) podría haber requerido cientos, si no miles, de dichas tarjetas y horas de tiempo de máquina para cargarlo y ejecutarlo.

Muy tedioso

littleadv
fuente
Por otro lado, probablemente había muchos menos parásitos en la industria :)
haylem
depende de cómo se defina "parásito" .... :)
littleadv
Lamentablemente, no me refería a los famosos "errores" de aquel entonces, sino a las hordas de personas que ahora se han subido al tren de las TI.
haylem
¡Oh, la nostalgia ... el mundo era un lugar tan mejor en los viejos tiempos! Pero realmente, es principalmente porque tendemos a olvidar las cosas malas. Había todas las hordas de personas saltando en todo tipo de carretas, siempre lo han sido y siempre lo serán.
littleadv
Shhhh Esos fueron los días. Eso es todo. (En realidad no sé, no estaba allí).
Haylem
1

De alguna manera "no muy diferente", de alguna manera "muy diferente".

Escribieron el código fuente, generalmente en papel. Esto se volvió a escribir en tarjetas perforadas (una línea de código fuente por tarjeta, generalmente con números de línea, por lo que podría corregir fácilmente su código fuente cuando terminó en el orden incorrecto).

Luego, el programa tenía el prefijo de tarjetas con instrucciones sobre cómo compilar el programa y el sufijo con instrucciones sobre cómo ejecutarlo y qué archivos de datos usar (o cintas para montar, etc., etc.).

Esto se envió a los operadores, que cargarían las tarjetas en un lector de velocidad, ejecutarían el trabajo y devolverían los resultados en las impresiones.

Con un ciclo típico de edición / compilación / resultados del orden del "mañana", las personas tendían a ser más paranoicos al verificar su código en busca de errores de sintaxis.

Sin posibilidad de depuración interactiva, la única forma de rastrear la ejecución serían las líneas de depuración impresas durante la ejecución.

En algunos lugares, el código estaría en cinta perforada en lugar de en tarjetas perforadas.

Vatine
fuente