Desde la invención de los lenguajes de programación informática hasta mediados de la década de 1970, la mayoría de los programadores informáticos creaban, editaban y almacenaban sus programas línea por línea en tarjetas perforadas .
Una tarjeta perforada es un medio flexible de escritura única que codifica datos, normalmente de 80 caracteres. Los grupos o "mazos" de tarjetas forman programas y colecciones de datos. El término se suele utilizar indistintamente con tarjeta perforada , con la diferencia de que una tarjeta sin uso es una "tarjeta perforada", pero una vez que la información se ha codificado perforando agujeros en la tarjeta, ahora es una "tarjeta perforada". Para simplificar, este artículo utilizará el término tarjeta perforada para referirse a cualquiera de los dos.
A menudo, los programadores escribían primero sus programas en formularios especiales llamados hojas de codificación, teniendo cuidado de distinguir el dígito cero de la letra O , el dígito uno de la letra I , el ocho de la B , el dos de la Z , y así sucesivamente, utilizando convenciones locales como el " cero con barra ". Luego, estos formularios eran tomados por los operadores de las máquinas perforadoras, quienes, utilizando una máquina perforadora como la IBM 026 (más tarde IBM 029 ), perforaban la baraja. A menudo, otro operador de la máquina perforadora tomaba esa baraja y volvía a perforar a partir de las hojas de codificación, pero utilizando un "verificador" como la IBM 059 que verificaba que la perforación original no tuviera errores.
En general, un error tipográfico obligaba a volver a perforar una tarjeta entera. La edición de los programas se facilitaba reorganizando las tarjetas y eliminando o reemplazando las líneas que habían cambiado; los programas se respaldaban duplicando la baraja o escribiéndolos en cinta magnética.
En organizaciones más pequeñas, los programadores pueden realizar su propia perforación de teclas y, en todos los casos, a menudo tienen acceso a una máquina perforadora para realizar pequeños cambios en una plataforma.
LET La descripción a continuación describe una tienda completamente IBM (una "tienda" es la jerga de los programadores para un sitio de programación) pero las tiendas que usan otras marcas de mainframes (o minicomputadoras ) tendrían equipos similares aunque debido al costo o la disponibilidad podrían tener equipos de diferentes fabricantes, por ejemplo, una tienda NCR , ICL , Hewlett-Packard (HP) o Control Data tendría computadoras, impresoras, etc. NCR, ICL, HP o Control Data, pero tendría perforadoras de teclas IBM 029. El enorme tamaño y la huella industrial de IBM a menudo hicieron que muchos de sus convenciones fueran adoptados por otros proveedores, por lo que el ejemplo a continuación es bastante similar a la mayoría de los lugares, incluso en tiendas que no son de IBM.
Una instalación informática típica de una empresa o universidad tendría una serie de salas, con una sala grande, con acceso restringido y con aire acondicionado para la computadora (similar a la sala de servidores de hoy) y una sala adyacente más pequeña y tranquila para enviar trabajos. Cerca habría una sala llena de máquinas perforadoras para uso de los programadores. Se podría instalar una máquina de contabilidad IBM 407 para permitir que los programas recién creados o editados se enumeren (se impriman en papel plegado en abanico ) para su corrección. Se podría proporcionar una IBM 519 para reproducir los mazos de programas para realizar copias de seguridad o para perforar números secuenciales en las columnas 73 a 80.
En estas instalaciones de mainframe , conocidas como "tiendas cerradas", [a] los programadores enviaban las tarjetas de programa, a menudo seguidas de tarjetas de datos para que las leyera el programa, a una persona que trabajaba detrás de un mostrador en la sala de computadoras. Durante las horas pico, era común hacer cola para enviar una tarjeta. Para resolver ese problema, el lector de tarjetas podía reinstalarse (o instalarse inicialmente) fuera de la sala de computadoras para permitir que los programadores enviaran trabajos " por su cuenta ".
Muchas instalaciones informáticas utilizaban tarjetas con el corte de la esquina opuesta (a veces sin corte de esquina) como "separadores de trabajos", de modo que un operador pudiera apilar varias barajas de trabajos en el lector de tarjetas al mismo tiempo y poder separar rápidamente las barajas manualmente cuando las retiraba del apilador. Estas tarjetas (por ejemplo, una tarjeta "JOB" de JCL para iniciar un nuevo trabajo) a menudo se perforaban previamente en grandes cantidades con antelación. [1] Esto era especialmente útil cuando la computadora principal no leía las tarjetas directamente, sino que leía sus imágenes de una cinta magnética que se preparaba fuera de línea mediante computadoras más pequeñas como la IBM 1401. Después de leer las tarjetas, el operador de la computadora devolvía la baraja de tarjetas, generalmente a uno de un conjunto de cubículos etiquetados alfabéticamente, según la última inicial del programador. Como los programas se ejecutaban en modo de procesamiento por lotes, podía pasar un tiempo considerable antes de que se produjera una copia impresa o perforada y se colocara en esos mismos cubículos; sin embargo, en un sistema poco utilizado, era posible realizar modificaciones y volver a ejecutar un programa en menos de una hora.
Los programadores dedicados podían quedarse despiertos hasta bien pasada la medianoche para conseguir unos cuantos resultados rápidos. El uso de este costoso equipo solía cargarse a la cuenta del usuario. Una computadora central podía costar millones de dólares y el uso se medía en segundos por tarea.
Las computadoras más pequeñas, como la IBM 1620 y la 1130 , y las minicomputadoras como la PDP-11 eran menos costosas y a menudo funcionaban como un "taller abierto", donde los programadores tenían uso exclusivo de la computadora durante un bloque de tiempo. Por lo general, había una máquina perforadora cerca para realizar correcciones rápidas, aunque muchas de estas máquinas más pequeñas funcionaban con cinta perforada .
Muchos de los primeros lenguajes de programación, incluidos FORTRAN , COBOL y los diversos lenguajes ensambladores de IBM , utilizaban solo las primeras 72 columnas de una tarjeta, una tradición que se remonta al lector de tarjetas IBM 711 utilizado en las series IBM 704/709/7090/7094 (especialmente el IBM 704 , la primera computadora producida en masa con hardware aritmético de punto flotante ), que solo podía leer 72 de las 80 columnas en una pasada.
Los compiladores ignoraban las columnas 73 a 80 y podían utilizarse para la identificación o como número de secuencia, de modo que si se dejaba caer la baraja de cartas, se podía restaurar el orden correcto utilizando un clasificador de cartas . Según el lenguaje de programación, las declaraciones de salida de depuración podían activarse rápidamente y "comentarse" utilizando cartas con dichas declaraciones perforadas con el carácter de comentario (por ejemplo , "C" en Fortran) en la columna 80 de la carta; al girar la carta de un extremo a otro, se colocaría la "C" en la columna principal, lo que transformaría el contenido de la carta ahora al revés en un comentario mientras que la carta física se mantenía en su lugar en la baraja.
(Una técnica alternativa, imperfecta pero comúnmente empleada para mantener el orden adecuado de las cartas era dibujar una o más rayas diagonales a lo largo del borde superior de todas las cartas de una baraja).
En años posteriores, a medida que los datos de las tarjetas perforadas se convertían en archivos de cinta magnética, los números de secuencia se utilizaban a menudo como una columna en una matriz como un valor de índice que se puede correlacionar con secuencias de tiempo, como en las ciencias naturales, donde los datos de las tarjetas se relacionaban con la salida periódica de un dispositivo de medición, como los registradores de nivel de agua para ríos y arroyos en hidrología, o las temperaturas en meteorología. Bóvedas enteras llenas de mazos de tarjetas podían reducirse a estantes mucho más pequeños de cintas de nueve pistas.