Saltar a contenido

Capítulo 2: Mecanizar (≈ 1640 - 1956)

⏱️ Tiempo de lectura: 7 min

En el capítulo anterior vimos cómo la humanidad aprendió a representar cantidades, relaciones y cambios con símbolos. Una vez que esos símbolos podían manipularse mediante reglas, la siguiente pregunta surgía casi sola: si un procedimiento está bien definido, ¿puede ejecutarlo una máquina?

La respuesta no apareció de golpe. Llegó en capas. Primero automatizamos operaciones concretas. Después aprendimos a codificar instrucciones fuera de la máquina. Más tarde comprendimos que la lógica también podía expresarse de forma mecánica. Y, finalmente, construimos dispositivos capaces de almacenar programas, ejecutar operaciones en base a condiciones y tratar la información como una magnitud formal.

Este capítulo recorre ese trayecto. No es solo la historia de cómo llegamos a construir ordenadores. Es la historia de cómo convertimos procedimientos abstractos en procesos ejecutables.


1. De automatizar cuentas a programar procedimientos

Las primeras calculadoras: automatizar no es programar

La Pascalina, construida por Blaise Pascal entre 1642 y 1644, automatizaba sumas y restas mediante ruedas dentadas. Pocas décadas después, el Step Reckoner de Leibniz amplió esa idea y permitió multiplicar y dividir a partir de repeticiones mecánicas de operaciones más simples.

El salto era importante, pero todavía estábamos ante máquinas de cálculo, no ante ordenadores en sentido pleno. Estas máquinas ejecutaban una familia concreta de operaciones. No almacenaban una secuencia general de instrucciones, no podían alterar su comportamiento en función de estados intermedios y no separaban de forma clara el mecanismo que opera del procedimiento que debe seguir.

El límite de las calculadoras mecánicas
Pascal y Leibniz construyeron máquinas que sumaban y multiplicaban. Calculaban, pero no podían decidir. Ese salto tardó dos siglos más.
4
2
7
3
1
Ruedas dentadas de 10 posiciones. Cuando una pasa de 9 a 0, empuja la siguiente (acarreo mecánico). Brillante, pero solo conoce una operación.
Suma
Resta
Multiplicación
Lógica condicional
Rueda escalonada — dientes de longitud variable
La rueda escalonada permite multiplicar repitiendo sumas mecánicas. El operador giraba la manivela el número de veces correcto. Más versátil, pero sigue sin poder decidir.
Suma
Resta
Multiplicación
División
Lógica condicional
Bucles o repetición
El muro infranqueable: la lógica condicional
Ambas máquinas podían calcular si se les decía exactamente qué calcular. Lo que no podían hacer era tomar decisiones:
Imposible para cualquiera de ellas
SI resultado > 100 ENTONCES hacer A, SI NO hacer B
Requiere leer el resultado, compararlo y elegir un camino. Ninguna máquina mecánica podía alterar su propio proceso de ejecución.
Lo que hizo falta
Instrucciones separadas del mecanismo
Jacquard (tarjetas, 1805) · Babbage (Analytical Engine, 1837)
Lógica booleana en circuitos
Boole (álgebra lógica, 1854) · Shannon (circuitos, 1937)

Jacquard: cuando las instrucciones se separan del mecanismo

El siguiente avance decisivo no llegó desde la matemática, sino desde la industria textil. El telar de Jacquard, desarrollado en 1804-1805, utilizaba tarjetas perforadas intercambiables para controlar patrones complejos de tejido. La máquina no "entendía" el dibujo. Simplemente ejecutaba una secuencia de instrucciones codificadas en un soporte externo.

Aquí aparece una idea que cambiará toda la historia posterior. El comportamiento de una máquina puede depender de una descripción intercambiable de pasos. No estamos todavía ante software moderno, pero sí ante un precursor claro de la programabilidad: el mecanismo y las instrucciones dejan de estar completamente fundidos.

Babbage y Lovelace: la máquina general aún antes de existir

Charles Babbage llevó esa intuición mucho más lejos con la Máquina Analítica. En su diseño aparecen ya varias piezas que hoy nos resultan familiares: una unidad de cálculo, una memoria separada, tarjetas perforadas para datos e instrucciones, ejecución no estrictamente secuencial y capacidad de bifurcación condicional.

La máquina nunca llegó a construirse por completo, pero conceptualmente ya estaba mucho más cerca de un ordenador general que de una calculadora mecánica. No era una máquina hecha para una sola operación. Era una máquina pensada para ejecutar procedimientos distintos.

