Для устранения последнего недостатка Эккерт в 1944 году выдвинул идею хранимой в памяти программы. Это была одна из важнейших технических находок в истории вычислительной техники. Суть ее заключалась в том, что команды программы должны были представляться в виде числового кода, то есть кодироваться в двоичной системе (как и числа) и вводиться в машину, где бы они хранились вместе с исходными числами. Для запоминания этих команд и операций с ними предполагалось использовать те же устройства — триггеры, что и для действия с числами. Из памяти отдельные команды должны были извлекаться в устройство управления, где их содержание расшифровывалось и использовалось для передачи чисел из памяти в арифметическое устройство для выполнения операций над ними и отсылки результатов обратно в память.
Между тем по окончании Второй мировой войны одна за другой стали появляться новые электронные вычислительные машины. В 1948 году англичане Килбурн и Вильямс из Манчестерского университета создали машину «МАРК-1», в которой впервые была реализована идея хранимой программы. В 1947 году Эккерт и Моучли основали свою фирму, а в 1951 году наладили серийный выпуск своих машин UNIVAC-1. В 1951 году появилась первая советская ЭВМ МЭСМ академика Лебедева. Наконец, в 1952 году свой первый промышленный компьютер IBM 701 выпустила фирма IBM. Все эти машины имели в своей конструкции много общего. Об этих общих принципах работы всех ЭВМ первого поколения мы теперь и поговорим.
Электронные вычислительные машины, как известно, совершили настоящий переворот в области применения математики для решения важнейших проблем физики, механики, астрономии, химии и других точных наук. Те процессы, которые прежде совершенно не поддавались просчитыванию, стали вполне успешно моделироваться на вычислительных машинах. Решение любой задачи сводилось при этом к следующим последовательным шагам: 1) исходя из значения физической, химической и прочей сущности какого-либо исследуемого процесса формулировалась задача в виде алгебраических формул, дифференциальных или интегральных уравнений или других математических соотношений; 2) с помощью численных методов задача сводилась к последовательности простых арифметических операций; 3) составлялась программа, которая определяла строгий порядок выполнения действий в установленной последовательности. (ЭВМ осуществляла в принципе тот же порядок действий, что и человек, работающий на арифмометре, но в тысячи или десятки тысяч раз быстрее.) Команды составленной программы записывались с помощью специального кода. Каждая из этих команд определяла какое-либо определенное действие со стороны машины.
Любая команда, кроме кода проводимой операции, содержала в себе адреса. Обычно их было три — номера ячеек памяти, откуда брались два исходных числа (1-й и 2-й адрес), а затем номер ячейки, куда отправлялся полученный результат (3-й адрес). Таким образом, к примеру, команда +/17/25/32 указывала, что следует сложить числа, находящиеся в 17-й и 25-й ячейках и результат направить в 32-ю ячейку. Могла использоваться и одноадресная команда. В этом случае для выполнения арифметической операции над двумя числами и отсылки полученного результата требовалось три команды: первая команда вызывала одно из чисел из памяти в арифметическое устройство, следующая команда вызывала второе число и проводила заданную операцию над числами, третья команда отправляла полученный результат в память. Так осуществлялась работа вычислительной машины на программном уровне.
Вычислительные процессы при этом протекали следующим образом. Управление работой ЭВМ осуществлялось с помощью электронных ключей и переключателей, называемых логическими схемами, причем каждый электронный ключ при получении сигнала управляющего импульса напряжения включал нужную линию или цепь электрического тока. Простейшим электронным ключом могла служить уже трехэлектродная электронная лампа, которая заперта, когда на ее сетку подается большое отрицательное напряжение, и открывается, если на сетку подается положительное напряжение. Ее работу при этом можно представить как управляющий вентиль, который пропускает через себя импульс A, когда на второй его вход подан управляющий импульс B. Когда же имеется только один импульс тока A или B, то вентиль закрыт и импульс не проходит на его выход. Таким образом, только при совпадении по времени обоих импульсов A и B на выходе появится импульс. Такую схему называют схемой совпадений, или логической схемой "и". Наряду с ней в вычислительной машине используется целый набор других логических схем. Например, схема «или», которая дает на выходе импульс при появлении его на линии A или B или одновременно на обеих линиях. Другая логическая схема — схема «нет». Она, наоборот, запрещает прохождение импульса через вентиль, если одновременно подан другой запрещающий импульс, запирающий лампу.