Второй этап развития программного обеспечения (ПО)

Второй этап (конец 50-х — середина 60-х годов) характеризуется увеличением размеров программ и затрат на преодоление разрыва между понятиями проблемных областей и машинных языков. Для преодоления разрыва создавались многочисленные «языки программирования высокого уровня», «алгоритмические языки высокого уровня» и даже «универсальные алгоритмические языки высокого уровня». Это был романтический период бурного накопления опыта, приемов программирования, синтаксических и семантических примитивов. Сейчас кажется более точным говорить о проблемно-ориентированных языках программирования. Ведь универсальность, например, языка АЛГОЛ-60 или даже ПЛ/1 весьма относительна — из алгоритмической полноты не следует пригодность для решения реальных задач. Программы должны описывать не только алгоритмы преобразования данных, но и способы использования ресурсов, связи с другими программами и внешним миром. Уровень языков также относителен, его точнее характеризует адекватность языка проблемной области, а не количество машинных команд на одну строку исходной программы (аналогичный подход с использованием типичных для проблемной области смесей «алгоритмических действий» применяется при оценке производительности ЭВМ).

К иллюзиям того времени (но иллюзиям весьма плодотворным) можно отнести веру в возможность неограниченного повышения уровня языка, в наличие синтаксических и семантических примитивов, способных устранить все сложности программирования, в простоту создания новых языков программирования. Было разработано около 3000 языков программирования, многие из которых использовались только авторами и почти не отличались друг от друга, поэтому в порядке естественной реакции возникло и в какой-то мере сохранилось до сих пор мнение о нецелесообразности разработки новых языков. В действительности лишь немногим языкам удалось сохранить значение до наших дней. Наблюдается дефицит как специализированных языков для узких проблемных областей, так и более универсальных, способных вытеснить насыщенные архаизмами старые языки программирования из занятых ими экологических ниш. Ведь до сих пор ЛИСП — основной язык программирования задач искусственного интеллекта, а ФОРТРАН, хотя и сильно изменившийся, — главный язык решения вычислительных задач.

В этот период были изобретены и опробованы почти все основные типы данных, операции над ними, управляющие структуры и способы их изображения в программах, различные варианты параметризации программных единиц. Происходил поиск оптимальных соотношений между универсализацией и специализацией, статическим и динамическим обнаружением ошибок, компиляцией и интерпретацией, эффективностью и независимостью от специфики ЭВМ. Необходимо подчеркнуть, что развитие не было планомерным. И тогда, и позднее далеко не сразу осознавалось значение найденных решений. Например, АЛГОЛ-60, ПАСКАЛЬ, многие другие языки долгое время не имели средств раздельной компиляции (АЛГОЛ-60 — даже средств ввода-вывода). В учебниках по языку ФОРТРАН до сих пор употребляют термин «номер устройства», не смягчая этот архаизм хотя бы определением «виртуальный».