люди, попадающие в армию вместо университета, просто тупеют.

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

Тем не менее, принципы работы компьютера не изменились с тех пор и, соответственно, программирование, несмотря на все современные парадигмы, требует от человека тех же качеств, что и в те далекие годы. Суперпрограммист 60—70-х был бы суперпрограммистом и сегодня.

Программировать я стал сразу. На зачетах писал программы за всех друзей и других желающих. Мне это нравилось и получалось легко. Чисто случайно я попал по распределению в вычислительный центр вместо аспирантуры и фактически почти двадцати пять лет программировал. Это моя профессия.

В 1970 году мне пришлось программировать для ЭВМ «Минск-22» в машинных кодах, и я до сих пор помню систему команд «Минск-22». Например, программа вычисления факториала целого числа N! = N * (N-1) * … * 3 * 2 * 1 выглядит приблизительно следующим образом (аргумент N передается в ячейке 0040, результат N! возвращается в ячейке 0041):

7000) – 10 00 7005 0041 переслать 1 в ячейку 0041 (Здесь будет N!)

7001) – 32 00 0040 0041 умножить 0041 на N (Далее в 0040 будет N–1)

7002) – 22 00 7005 0040 вычесть 1 из 0040 (Получить в 0040 N–1)

7003) – 34 00 7001 0000 если после вычитания не ноль, то повторить с 7001

7004) – 30 00 0017 0000 возврат в вызывающую программу

7005) – 00 00 0000 0001 константа – целая 1.

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

Я старался брать машинное время ночью – во-первых, нет конкуренции за время (женщины- программистки, а их было почему-то очень много, предпочитали работать днем), во-вторых, можно работать до результата. Работа мне нравилась, шеф меня ценил.

Мне сильно повезло с первым шефом – Александром Михайловичем Гуляевым. Он был суперпрограммистом. Чтобы ввести в профессию, он заставил меня отладить написанный им довольно большой комплекс программ для шахтной вентиляции. После этого я стал одновременно модульным, структурным и, возможно уже тогда, объектно и сервисно ориентированным. Модные парадигмы создаются не программистами, а так называемыми менеджерами. Эти менеджеры никогда ничего не пишут сами и не могут написать в силу отсутствия соответствующих способностей, но полезную функцию (что-то подсмотреть и своевременно прокричать) выполняют. К сожалению, Гуляев никогда не стремился к признанию, рано ушел в себя и умер где-то на станции космических лучей. Другого суперпрограммиста, моего старшего, как он любил говорить, приятеля Володю Медведева, который мог написать эффективную программу для чего угодно, вообще убили при дурацких обстоятельствах. Хорошие программисты не часто добиваются в жизни того, чего могли бы, и чего принято добиваться, и чего всегда добиваются менеджеры.

Потом был долгий период ЕС ЭВМ и алгоритмических языков – «Фортран», «ПЛ/1» и др. На одном из алгоритмических языков программа вычисления факториала могла бы выглядеть так:

fact:= 1; n1:= n;

do while (n1>0); fact:= fact * n1; n1:= n1 – 1; end;

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

Отражая объектно-ориентированную структуру окружающего мира, алгоритмическое программирование (через модульное, структурное и др.) эволюционировало в объектно-ориентированное, в котором объект, тем не менее, представляется совокупностью алгоритмов.

Другой подход в программировании связан с разработками в области искусственного интеллекта. Теоретической базой искусственного интеллекта является логика, а в практическом программировании используются языки функционального и логического программирования.

Например, функцию вычисления факториала можно определить в виде функции следующим образом:

fact (N) = N * fact (N–1); fact (0) = 1

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

На языке логического программирования «Пролог» программа вычисления факториала выглядит следующим образом:

fact (0, 1).

fact (N, F) если N1= N–1, fact (N1, N2), F=N*N2.

Этот язык менее естественен для записи функций, но значительно удобнее для представления знаний в виде: если …, то …. Эта форма стала основой технологии программирования так называемых экспертных систем. Программировать экспертные системы просто, но найти эксперта со знаниями и извлечь знания из него в этой форме невозможно.

Я подсел (иначе не скажешь) на «Пролог» и даже основную свою систему написал на «Турбопрологе» (выдающийся продукт компании «Борланд»), а после заката «Пролога» бросил программировать вообще. Оптимисты, которые никогда не бывают правы, но всегда выигрывают, предрекали, что «Пролог» будет играть роль «Фортрана» в 2000 году. Увы. Разумеется, «Пролог» имеет недостатки, например, cut (встроенный предикат «Пролога» для обрезания перебора), который убивает логическую сущность, но без которого невозможно писать эффективные программы. Думаю, что дело не столько в недостатках Пролога, сколько в неготовности человека. Несколько раз я читал лекции по программированию на «Прологе» – в лучшем случае только один студент из группы был в состоянии преодолеть алгоритмическое мышление.

Потом я перешел в категорию IТ-менеджеров. Работа менеджера, если ее можно назвать работой, мне не нравится, но кормит она намного лучше и, в качестве компенсации, оставляет голову свободной, потому что голова IТ-менеджеру, впрочем, как и любому менеджеру, не нужна.

Николай Михайлович Ершов

Программирование свело меня с совершенно уникальным человеком – Николаем Михайловичем Ершовым. В Институте горного дела в Москве он разрабатывал какие-то алгоритмы, для реализации которых на ЭВМ ему нужен был программист, так как сам он не программировал. В один из его визитов в Караганду (примерно 1975 год), с которой его многое связывало, шеф попросил меня помочь ему.

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

Уникальность его заключалась в том, что он отсидел в общей сложности 25 лет. Первые 10 он получил в 1931-м, будучи студентом второго курса Ленинградского матмеха, за якобы троцкизм (что-то брякнул неосторожно). После отбывания срока (все десять) он попал на войну, где ему снова не повезло, и он

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату