En 1804, el tejedor francés Joseph Marie Jacquard desarrolló un telar en el que el patrón que se tejía estaba controlado por una cinta de papel construida con tarjetas perforadas. La cinta de papel se puede cambiar sin cambiar el diseño mecánico del telar. Este fue un logro histórico en la capacidad de programación. Su máquina fue una mejora con respecto a telares similares. Las tarjetas perforadas iban precedidas de bandas perforadas, como en la máquina propuesta por Basile Bouchon . Estas bandas inspirarían la grabación de información para pianos automáticos y, más recientemente , máquinas herramienta de control numérico.
A finales de la década de 1880, el estadounidense Herman Hollerith inventó el almacenamiento de datos en tarjetas perforadas que luego podrían ser leídas por una máquina. Para procesar estas tarjetas perforadas, inventó el tabulador y la máquina perforadora. Sus máquinas usaban relés y contadores electromecánicos. El método de Hollerith se utilizó en el censo de Estados Unidos de 1890 . Ese censo se procesó dos años más rápido que el anterior. La compañía de Hollerith finalmente se convirtió en el núcleo de IBM.
Para 1920, las máquinas de tabulación electromecánicas podían sumar, restar e imprimir los totales acumulados. Las funciones de la máquina se dirigieron insertando docenas de puentes de cables en paneles de control extraíbles . Cuando Estados Unidos instituyó el Seguro Social en 1935, los sistemas de tarjetas perforadas de IBM se utilizaron para procesar los registros de 26 millones de trabajadores. Las tarjetas perforadas se volvieron omnipresentes en la industria y el gobierno para la contabilidad y la administración.
Los artículos de Leslie Comrie sobre métodos de tarjetas perforadas y la publicación de WJ Eckert de Métodos de tarjetas perforadas en computación científica en 1940, describieron técnicas de tarjetas perforadas suficientemente avanzadas para resolver algunas ecuaciones diferenciales o realizar multiplicaciones y divisiones usando representaciones de punto flotante , todo en tarjetas perforadas y máquinas de registro de unidades . Estas máquinas se utilizaron durante la Segunda Guerra Mundial para el procesamiento estadístico criptográfico, así como para una gran cantidad de usos administrativos. La Oficina de Computación Astronómica de la Universidad de Columbia realizó cálculos astronómicos que representan el estado del arte en computación.
En el siglo XX, se rediseñaron las primeras calculadoras mecánicas, cajas registradoras, máquinas contables, etc. para utilizar motores eléctricos, con la posición del engranaje como representación del estado de una variable. La palabra «computadora» era un título de trabajo asignado principalmente a mujeres que usaban estas calculadoras para realizar cálculos matemáticos. En la década de 1920, el interés del científico británico Lewis Fry Richardson en la predicción del tiempo lo llevó a proponer computadoras humanas y análisis numérico para modelar el clima; hasta el día de hoy, se necesitan las computadoras más poderosas de la Tierra para modelar adecuadamente su clima utilizando las ecuaciones de Navier-Stokes.
Empresas como Friden , Marchant Calculator y Monroe fabricaron calculadoras mecánicas de escritorio de la década de 1930 que podían sumar, restar, multiplicar y dividir. En 1948, el inventor austríaco Curt Herzstark introdujo la Curta . Era una calculadora mecánica pequeña, a manivela y, como tal, un descendiente de Gottfried Leibniz ‘s escaleras Calculador y Thomas ‘ s Arithmometer .
La primera calculadora de escritorio totalmente electrónica del mundo fue la británica Bell Punch ANITA , lanzada en 1961. Utilizaba tubos de vacío, tubos de cátodo frío y Dekatrons en sus circuitos, con 12 tubos «Nixie» de cátodo frío para su pantalla. La ANITA se vendió bien ya que era la única calculadora de escritorio electrónica disponible, y era silenciosa y rápida. La tecnología del tubo fue reemplazada en junio de 1963 por el Friden EC-130 fabricado en Estados Unidos, que tenía un diseño de transistores, una pila de cuatro números de 13 dígitos mostrados en un CRT de 5 pulgadas (13 cm) e introdujo la notación polaca inversa. (RPN).
Charles Babbage , un ingeniero mecánico y erudito inglés , originó el concepto de una computadora programable. Considerado el «padre de la computadora», conceptualizó e inventó la primera computadora mecánica a principios del siglo XIX. Después de trabajar en su revolucionario motor diferencial , diseñado para ayudar en los cálculos de navegación, en 1833 se dio cuenta de que era posible un diseño mucho más general, un motor analítico. La entrada de programas y datos debía ser proporcionada a la máquina a través de tarjetas perforadas, un método que se utilizaba en ese momento para dirigir telares mecánicos como el telar Jacquard. Para la salida, la máquina tendría una impresora, un trazador de curvas y una campana. La máquina también podría perforar números en tarjetas para leerlos más tarde. Empleaba aritmética ordinaria de punto fijo de base 10.
El motor incorporó una unidad lógica aritmética, control de flujo en forma de bifurcaciones condicionales y bucles , y memoria integrada, lo que lo convirtió en el primer diseño de una computadora de propósito general que podría describirse en términos modernos como Turing-completo.
Debía haber una tienda, o memoria, capaz de almacenar 1.000 números de 40 dígitos decimales cada uno (aproximadamente 16,7 kB ). Una unidad aritmética, llamada «molino», podría realizar las cuatro operaciones aritméticas, además de comparaciones, opcionalmente, raíces cuadradas. Inicialmente se concibió como un motor diferencial curvado sobre sí mismo, en un diseño generalmente circular, con la larga tienda saliendo a un lado. (Los dibujos posteriores muestran un diseño de cuadrícula regularizado.) Al igual que la unidad central de procesamiento (CPU) en una computadora moderna, el molino se basaría en sus propios procedimientos internos, aproximadamente equivalentes al micro código en las CPU modernas, para ser almacenado en forma de clavijas insertadas en tambores giratorios llamados «barriles», para llevar a cabo algunas de las instrucciones más complejas que el programa del usuario podría especificar.
El lenguaje de programación utilizado por los usuarios era similar a los lenguajes ensambladores de hoy en día. Los bucles y la ramificación condicional eran posibles, por lo que el lenguaje tal como se concibió habría sido Turing-completo como lo definió más tarde Alan Turing. Se utilizaron tres tipos diferentes de tarjetas perforadas: una para operaciones aritméticas, una para constantes numéricas y otra para operaciones de carga y almacenamiento, transfiriendo números de la tienda a la unidad aritmética o viceversa. Había tres lectores separados para los tres tipos de tarjetas.
La máquina se adelantó un siglo a su tiempo. Sin embargo, el proyecto se vio retrasado por varios problemas, incluidas disputas con el maquinista jefe que construía piezas para él. Todas las piezas de su máquina tenían que hacerse a mano; este era un problema importante para una máquina con miles de piezas. Finalmente, el proyecto se disolvió con la decisión del gobierno británico de dejar de financiar. El fracaso de Babbage para completar el motor analítico se puede atribuir principalmente a dificultades no solo políticas y financieras, sino también a su deseo de desarrollar una computadora cada vez más sofisticada y avanzar más rápido de lo que nadie podría seguir. Ada Lovelace tradujo y agregó notas al «Sketch of the Analytical Engine» de Luigi Federico Menabrea. Esta parece ser la primera descripción publicada de programación, por lo que Ada Lovelace es ampliamente considerada como la primera programadora de computadoras.
Siguiendo a Babbage, aunque desconocía su trabajo anterior, estaba Percy Ludgate , un empleado de un comerciante de maíz en Dublín, Irlanda. Diseñó de forma independiente una computadora mecánica programable, que describió en un trabajo que se publicó en 1909.