En 1843, Ada Lovelace publicó sus célebres notas sobre la Máquina Analítica. Allí aparece lo que suele considerarse el primer programa publicado para una máquina computacional: un procedimiento para calcular números de Bernoulli. Su intuición más profunda fue todavía más ambiciosa. Si una máquina puede manipular símbolos según reglas, entonces no está limitada a números en sentido estrecho. Puede operar sobre cualquier dominio que admita una notación suficientemente precisa, una idea que anticipa la computación de propósito general mucho antes de que existiera el hardware capaz de sostenerla.


2. Cuando la lógica se volvió ingeniería

Boole: dar forma algebraica al razonamiento

George Boole dio a la lógica una forma algebraica en The Mathematical Analysis of Logic y la desarrolló con más madurez en An Investigation of the Laws of Thought. Su aportación fue mostrar que proposiciones y relaciones lógicas podían tratarse con operaciones formales.

El valor de este paso no está solo en la elegancia matemática. Está en que convierte el razonamiento lógico en algo susceptible de representación simbólica rigurosa. A partir de ahí, pensar lógicamente deja de ser solo una actividad verbal o filosófica y pasa a poder describirse mediante estructuras discretas y manipulables.

Shannon: el puente entre lógica y circuitos

Durante décadas, el álgebra de Boole fue una construcción brillante con poca traducción práctica. El puente llegó con Claude Shannon. En su tesis de máster de 1937, publicada después como A Symbolic Analysis of Relay and Switching Circuits, mostró que el álgebra booleana podía aplicarse al diseño de circuitos de conmutación.

Ese enlace fue decisivo. Ya no se trataba solo de razonar sobre verdadero y falso en un papel, sino de construir dispositivos físicos que implementaran operaciones lógicas. Ahí nace la lógica digital como base material de la computación moderna. La proposición lógica deja de ser solo una forma de pensar y pasa a ser una forma de cablear.

Puertas lógicas: del pensamiento a los circuitos
Boole demostró que la lógica es álgebra. Shannon demostró que esa álgebra puede implementarse con interruptores eléctricos. Con solo tres puertas básicas se construye cualquier circuito digital.
Puerta AND
La salida es 1 solo cuando todas las entradas son 1. El interruptor se abre solo si dos personas pulsan a la vez.
A B Q &
Salida: 0
Tabla de verdad
ABA AND B
000
010
100
111
A · B
Uso real: selector de condición — la CPU activa una operación solo cuando dos condiciones se cumplen a la vez.
Puerta OR
La salida es 1 cuando al menos una entrada es 1. El interruptor se abre si cualquiera de las dos personas pulsa.
A B Q ≥1
Salida: 0
Tabla de verdad
ABA OR B
000
011
101
111
A + B
Uso real: detección de errores — una alarma se activa si cualquier sensor detecta un problema.
Puerta NOT (inversor)
Una sola entrada: invierte su valor. 0 se convierte en 1, y 1 en 0. Es la negación lógica.
A Q 1
Salida: 1
Tabla de verdad
ANOT A
01
10
Ā
Uso real: complemento — NAND = AND + NOT, base de todos los chips modernos por su eficiencia en silicio.
Con solo puertas NAND (AND seguido de NOT) puede construirse cualquier circuito digital. Los chips modernos están hechos de millones de NAND.
Sumador de 1 bit — puertas combinadas
A + B produce un bit de suma (S) y un bit de acarreo (C). Dos puertas, cuatro posibles combinaciones.
A B XOR S (suma) 0 A B AND C (acarreo) 0
ABSC
0000
0110
1010
1101
Encadenando sumadores de 1 bit se suman números de cualquier longitud. La CPU contiene miles de millones de estas puertas.

Turing: definir qué significa computar

En 1936, Alan Turing publica On Computable Numbers, with an Application to the Entscheidungsproblem. Su contribución no fue describir una máquina concreta, sino aislar lo esencial de cualquier proceso mecánico de cálculo: leer símbolos, escribir símbolos, cambiar de estado y seguir reglas finitas paso a paso.

La potencia de esta abstracción es enorme. Por un lado, la máquina de Turing ofrece un modelo general de computación. Por otro, deja claro que la computación también tiene fronteras. No existe un procedimiento general capaz de decidir, para cualquier programa y cualquier entrada, si esa ejecución terminará o continuará indefinidamente. Ese resultado, conocido hoy como halting problem, marca uno de los límites formales más importantes de la computación.

Ampliación opcional: por qué no podemos saber siempre si un programa terminará

Aquí no hablamos de un caso práctico aislado, como un programa mal escrito que entra en un bucle infinito. La afirmación es mucho más fuerte: no existe un método general que, recibiendo cualquier programa y cualquier entrada, pueda decidir siempre y en tiempo finito si esa ejecución terminará o seguirá indefinidamente.

La intuición puede parecer engañosa al principio. En muchos casos concretos sí podemos razonar sobre la terminación. Podemos ver, por ejemplo, que un contador baja hasta cero, o que una recursión tiene un caso base claro. Lo que Turing demuestra es que no puede existir un verificador universal válido para todos los programas posibles.

