Гений программирования

Эпитеты
в превосходной степени всегда расходую экономно, чтобы не допускать их девальвации.
За 35 лет работы на вычислительных машинах мне удалось встретить всего лишь трех
программистов, которых считаю талантливыми. К гениям в программировании отношу
только Грейс Мюррей Хоппер, адмирала ВМС США, третьего программиста на первом
компьютере США, создательницу языка программирования сверхвысокого уровня КОБОЛ.

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

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

Первый, общепринятый, изначально основан на главенстве компьютера: человек должен был изучить язык (систему команд) машины; следующая ступенька — автокод; затем — ассемблер, макроассемблер, языки программирования низкого, среднего и более или менее высокого уровня.

Второй предполагал некоторую уступку компьютеру: программа создавалась на подмножестве естественного языка с полностью формализованным синтаксисом и семантикой. Больше никаких уступок не было и не предвиделось. Так возник в 1959 г. и живет до сих пор КОБОЛ — язык сверхвысокого уровня.

Ревизия прикладного программного обеспечения, проведенная в 1996 г. в связи с
Проблемой 2000, показала, что не менее 70% промышленного программного обеспечения
в мире создано именно на КОБОЛе. Половина программистов-профессионалов США в настоящее
время работает на этом языке. Компиляторы для КОБОЛа, учитывающие новые веяния
(Visual-средства, объекты, Web-программирование и пр.), имеются практически для
всех платформ и операционных систем.

Что в имени тебе моем?

Аббревиатура COBOL образована от Common Business Oriented Language, что можно перевести как "язык для экономических задач". Именно такое представление о назначении КОБОЛа существует со времен СССР и до сегодняшнего дня.

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

Тем не менее изобразительные средства КОБОЛа оказались настолько гибкими, эффективными и универсальными, что именно из него вышли многие СУБД, генераторы отчетов и другой инструментарий, действительно широко применяемый в коммерческом программном обеспечении. Задолго до явления Internet народу в КОБОЛ были встроены пять операторов, позволяющих работать с электронной почтой. Только описание концепций современного КОБОЛа занимает около 1000 страниц.

При всем при этом у КОБОЛа не было и нет притязаний на роль универсального языка
программирования. Его ниша — разработка эффективно управляемых больших и очень
больших проектов (многие миллионы строк исходного текста) обработки данных; причем
данные могут иметь структуру практически неограниченной сложности.

Я силен, чего скрывать…

Мое первое впечатление от КОБОЛа было далеко не благоприятное. По сравнению с ФОРТРАНОМ, на котором я писал программы численного анализа, новый язык показался тяжеловесным, неуклюжим, слишком многословным и даже неряшливым. Пришлось заставить себя дочитать руководство по программированию до последней странички, и тогда стала понятной область, где ему не было равных ни в то далекое время, ни сейчас.

Разумеется, даже очень хорошим инструментом можно работать плохо, но будем предполагать,
что он попадает в хорошие руки. При профессиональном подходе к разработке ПО COBOL
обеспечивает решение обширного перечня задач:

  • Создание программ, текст которых понятен непрограммисту, коим все чаще
    является постановщик задачи.

  • Самодокументирование подпрограммы, программы, подсистемы, системы, проекта.
  • Преемственность исходного текста программы. На протяжении многих лет программу
    могут сопровождать независимые программисты, подхватывая и передавая эстафету.

  • Независимость от наличия "самородков", у которых программы работают
    только в присутствии автора.

  • Переносимость программ (независимость исходного текста от платформы, периферийных
    устройств и операционной системы).

  • Высокая управляемость проектом любого масштаба.
  • Возможность взаимодействия с другими языками программирования.
  • Произвольное преобразование форматов данных встроенными средствами языка.
  • Манипуляция данными практически произвольной структуры.
  • Работа с файлами всех типов во всех допустимых режимах доступа.
  • Наследование соглашений о языке от самой первой версии до последней. Устаревшие
    изобразительные средства поддерживаются достаточно долго, чтобы избежать "революционных"
    потрясений.

  • Наличие компиляторов практически для всех платформ и операционных систем.
  • Традиционно эффективные унифицированные средства отладки на всех уровнях
    разработки (от подпрограммы до проекта) как в режиме интерпретации, так и
    на уровне исполняемого кода.

  • Учет современных тенденций (visual-, object-, Web-программирование) не
    в ущерб традиционной методике промышленного программирования.

  • Последовательно реализован принцип "разделяй и властвуй":
    среда разработки отделена от среды внедрения;
    среда оборудования отделена от среды обработки;
    разделены внешние и внутренние имена файлов;
    описания данных отделены от процедур обработки;
    исключены свойства данных "по умолчанию";
    проект может иметь иерархическую структуру произ вольной глубины.

  • Высокая продуктивность разработки проектов.

