- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Редкая профессия - Евгений Зуев
Шрифт:
Интервал:
Закладка:
Вдруг начались задержки с платежами. Очередной этап пусть с опозданием, но завершается, программные тексты переданы, документация представлена,-- словом, формальности соблюдены, однако под различными предлогами нам предлагается подождать. Постепенно эта практика приняла постоянный характер. Или они решили нас проучить? Как бы то ни было, мы были в бешенстве. Не в состоянии выплатить даже такие откровенно нищенские суммы — как это можно объяснить?
В один из последних приездов Вальтера мы решили продемонстрировать твердость. Никаких ультиматумов ставить, конечно, не собирались, однако хотели дать понять, что нам не нравится характер отношений с фирмой. В переписке, предшествующий его визиту, мы настоятельно просили увеличить оплату, однако получали весьма уклончивые ответы. В первую же встречу мы заявили, что суммы, которые мы получаем, существенно ниже типичной по Москве зарплаты среднего программиста (это было действительно так), а мы к тому же не средние программисты. Кроме того, получаем мы их последнее время крайне нерегулярно. Поэтому, чтобы обеспечить хотя бы сносное существование, мы вынуждены искать дополнительную работу. По этой причине мы теперь не сможем уделять проекту все свое рабочее время. (Тем самым мы заранее предупреждали о возможности очередной задержки.)
Последняя часть тирады была блефом. Мы не могли себе представить, что в Москве найдется для нас работа, связанная с созданием компиляторов, а делать что-то еще крайне не хотелось (см. начало статьи). На самом деле компилятор занимал все наши мысли, только с ним мы связывали все наши дальнейшие перспективы, так что переключиться на что-то иное было почти невозможно. Понятия же "рабочего времени" для нас давно не существовало — рабочим было почти все время, свободное от сна и от принятия пищи.
Никакого содержательного ответа мы не получили. Вальтер выслушал нас молча, лишь иногда понимающе кивал. Потом спросил: "Какова примерно зарплата программиста в Москве?" Мы назвали сумму. Он последний раз кивнул и замолк. Разговор закончился.
Следующие дни мы обсуждали технические аспекты проекта. Казалось, он был доволен состоянием компилятора и тем, что в конце тоннеля, наконец, стал виден свет. К больному вопросу мы не возвращались. Его отношение к нашему демаршу так и осталась загадкой. То ли это не входило в его компетенцию, и давать какие-либо обещания он просто не имел права? Или что-то мы должны были понять сами, без каких-либо объяснений? Кое-что прояснилось позднее, но тогда было от чего впасть в недоумение. Как бы то ни было, мы попали в дурацкое положение. Получилось, будто между нами произошел следующий диалог:
— Будете платить? — Нет. — Ну ладно, тогда мы будем работать бесплатно.
Как отремонтировать подгнивший дом
Вскоре после того, как компилятор "задышал" и приобрел относительную стабильность, мы стали систематически проводить его профилирование. GNU'шная программа gprof выдавала длинные таблицы временных затрат отдельных функций, по этим таблицам мы рисовали огромные, на несколько листов, графы реальных взаимосвязей модулей, пытаясь найти резервы быстродействия. Первый же анализ показал, что около 40% времени тратится на операции со строками и библиотечные функции ввода-вывода. Сначала это показалось естественным — любая идентификация именованного объекта в программе предполагает сравнение имен. Поиск имени в таблицах — одна из базовых операций в любом компиляторе, и даже используя технику хеширования, избежать прямого литерального сравнения идентификаторов невозможно. Однако цифра показалась нам все же чрезмерно большой. Исправить положение без разрушения компилятора было крайне сложно, так как всевозможные операции с именами буквально пронизывали все модули. Это не являлось проектной ошибкой — полностью локализовать работу с именами невозможно, так как сама семантика языка определяет необходимость оперировать с именами практически на всех стадиях компиляции.
Известно, что у деревянного бревенчатого дома обычно первыми подгнивают нижние венцы, имеющие постоянный контакт с почвенными водами. Чтобы отремонтировать подгнивший дом, вовсе не обязательно раскатывать его по бревнышку. Делают так: определяют самый нижний здоровый венец, подводят под него домкраты (под каждый из четырех углов) и немного приподнимают ими весь дом. После этого заменяют отслужившие бревна новыми и опускают на них верхнюю часть.
Точно по такой же схеме обошелся с компилятором мой коллега. Он "вынул" из него старую схему хранения имен и заменил ее на усложненную, но более эффективную. Ключевой момент новой схемы состоял в обеспечении присутствия каждого имени в семантических таблицах в единственном экземпляре. Тогда вместо сравнения литеральных изображений имен достаточно было сравнивать указатели на эти представления. Алгоритмы модулей, использующих операции с именами, никак не изменились, однако в некоторых местах пришлось заменить тип IDENT, представляющий "старый" идентификатор в таблицах, заменить на xIDENT — прямой указатель на единственную копию данного имени. Эту операцию можно было бы сделать одной командой контекстной замены, но никакой редактор не смог бы разобраться, где именно следовало ее производить, а где — оставить по-старому… В очередной раз мы "руками" перещупали весь компилятор. После четырех дней непрерывного труда компилятор разогнался на 25% (наглядная стоимость литеральных сравнений строк в большой программе)!
Фрагмент модуля с усовершенствованной версией обработки имен с тех пор украшает комментарий:
/* Krotoff is a _very_ clever guy! */
Товарища не похвалишь, так и он тебя не похвалит.
Последнее прости
Последние месяцы мы работали, не получая от фирмы вообще ничего, кроме писем. Постепенно ситуация с отсрочками платежей начала проясняться. У фирмы возникли финансовые затруднения. В подробности нас не посвящали, но они были, похоже, достаточно серьезными. Компания применила радикальный, но, видимо, стандартный метод выживания в подобных условиях — разделение, при котором убыточные подразделения выделяются в самостоятельные (дочерние) фирмы.
Однако для нас ничего не изменилось, и, несмотря на неопределенность, работу мы не бросали. По-прежнему примерно раз в две недели, а то и чаще мы отсылали текущие версии компилятора и тестов (snapshot — "моментальный снимок" нашей работы), Вальтер делал собственный прогон компилятора, присылал свои вопросы и замечания. Последний этап работы прошел без особых событий, в тяжелой и монотонной работе.
В ноябре 1996 г. мы получили так называемый "Milestone Certificate" — официальное подтверждение о завершении и принятии очередного этапа работы и вместе с ним — всего проекта в целом. Все взаимные обязательства были выполнены, фирма не имела к нам никаких претензий (еще бы имела!). Finita…
Компилятор готов, более чем 3-летний марафон успешно завершен! Однако это эпохальное событие прошло для нас незамеченным. Мы просто не в силах были остановиться — компилятор еще давал ошибки на семи процентах тестов, последние версии стандарта не были просмотрены, и вообще еще много чего нужно было доделать… Все как обычно.
В конце года ситуация, казалось, начала поворачиваться к лучшему. Фирма не умерла, наоборот, они решили создать филиал в другой стране, который занимался бы именно компиляторами, в том числе и нашим. Планировалось отдать компилятор на бета-тестирование в один европейский университет, готовый попробовать его в работе. Надо было готовиться к сопровождению этого процесса. Кроме того, нам предлагалось прямо с января начать новый проект — перепроектировать компилятор, чтобы он генерировал промежуточное представление нового формата, который фирма уже давно разрабатывала и даже продвигала как некоторый стандарт.
Все это выглядело очень перспективно и интересно. Мы были уверены в своих силах и собирались не повторить ни одной из прежних ошибок. Теперь мы могли вполне обоснованно определить трудозатраты и, конечно, потребовали бы более адекватное вознаграждение. Мы ждали известий о филиале и документацию по новому формату.
Внезапно что-то застопорилось. Письма стали короче и неопределеннее, ответы на наши вопросы — уклончивыми: мол, создание филиала непростая работа, документы пришлем после подписки о неразглашении. (А как давать подписку, когда не заключен контракт и неизвестно, что, собственно, придется делать и в какие сроки?) Постепенно переписка заглохла.
Тягостная пауза продолжалась несколько месяцев. Надо было что-то решать, но в создавшихся условиях практически любое решение означало окончательный разрыв с фирмой. А мы… да, боялись этого: нам казалось, что как разработчики компиляторов мы больше никому не интересны.
