Статья Дело MUMPS была опубликована 13 февраля 2007 года. Да, MUMPS (или M (или Cache)) все еще здравствует и процветает... и возможно скрывается за скромным упоминанием о "базе данных" в попавшемся вам на глаза объявлении о работе в системе здравоохранения...


Вы можете и не осознавать этого, но большинство из нас разработчиков с профессиональной точки зрения живут как у Христа за пазухой. Конечно есть ужасающие приложения на С++, и тот идиотический интерфейс между PHP и COBOL-ом, написанный начальником, но я могу вас заверить, это все меркнет в сравнении с тем, с чем ежедневно работают многие менее удачливые программисты. Как правило такие программисты преданы забвению, вкалывают, взбираясь по карьерной лестнице, ведущей в самую бездну, поддерживая дремучие информационные системы, чью низкопробную архитектуру превосходят в убогости лишь инструменты, с помощью которых она была создана. Брайан Х. жил в таком мире более двух лет. В частности он работал в «мастерской MUMPS».

Без опыта и с дипломом об окончании института, которому было всего три недели отроду, Брайан был рад заполучить свою первую программистскую должность. Он никогда не слыхал о языке программирования используемом в компании, но он был заверен, что его как следует надрессируют и единственное, о чем стоит беспокоиться, так это о том, чтобы схватывать все на лету. А насчет, «как следует надрессируют», они совершенно не шутили. Первые три месяца Брайан провел исключительно в классе наполненном другими выпускниками, вгрызаясь в то, что будет всей их жизнью на протяжении следующих сорока лет: MUMPS, MUMPS и еще раз MUMPS, ну а если им сильно повезет, чуток Visual Basic-а.

 

Подробнее о MUMPS

MUMPS (изначально Massachusetts General Hospital Utility Multi-Programming System – Массачусетская мульти-программная система для госпиталей общего назначения) концептуально полностью отличается от любого другого существующего языка. Основой целью разработки MUMPS было создание такого кода, который будучи однажды написанным, более не подлежал ни поддержке, ни сопровождению кем либо и когда либо. Синтаксис чем-то напоминает FORTRAN и SNOBOL (нет, не жидкость для чистки туалетов), только гораздо, гораздо хуже. По иронии судьбы страдать от mumps (свинки) гораздо приятнее, чем работать с MUMPS (языком). Более подходящим названием определенно был бы ТЕРМОЯДЕРНЫЙ-ПОНОС. Уверен, что они там вполне могли разработать и SNOBOL(язык, да черт возьми хотя бы даже и жидкость для чистки унитазов).

Чтобы дать вам представление, что представляет из себя MUMPS я приведу укороченный список особенностей, выуженный прямо из FAQ-а по MUMPS:

ЧУВСТВИТЕЛЬНОСТЬ К РЕГИСТРУ: Команды и внутренние функции не чувствительны к регистру. Имена переменных и метки чувствительны к регистру.

КОМАНДЫ: могут сокращаться до одной буквы, не чувствительны к регистру. Включают такие команды как IF, ELSE, GOTO, WRITE и XECUTE [эта моя любимая, она позволяет исполнить код содержащийся в переменной]

ОПЕРАТОРЫ: Без математической последовательности исполнения, исполняются слева направо, скобки можно ставить по вкусу. 2+3*10 дает 50.

ТИПЫ ДАННЫХ: один универсальный тип данных, интерпретируется/переводится в строки, целые и вещественные числа в зависимости от контекста.

ОБЪЯВЛЕНИЯ: Отсутствуют. Все создается динамически при первом обращении.

СТРОКИ: важные синтаксические сущности. Множество операторов в одной строке - это естественная идиома. Область действия IF и FOR это «остаток текущей строки».

ЛОКАЛЬНЫЕ МАССИВЫ: создаются динамически, любое число элементов, элементы могут быть строками или числами. Хранятся в области памяти процесса и уничтожаются при завершении процесса.

