(Или как мы ваяли идеальное демо для самого богатого человека в мире)

Билл Гейтс приблизительно в 2001 году
Билл Гейтс приблизительно в 2001 году

На часах пять утра. И еще 5 часов остается до встречи с самим Биллом Г. Глаза у меня красные и припухшие. Я едва способен соображать: сутки без сна не прошли даром. Только что код перекомпилировался и, кажется, даже работает. Это значит, что следующие 2-3 часа я смогу проспать под столом, и у меня останется еще немного времени, чтобы показать демоверсию кода нашему менеджеру проекта. Следующим человеком, который ее увидит, будет Билл Гейтс. И это до чертиков меня пугает: от его мнения будет зависеть, получит ли наш проект финансирование.

В далеком 2001 году мне довелось поработать в Microsoft Natural Languages ​​Group (NLG). Помимо прочего, NLG распоряжалась абсолютно всеми средствами проверки правописания и грамматики, входящими в состав Microsoft Office. Конкретно моя группа занималась разработкой продукта, который назывался «Контекстно-зависимая проверка орфографии». Мы отлавливали очень специфические ошибки, которые обычная проверка орфографии (красная волнистая линия) или синтаксиса (зеленая) могли пропустить. Представьте себе, что пишете письмо некоему Сэру Карлосу и ошибаетесь: «Дорогой сыр Карлос…». Выглядит глупо, не правда ли? При этом никаких ошибок нет: слово «сыр» есть в словаре. Наша программа умела отлавливать такие опечатки и ошибки, опираясь на контекст фразы. Цвет волнистой линии для таких ошибок — синий.

Пример отсюда: https://edu.gcfglobal.org/en/word2010/checking-spelling-and-grammar/1/
Пример отсюда: https://edu.gcfglobal.org/en/word2010/checking-spelling-and-grammar/1/

Встреча с Биллом Гейтсом была крайне важна: если бы нам удалось убедить его демкой, proof-of-concept, проект получил бы дальнейшее финансирование, а продукты MS Office — новый функционал. Презентовать что-то Гейтсу — это всегда задачка со звездочкой, но наши проблемы на этом не заканчивались. Дело в том, что для проекта мы подготовили одну специфическую DLL-библиотеку. По нашей задумке, она должна была работать «внутри» MS Word. Однако наш модуль еще не входил в состав текстового процессора, и демонстрацию предполагалось проводить где-то вовне самого Word. «Бедность не порок», подумали мы. И сделали демку целиком в командной строке: сначала вызывалась наша DLL-ка, затем прямо в консоли нужно было напечатать предложение, с ошибкой или без. Свой вердикт программа писала так же в консоли. Я чувствовал, что проекту не хватает визуальной яркости: вне MS Word он мог впечатлить только человека с богатым воображением.

Будучи инженером, я взялся решить проблему: невыразительная демонстрация хорошего продукта могла выйти боком и мне, и всему нашему отделу. А что если заставить наш код работать в отладочном билде Word’а? В теории это могло получиться. Загрузив на свой компьютер обширный исходный код Office, я собрал его, подменив «официальную» DLL-библиотеку своей, которая уже включала контекстуальный блок. Начался пошаговый дебаг. Долгие часы я копался в коде, пытаясь разобраться, каким образом вызывается DLL спеллера. По моему предположению, если оригинальная библиотека могла рисовать красные и зеленые линии, всё, что мне предстоит сделать — скопировать готовый код, сменить цвет подчеркивания и ассоциировать его с работой нашего модуля. Вопреки ожиданиям, Word «присылал» нашей библиотеке весьма запутанную структуру данных, которая, помимо собственно текста, содержала форматирование и громадный буфер для «отмены» через Ctrl+Z. Соответственно, чтобы пробраться к чистому тексту, нашему модулю пришлось анализировать все эти данные и отсекать лишнее. Проблема в том, что никакой документации на различные варианты этой структуры у меня не было. Пришлось вручную нарабатывать сценарии, в которых набор данных выглядит по-разному. Например, вот пользователь набирает текст. Что изменится в массиве, если одно слово будет выделено жирным, а другое — курсивом? Как отражается на данных изменение кегля, удаление слов и их замена. И всё это, на минуточку, с учетом буфера версий текста.

Много часов ушло у меня на то, чтобы понять, как это всё устроено и как заставить наш спеллер рисовать в Word’е правильные закорючки. Наконец, код заработал! Целых две минуты я был счастлив — а потом всё сломалось. За отладкой я провел остаток дня и больше половины следующего.

Немного SWAG'а, сохранившегося с тех времен
Немного SWAG'а, сохранившегося с тех времен

