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