Выбрать главу

Но и это еще не все. Тому, кто хоть однажды бродил в настоящем лабиринте, хорошо понятно, как легко попасть в так называемый порочный круг, то есть снова и снова ходить по одним и тем же коридорам. Такая же опасность поджидает и программиста. Обнаружить порочный круг среди сотен тысяч команд — задача архисложная, вот почему и получалось всего три команды за день напряженной работы.

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

Если ЭВМ что-то особенное умеет — она умеет не ошибаться. Современная ЭВМ четвертого поколения работает без единого сбоя, скажем, месяц по двадцать четыре часа в сутки и выполняет за это время, повторяем, без единой ошибки 2,5·1012, то есть два с половиной триллиона, операций. Почему же это замечательное свойство ЭВМ не использовали с самого начала?

На пути к возмужанию

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

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

Как шло дальнейшее возмужание ЭВМ? Вначале (совсем по Библии) было слово, точнее, появились языки. Их назвали алгоритмическими. Основным в каждом машинном языке стало понятие идентификатора, то есть произвольного сочетания букв и цифр. Идентификаторы использовались как имена операндов (говоря высоким «штилем»), а попросту говоря, каждый идентификатор представлял собой условное обозначение ячейки памяти, в которой хранится данный операнд. Тем самым ЭВМ доверили сложнейшую задачу — выписать из программы все идентификаторы, расположить их в любом удобном для нее порядке, а затем присвоить им порядковые номера, которые одновременно (как и в доязычный период) служили адресами ячеек. Если в данной ячейке памяти предполагалось хранить не операнд, а команду, то соответствующий идентификатор получал название не идентификатора, а метки.

Следующей языковой единицей стало так называемое выражение. Это не что иное, как цепочка команд, в которой ни при каких условиях не нарушается естественная последовательность. В подавляющем большинстве языков допускалось использование лишь арифметических и логических выражений (упорно считалось, что машина должна только вычислять). Поэтому в выражении команды записывались в виде знаков, общепринятых для обозначения соответствующего арифметического или логического действия. Например, «+» для сложения или «V» для логической операции ИЛИ.

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