La idea de la demostración consiste en suponer que sí existe ese verificador general. Imaginemos una función TERMINA(programa, entrada) que responde siempre correctamente:

TERMINA(programa, entrada) =
  "sí"  si el programa acaba
  "no"  si el programa no acaba nunca

A partir de ahí puede construirse otro programa que use ese verificador para comportarse justamente al revés de lo predicho cuando se analiza a sí mismo. Si el verificador dice que terminará, entra en bucle. Si el verificador dice que no terminará, entonces se detiene.

PARADOJA(x):
  si TERMINA(x, x) = "sí":
    repetir para siempre
  si TERMINA(x, x) = "no":
    terminar

El problema aparece cuando ese programa se ejecuta sobre su propio código, es decir, cuando evaluamos PARADOJA(PARADOJA). Si el verificador predice que termina, entonces el programa entra en bucle. Si predice que entra en bucle, entonces termina. En ambos casos aparece una contradicción.

La conclusión no es que nunca podamos demostrar que un programa concreto termina. La conclusión es más precisa y más importante: no existe un procedimiento único, automático y universal que resuelva esa pregunta para todos los casos. Ahí aparece una de las primeras fronteras formales de la computación.

Ese resultado cambia el tono de toda la disciplina. La computación deja de ser solo una promesa de automatización ilimitada y pasa a tener límites demostrables. No todo problema difícil es simplemente una cuestión de más tiempo o más hardware, porque hay fronteras que nacen de la propia estructura matemática del problema.

La Máquina de Turing: qué significa computar
Un modelo abstracto con tres elementos — cinta, cabezal y tabla de reglas — capaz de simular cualquier cálculo posible. Y también de demostrar qué cálculos son imposibles.
📜
Cinta
Celdas con símbolos: 0, 1 o vacío. Es la memoria.
🔍
Cabezal
Lee, escribe y se mueve izquierda o derecha.
📋
Reglas (programa)
Estado + símbolo leído → qué escribir, hacia dónde moverse, nuevo estado.
Simulación — sumar 1 en binario
La máquina lee una cadena binaria de derecha a izquierda y añade 1, propagando el acarreo. Pulsa Paso a paso o Ejecutar.
Estado: q0 — buscando fin
Paso: 0
Regla aplicada: — (sin iniciar)
Lo que demostró
Cualquier proceso de cálculo mecánico puede describirse con estas tres piezas. Si un algoritmo existe, una Máquina de Turing puede ejecutarlo.
El Problema de la Parada
No existe ningún algoritmo que determine, para cualquier programa y entrada, si ese programa terminará alguna vez. Los límites de la computación son matemáticos, no prácticos.

Shannon otra vez: medir la información sin depender del significado

En 1948, Shannon vuelve a cambiar el marco con A Mathematical Theory of Communication. Esta vez el foco no está en circuitos lógicos, sino en la información como cantidad medible. El giro conceptual es muy profundo: para construir una teoría general de la comunicación, el mensaje debe analizarse sin depender de su significado.

De ahí salen ideas centrales para todo lo que vendrá después: compresión, capacidad de canal, redundancia, transmisión fiable con ruido y la noción práctica de bit como unidad elemental de información. La computación moderna no solo necesita lógica y memoria. Necesita también una teoría precisa de cuánto puede representarse, transmitirse y reconstruirse.


3. Llevar el programa dentro de la máquina

El programa almacenado: la gran simplificación conceptual

La siguiente transformación consiste en mover las instrucciones al interior de la propia máquina. El principio de programa almacenado sostiene que instrucciones y datos pueden residir en la misma memoria y ser tratados bajo una codificación común.

Esta idea quedó asociada al First Draft of a Report on the EDVAC de 1945 y, con el tiempo, a la llamada arquitectura de von Neumann. El efecto práctico fue inmenso. Cambiar de tarea ya no exigía recablear físicamente la máquina o sustituir mecanismos externos. Bastaba con cambiar el contenido de memoria.

Aquí la separación entre hardware y programa deja de ser una intuición externa, como en Jacquard, y se convierte en el principio organizador del ordenador moderno.

ENIAC, Baby y EDSAC: el ordenador deja de ser una idea

Conviene distinguir bien los hitos porque suelen mezclarse. ENIAC, completado en 1945, demostró que la computación electrónica de propósito general era físicamente viable. Pero reprogramarlo seguía siendo costoso y engorroso porque dependía de paneles y cableado.

El Manchester Baby fue en 1948 la primera máquina en ejecutar un programa almacenado desde memoria. Era una demostración experimental, no un servicio estable de computación, pero marcó el cambio de régimen.

