§ 3.1] КЛАССИФИКАЦИЯ И ЭВОЛЮЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 177
тивной, что все последующие поколения программистов на всех ЭВМ
отказались от абсолютного кодирования. Языки программирования
низкого уровня, в которых коды операций заменены мнемоническими
обозначениями, стали называться языками ассемблера или автокодами
(мнемокодами), а преобразующие программы – ассемблерами.
В 50-е годы ЭВМ были еще экзотической редкостью, они использо-
вались в основном в элитных академических учреждениях и военных
системах. Программисты также исчислялись единицами, и работать им
приходилось в очень стесненных условиях. Приходилось постоянно
изворачиваться, экономить каждую ячейку памяти и каждый машинный
такт, потому что возможности тех компьютеров были более чем скром-
ными. У машины Урал-1, например, ОЗУ имело всего 1024 слова при
быстродействии 100 оп./с. Зато каждая отлаженная, тем более стан-
дартная программа была своего рода шедевром.
В 60-е годы объем производства ЭВМ резко возрос, появились раз-
нообразные машины второго поколения, они вышли из узких стен на-
учных и военных учреждений, начали использоваться в бизнесе. Резко
расширился круг решаемых задач, соответственно возросло и число
людей, занятых программированием. Языки низкоуровневого кодиро-
вания, реализованные в ассемблерах, ненамного облегчили их тяжкий
труд. Голубой мечтой казалась возможность полной автоматизации
программирования, когда программист пишет математические форму-
лы на привычном символическом языке, а компьютер самостоятельно
преобразовывает их в тексты машинных программ.
Систематическая работа над созданием высокоуровневых языков
программирования и соответствующих компиляторов началась в конце
50-х годов и бурно развивалась все последующее десятилетие. В
1957 году был создан Fortran, в 1960 году – Cobol, Algol и Lisp, в
1964 году – Basic, Simula, PL/1, в 1970 году – Pascal и Smalltalk. Изобре-
тение новых языков превратилось в модное занятие, к концу 60-х годов
их число перевалило уже за тысячу. Практически все основные концеп-
ции – процедурное, логическое, объектно-ориентированное программи-
рование были предложены в это бурное десятилетие. В последующие
годы прогресс в автоматизации программирования шел не в сторону
создания новых языков, а, наоборот, по пути естественного отбора.
Языки программирования рождались и умирали, но только некоторые
из них – наиболее стойкие и жизнеспособные – дожили до конца
XX века и стали стандартными в международном сообществе програм-