РЕФЛЕКСИИ

Странный город Нью-Йорк. Поначалу он вызывает множество негативных эмоций и даже отторжение. Темного цвета дома, короткие кварталы - блоки по-местному. Бродвей - довольно узкая улица - всего три полосы с односторонним движением. Хваленые манхэттенские таксисты на деле своим московским коллегам в подметки не годятся. Правда, сейчас шоферов из латинос и афроамериканцев все больше вытесняют наши соотечественники. Бывая в Нью-Йорке, я люблю бегать по утрам вдоль набережной Рокфеллер-парка - в Москве на это почему-то всегда не хватает времени. А тут бежишь себе и вспоминаешь разные поучительные истории. Вот одна из них.

В молодости, работая в Институте электронных управляющих машин, писал я некую надстройку над ядром операционной системы CP/M-86. (На нее очень походил MS-DOS в первых версиях :)) Надстройка эта обеспечивала работу под ней множества интеловских компиляторов. Нужно вам заметить, что в ту пору я заведовал “Лабораторией трансляторов” этого славного института, в который мой руководитель посоветовал пойти, чтобы после тепличных условий академического института пройти школу работы в промышленности. Не скажу, что упомянутые компиляторы были под этой операционной системой очень нужны, поскольку там и “родных” было полно. Просто за пару месяцев до того моя лаборатория, с воплями и стонами прорываясь через жуткий институтский нормоконтроль, сдала несколько тысяч страниц документации по языкам Ассемблер-86, Фортран-86, Паскаль-86, Си-86, PL/M-86 и утилитам для них. Знаменитая Таня-Маяня, энергичная дама, подписывавшая нашу документацию, держала ГОСТами 19 серии в страхе весь институт. Она разрисовывала документ своими замечаниями, и битва иногда шла за каждый абзац и страницу. Это сейчас можно, сделав исправления по замечаниям, за десяток минут перевывести документ на печать. Тогда же перепечатка трехсот страниц на польском матричном принтере DZM-180 отнимала день, а то и больше, если печаталка барахлила. Повзрослев, я понял, что для Тани-Маяни сражение за ГОСТ было просто одной из форм ее самоутверждения (психовампиризма за ней не наблюдалось) и строить отношения с ней нужно было иначе. Но тогда принципы мне были дороже правды жизни.

Конечно, пройти эту процедуру второй раз народ в лаборатории был не готов, тем более что это был четвертый ОКР за два года. Вот тогда-то я и ухватился за придуманный “Интелом” API для компиляторов. (Возможно, у них тоже в то время были проблемы с нормоконтролем). Этот замечательный API, именовавшийся UDI-интерфейсом, позволял данному набору компиляторов, без перетрансляции их исходных текстов, работать под разными операционками, такими, как ISIS-II, RMX-86 и т. д. Более того, и программы, откомпилированные ими, перетранслировать не требовалось. Это решение позволило бы нам вклеить в каждый из томов многочисленных руководств лишь пару листков изменений. Потому оно всем так и понравилось. Дело было за малым - дописать к ядру ОС пару килобайт кода.

Писал я в отладчике, в абсолютных адресах прямо поверх машинного кода ядра этой ОС, отыскивая там кусочки неиспользуемой памяти. Из-за этого в моем творении было множество переходов. Получилось то, что на профессиональном языке называют “спагетти”. По уму нужно было дизассемблировать код ядра, восстановить его исходный текст и дописать к нему свой текст, как это делают белые люди. Тем более что опыт таких работ был. К тому времени я уже умел разваливать интеловские библиотеки на модули, научился быстро писать любые дизассемблеры, мониторы и т. п.

Только времени на все это не было - до сдачи ОКРа оставалось четыре недели. Зав соседней лаборатории, отвечавший за разработку всего ПО для машины СМ 1810 и бывший формально моим начальником, ушел в отпуск со спокойной душой - по его мнению, я уже ни при каких условиях не успевал сделать работу и срыв межведомственных испытаний был обеспечен. Его коварную тактику - воровать у меня время, загружая менее важными работами, - я раскусил не сразу. Для человека очень важно наличие прецедента - дальше мозги уже начинают работать в “правильном направлении”.

