Главная arrow Развитие ПО arrow Языки высокого уровня
Как начинался компьютер
Компьютерная революция
Двоичный код
Разработки военных лет
Интегральные микросхемы
Микрокомпьютер
Персоны
Сеть
Язык компьютера
Развитие ПО
Гибкие системы
Средства разработки
Информатика
Вычислительная наука
Операционные системы
Искусственный интеллект
Предыстория
Поиск
Знания и рассуждения
Логика
Робототехника
 

 
Языки высокого уровня Печать
В середине 50-х годов, когда вычислительная техника прочно укоренилась в университетах и научно-исследовательских лабораториях США и Европы, наступило время стремительного прогресса в области программирования. Однако новые разработки отнюдь не отрицали всего того, что было сделано прежде. Напротив, они опирались на уже построенный фундамент. Компиляторы и интерпретаторы для так называемых языков ассемблера (такие языки требуют от программиста глубокого знания аппаратуры) остались важным средством программирования для любого компьютера. Однако, хотя эти средства и продолжали использоваться, их роль постепенно снижалась. Посредниками между программистами и машинами стали языки программирования нового типа. От языка ассемблера они отличались большей гибкостью и возможностью использования конструкций, подобных предложениям.

С появлением языков высокого уровня программисты получили возможность больше времени уделять решению конкретной проблемы, не отвлекаясь особенно на весьма тонкие вопросы организации самого процесса выполнения задания на машине. Кроме того, появление этих языков ознаменовало первый шаг на пути создания программ, которые вышли за пределы научно-исследовательских лабораторий и финансовых отделов.

Вначале 60-х годов все существующие языки программирования высокого уровня можно было пересчитать по пальцам. Однако вскоре их общее число (с учетом разнообразных диалектов) достигло нескольких сотен. Поэтому были предприняты различные попытки создать универсальный язык программирования. Ни одна из них не увенчалась полным успехом. Создается впечатление, что в программировании наилучший результат достигается только при индивидуальном подходе.

Среди десятка наиболее широко используемых языков каждый ориентирован на решение специфических задач.

Например, BASIC по-прежнему широко употребляется для написания простых программ, особенно программ для микрокомпьютеров.

FORTRAN - с его четко определенными правилами выполнения арифметических действий - является классическим (чем-то вроде латыни или греческого) языком программирования, наиболее подходящим для выполнения естественнонаучных, математических и инженерных расчетов.

Язык программирования Кобол (COBOL, от COmmon Business Oriented Language - общий язык, ориентированный на деловые задачи), созданный в 1960 г. объединенным комитетом производителей и пользователей компьютеров, был задуман как основной язык для массовой обработки данных в сферах управления и бизнеса. В COBOL, в отличие от большинства других языков, все данные описываются в отдельной секции, которая не совпадает с секцией команд. Это соглашение позволяет использовать совместно одни и те же описания данных в различных программах.

Другие языки еще более специализированны. Например, для обучения программированию школьников широко используется язык Logo (от греческого logos - слово). Этот язык позволяет новичку управлять движением по экрану специального символа под названием «черепашка». Так, набирая последовательно команды FORWARD 60 (вперед), LEFT 45 (влево), FORWARD 75, юный программист сообщает компьютеру, что он хочет нарисовать прямую линию длиной в 60 единиц, затем сделать поворот против часовой стрелки на 45 градусов и нарисовать еще одну линию длиной в 75 единиц.

Еще один заслуживающий внимания язык программирования - Алгол (ALGOL, от ALGOrithmic Language - алгоритмический язык). Как и COBOL, это - плод работы комитета, но не национального, а международного. Язык предназначен для записи алгоритмов, которые строятся в виде последовательности процедур, применяемых для решения поставленной задачи. Первая версия этого языка, ALGOL-58, была разработана в ходе напряженного восьмидневного совещания в конце весны 1958 г.

Специалисты по вычислительной технике и программированию из США (в их числе Джон Бекус - один из создателей языка FORTRAN) встретились со своими европейскими коллегами в Цюрихе. Цель встречи заключалась в разработке проекта универсального машинно-независимого языка, который по своему уровню не уступал бы FORTRAN. На самом деле FORTRAN и сам вполне мог бы претендовать на роль такого универсального языка, если бы не его чересчур тесная связь с фирмой IBM и ее машинами.

