Это архив сайта coldflame.by.ru, он не обновлялся с 2007 года. Мой современный сайт тут: http://leonid.shevtsov.me.
Домой! Обо мне Специально для РИ-06-1 Разнообразное... барахло, короче :) Программы и прочее Статьи и переводы Блог SmartDaemon

Экскурс в историю

Настоящие Программисты Не Пишут На Паскале

[ Письмо редактору Datamation, том 29 номер 7, июль 1983]

В старые добрые времена - "Золотую Эру" компьютеров - было легко отличить мужчин от отроков (иногда называемых в литературе "Настоящими Мужчинами" и "Сосунками" соответственно). В это время, Настоящие Мужчины были единственными, кто понимал компьютерное программирование, а Сосунки были теми, кто его не понимал. Настоящий Программист говорил фразами типа "DO 10 I=1,10" и "ABEND" (они действительно говорили прописными буквами), а все остальное человечество придумывало отговорки вроде "компьютеры слишком сложны для меня" и "я не могу общаться с компьютерами - они такие безликие". (Предыдущая работа [1] указывает, что Настоящие Мужчины вообще ни с кем не общаются и не боятся быть безликими)

Но, как всегда, времена меняются.Мы живем в мире, в котором старые леди пользуются компьютерами, встроенными в микроволновки, двенадцатилетние детишки играют в "Астероиды" и "Pac-man", и любой может не только купить, но и понять свой собственный Персональный Компьютер. Настоящие Программисты под угрозой исчезновения и замещения студентами-первокурсниками.

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

Самый простой способ выделить Настоящего Программиста из толпы - по языку, на котором он пишет. Настоящие Программисты пишут на Фортране. Сосунки пишут на Паскале. Никлаусу Вирту, создателю Паскаля, однажды задали вопрос - как произносится его имя? Он ответил: "Его можно произнести по ссылке - "Veert" или по значению - "Worth". По этому сразу видно, что Никлаус Вирт - Сосунок. Единственный способ передачи параметров, который признают Настоящие Программисты - call-by-value-return, в том виде, который применяется в Fortran G и H на IBM/370. Настоящим Программистам не нужны все эти абстрактные концепции для работы - они абсолютно счастливы с перфоратором, компилятором Fortran VI и банкой пива.

  • Настоящие Программисты Пишут Обработку Списков на Фортране
  • Настоящие Программисты Пишут Обработку Строк на Фортране
  • Настоящие Программисты Занимаются Бухгалтерией (если вообще занимаются) на Фортране
  • Настоящие Программисты Создают Искусственный Интеллект на Фортране

Если это нельзя написать на Фортране, то это можно написать на ассемблере. Если это нельзя написать на ассемблере, это не стоит внимания.

Ученые-компьютерщики в последние несколько лет занимаются "структурным программированием". Они утверждают, что программы проще понять, если программист использует особые конструкции и принципы языка. Они не могут договорится, какие именно конструкции, и приводимые доводы легко умещаются на странице какого-нибудь пространного журнала - очевидно, что этих доводов недостаточно, чтобы кого-нибудь убедить. Когда я закончил институт, я считал себя лучшим программистом в мире. Я мог написать непобедимую программу для игры в крестики-нолики, я знал пять языков программирования и писал 1000-строчные программы которые работали (Серьезно!). Потом я попал в Реальный Мир. Моим первым заданием в Реальном Мире было прочитать и понять 200,000-строчную программу на Фортране, и потом ее немного ускорить. Любой Настоящий Программист в мире скажет вам, что структурное программирование не поможет вам решить такую проблему - для этого нужен Талант. Некоторые сравнения Настоящего и Структурного Программирования:

  • Настоящие Программисты не боятся использовать GOTO
  • Настоящие Программисты могут писать пятистраничные циклы и не путаться в них
  • Настоящим Программистам нравятся арифметические IF - они делают код интереснее
  • Настоящие Программисты пишут самомодифицирующийся код, особенно если могут срезать 20 наносекунд с бутылочного горла
  • Настоящие Программисты не ставят комментарии - их код очевиден
  • Поскольку в Фортране нет ни структурного IF, ни REPEAT ... UNTIL, ни CASE, Настоящие Программисты их не используют. К тому же, все это можно сымитировать с помощью GOTO

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

Какой операционной системой пользуется Настоящий Программист? CP/M? Не дай Бог - CP/M, все-таки, игрушечная операционная система. Даже бабушки и школьники могут понять и использовать CP/M.

Конечно, Unix гораздо сложнее - типичный юниксоид никогда не запомнит, как на этой неделе вызывают команду PRINT - но, если разобраться, Unix это просто игрушка. Люди не занимаются Серьезными Делами под Unix; они рассылают сообщения с помощью UUCP, пишут текстовые квесты и научные работы.

