В 1819 году Чарльз Бэббидж (1791–1871) создал первый проект «дифференциальной машины», а в 1822 году выстроил опытный рабочий образец. Он надеялся, что это улучшит и скорость, и точность вычисления очень необходимых таблиц, например таблицы логарифмов. Британское правительство поддержало полномасштабное строительство этой машины, способной к созданию беспрецедентно точных таблиц для страхового, административного и научного использования. Но к 1834 году проект намного превысил бюджет и вышел из графика. Хотя идеи Бэббиджа и его честность в отношении финансовых вопросов никогда нее вызывали сомнений, правительство отложило дальнейшее финансирование. К тому времени он перенес свое внимание на проект «аналитической машины» — настоящего предшественника современного компьютера. Ключевой особенностью этого агрегата было разделение хранилища, где находились числа во время вычисления, и машины, которая выполняла арифметические операции. Входные и выходные данные были закодированы на перфорированных картах, равно как и устройство контроля, которое осуществляло выполнение программы. Был также предусмотрен вывод на печатное устройство. Чтобы можно было выполнять эти операции, использовался паровой двигатель. Но «аналитическая машина» так никогда и не была построена, и в 1842 году правительство решило прекратить финансирование «разностной машины». Это стало еще одним подтверждением желчного отношения Бэббиджа к британской науке. Он был сооснователем Аналитического общества, главная цель которого состояла в том, чтобы довести обучение математике в Кембридже до стандартов континента. В 1830 году он написал статью, в котором яростно критиковал состояние британской науки, в основном обвиняя в этом изолированность Королевского общества, что привело к созданию британской Ассоциации развития науки. К сожалению, анализ соотношения стоимости и эффективности идей Бэббиджа показал, что они не будут реализованы в течение еще почти ста лет.
Как и предвидел Бэббидж, развитие компьютеров в значительной степени зависело от потребности ускорить выполнение расчетов с помощью механических калькуляторов. Первая автоматическая вычислительная машина была построена в Гарварде на средства IBM приблизительно в 1940 году. Первый электронный программируемый компьютер назывался «Колосс». Он был построен в 1943 году в результате сотрудничества Алана Тьюринга и Джона фон Неймана и представлял собой часть работы по взлому шифров в Блетчли-Парке. Однако был проект, который оказал особое влияние на будущую компьютерную архитектуру, — ENIAC (электронный цифровой интегратор и калькулятор), построенный приблизительно в то же время в университете штата Пенсильвания. Фон Нейманн надеялся, что ENIAC, первоначально разработанный для расчета баллистических таблиц, сможет выполнить некоторые вычисления, необходимые для Манхэттенского проекта. Однако затем он предложил новый, свой собственный проект компьютера, сохраняющего программу, называющийся EDVAC (Электронный Автоматический Компьютер Дискретных Переменных). Новая структура состояла из пяти основных компонентов: входные данные, выходные данные, блок управления, память и арифметический блок. Компьютер с сохранением программы называется так потому, что программа вводится в память посредством числовых данных, в то время как блок управления выполняет последовательность инструкций. Первый практический компьютер этого типа был построен в 1949 году в Великобритании и назывался EDSAC (Электронный Автоматический Калькулятор с задержкой Хранения). Следующие машины были построены в США и Великобритании, и к 1960-м годам хранение программ стало обычным делом. Использование полупроводниковых компонентов для замены электронно-лучевых ламп привело к значительному увеличению скорости и надежности работы. Несмотря на то что эти компьютеры сильно напоминали проекты Бэббиджа, их авторы ничего не знали о его работах.
Совершенно ясно, что изобретение компьютеров было мотивировано вполне практическими проблемами в бизнесе, управлении, криптографии или в решении уравнений математической физики. Компьютеры с хранением программ отделили аппаратные средства от программного обеспечения. Но первичная работа над программами — алгоритмами для выполнения соответствующих вычислений — шла не от практических проблем, а от логического рассмотрения формальных систем.
Самый привычный пример формальной системы — обычная арифметика. В ней есть четкий набор символов, есть процедуры для того, чтобы работать с этими символами, разобраться с проблемой и найти решение. Сами символы не имеют никакого значения кроме как в отношении правил формальной системы. Например, если я хочу понять, что означает ABmBAeBEB, я могу использовать различные методы или алгоритмы, чтобы выполнить вычисление. Вероятно, будет легче понять это выражение в виде 12 х 21 = 252, но этот пример хорошо иллюстрирует, что фактические символы не важны, имеет значение лишь истинность утверждения, в данном случае вычисления, которая может быть доказана посредством выведения из установленных аксиом. Если убрать общепринятое использование букв в обозначении функций, числа могут не только обозначать количества, но могут также действовать как операторы. Это — критический фактор перехода от вычислительных устройств, разработанных для решения определенных типов задач, к общим, универсальным компьютерам. В современном компьютере любая команда, например указание показать красный пиксель в определенном месте на мониторе, — это, по существу, цепочка чисел. Фактически вся программа, преобразованная в бинарный код, есть одно (очень большое) число. Базисная простота компьютеров часто не замечается из-за все возрастающей скорости и мощности этих машин.
Курт Гедель (1906–1978) в своей статье 1931 года «О формально неразрешимых суждениях Principia mathematica и связанных систем» описал специфический метод присвоения уникального числа каждому суждению, выраженному внутри формальной системы. Даже доказательство истинности суждения может быть выражено как уникальная цепочка натуральных чисел, причем на основании этих базовых символов можно решить, какие из них значащие, а какие — нет. Первый из двух классических результатов, описанных в этой статье, — это «теорема неполноты», заключающаяся в том, что аксиоматическая система, даже такая базовая, как арифметика целых чисел, содержит суждения, истинность или ложность которых не могут быть доказаны. Это до некоторой степени походит на лингвистическую дилемму «данное предложение — ложь». Существование таких неразрешимых суждений показало, что программа аксиоматизации математики, предпринятая Бертраном Расселом и Альфредом Нортом, невыполнима. Гедель также разочаровал Дэвида Гилберта, который стремился создать полную и последовательную арифметику, то есть арифметику без внутренних противоречий. Гедель также показал, что имеет место и прямо противоположное — если система последовательна, она не может доказать свою собственную последовательность изнутри самой себя. Короче говоря, мы говорим, что арифметика неполна. После того как в крышку гроба арифметики был забит огромный гвоздь, математики оставили поиски великой единой математики и вместо этого сосредоточились на исследовании того, как различные формы аксиоматизации приводят к различным математическим системам. Сам факт наличия математического языка должен позволить нам отвечать на вопросы, так что главным образом следует обсуждать процесс, которым определяется истинность математических суждений. Теперь математики в основном говорят об исчисляемости, а не о разрешимости проблемы.