EDSAC, operativa en 1949 en Cambridge, convirtió ese principio en una máquina útil para usuarios reales: el ordenador programable como infraestructura práctica, ya no solo como demostración experimental.

El ciclo de Von Neumann: cómo ejecuta una instrucción el procesador
Cuatro fases que se repiten miles de millones de veces por segundo. La arquitectura que describe este ciclo es la base de casi todos los procesadores actuales.
1
FETCH
2
DECODE
3
EXECUTE
4
WRITE-BACK
Fase 1 — FETCH
Leer la instrucción
La unidad de control lee la dirección del registro PC (Program Counter), busca la instrucción almacenada en esa dirección de memoria y la carga en el registro IR (Instruction Register). El PC se incrementa en 1 para apuntar a la siguiente instrucción.
Activo: Memoria + Unidad de control + Registros (PC, IR)
Ejemplo — instrucción ADD R1, R2:
PC=42 → Memoria[42] → IR = "ADD R1, R2" · PC = 43

Dartmouth: cuando la pregunta pasa de computar a pensar

Cuando John McCarthy, Marvin Minsky, Nathaniel Rochester y Claude Shannon redactan en 1955 la propuesta del Dartmouth Summer Research Project on Artificial Intelligence para el verano de 1956, el armazón técnico ya está montado. Existen lógica simbólica, circuitos digitales, teoría de la computación, información cuantificable y ordenadores electrónicos programables.

La novedad ya no consiste en preguntar si una máquina puede calcular. Esa parte empieza a estar resuelta. La nueva pregunta es si procesos como aprender, abstraer, usar lenguaje o resolver problemas también pueden describirse con precisión suficiente como para ser ejecutados por una máquina.

La IA no nace en un vacío. Nace cuando la computación general deja de ser una aspiración y se convierte en una base real sobre la que imaginar algo más ambicioso.

De los engranajes al ordenador universal
Tres siglos de intentos por mecanizar el pensamiento. Cada era resuelve un problema distinto: primero la máquina, luego la teoría, finalmente la unión de ambas.
Era mecánica
1642 – 1805
Máquinas que calculan, pero sin programa
Era teórica
1836 – 1948
Qué puede computarse, y sus límites
Nace la IA
1945 – 1956
Máquina + programa + hipótesis de inteligencia

4. Lo que este periodo dejó preparado

Al llegar a 1956, la humanidad ya no solo sabía representar el mundo con símbolos. Sabía construir máquinas para manipular esos símbolos de forma automática, reutilizable y general. Habíamos pasado de automatizar cuentas concretas a diseñar dispositivos capaces de ejecutar programas, implementar lógica, almacenar instrucciones y operar sobre información cuantificable.

Ese cambio lo transforma todo. A partir de aquí, la gran cuestión ya no será cómo mecanizar el cálculo, sino cómo conseguir que la máquina ajuste su comportamiento a partir de experiencia, datos y objetivos. Ese es el punto de partida del siguiente capítulo.

Siguiente capítulo

Capítulo 3 — Aprender → — Cómo se consigue que una máquina mejore a partir de datos: del perceptrón y los sistemas expertos al renacimiento del deep learning antes de 2012.


5. Referencias

Fuentes base
Clave Fuente Descripción breve
R1 Britannica — Pascaline La calculadora de Pascal y su alcance real.
R2 Britannica — Step Reckoner La máquina de Leibniz y la ampliación de la aritmética mecánica.
R3 Britannica — Jacquard loom Tarjetas perforadas y automatización de secuencias.
R4 Britannica — Analytical Engine Diseño de Babbage, tarjetas, memoria y control condicional.
R5 Computer History Museum — Ada Lovelace Notas de 1843, números de Bernoulli y la idea de programación.
R6 Project Gutenberg — Boole, An Investigation of the Laws of Thought Texto clásico sobre lógica algebraica.
R7 MIT DSpace — Shannon, A Symbolic Analysis of Relay and Switching Circuits El puente entre álgebra booleana y circuitos.
R8 Turing (1936) — On Computable Numbers Máquina de Turing, computabilidad y límites.
R9 Shannon (1948) — A Mathematical Theory of Communication Fundamentos de teoría de la información.
R10 Britannica — Stored-program computer El principio de programa almacenado.
R11 Computer History Museum — First Draft of a Report on the EDVAC Documento clave en la difusión del modelo de programa almacenado.
R12 Britannica — ENIAC Primer gran ordenador electrónico de propósito general.
R13 Computer History Museum — Manchester Baby Primera ejecución de un programa almacenado en memoria.
R14 Britannica — EDSAC Primer ordenador de programa almacenado con uso práctico regular.
R15 Stanford / John McCarthy — Dartmouth proposal Texto fundacional del proyecto de verano de 1956.