Программисты далеко неоднозначно приняли язык ALGOL-58 и его преемника ALGOL-60. Широкого одобрения (которого в конце концов добился FORTRAN) эти языки так и не получили. И все же их влияние на развитие других языков программирования оказалось весьма значительным.

Среди языков, при создании которых ставилась цель улучшить ALGOL, следует отметить Pascal. Этот язык был разработан в конце 60-х годов швейцарским ученым Никлаусом Виртом. Язык Pascal требует от программиста определения всех переменных в отдельной секции, расположенной в начале программы. Так как эти определения задаются явным образом, то в Pascal-программах сравнительно немного ошибок и их проще понять и исправить программисту, не являющемуся автором программы. Это делает Pascal весьма подходящим для создания больших программ.

В 1963 г. он был объявлен официальным языком программирования для учащихся средних школ, которые намерены специализироваться в области вычислительной техники и программирования в американских университетах.

Несмотря на стремительный рост числа языков программирования, программное обеспечение существенно отставало в своем развитии от технической базы компьютеров. В то время как в области производства аппаратного обеспечения наблюдался неуклонный рост производительности и снижение цены, стоимость программного обеспечения продолжала увеличиваться. Иногда затраты на программное обеспечение больших новых вычислительных систем доходили до 80% от их общей стоимости. Это, естественно, вызывало недовольство инженеров, которые считали, что программное обеспечение фактически превратилось в фактор сдерживания как для развития аппаратного обеспечения компьютеров, так и для применения последних.

Главная причина, сделавшая программное обеспечение своего рода камнем преткновения, кроется в его все возрастающей сложности. Многие программы настолько велики, что даже специалисты не в состоянии их понять. Например, пакет программного обеспечения для управления системой воздушных перевозок, которая работает в 20 городах США и в одном городе Великобритании, насчитывает более 600 тыс. отдельных машинных команд. Из них 39 203 - команды условного перехода, обеспечивающие возможность разветвления программы по двум направлениям. Таким образом, общее количество возможных путей в программе составляет астрономическое число, которое приблизительно выражается числом 10 с 11 800 нулями.

(В языке BASIC оператор условного перехода может иметь вид IF N> = 4 THEN 220. Такой оператор предписывает компьютеру перейти к выполнению оператора, заданного в строке 220, если переменная N больше либо равна 4. Если N меньше 4, то компьютер должен автоматически перейти к выполнению следующей строки программы.)

Однако сложность программного обеспечения лишь частично обусловлена запутанностью решаемой задачи. Во многом она связана и с самой сутью процесса программирования, требующего огромного внимания и аккуратности при переводе конкретной задачи в термины, доступные компьютеру.

В программировании недопустимо полагаться на волю случая. Пользователь, завороженный магией компьютера, не владея искусством программирования, склонен упускать из виду, что те действия, которые он считает само собой разумеющимися, машине надо сообщать в самых мельчайших подробностях. Один специалист по компьютерам заметил: «Если говорить только о том, как человек обдумывает способ выполнения какого-либо действия, то здесь особых проблем не возникает. Однако люди пользуются такими удивительными способностями, как ассоциативное мышление и распознавание образов».

Для компьютера любое заранее планируемое действие надо разбить на самые элементарные шаги так, чтобы в результате получился алгоритм. В простейшем случае алгоритм ни чем не отличается от рецепта для приготовления праздничного пирога. Но программист должен определить и те элементарные шаги, которые человеческий разум склонен просто не замечать. Например, в кулинарном рецепте может быть сказано, что следует взять 3 яйца, однако там ничего не говорится о том, что они должны быть свежими и что их предварительно надо разбить и использовать только содержимое, без скорлупы.

Поскольку для того, чтобы предусмотреть любую случайность, надо написать сотни, а то и тысячи команд компьютера, естественно, растут затраты и вкрадываются ошибки. Все это порождает, по словам голландского ученого Эдсгера Дейкстры, «огромное множество досадных мелочей». Дейкстра - научный сотрудник фирмы «Бароуз» (BURROUGHS), один из наиболее авторитетных в мире теоретиков программирования и последовательный критик всего того, что он считает проявлением преступной халатности в данной области. Уже не один год он утверждает, что большинства ошибок можно избежать, и ведет неутомимую борьбу с небрежным стилем в программировании, которое развивалось в основном не как строгая наука, а как искусство, основанное на интуиции и личном опыте.