Нет, Настоящий Программист пользуется OS/370. Хороший Программист может найти и понять описание ошибки IJK305I в своем руководстве по JCL. Крутой Программист может писать под JCL вообще без руководства. Действительно выдающийся программист может найти ошибку в 6-мегабайтном дампе памяти без шестнадцатеричного калькулятора. (Я действительно видел такое!)

OS - действительно примечательная операционная система. В ней можно потерять дни работы из-за единственного лишнего пробела, что стимулирует внимательность персонала. Лучший способ работы - с перфоратором. Некоторые люди говорят, что под OS/370 есть система разделения времени, но мое глубокое исследование показывает, что они ошибаются.

Какими инструментами пользуется Настоящий Программист? Теоретически, Настоящий Программист может писать программы, вводя их переключателем на передней панели компьютера. Когда у компьютеров действительно были передние панели, это иногда делалось. Типичный Настоящий Программист знал весь загрузчик наизусть в шестнадцатеричной и вводил его каждый раз, когда программа его разрушала. Когда-то память действительно была памятью - она не терялась при отключении питания. Сейчас, память либо забывает то, что нужно помнить, или помнит то, что хотелось бы забыть. По легенде, Сеймур Крэй, разработчик суперкомпьютера Cray I и большинства правительственных машин, действительно ввел первую операционную система для CDC7600 с помощью передней панели по памяти при первом включении. Не стоит уточнять, что Сеймур, разумеется, Настоящий Программист.

Один из моих любимых Настоящих Программистов был системщиком в Texas Instruments. Однажды ему позвонил пользователь, чья система зависла в процессе сохранения важных данных. Джим смог исправить ошибку по телефону, попросив юзера вводить с передней панели команды дисковой подсистемы, системные таблицы и зачитывать ему содежимое регистров. Мораль сей басни такова: несмотря, на то, что у Настоящего Программиста есть перфоратор и принтер, он может обойтись передней панелью и телефоном в чрезвычайной ситуации.

В некоторых компаниях к перфоратору уже не выстраивается очередь из десяти программистов. На самом деле, в здании, в котором я работаю, нет ни одного перфоратора. Настоящий Программист в такой ситуации вынужден работать с "текстовым редактором". Большинство систем предоставляют выбор из нескольких редакторов, и Настоящий Программист должен внимательно выбрать тот, который соответствует его персональному стилю. Многие считают, что лучшие текстовые редакторы в мире были написаны в исследовательском центре Xerox в Пало Альто для их компьютеров Alto и Dorado [3]. К сожалению, ни один Настоящий Программист не будет пользоваться компьютером, ОС которого называется SmallTalk, и уж тем более не будет использовать мышь.

Некоторые принципы редакторов Xerox были заложены в редакторы, работающие на других, названных более разумно, операционных системах - например, EMACS и VI. Проблема этих редакторов в том, что Настоящие Программисты считают, что "что видишь, то и получаешь" такой же плохой принцип в текстовых редакторах, как и в женщинах. Нет, Настоящий Программист хочет редактор с идеологией "сам напросился - получай" - запутанный, таинственный, мощный, мстительный, опасный. Например, TECO.

По наблюдениям, последовательность команд TECO скорее напоминает белый шум, чем читабельный текст [4]. Одна из наиболее интересных игр, в которые можно играть с TECO - это ввести свое имя в командную строку и попытаться угадать, что произойдет. Практически любая опечатка в TECO скорее всего разрушит вашу программу, или, еще хуже - внесет тонкие и загадочные ошибки в ранее работавшую процедуру.

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

Некоторые утилиты, НЕ используемые Настоящими Программистами:

  • Препроцессоры вроде MORTRAN и RATFOR. Препроцессоры прекрасно подходят для написания сосунковского кода. См. предыдущий раздел о структурном программировании.
  • Отладчики исходного кода. Настоящие Программисты понимают дампы памяти.
  • Компиляторы с проверкой границ массива. Они ограничивают творчество, уничтожают самые интересные применения эквивалентности и делают невозможным изменение кода операционной системы с помощью отрицательных индексов. Хуже всего то, что проверка границ неэффективна.
  • Системы управления исходным кодом. Настоящий Программист держит свой код в закрытом сейфе, потому что не может оставлять его без присмотра на рабочей машине. [5].

