Главная.
Новости.
Программы.
Файлы.
Контакты.
Чат "Пиво".
Статьи.
Ссылки.
Гостевая.
|
Настоящие программисты не используют "Pascal".
В прошлом, во времена золотой эры ЭВМ, было легко
отличить мальчика от мужа (иногда их называют "сосунки" и
"настоящие мужчины" соответственно), тогда настоящими мужчинами были те, кто понимал в программировании, а сосунки - те,
кто не понимал. Настоящий программист легко произносил такие
фразы, как "do 10 i = 1, 10 " или "авост", а все остальные -
нечто, вроде "ЭВМ слишком сложна для меня" и "я не могу полагаться на ЭВМ - они слишком безличны". Предыдущая работа
(В.Feirstein): "Настоящие мужчины не употребляют фруктовый
пирог", публикация Rocket book 1982, отмечает, что настоящие
мужчины ни на что не полагаются и не боятся быть обезличенными.
Но времена меняются. Сегодня мы живем в мире, в котором маленькие старые дамы могут приобрести компьютеризованную
микроволновую печь. 12летние пацаны могут выбить из колеи
настоящих мужчин при игре на ЭВМ в астероиды и очко, и вообще, любой человек может купить и понять свой собственный персональный компьютер. Настоящий программист в опасности быть
замененным студентами высшей школы!
Однако, существует разница между студентом - первокурсником, освоившим игру в очко на ЭВМ и настоящим программистом. Знание этих различей может помочь детям познать к чему стремиться: модель поведения - стереотип отца. Это также
поможет сохранить рабочие места для настоящих программистов.
Самый простой способ определить, кто является настоящим программистом - по используемому языку программирования.
Настоящие программисты используют Cи. Сосунки используют
PASCAL. Никласа Вирта, разработчика PASCALя, однажды спросили: "Как вы произносите свою фамилию?". "Вы можете обращаться
ко мне по имени, произнося ее "вирт", или обращаться ко мне
по значению, ворт.", - ответил он. ( Игра слов: Niclaus Wirt
произносится похоже на английское слово "worth" - стоящий,
ценный.)
Исходя из этой ремарки любой сразу скажет, что Никлас
Вирт - сосунок. Единственный механизм передачи параметров,
принимаемый настоящим программистом - это передача параметров
по значению, как это реализовано в компиляторах FORTRAN G и H
ЭВМ IBM/370. Настоящим программистам для выполнения работы не
нужны абстрактные концепции, для счастья им достаточно перфоратора, компилятора FORTRAN IV и пива. Настоящие программисты
пишут программы работы со списками, обработки строк, учета
ресурсов и искусственного интеллекта на FORTRANе. Если вы не
можете выполнить эти работы на FORTRANе, выполните их на ассемблере. Если же их нельзя выполнить на ассемблере, их не
стоит делать вообще.
В последние несколько лет академиков от вычислительной техники вовлекли на стезю структурного программирования.
Они утверждают, что программы становятся более понятными, если используют специальные языковые методы и конструкции. Они,
конечно, не могут договориться между собой, какие точно конструкции следует использовать, а примеры, иллюстрирующие их
точку зрения, всегда помещают на одной страничке неизвестных
журналов.
Когда я кончил школу, я считал себя самым лучшим
программистом в мире. Я мог написать непобедимую программу
игры в крестикинолики в трехмерном пространстве на пяти различных языках программирования, а также написать программу,
состоящую из 1000 строк, которая бы работала. Затем я попал в
реальный мир. Моей первой задачей было прочитать и понять
фортрановскую программу емкостью в 200000 строк, а затем увеличить ее скорость работы в 2 раза. Любой настоящий программист скажет вам, что все структурное программирование мира на
поможет вам решить проблему вроде этой - решение этой задачи
требует настоящего таланта.
Несколько наблюдений о настоящих программистах и
структурном программировании:
настоящие программисты не боятся использовать
"goto";
настоящие программисты могут без смущения написать
цикл "do" на пяти страницах;
настоящие программисты любят арифметические опера<
торы "if", т.к. их использование делает программу более интересной;
настоящие программисты используют самомодифицирующий код, особенно в тех случаях, когда это экономит
20 наносекунд в середине очень короткого цикла;
настоящие программисты не нуждаются в комментариях,
текст все объясняет;
поскольку в FORTRANе отсутствуют структурные операторы "if", "repeat", ..., "until", или "case", настоящим программистам не надо беспокоиться о том, что их
не используют. Кроме того, эти операторы можно при
необходимости симулировать с помощью присваиваемых
"goto".
В последнее время в прессе муссируются структуры данных. Абстрактные типы данных, структуры, указатели, списки и
строки стали популярны в определенных кругах. Вирт даже написал целую книгу ("Алгоритмы + структуры данных = программы",
Prenticehall, 1976 ), в которой утверждает, что можно написать программу на базе структур данных, не используя другие
способы. Все настоящие программисты знают: единственной полезной структурой данных является массив.
Строки, списки, структуры и наборы - это все разновидность массивов и их можно рассматривать как массивы без
усложнения вашего языка программирования. Хуже всего с этими
хитрыми типами данных то, что вы должны их списывать, а настоящие языки программирования, как мы знаем, обладают возможностью неявного задания типа, основанного на первой букве
шестисимвольного имени переменной.
В какой операционной системе работают настоящие программисты? СР/M? Боже сохрани! Помимо всего прочего, это в основном игрушка, а не операционная система. Даже маленькие
старые дамы и абитуриенты могут работать в CP/M и понять ее.
UNIX, конечно, более сложная система - типичный пользователь
UNIXа никогда не может запомнить, как на этой неделе вызывается команда "print"но когда он доберется до нее, UNIX становится восхитительной видеоигрой. Люди не делают серьезных
работ на UNIXе, они или рассылают шутки по всему миру по
USENET, или пишут приключенческие игры, или исследовательские
работы.
Нет, настоящий программист использует OS/370. Хороший
программист может найти и понять описание только что полученного сообщения об ошибке IJK3051 в руководстве по JCL. Великий программист может написать задание (JCL) без заглядывания
в руководство по JCL.Понастоящему знаменитый программист может найти ошибки в распечатке шестимегабайтной области памяти, не используя калькулятора шестнадцатиричной системы счисления.
OS/370 понастоящему удивительная система. В ней возможно уничтожить работы стоимостью в несколько человекодней
с помощью одного неправильно помещенного пробела, так что
штат программистов всегда должен быть начеку. Наилучший способ общения с системой - через перфоратор. Некоторые утверждают, что в OS/370 существует система разделения времени, но
после внимательного изучения я пришел к выводу, что они ошибаются.
Какие инструменты использует настоящий программист в
своей работе? Теоретически, настоящий программист может запускать свои программы, набирая их на передней панели ЭВМ, в
добрые старые времена, когда ЭВМ имели передние панели, этот
метод использовался время от времени. Типичный настоящий
программист знал наизусть начальный загрузчик в шестнадцатиричной системе и востанавливал его с пульта, когда он разрушал его программой. Более того, память была памятью - ее содержимое не пропадало при выключении питания. В настоящее
время память либо забывает факты, когда вы этого не хотите,
либо помнит о вещах, которые давно следовало бы забыть. Ходит
легенда, что Саймор Крей, изобретатель суперЭВМ CRAY1 и
большинства ЭВМ фирмы Control Data, ввел с пульта наизусть
первую операционную систему ЭВМ CDC 7600 при первом включении
этой ЭВМ. Конечно, Крей - настоящий программист.
Одним из моих любимых настоящих программистов был
системный программист фирмы Texas Instruments. Однажды, ему
по междугороднему позвонил пользователь, чья система разрушилась в процессе выполнения очень важной работы. Джим (так
звали системного программиста Texas Instruments) исправил
систему по телефону, заставив пользователя набирать на передней панели ЭВМ команды обращения к диску, исправлять системные таблицы в шестнадцатиричной системе, считывать ему по телефону содержимое регистров. Мораль этой истины: хотя настоящий программист обычно включает в набор своих инструментов
перфоратор и АЦПУ, он может обойтись передней панелью и телефоном.
В некоторых фирмах редактирование текстов программ
больше не представляет собой очередь из 10 инженеров, ожидающих освобождения перфоратора 029. Более того, здание, где я
работаю, не содержит вообще ни одного перфоратора. Настоящий
программист в таких условиях должен выполнять работу с помощью текстового редактора.
Большинство систем предлагает на выбор несколько текстовых редакторов, но настоящий программист должен быть очень
осторожным в выборе редактора, отражающего его индивидуальность. Многие думают, что наилучшие текстовые редакторы в мире были на писаны в исследовательском центре фирмы XEROX в
Palo Alto для работы с ЭВМ марок ALTO и DORADO.
К сожалению ни один настоящий программист не будет
работать на ЭВМ с операционной системой под названием
SMAL_TALK (краткая беседа) и, конечно же, не будет беседовать
с ЭВМ с помощью "мышки" (устройство ввода в ЭВМ по форме напоминающее мышь, с помощью которого можно вводить координаты
экрана дисплея).
Некоторые из концепций этих редакторов фирмы XEROX
реализованы в редакторах, работающих в операционных системах
с более содержательным названием, таких как EMAX и VI. Беда с
этими редакторами заключается в том, что настоящий программист считает плохим следующий принцип редактора: "То, что вы
видите, это то, что вы получите". Настоящий программист желает редактор с принципом: "Вы это просили, вот вам"; т.е. редактор, который был бы сложным, шифрованным, мощным, не прощающим и опасным. Редактор TECO - чтобы быть точным.
Было замечено, что последовательность команд к TECO
больше напоминает помехи в линии передачи, чем читабельный
текст. Одна из самых развлекательных игр с TECO: напечатать в
качестве командной строки свою фамилию и пытаться догадаться,
что он делает. Точно так же, любая возможная опечатка при работе с ТЕСО может разрушить вашу программу, или хуже того,
внести неуловимые и мистические ошибки в уже работающую подпрограмму.
Изза этого настоящие программисты неохотно редактируют почти работающие программы. Они считают более простым
непосредственно латать двоичный объектный код, используя
прекрасную программу под названием SUPERZUP (или ее эквивалент на IBMмашинах) Этот метод настолько хорош, что многие
программисты, работающие на ЭВМ фирмы IBM не имеют ничего общего с символьным текстом на FORTRANе. В большом количестве
случаев первоначальный символьный текст программы вообще не
существует. Когда наступает время подправить такого рода
программу, никакой администратор даже не подумает послать на
эту работу коголибо, кроме настоящего программиста: никакой
сосунок - структурный программист не будет знать с чего начать. Это называется "защита от несанкционированного доступа".
Некоторые, не используемые настоящим программистом
средства программирования:
препроцессоры FORTRANа, такие как MORTRAN и RATFOR.
Эти кулинарные рецепты в программировании хороши для
выпечки фруктового пирога;
отладчики для работы с текстом программы. Настоящие
программисты свободно могут читать распечатку оперативной памяти;
компиляторы с проверкой границ массивов. Эти
компиляторы душат творчество, запрещая наиболее интересные
варианты использования оператора EQUIVALENCE и
препятствуют модификации системы с помощью отрицательных
индексов. Кроме всего прочего, контоль границ массивов
не эффективен;
системы сопровождения и архивизации символьных
текстов программ. Настоящий программист хранит текст своих
программ в закрытом на замок ящике
( на перфокартах ), т.к. владелец не может оставить свои важные
программы без охраны.
Где же работает типичный настоящий программист? Какие
программы достойны таких талантливых индивидуумов? Вы можете
быть уверены, что настоящий программист не умрет за написанием программы "Зарплата", на COBOLе или сортируя список почтовых отправлений для журнала "PEOPLE". Настоящий программист
желает задачи с важностью землетрясения.
Настоящие программисты работают на национальную лабораторию в ЛосАламосе, создавая программы для суперЭВМ
GRAY1, моделирующие атомную бомбу. Они также работают на
агенство национальной безопасности, раскодируя передачи русских.
В большей степени изза усилий тысяч настоящих программистов, работающих на NASA наши парни добрались до луны и
вернулись обратно, опередив русских космонавтов. ЭВМ в космическом корабле "SHUTTLE" были запрограммированы настоящими
программистами и эти же истинные профессионалы работают на
фирму "BOING", создавая операционные системы для крылатых ракет.
Одна из приводящих в благоговейный трепет работ настоящих программистов выполнена в лаборатории реактивного движения в Калифорнии. Многие из них знают всю операционную систему космических кораблей "Pioner" и "Voyajer" наизусть. С
помощью симбиоза больших наземных фортрановских программ и
маленьких бортовых ассемблерных, они могут совершать невероятные чудеса в навигации и импровизации - такие, как попасть
в окно шириной 10 км в кольце Сатурна после 6 лет полета в
космосе и починить или обойти неисправные сенсорные платформы, радиопередатчики и аккумуляторы. Утверждают, что один
настоящий программист умудрился всунуть программы распознавания образов в несколько сот байтов неиспользуемой памяти корабля "Voyajer", которая осуществляла поиск, обнаружила и
сфотографировала новую луну Юпитера.
Одна из планируемых задач для космического корабля
"Galley" будет использовать притяжение Марса на траектории
полета к Юпитеру. Эта траектория проходит в 80 +/3 км от
поверхности Марса. Никто не собирается доверить паскалевской
программе или программисту такую навигационную задачу.
Многие из настоящих программистов всего мира работают
на правительство США, в основном, в министерстве обороны. Так
и должно быть. Однако недавно на небосклоне настоящих программистов появилась черная туча. Кажется, что ктото из высокопоставленных сосунков в министерстве обороны решил, что все
оборонные программы должны быть написаны на некоем великом
унифицированном языке под названием ADA. Некоторое время казалось, что ADA была предназначена стать языком, который шел
вразрез со всеми правилами настоящего программирования. Это
язык со структурой, типами данных, строгим синтаксисом и точками с запятой. Короче он был разработан для сдерживания
творчества типичных настоящих программистов. К счастью, язык,
одобренный министерством обороны, обладает достаточно интересными свойствами, которые делают его приемлемым - он невероятно сложен, включает в себя способы порчи операционной
системы и перераспреления памяти, и Эдгар Дейкстра не любит
его. Дейкстре, как вы должны знать, автору краеугольной работы по методологии программирования "GOTO считать вредными",
аплодируют программисты на PASCALе и другие подобные им сосунки. Да и потом, закоренелый настоящий программист может
написать фортрановскую программу на любом языке.
Настоящий программист может пойти на компромисс со
своими принципами и работать над вещами более тривиальными,
чем разработка оружия, при условии, конечно, что сдесь достаточно платят. Например, существует несколько настоящих программистов, разработавших видеоигры в Аtari. Каждый, работающий на Lucasfilm также является настоящим программистом, потому что надо быть сумашедшим, чтобы отвергнуть 50 млн. долларов поклонников звездной войны. Сами настоящие программисты
в игры не играют. Настоящий программист знает как выиграть у
машины, и в этом нет прямого удовольствия.
Доля настоящих программистов, занятых машинной графикой, несколько ниже нормы, в осносном, потому, что никто пока
не нашел ей применения. С другой стороны, вся машинная графика выполнена на FORTRANe, так что существует определенное
число людей, занимающихся графикой для того, чтобы избежать
программирования на COBOLе.
В общем случае настоящий программист развлекается
также, как и работает - с помощью ЭВМ. Он не перестает удивляться тому, что его работодатель платит ему за то, что он
все равно бы делал для развлечения, хотя он достаточно осторожен, чтобы высказывать это мнение вслух. Иногда настоящий
программист выходит из здания конторы, чтобы глотнуть свежего
воздуха и кружечку или пару пива. Существует несколько признаков, по которым можно узнать настоящего программиста за
пределами машинного зала:
на вечеринке настоящие программисты это те, кто сидит в углу, обсуждая защиту операционных систем и как ее обойти;
на футбольном матче настоящий программист сравнивает ход игры с "проигровками", распечатанными на дюймовой бумаге;
на пляже настоящий программист рисует блоксхемы на песке;
настоящий программист ходит в дискоклуб, чтобы посмотреть мигание лампочек;
на похоронах настоящий программист изрекает: "Бедный Джорж. А ведь он почти заставил работать программу сортировки, когда его хватил инсульт!";
в бакалейном магазине настоящий программист настаивает на собственноручной проверке банок налазерном кассовом аппарате, потому что он не верит, что операторы могут правильно отперфорировать данные с первого раза.
В каких условиях лучше всего работается настоящему
программисту? Это очень важный вопрос для начальников настоящих программистов. Учитывая высокую стоимость содержания одного такого в штате, лучше создать ему или ей оптимальные условия. Типичный настоящий программист живет перед дисплеем
ЭВМ. Вокруг этого дисплея расположены листинги программ, над
которыми он когдалибо работал. Они складированы в кучи приблизительно в хронологическом порядке на каждой плоской поверхности конторы. Вы также обнаружите полдюжины, или около того, наполовину выпитых чашек с холодным кофе. Иногда в кофе
можно обнаружить плавающие бычки от сигарет. В некоторых случаях, в чашках содержится выжатый апельсин. И только в тех
случаях, когда он (программист) не очень хороший, вы увидите
экземпляры руководства OS JCL и принципов работы, открытых на
особенно интересных страницах. Приклеенный клейкой лентой, на
стене висит распечатанный на АЦПУ календарь с "девочками" за
1969 год. На полу разбросаны обертки от хлеба с сыром и земляными орехами (такого, который становится черствым уже в пекарне, так что не может стать хуже в торговых автоматах). И,
наконец, в верхнем левом ящике стола, под коробкой с OREOS,
линейкашаблон для вычерчивания блоксхем, оставленная предыдущим владельцем стола. Настоящие программисты пишут программы, а не документацию, которую они оставляют штату сопровождения.
Настоящий программист может работать 30,40 и даже 50
часов непрерывно, под интенсивным нажимом. На самом деле он
предпочитает так работать. Плохое время отклика не беспокоит
настоящего программиста; он получает возможность вздремнуть в
промежутке между трансляциями. Если график выполнения работы
не очень жесткий, то настоящий программист предпочитает делать свою жизнь более захватывающей, работая в течение первых
9 недель над маленькой, но интересной частью проблемы. Затем
он заканчивает выполнение всей остальной части за 2 или 3
50часовых марафона. Это не только впечатляет начальника, но
и дает повод не делать документацию.
В общем случае: ни один настоящий программист не работает с 9 до 5, за исключением тех, кто работает в ночную
смену, настоящие программисты не носят галстуков, настоящие
программисты не носят обувь на высоких каблуках, настоящие
программисты приходят на работу вовремя к обеду, настоящий
программист может знать, а может и не знать имя своей супруги, он, однако, знает наизусть таблицу ASCII (или EBCDIC)
символов. Настоящие программисты не умеют готовить. Бакалейные магазины не часто открыты в 3 часа ночи, так что они должны уметь выживать на печенье и кофе.
Заглядывая в будущее, некоторые настоящие программисты считают, что новейшее поколение программистов имеет не такие же взгляды на жизнь, как их старшие товарищи. Некоторые
из них никогда не видели передней панели ЭВМ. Едва ли ктолибо из выпускников в наши дни может производить вычисления в
шестнадцатиричной системе без калькулятора. Сегодняшние выпускники колледжей - слабаки, защищенные от реальности жизни
символьными отладчиками, редакторами текстов, которые подсчитывают скобки, и лояльными к пользователю операционными системами. Хуже того, некоторые из этих патентованных ученых вычислительной техники умудрились защититься без изучения
FORTRAN'а! Неужели нам предписано свыше стать отраслью фанатиков UNIX'а и паскалевских программистов?
Из своего собственного опыта, я думаю, можно смело
сказать, что будущее прекрасно для настоящих программистов.
Ни OS/370, ни FORTRAN не выказывают никаких признаков отмирания, несмотря на усилия программистов на PASCALе. Даже такие
изощренные уловки, как добавление конструкций структурного
программирования в FORTRAN'e провалились. Да, конечно, некоторые изготовители ЭВМ выпустили компиляторы FORTRAN77, но
каждый из них оставил возможность перейти в режим компилятора
FORTRAN66 с помощью удаления одной перфокарты - чтобы компилировать циклы "Dо" как предписано богом.
Даже UNIX можетбыть не так уж плох для настоящих
программистов, как в прошлом. Последний тираж UNIX'а обладает
потенциальными возможностями, ценными для любого настоящего
программиста. В этом тираже имеются два различных и слегка
несовместимых пользовательских интерфейса, сложный драйвер
терминала и виртуальная память. Если пренебречь тем, что он
структурный, то даже программирование на "С" может быть оценено по достоинству настоящим программистом. В конце концов в
нем нет проверки типов, имена переменных имеют семь (10?, 8?)
символов в длину и введен полезный тип данных "указатель"
(pointer). Получается, будто слиты воедино лучшие части язака
FORTRAN и ASSEMBLER, не говоря уже о наиболее творческих применениях оператора #DEFINE.
Нет, будущее не так уж мрачно. В последние несколько
лет даже популярная пресса сообщала о новом урожае блестящих
фанатиков, выпущенных из таких мест как Стенфорд и Масачесетский технологический институт в реальный мир. По всему видно,
что дух настоящего программирования живет в этих молодых юношах и девушках. Пока существуют плохо поставленные задачи,
странные ошибки и нереалистические планы, будут находиться
настоящие программисты, желающие взять на себя и решить проблему, оставив документацию на потом.
>>
|