Перечислено, естественно, не все, но для непредвзятого специалиста и этого достаточно.
КОБОЛ — одна из наших упущенных возможностей качественного программирования.

Первопроходец

Слова "первая, впервые" многократно связаны с именем Г. Хоппер. Она работала на первом электромеханическом вычислительном устройстве США Mark I; при габаритах 15,3 x 2,4 x 2,4 м память компьютера составляла 72 слова и он мог выполнять три операции сложения в секунду. На нем Хоппер проводила вычисления для артиллерийских стрельб.

В 1951 г. именно она обнаружила первого компьютерного "жука" (bug).
Это был обыкновенный мотылек, который залетел в компьютер и вызвал замыкание в
реле. После устранения неисправности мотылька вклеили в рабочий журнал UNIVAC
I, а термин вошел в обиход всех программистов мира и стал означать неисправность
любого рода. На картинке — фрагмент журнала и мотылек под скотчем.

В 1952 г. Хоппер разработала первый компилятор. До этого момента все считали,
что машина способна выполнять только вычислительные операции. По словам Хоппер,
она сделала его "из лени, надеясь на то, что программист сможет снова стать
математиком".

В 1955 г. был разработан первый компилятор для языка FLOW-MATIC, многие идеи которого вошли в разработку платформенно-независимого языка КОБОЛ; его первые спецификации появились в 1959 г., а уже в 1962 г. принят первый международный стандарт языка КОБОЛ. При активном участии Хоппер разрабатывался аппарат подпрограмм, язык ФОРТРАН, механизм косвенной адресации, процедуры оптимизации исполняемого кода и манипуляция символами.

В 1969 г., помимо множества разнообразных наград, Хоппер получила самую престижную в области компьютинга награду "Человек года", а также стала первой женщиной, чьи заслуги отмечены в области обработки данных.

В 1971 г. была учреждена премия имени Хоппер для молодых профессионалов в области программирования.

В 1973 г. Грейс, первую из специалистов США и первую из женщин мира, ввели в высшее общество Британских компьютерных наук.

В декабре 1983 г. на церемонии в Белом доме Хоппер присвоили звание коммодора, а два года спустя специальным указом Президента США (первой и единственной из женщин) — контр-адмирала, что позволило ей стать адмиралом Хоппер.

Вышедшая в отставку в августе 1986 г. адмирал Хоппер была первой, кто в США до
80-летнего возраста оставался на действительной воинской службе.

Зеркало души

Всмотритесь в снимок в начале статьи. У мудрых людей почти всегда во взгляде заметна затаенная грусть. Это — от общения с тем, что называют "человеческой массой". Не обижайтесь, уважаемый читатель, к Вам этот термин не относится.

Грейс Хоппер родилась 9 декабря 1906 г. За свою долгую жизнь она смогла проявить
себя в разных видах деятельности и всегда с выдающимися результатами: в математике,
программировании, преподавании (работу со студентами она считала своим главным
делом), социальных исследованиях, корпоративной политике, бизнесе, проектировании
систем, разработке стандартов. Занявшись программированием в 37-летнем возрасте,
она доказала, что "ничто никогда не поздно", и подтверждала это не только
на протяжении последующих сорока лет активной работы, но и нескольких лет работы
консультантом корпорации DEC до 1 января 1992 г., когда Грейс Хоппер получила
последнюю награду свыше: она скончалась во сне.

sircobol@sabbo.net

Вот несколько высказываний Г. Хоппер,
которые со временем становятся все актуальнее:

О системах:

"Жизнь была простой до Второй мировой войны. После нее мы получили системы".

О все больших компьютерах:

"Во времена пионеров в тяжелые повозки запрягали буйволов, и если буйвол не справлялся, то не пытались вырастить большего буйвола. Нам нужны не все большие компьютеры, а больше систем компьютеров".

Об изменениях:

"Люди испытывают аллергию к изменениям. Они любят говорить: "Мы всегда так поступали". Я пытаюсь перебороть это. Вот почему часы у меня на стене идут против часовой стрелки".

О вычислении величины информации:

" Для бизнеса файл со счетами о доходах намного важнее, чем файл со счетами на оплату".

Об информации и знании:

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

Совет молодым ("всем, кто вдвое моложе меня"):

"Вы управляете вещами. Вы ведете людей. Мы лезем из кожи вон
в управлении и забываем о лидерстве".