Где работают Настоящие Программисты? Какие программы достойны усилий таких достойных личностей? Можно быть уверенным, что никакой Настоящий Программист не будет тратить время на написание бухгалтерских программ на Коболе или сортировки списков рассылки журнала "Люди". Настоящий Программист ищет занятия сокрушительной важности - в прямом смысле слова!

  • Настоящие Программисты пишут симуляции ядерных бомб для суперкомпьютеров Cray в Государственной Лаборатории Лос Аламос.
  • Настоящие Программисты расшифровывают русские сообщения в ФБР.
  • Только благодаря усилиям тысяч Настоящих Программистов из НАСА наши парни слетали на Луну и назад раньше русских
  • Компьютеры на шаттлах программируются Настоящими Программистами
  • Настоящие Программисты разрабатывают ОС для баллистических ракет в Boeing

Одни из самых потрясающих Настоящих Программистов работают в Ракетных Лабораториях в Калифорнии. Многие из них знают наизусть всю ОС космических кораблей Pioneer и Voyager. Комбинацией огромных программ на Фортране на Земле и маленьких ассемблерных программ на космических кораблях они добиваются удивительных подвигов навигации и импровизации - прохождения через 10-километровое окно около Сатурна после шести лет полета, починка или обход поврежденных сенсорных платформ, антенн и батарей. Один Настоящий Программист смог втиснуть в пару лишних сотен байт памяти космического зонда Voyager программку распознавания образов, которая искала, нашла и сфотографировала новую луну Юпитера.

Текущий план полета зонда Galileo проходит по гравитационной траектории мимо Марса к Юпитера. Эта траектория проходит на расстоянии 80 +/- 3 км от поверхности Марса. Никто не положится на программу, написанную на паскале (или на паскалиста) при навигации в таких условиях.

Как можно догадаться, многие Настоящие Програмисты работают на правительство Штатов - в основном, на Министерство Обороны. Так и должно быть. Однако, недавно туча появилась на горизонте Настоящих Программистов. По-видимому, какие-то высокопоставленные Сосунки в Министерстве обороны решили, что все оборонные программы должны писаться на языке под названием "АДА". Некоторое время казалось, что АДА рассчитана стать языком, который перечеркнет все принципы Настоящего Программирования - языком со структурами, с типами данных, сильной типизацией и точками с запятой. Короче, языком, предназначенным для уничтожения творчества Настоящего Программиста. К счастью, этот язык оказался достаточно интересным для нормальной работы - он потрясающе сложен, содержит методы изменения кода операционной системы и перераспределения памяти, и он не нравится Дейкстре. [6] (Уверен, вы знаете, что Дейкстра - автор работы "GOTO опасны" - эпохальной работы по методологии программирования, которой рукоплескали и Паскалисты, и Сосунки). Впрочем, настоящий Программист может писать фортрановские программы на любом языке.

Настоящий Программист может пойти на компромисс со своими принципами и работать над чем-то менее тривиальным, чем уничтожение той жизни, которую мы знаем. Разумеется, если ему за это хорошо заплатят. Например, несколько Настоящих Программистов пишут игры для Atari. (конечно, они в них не играют - Настоящий Программист всегда знает, как обыграть машину; для него это неинтересно) Все ребята в LucasFilm Настоящие Программисты (Было бы сумасшествием не брать деньги с пятидесяти миллионов поклонников Star Trek). Содержание Настоящих Программистов среди людей компьютерной графики слегка ниже нормы, так как никто пока не нашел ей применения. С другой стороны, вся компьютерная графика создается на Фортране, так что есть немало людей, занимающихся графикой чтобы избежать написания программ на Коболе.

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

  • На вечеринке Настоящие Программисты - это те парни в углу, болтающие про системы безопасности и способы их обхода
  • На футбольном матче Настоящий Программист сравнивает результаты со своей симуляцией, распечатанной на перфорированной бумаге полутораметровой длины.
  • На пляже Настоящий Программист чертит блок-схемы на песке
  • На похоронах Настоящий Программист говорит: "Бедный Джордж. Он почти доделал свою сортировку, когда его кончил инсульт."
  • В продуктовом, Настоящий Программист настаивает на сканировании штрих-кодов самому, так как никогда не доверит ввод данных оператору.

В какой среде Настоящему Программисту работается лучше всего? Это важный вопрос для менеджеров Настоящих Программистов. Учитывая ту зарплату, которую приходится ему платить, лучше всего поместить его (или её) в среду где он может работать без помех.