Надстройка, которую я писал, делала довольно простую вещь - она перехватывала обращения из программы к UDI-интерфейсу, заменяла их на соответствующие системные вызовы CP/M-86, а потом, получив результат выполнения вызовов, подставляла их вызывающей программе, как будто отработал UDI. Такой специфический переходник. В программировании, кстати, довольно много аналогий с конструированием аппаратуры. Очень похожие аналогии с такими понятиями, как блочная система, модуль, общая шина и т. д.

Что меня тогда в процессе работы глубоко поразило, так это фатальность любой самой мелкой ошибки. Достаточно одной неверной машинной команды - и система наглухо виснет. Дальше все нужно заново перегрузить, запустить отладчик, снова задать ему контрольные точки и т. д. - процедура минут на двадцать. Программирование в отладчике - занятие, как сейчас говорят, хакерское. Потом, когда ОКР был сдан, одна из моих сотрудниц, Лиля Винокур, несколько месяцев приводила код в порядок.

Я давно заметил, что по исходному тексту программы, если это реальная серьезная программа, а не учебный пример, можно очень много сказать о человеке, ее написавшем: его сущность, его дух, его проблемы. Как-то, вчитавшись в листинг одной системы, я четко понял, что писавшая ее женщина озабочена тем, как изменить мужу так, чтобы остаться при этом невиноватой. В этом мире нету тайн. Разбираясь с моим текстом, Лиля в конце работы знала меня как облупленного. “Система создаваемая наследует все основные черты системы создающей”. Один израильский профессор вздумал со мной спорить. “А если мы возьмем конвейер, что же, по-вашему, машина наследует черты каждого рабочего?” - недоумевал он. Безусловно, в ней отразятся основные черты того коллектива, который эту машину собрал. В ней отражается структура отношений в этом коллективе, его интегральные характеристики. Закон, который я процитировал, называется основным законом системотехники, и он работает везде. Зная его, много чего в этой жизни можно понять.

Как в любой американской пьесе, в моей истории был свой хэппи-энд. Утром, перед началом работы принимавшей у меня ОКР комиссии, из единственного в отделении опытного образца машины таинственно исчезла процессорная плата. К счастью, мои соисполнители из Ленинграда, люди более опытные, привезли с собой запасную. Заклятый друг мой потерпел очередное фиаско. Больше всего меня порадовало его изумление, когда реально прошел тестовый пример. Как это случилось, не знаю. Возможно, просто Господь Бог был на моей стороне, потому что позже, при разборе полетов, Лиля нашла в этом коде существенную ошибку.

Есть класс ошибок, которые, в отличие от ошибок программистских, я называю ошибками по жизни. Правильнее было бы их назвать ошибками методическими. Эти ошибки, к сожалению, исправить обычно труднее всего, если вообще возможно. Когда-то я пытался их классифицировать, но это оказалось непосильной задачей. Как правило, такие ошибки происходят от неверной шкалы ценностей, например, приоритета цели над путем ее достижения, локального результата перед глобальным и т. д. Методические ошибки приходится наблюдать каждый день и совершают их не только индивидуумы, но и коллективы, а бывает, что и целые народы. Примеры тому замечательно изложены в книге академика Н. Н. Моисеева “Универсум. Информация. Общество” (М.: Устойчивый мир, 2001). “Современный человек должен видеть мир во всей его целостности. Только представление об общей логике того мира, в котором мы живем, поможет нам избежать катастрофических последствий кризиса, который неумолимо надвигается. А может, и избежать самого кризиса!” - пишет Никита Николаевич. И с ним нельзя не согласиться.

Однако пора передохнуть и покормить совершенно отощавших в этом году наглых нью-йоркских белок.

Версия для печати