Такеши, мой друг, около 17 часов возвращался домой. По счастливой случайности он проходил мимо моего кабинета и заглянул поздороваться. Я показал ему новый вариант демки. Ранее Такеши участвовал в разработке MS Word и неплохо знал его кодовую базу. Демо заинтересовало Такеши, он сел рядом и бросился мне помогать.

Наверное, я в тот день написал самый уродливый код на C++, который когда-либо видел мир. Все было испещрено бесконечными if-else, обрабатывавшими разные варианты генерируемых Word’ом данных. Три часа мы провели за отладкой: смеялись, огрызались друг на друга, чесали в затылках, забыв обо всем на свете. Приблизительно раз в час жена Такеши звонила, чтобы справиться, когда он придет домой. «Скоро, скоро…» — отвечал ей мой друг, и мы продолжали работать.

Гордон, другой мой друг и по совместительству один из программистов NLG, пришел к нам около восьми часов вечера. Оба мы были совами и регулярно работали по ночам. В девяностые и начало нулевых никто не удивлялся, что коридоры Редмондского отделения Microsoft полны народа. К слову, Гордону моя затея расширить демонстрацию понравилась, и вот мы уже втроем сидели перед моим компьютером. Если его величество Word «падал», мы кричали и чертыхались. А любое верное срабатывание кода вызывало у нас гомерический смех.

Мы продолжали и продолжали. Да, это не был совместный оплачиваемый проект. Но страсть и желание показать самому крутому чуваку в мире (а заодно нашему большому боссу) эту маленькую фичу и преподать ее как можно красивее, подпитывали нас. Всё должно заработать не где-то в командной строке, а в реальном Word’е не позже 10 утра следующего дня. И мы продолжали кодить и пыхтеть.

В полночь мы заварили себе крепкого свежего кофе и отправились на поиски любой доступной в офисе еды. За ужином работа продолжилась: жена Такеши, видимо, потеряла надежду и перестала звонить после 22:00. Наверное, легла спать, счастливица. Мы с Гордоном тогда были холостяками, без детей и прочих обременений, поэтому нас совесть нисколечко не терзала.

Глаза наши налились кровью, как у быков на корриде, мы были одновременно измотаны и взведены до предела: всё должно было заработать вот-вот. Буквально через минуту!

К двум часам ночи нас покинул Такеши. Его мозг выбросил белый флаг. После обильных сбивчивых извинений наш друг отправился в свой кабинет и рухнул спать под столом.

Лишь к 5 часам утра у нас с Гордоном получилось. Код работал! Я написал нашему менеджеру, чтобы рассказать о своей идее. Да-да, интеграция модуля напрямую в Word не была оговорена заранее. Это была моя личная инициатива.

Я скомпилировал финальную версию кода, переписал бинарники на дискету (представляете, на дискету!), положил ее на стол менеджера и, заведя будильник на 9:30, завалился спать прямо в кабинете.

Проснувшись, я осознал, что менеджер до сих пор не видел моего письма, а дискета с файлами сиротливо лежит у него на столе. Встреча с Гейтсом проходила в 9-м корпусе. Половину кампуса, отделявшую наши здания, я пробежал с дискетой в руках. Думаю, что, добравшись до дверей конференц-зала, я выглядел максимально жалко: с кругами под глазами, вспотевший, растрепанный. «ПОКАЖИТЕ ЕМУ ЭТИ БИНАРНИКИ!!!» — проговорил я заплетающимся языком, передавая дискету менеджеру за считанные минуты до того, как Гейтс вошел в зал. Менеджер оглядел меня со скепсисом, но решил довериться.

Ни до, ни после файлы не копировались с дискеты на жесткий диск так долго, как тем утром. Менеджер щелкнул по иконке Word: мне показалось, что между кликами мыши и запуском программы прошло никак не меньше вечности.

Заставка, пустой белый лист, мигающий курсор. Мы затаили дыхание: Джерри (наш PM) занес пальцы над клавиатурой. Напечатал пару предложений. Вот оно: наши крохотные синие закорючки. Код сработал! Можно было выдыхать…

Демка понравилась Биллу Гейтсу, и наш проект получил финансирование. Функция, над презентацией которой я корпел несколько дней, до сих пор присутствует в программе. Хотел бы я верить, что именно та марафонская ночь кодинга как-либо посодействовала успеху.

Моя коллега, Андреа Джесси, подарила мне свое крошечное воспоминание, которым я не могу не поделиться с вами: «Я присутствовала на той памятной презентации. Джерри напечатал тогда не случайный текст, а цитату из письма Билла Гейтса, которое было послано 100 000 сотрудников. Представляете, сколько человек его вычитывало перед отправкой? Вот именно. А ошибку нашла только программа. Гейтс тогда искренне рассмеялся!».