Типичный Настоящий Программист живет за компьютерным терминалом. Вокруг терминала расположены:

  • Исходники всех программ, когда-либо написанных Настоящим Программистом, сваленные в стопки в грубо хронологическом порядке на всех плоских поверхностях офиса.
  • Полдюжины или около того недопитых чашек холожного кофе. Иногда в кофе плавают окурки. В некоторых случаях в кружки бывает налит апельсиновый сок.
  • Если он не очень хорош, копии руководства OS JCL и "Принципов работы на компьютере", открытые на особо интересных местах.
  • На стене - текстовая распечатка календаря за 1969 год.
  • По полу разбросаны несколько оберток от батончиков - тех, которые производятся испорченными, так что уже не становятся хуже во время доставки и реализации.
  • В верхнем левом ящике стола - запас печенья на особые случаи.
  • Под печеньем валяется шаблон блок-схемы, оставленный предыдущим пользователем стола - Настоящие Программисты пишут программы, а не документацию. Оставьте это отделу поддержки.

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

  • Никакой Настоящий Программист не работает с 9 до 6 (если это, конечно, не с 9 вечера до 6 утра)
  • Настоящие Программисты не носят галстуков
  • Настоящие Программисты не носят туфель на высоком каблуке.
  • Настоящие Программисты приходят на работу как раз вовремя - к обеду
  • Настоящий Программист может не знать имя своей жены. Однако, он знает наизусть всю таблицу кодов ASCII (или EBCDIC)
  • Настоящие Программисты не умеют готовить. Продуктовые закрыты в три часа утра. Настоящие Программисты выживают на Twinkies и кофе

Что ждет нас в будущем? Настоящих Программистов деспокоит то, что последнее поколение программистов уже не воспитывается с тем же взглядом на жизнь, что и их предки. Многие из них никогда не видели компьютера с передней панелью. Мало кто из выпускников института может заниматься шестнадцатеричной арифметикой без калькулятора. Выпускники прикрыты от реалий программирования отладчиками исходного кода, редакторами с подсветкой синтаксиса и дружественными пользователю операционными системами. Хуже всего то, что многие так называемые компьютерные специалисты сумели получить научную степень без знания Фортрана! Неужели нам предначертано стать индустрией юниксоидов и паскалистов?

Все же, по моим наблюдениям, будущее улыбается Настоящим Программистам. Нет никаких признаков того, что OS/370 или Фортран исчезают, несмотря на усилия паскалистов всего мира. Даже более тонкие приемы, вроде добавления структурных операторов в Фортран, не увенчались успехом. Конечно, кое-какие разработчики ПО выпускают компиляторы Fortran 77, но все они могут быть легко превращены в компиляторы Fortran 66, чтобы компилировать циклы DO так, как заповедано нам Богом.

Даже Unix не так плох для Настоящих Программистов, как он был когда-то. Последний релиз Unix имеет потенциал стать ОС, достойной Настоящего Программиста - он имеет два разных и несовместимых интерфейса пользователя, дикий и непонятный драйвер телетайпа и виртуальную память. Даже программирование на 'C' может быть признано Настоящим, если игнорировать тот факт, что оно "структурное": отсутствие проверки типа, идентификаторы длиной семь (восемь? десять?) символов и тип "указатель" делает C сочетанием лучших элементов Фортрана и ассемблера. Не говоря уже о том, как творчески можно использовать #define.

Нет, будущее не так уж и плохо. В последние несколько лет даже популярная пресса [7],[8] осветила тот факт, что новое поколение компьютерных хакеров выходит из Стэнфорда и MIT в Реальный Мир. По всем признакам, дух Настоящего Программирования живет в этих юношах и девушках. Пока существуют неопределенные цели, странные ошибки и нереальные расписания, всегда будут Настоящие Программисты, готовые вломиться и Решить Проблему, как всегда забывая о документации.

Да Здравствует Фортран!

Сноски:

[1] Feirstein, B., "Real Men don't Eat Quiche", New York, Pocket Books, 1982.

[2] Wirth, N., "Algorithms + Data Structures = Programs", Prentice Hall, 1976.

[3] Ilson, R., "Recent Research in Text Processing", IEEE Trans. Prof. Commun., Vol. PC-23, No. 4, Dec. 4, 1980.

[4] Finseth, C., "Theory and Practice of Text Editors - or - a Cookbook for an EMACS", B.S. Thesis, MIT/LCS/TM-165, Massachusetts Institute of Technology, May 1980.

[5] Weinberg, G., "The Psychology of Computer Programming", New York, Van Nostrand Reinhold, 1971, p. 110.

[6] Dijkstra, E., "On the GREEN language submitted to the DoD", Sigplan notices, Vol. 3, No. 10, Oct 1978.

[7] Rose, Frank, "Joy of Hacking", Science 82, Vol. 3, No. 9, Nov 82, pp. 58-66.

[8] "The Hacker Papers", Psychology Today, August 1980.


Webbed by Greg Lindahl (lindahl@pbm.com)
Перевод coldflame (coldflame@list.ru)