Каждому приходилось самому искать дополнительный приработок. Правда, возможности были. Преподавали в многочисленных тогда учебных центрах совместных предприятий, писали для них учебные пособия, а то и книги, подрабатывали в коммерческих фирмах. Иностранные представители, которым наш директор с гордостью показывал "компьютерный класс" с десятком тайваньских XT, вежливо выслушивали его объяснения, сдержанно кивали и фотографировали со вспышкой, словно доисторическое чудовище, карточный перфоратор Juki, стыдливо задвинутый в дальний угол. Их предложения о совместных проектах (по крайней мере, доходившие до нашего отдела) либо носили несколько авантюрный и несолидный характер, либо были откровенно неинтересны. Несмотря на трудности и безвременье, мы все-таки ощущали себя системными программистами, и как-то не очень хотелось заниматься рисованием окон и конструированием экранных форм или переводом математических библиотек с одного языка программирования на другой. К тому же деньги предлагались оскорбительно скромные.
Однако то, что говорил высокий солидный бородач (назовем его Вальтер Деккер), звучало как откровение. Предлагалось разработать (не адаптировать, не доделать, не участвовать в разработке, а самим сделать from scratch — с нуля!) компилятор (компилятор!) с языка Си++ (!) для одной европейской (для определенности пусть для бельгийской) софтверной компании! Причем не какой-нибудь препроцессор в Си, как известный cfront, а честный прямой компилятор переднего плана, генерирующий низкоуровневый промежуточный код, используемый фирмой в системе программирования, в составе которой компиляторы Си, Модула-2 и Фортран.
Следует объяснить, что автор со студенческих лет питает к проблематике компиляции языков программирования особую страсть и имел к тому времени некоторый опыт как в проектировании языков (в частности, языков дискретного моделирования), так и в реализации различных языковых систем, включая (страшно сказать) системы построения компиляторов. Этот опыт целиком относился к прежним временам, а проекты, за немногими исключениями, носили полуинициативный характер, будучи поддержанными только непосредственным начальством. Проекты не мешали текущей работе в "ящике" (правильнее сказать, текущая работа не слишком препятствовала этим проектам). Поэтому предложения бельгийца казались невероятной удачей и в то же время справедливой наградой за долгие годы верности избранному направлению.
Фирма хотя и не обладала именем, звучащим в мировом масштабе, но казалась вполне респектабельной: она существовала уже более 25 лет, что для софтверной фирмы, согласитесь, немало, участвовала в нескольких общеевропейских проектах; ее продукты (в том числе, собственная коммерческая реализация UNIX) имели не одну тысячу пользователей. Так что желание дополнить свою систему программирования новым мощным языком выглядело вполне логичным.
Любителям разгадывать псевдонимы и умолчания сказанного вполне достаточно, чтобы узнать страну, компанию, да и ее представителя.
Первый настораживающий момент (хотя то, что нам следовало тогда насторожиться, мы поняли гораздо позже) прозвучал вскоре после начала переговоров. Когда речь зашла о составе команды и предполагаемых сроках, то шеф, профессор Владимир Александрович Сухомлин, сам имеющий высокую квалификацию и немалый опыт подобных работ, не менее нашего опьяненный перспективой настоящего дела, немедленно ответил: три разработчика за один год. Сейчас мы понимаем, что здесь насторожиться следовало бельгийцам, уж конечно, прекрасно знающим, каковы реальные трудозатраты подобных разработок: не имеют ли они дело с неопытными авантюристами? Однако они просто спросили: не очень мало? Тогда шеф, сделав для солидности паузу, сказал: ну ладно, год и четыре месяца.
Однажды в эхо-конференции по языку Ада — comp.lang.ada — прозвучал вопрос от некоего молодого человека по имени Mайк Уайт. Этот замечательный парень из Массачусетса написал примерно следующее: вот на Макинтошах нет приличного компилятора для новой редакции Ады, так, может, я бы его сделал? Сколько примерно это заняло бы времени? Вопрос звучал слишком наивно, да и имя сильно смахивало на псевдоним, так что это вполне можно было бы принять за провокацию. Правда, говорят, американцы вообще довольно простодушный народ…
Что тут поднялось! Крупнейшие специалисты по языку Ада, мировые знаменитости вроде Роберта Девара всем своим весом (кто его видел, тот поймет мою иронию) обрушились на бедного Майка. "Вы сумасшедший! Вы не представляете, что такое сделать компилятор! Вы плохо изучали в университете курс по компиляции языков! Вы никогда не доведете этот проект до конца! На это требуется минимум 25-30 человеко-лет!" Тот, кажется, несколько ошарашенный этим тайфуном, растерянно отписывался: "Да… теперь я понимаю… это невозможно… лучше портировать GNAT на Макинтош… А может, мы с кем-нибудь скооперируемся и вместе все-таки попробуем?.."
Как знать, если бы этот американский Миша Белов не наткнулся тогда на столь суровую и дружную отповедь, быть может, он сейчас с парой приятелей уже заканчивал бы свой компилятор? Хорошо известно, что очень многие достойные проекты (примеры известны всем) выполнялись предельно малыми силами. И если бы мы, подобно Майку, перед тем как начать работу, спросили бы в comp.lang.cpp: друзья, а получится у нас компилятор — втроем за год?-- почти наверняка получили бы аналогичный шквал критики.
Тогда мы об этом не думали. Конечно, мы знали Си++ только как пользователи, сам язык еще не приобрел своей теперешней монструозности, да и работа казалась настолько заманчиво-интересной и в то же время ясной, что инстинктивно хотелось заинтересовать собой фирмачей, не оттолкнув их слишком большими сроками. Но они-то, они — сделавшие и UNIX, и серию компиляторов, замахивающиеся на еще более амбициозные проекты, казалось, собаку съевшие на управлении программными разработками,-- как они могли не насторожиться?
Они не удивились. Они сказали: "Хорошо, пишите план на полтора года".
По рукам!
У кого-то из классиков есть забавная шутка (за точность цитаты не ручаюсь, но смысл передан верно): "Системные программисты не вполне понимают, за что им платят большую зарплату: ведь они выполняли бы свою работу и бесплатно. Правда, у них хватает ума не говорить об этом своему начальству". Это очень точное наблюдение — прямо про нас, только без "большой зарплаты".
Характер условий, предлагаемых бельгийцами, был, видимо, типичен для тогдашних отношений с иностранными фирмами: они передавали нам несколько рабочих станций Sun 3/60 на процессоре Motorola 68020 (которые к тому времени уже морально устарели и самой фирмой попросту списывались) и обещали платить… не скажу сколько, но, поверьте, очень и очень небольшие деньги — даже по тогдашним российским меркам.
Вообще-то, это не очень вязалось с обликом солидной фирмы, но осознание пришло гораздо позже. Да, еще: те станции, на которых мы должны были работать, передавались нам не просто так — они шли в счет оплаты за нашу работу! Мы оказались как бы должны им, еще не приступив к делу… Впоследствии то же произошло со SparcClassic. Когда на 3/60 стало совсем невозможно работать (примерно как если на XT пытаться редактировать графические изображения), нам перевели деньги на покупку этой самой младшей модели семейства Sparc с минимальной комплектацией, внеся ее стоимость в оплату проекта.
Естественно, результат работы становился собственностью фирмы, а с нас взяли подписку о неразглашении, согласно которой в течение всего срока действия контракта мы не имели права не только говорить об условиях работы и названии фирмы, но и вообще рассказывать о том, что мы делаем. Говорят, некоторые компании оговаривают и более суровые условия: скажем, после окончания действия контракта разработчик в течение некоторого времени не имеет права работать над аналогичными проектами. Какое счастье, что бельгийцы до этого не додумались — мы бы подмахнули и такое…
Можно сколько угодно смеяться над нашей наивностью и недальновидностью, но когда вот сейчас, наяву, предлагается в точности та работа, о которой (простите за высокопарность) мечтал всю жизнь…
Кажется, мы и сейчас приняли бы подобные условия (шутка).
Глаза боятся, а руки делают
Не знаю, решились бы мы на этот проект, если бы сразу представляли (так, как знаем сейчас) его истинную трудоемкость. Тогда язык Си++, судя по учебным пособиям, казался нам… да, непростым для компиляции, с корявым и неоднозначным синтаксисом, сильно усложненной семантикой традиционных конструкций, но вполне сравнимым, например, с объектной версией Паскаля фирмы Borland. Так что срок, названный шефом, поначалу не вызвал у нас протеста. Однако чтение первой же действительно серьезной и подробной книги — перевода авторского определения языка[1], предложенного в качестве начальной версии для его стандартизации, повергло нас в ужас и панику. Казалось, это безумие невозможно реализовать вообще! Тогда мы поняли настоящую цену учебникам типа "Язык XXX за двадцать один день" или "YYY — это просто!". Подобные тексты (сами по себе, быть может, и неплохо написанные) оставляют за своими рамками настолько обширные области языка, избегают касаться стольких его тонкостей и особенностей, что в голове у читателя-программиста формируется зачастую усеченный и выхолощенный образ инструмента, который он собирается использовать.