Почему я решил рассказать эту историю? Всё просто: она мне нравится. Отличный пример товарищества и взаимовыручки, которые процветали тогда в нашей компании. Два «посторонних» инженера, моих друга, всю ночь просидели со мной, расставляя брейкпоинты в Visual Studio и помогая отлаживать самый отвратительный код за всю историю Microsoft. И всё это только потому, что нам не хотелось довольствоваться посредственной демкой для Билла. Нам нужно было красивое демо, а не такое себе, «на троечку». Разумеется, ни строчки нашего кода не попало в продуктив.

Великая инженерия — это, в первую очередь, мастерство. А в настоящем мастерстве слишком маленьких мелочей никогда не бывает.

Комментарии (24)


  1. MAXH0
    12.11.2021 19:33
    -15

    Омерзительное идолопоклонничество... А красноглазие от того, чсто хотел понравиться боссу - ИМХО - самая патологическая форма красноглазия...


    1. Politura
      12.11.2021 20:20
      +31

      Встреча с Биллом Гейтсом была крайне важна: если бы нам удалось убедить его демкой, proof-of-concept, проект получил бы дальнейшее финансирование, а продукты MS Office — новый функционал.

      Красноглазие от того, что так сильно втянулся в проект, что жаждешь его завершить и очень не хочешь чтоб его прекратили - единственно верная форма красноглазия.


      1. MAXH0
        12.11.2021 20:27
        -10

        Наверное, у работающих на больших боссов развивается стокгольмский синдром. Ведь на самом деле успех или не успех проекта зависит от пользователей... А не от того улыбнулся ли босс, глядя на свою ошибку.


        1. Johnneek
          13.11.2021 19:40
          +6

          Ну, частенько от босса зависит стартовое финансирование проекта, а без этого финансирования потенциальные пользователи даже не узнают о проекте.


    1. osipov_dv
      12.11.2021 22:09
      +8

      проекты держаться не людях болеющих за то, что они делают. без них все скатится в уг...

      Что плохого, в том что люди хотят показать свою работу с максимально хорошей стороны, и не соглашаются на средненькую презентацию? Сделать лучше чем от тебя ожидают, это лучшее что можно ожидать от любого специалиста.


    1. Deenamo
      14.11.2021 22:23
      +1

      Автор много рефлексирует в своем блоге на тему ранних лет своей карьеры в Microsoft середины-конца 90х.

      Тогда он был молодым специалистом, недавним выпускником, еще без семьи, к тому же – стал миллионером (на бумаге) за первые пару лет работы во время безудержного роста акций, который вскоре прекратился (после дот-ком краха и 9/11).

      В общем, глаза горели.


  1. dabystru
    12.11.2021 19:35
    +11

    ни строчки нашего кода не попало в продуктив

    Да-да, мы вам верим


  1. Gengenid
    12.11.2021 20:31
    +4

    Я вот помню в Word 97 была интегрирована система проверки орфографии ОРФО и это было круто. Как спустя 15 лет проверка орфографии стала хуже - это надо у Microsoft спросить.


    1. csdoc
      12.11.2021 21:56
      +1

      Проверку орфографии ОРФО и сейчас можно прикрутить к ворду, - https://orfo.ru/

      Спустя 15 лет проверка орфографии стала хуже потому что в Microsoft отказались от ОРФО и сделали в новых версиях ворда что-то свое, не такое качественное как ОРФО.


      1. Gengenid
        12.11.2021 22:17

        Я это знаю. Я не понимаю, как можно было убрать что-то настолько полезное и нужное, не создав (купив) свое такое же.

        Хуже только то, что они с макросами сотворили.


        1. khim
          13.11.2021 01:34
          +3

          Я не понимаю, как можно было убрать что-то настолько полезное и нужное, не создав (купив) свое такое же.

          А что — офис после этого стали меньше покупать? А если нет — зачем тратить деньги на что-то, что не приносит прибыли?


  1. NeoCode
    12.11.2021 23:24
    +8

    Читал статью и сразу подумал: а почему нельзя было просто взять стандартный пример с RichEdit'ом из MFC и встроить туда демку? Собственно Word же здесь не нужен, нужна просто наглядная визуальная демонстрация нового типа проверки орфографии.


    1. Deenamo
      14.11.2021 22:27
      +2

      Это была бы полумера, недалеко отошедшая от демонстрации работы библиотеки в командной строчке (Гейтс бы понял).

      Программисту хотелось сделать полный proof of concept / MVP.


  1. vkni
    12.11.2021 23:49
    +5

    Вообще говоря, Билл Гейтс вроде бы не дурак. И должен обладать некоторым воображением.


  1. petropavel
    13.11.2021 00:54
    +15

    Отличный пример товарищества и взаимовыручки, которые процветали тогда в нашей компании.

    Я б сказал, отличный пример отсутствия коммуникации между отделами. Одна команда в Microsoft разрабатывает супер-спеллчекер (назовём его так) для Microsoft Word-а и несколько дней реверсит как этот Word вызывает свой спеллчекер. А нельзя было просто спросить? Тупо позвонить или зайти или хоть email написать в комнату на соседнем этаже и спросить?


    1. tmin10
      13.11.2021 11:24

      Также видно отсутствие внуренней базы знаний с документацией. На текущем проекте можно без проблем поискать в конфлюенсе и найти то, что делают другие команды.


    1. lymes
      13.11.2021 12:46
      +7

      В больших компаниях это нормально когда левая рука не знает что делает правая. У них была всего ночь, они нашли одного коллегу, который знал код ворда и согласился помочь, и это уже дофига. "Спросить" и "мэйл написать" - ответят, но на другой день, а могут и не ответить. "Соседний этаж" может оказаться в другом городе.


      1. petropavel
        13.11.2021 13:42
        +1

        Не ночь, он провёл за этим «много часов», потом «остаток дня и больше половины следующего», и потом ещё всю ночь. И, на минуточку, он писал не какой-то пасьянс, он работал в группе, которая «распоряжалась абсолютно всеми средствами проверки правописания и грамматики, входящими в состав Microsoft Office», они вообще должны были очень плотно с вордовщиками общаться. По уму, он бы хорошо знал конкретного человека, который отвечает за старый спеллчекер.

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


      1. MichaelBorisov
        15.11.2021 01:13
        +1

        Да даже и в маленьких компаниях это было бы нормально.

        Представьте: вы на своем месте, делаете проект, поставлены сроки. И тут приходит товарищ из другого отдела и говорит: «помоги, забрось свои дела и поработай недельку на меня». Одно дело — ответить на вопрос; подсказать, где найти информацию или человека. Час-два даже потратить не жалко, риск сорвать свои сроки от этого невелик. Но неделю потратить на идею, спонтанно пришедшую коллеге в голову, и несогласованную с руководством — чревато.

        Вы бы стали так поступать?


    1. dartraiden
      13.11.2021 18:37

      пример отсутствия коммуникации между отделами

      К слову, за прошедшие десятилетия ничего не изменилось
      Есть такая политика «Выключить Microsoft Defender». Она не работает вообще. Там, вообще-то, в описании указано, что её лучше не трогать, иначе будет «неподдерживаемое поведение». По факту, она работает лишь в серверных изданиях, но не в клиентских. И об этом написано…
      1) в документации по файлу ответов (логичнее было это написать в описании политики в редакторе политик, а не где-то в недрах документации, к тому же, мало относящейся к сабжу?)
      2) указано, что этот ключ реестра не работает в версиях до 1903 (то есть, в более новых должен работать?)

      На самом деле, дело обстоит так (насколько вообще можно толковать косноязычных технических писателей из Microsoft): в 1903 появился Tamper Protection (блокировка Защитником попыток изменить критические для себя настройки иными способами, кроме как через собственный GUI), а политику сделали нерабочей. Но в версиях до 1903 тампера не было, так что политику выпилили рестроспективно и из старых версий десятки тоже (которые тогда ещё поддерживались). Отсюда фраза про то, что не работает в версиях до 1903. Почему не написали в редакторе политик? А потому что за него отвечают другие люди, вовсе не те, кто внедрял тампер. Внедрявшие тампер вообще не видели смысла документировать изменения, связанные с его внедрением. Им об этом пользователи писали в комментариях к анонсу тампера в их блоге, где состоялся примерно такой разговор:
      — Напишите доки, что теперь политика не будет работать
      — Мы готовы созвониться с вами, чтобы узнать, зачем вы отключаете антивирусную защиту

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


    1. Deenamo
      14.11.2021 22:33
      +2

      Это был Microsoft времен Стива Боллмера, который характеризуется вот такой картинкой (автор сам на это ссылается в других статьях)

      Organizational charts


  1. A1EF
    14.11.2021 14:26
    +1

    Занятная история. Очень в духе романа "Рабы Майкрософта" Дугласа Коупленда.


  1. trokhymchuk
    15.11.2021 00:09
    +1

    новый функционал

    Новую функциональность, а не функционал.


  1. korsarer
    15.11.2021 01:56
    -2

    Да, вы молодцы, что поработали. Только вот жаль, что на великий могучий ваша программа не распространяется. Или она не слышала про страшные -ТСЯ и -ТЬСЯ?