ГЛОБАЛЬНЫЕ МАССИВЫ: массивы начинающиеся со знака вставки. Хранятся на диске, доступны всем процессам, сохраняются при завершении процесса. Это главный механизм «баз данных» М-систем.

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

 

Надругательство над MUMPS

В компании, в которой работал Брайан, они не просто использовали MUMPS, они использовали его с умом. Частично из-за ограничений MUMPS, частично потому, что они все вконец обезумели.

Весь MUMPS-код хранился в глобальном массиве под названием ^ROUTINES. За пределами этого массива хранился лишь код относившийся к группе файлов «Запуска Приложений», каждый из которых содержал единственную строку кода: X(^ROUTINES(("XSTARTGB")). Единственным отличием между файлами были последние два символа, или идентификатор приложения.

Внутри каждого приложения обитали сотни модулей, а внутри каждого модуля ютились тысячи подпрограмм. Все эти подпрограммы разделяли единое окружение. Чтобы убедиться, что код в глобальных массивах не перемешивался, использовалось строгое соглашение об именовании. Имя каждой подпрограммы содержало не более восьми символов, и состояло из двухсимвольного идентификатора приложения, двухсимвольного идентификатора модуля и двухсимвольного идентификатора подпрограммы. Оставшиеся два символа использовались для «связывания подпрограмм в цепочку». Видите ли, из-за того, что в MUMPS были строгие ограничения на длину подпрограмм, разработчикам приходилось распределять код среди нескольких подпрограмм (GBLVCM1, GBLVCM2, и т.д.) и связывать их вместе посредством оператора GOTO в конце каждой подпрограммы.

Для редактирования кода, хранимого в «базе данных» (если вы достаточно снисходительны, что бы это так называть), разработчикам приходилось использовать самодельный текстовый редактор. По сравнению с этой штукой vi - образчик дружественного к пользователю интерфейса. Редактор широко использовал клавиши DEC VT 220 в качестве горячих клавиш. Естественно этих клавиш уже не найти на современных клавиатурах. Вещи, которые мы воспринимаем как должное (например клавиша Ввод), требовали для ввода умопомрачительной последовательности из esc-команд.

 

Счастливчики

Я уже упоминал, что «удачливым» разработчикам предоставлялась возможность поработать с компонентами на Visual Basic-е. Такого неофита как Брайан отделяли долгие годы даже от самого факта рассмотрения его кандидатуры на подобную роль. Но они старались сделать так, чтобы все новообращенные разработчики увидели морковку и поняли, что если они будут трудиться достаточно упорно, однажды они смогут попробовать ее на вкус.

Как и большинство других вещей в компании протокол взаимодействия между MUMPS и Visual Basic-ом был самодельным. Клиентское VB приложение считывало незашифрованное имя UNIX пользователя и пароль из файла, создавало telnet сессию, открывало окружение MUMPS на сервере и затем отправляло исполняемый MUMPS код. Из за того, что их M-система была столь смехотворно неторопливой, зачастую требовались минуты для завершения простой операции. Отчеты вообще занимали часы.

Работа Брайана

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

Команда повышения производительности не работала с упреждением. Они только реагировали на случившееся. Когда у клиента возникали «критические проблемы с производительностью», они срочно создавали заплатку, откладывая реальную проблему на потом. Очевидно, это потом так и не наставало.

 

Выход

Под конец второго года работы Брайан, наконец, кое-что осознал. Он был MUMPS-программистом целых два года. За пределами нынешнего места работы его умения не только были бесполезными, но и делали из него изгоя. Только честно, вы бы захотели нанять кого-то, кто работал только с таким языком и окружением?

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

Как следует из его послания, Брайан все еще не трудоустроен, снова пытается заполучить «первую работу». Однако он пробился на несколько собеседований и полон надежд. В чем он уверен наверняка, так это в том, что следующие сорок лет его жизни не будут состоять из MUMPS, MUMPS и еще MUMPS. Во всяком случае мы можем лишь надеяться на это...

Оригинал:http://worsethanfailure.com/Articles/Classics-Week-A-Case-of-the-MUMPS.aspx