Книга: Джоэл и снова о программировании
Назад: Часть первая. Как управлять людьми
Дальше: Глава вторая. Как искать выдающихся

Глава первая. Мое первое «рецензирование БиллГ»

16 июня 2006 года, пятница

В допотопные времена в Excel был очень неудобный язык программирования, которому не дали названия. Мы называли его «макросы Excel». Он был весьма ограничен — без переменных (значения приходилось хранить в ячейках таблицы), локальных переменных и вызовов подпрограмм — короче, сопровождать такой язык было практически невозможно. В нем имелись некоторые более сложные функции вроде Goto, но метки были скрыты от глаз.
Единственное, что его оправдывало, это явное превосходство над макросами Lotus, представлявшими собой лишь длинную строку последовательности нажатий клавиш, вводимую в ячейку таблицы.
17 июня 1991 года я приступил к работе в Microsoft в составе команды Excel. Моя должность называлась Program Manager. Предполагалось, что я как-то решу проблемы языка. Подразумевалось, что это решение будет связано с языком программирования Basic.
Basic? Фу!
Некоторое время я вел переговоры с разными группами разработчиков. Только что появился Visual Basic 1.0, выглядевший довольно круто. Также имелся неудачный проект под кодовым названием MacroMan и еще один проект — создание объектно-ориентированного языка Basic — под кодовым названием Silver. Команде Silver было сказано, что первый клиент для их продукта уже есть — это Excel. Менеджер по маркетингу проекта Silver Боб Уаймен (Bob Wyman) — да, тот самый — мог продать свою технологию только мне.
Проект MacroMan, как я сказал, был неудачным, и с некоторым трудом его все же удалось закрыть. Команда Excel убедила команду Basic в том, что ей нужен особый вариант Visual Basic для Excel. Моими стараниями в Basic включили четыре вещи, которые мне очень нравились. Был добавлен структурный тип данных Variant, позволяющий хранить данные любого типа, потому что иначе сохранить в переменной содержимое ячейки рабочего листа можно было только с помощью оператора переключения. Также было добавлено позднее связывание, ныне известное как IDispatch, или COM-автоматизация, потому что исходный проект Silver требовал глубокого понимания системы типов, чего трудно было ожидать от тех, кто станет писать макросы. И еще я получил две свои любимые синтаксические конструкции — For Each, украденную из csh, и With, украденную из Pascal.
Потом я засел за написание спецификации Excel Basic — огромного документа, разросшегося до сотен страниц, — думаю, в конце их стало не меньше пятисот. («Каскадное проектирование» — усмехнетесь вы. Да-да, приятель, оно самое.)
В те времена существовало понятие «рецензирования БиллГ». Практически любой крупной и важной функции требовалась оценка Билла Гейтса. Мне сказали послать в его офис на рецензию экземпляр спецификации (фактически, это целый том лазерных распечаток).
Я тут же напечатал и отослал ее.
В тот день у меня оставалось немного свободного времени, и я стал размышлять над тем, достаточно ли в Basic функций для работы с датами и временем, чтобы делать с ними все то, что позволяет Excel.
В большинстве программных сред даты хранятся в виде действительных чисел. При этом целая часть — это количество дней, истекших с некой оговоренной даты в прошлом, называемой началом эпохи (epoch). В Excel сегодняшняя дата 16 июня 2006 года хранится как число 38884, за точку отсчета принято 1 января 1900 года.
Я стал экспериментировать с различными функциями даты и времени Basic и Excel и обнаружил в документации Visual Basic нечто странное: в Basic началом эпохи считалось 31 декабря 1899 года, а не 1 января 1900 года, но по каким-то причинам сегодняшняя дата и в Excel, и в Basic представлялась одинаково.
Что?!
Я стал искать разработчика Excel, достаточно старого, чтобы помнить такие вещи. Похоже, ответ знал Эд Фрайз (Ed Fries).
— Ха, — сказал он мне, — проверь 28 февраля 1900 года.
— 59, — отвечал я.
— Теперь 1 марта 1900 года.
— 61!
— А где 60? — спросил Эд.
— 29 февраля 1900 года, год был високосным! Он делится на 4!
— Мысль интересная, но неверная, — сказал Эд, оставив меня в недоумении.
Пришлось провести некоторые исследования. Оказалось, что годы, которые делятся на 100, бывают високосными, только если при этом еще делятся на 400.
1900-й год не был високосным.
— В Excel ошибка! — воскликнул я.
— Не совсем так, — возразил Эд. — Нам пришлось пойти на это, чтобы импортировать таблицы Lotus 1-2-3.
— Значит, ошибка в Lotus 1-2-3?
— Да, но, скорее всего, умышленная. Требовалось уместить Lotus в 640 Кбайт — не так много памяти. Если не обращать внимания на 1900 год, то можно проверить год на високосность по двум правым разрядам числа -они должны быть нулевыми. Быстро и легко. Наверное, ребята из Lotus решили, что ничего не случится, если какие-то два месяца в далеком прошлом будут считаться неправильно. Похоже, разработчики Basic дотошно учли эти два месяца, сдвинув эпоху на день назад.
— Вон оно что, — сказал я и стал выяснять, что означает флажок 1904 Date System (Система дат 1904) в окне параметров.
На следующий день должно было состояться рецензирование БиллГ.

30 июня 1992 года.

В те дни в Microsoft было гораздо меньше бюрократии. Это сейчас там одиннадцать или двенадцать уровней управления, а тогда я подчинялся Майку Конте (Mike Conte), который подчинялся Крису Грэму (Chris Graham), который подчинялся Питу Хиггинсу (Pete Higgins), который подчинялся Майку Мэйплзу (Mike Maples), который подчинялся Биллу. Всего примерно шесть уровней иерархии. Мы еще посмеивались над компаниями вроде General Motors, где этих уровней было восемь или около того.
На моем рецензировании БиллГ присутствовала вся иерархическая цепочка вместе с родными и двоюродными сестрами и тетками, а также человек из моей команды, который должен был точно подсчитать, сколько раз Билл скажет f... (чем меньше, тем лучше).
Вошел Билл.
Я подумал: как странно, что у него тоже две ноги, две руки, одна голова и так далее — совсем как у обычных людей.
В руках у него была моя спецификация.
В руках у него была моя спецификация!
Он сел, обменявшись с кем-то из незнакомых мне управленцев шуткой, смысл которой до меня не дошел. Несколько человек рассмеялись.
Билл повернулся ко мне.
Я заметил комментарии на полях моей спецификации. Он прочел первую страницу!
Он прочел первую страницу моей спецификации и что-то написал на ее полях!
Если учесть, что мы послали ему спецификацию всего 24 часа назад, он должен был читать ее накануне вечером.
Он стал задавать вопрос ы. Я отвечал. Вопросы были достаточно простыми, но я не в силах их вспомнить, потому что неотрывно следил за тем, как он листает спецификацию.
Он листал спецификацию! [Успокойся, ты же не маленькая девочка!]
И НА ВСЕХ ПОЛЯХ БЫЛИ ПОМЕТКИ. НА КАЖДОЙ СТРАНИЦЕ. ОН ПРОЧЕЛ ВСЮ ЭТУ ЧЕРТОВУ СПЕЦИФИКАЦИЮ И НАПИСАЛ ЗАМЕЧАНИЯ НА ПОЛЯХ.
Он Прочел Все! [БОЖЕ МИЛОСТИВЫЙ!]
Вопросы становились более сложными и детальными.
Они казались несколько случайными. Я уже был готов считать Билла своим приятелем. Какой славный малый! Он прочел мою спецификацию! Он, наверное, хочет задать мне несколько вопросов, связанных с заметками на полях! Я занесу все его замечания в систему контроля ошибок и прослежу, чтобы все они были учтены, и как можно скорее!
И вот решающий вопрос.
— Не знаю, ребята, — сказал Билл, — есть здесь кто-нибудь, кто действительно в деталях разбирается, как это сделать? Например, все эти функции даты и времени. В Excel их очень много. Будут ли такие же функции в Basic? И будут ли они работать точно так же?
— Да, — ответил я, — кроме января и февраля 1900 года.
Тишина.
«Счетчик f» и мой босс изумленно переглянулись. Откуда он это взял? Января и февраля КАКОГО ГОДА?
— ОК. Хорошая работа, — сказал Билл. Он взял свой размеченный экземпляр спецификации.
..Погодите! Я же хотел...
И вышел.
— Четыре, — объявил «счетчик f», и все заговорили, что такого низкого счета на их памяти не было и что Билл с годами становится мягче. Ему тогда было 36.
Позже мне все объяснили. «На самом деле, Билл не собирается обсуждать твою спецификацию, ему просто нужно убедиться, что ты владеешь темой. Его обычный стиль — задавать вопросы все сложнее и сложнее, пока он не уличит тебя в каком-нибудь незнании, и тогда можно сделать тебе выволочку за неподготовленность. Никто не знал, что произойдет, если кто-то ответит на самый трудный его вопрос, потому что такого раньше не случалось».
— Если бы на этом совещании был Джим Манци, — сказал кто-то, — он спросил бы, что такое функция даты.
Джим Манци (Jim Manzi) — это тот менеджер с MBA, задачей которого было загнать в гроб Lotus.
Замечание было верным. Билл Гейтс поразительно разбирался в технических деталях. Он понимал, что такое Variant, COM-объекты, IDispatch, и чем автоматизация отличается от vtables, и как возникают двойственные интерфейсы. Его интересовали функции даты. Он не влезал в программу, если доверял тем, кто над ней работает, но его нельзя было провести на мякине, потому что он сам был программистом. Настоящим, действующим программистом.
Смотреть, как непрограммист пытается управлять софтверной компанией — все равно что наблюдать за новичком-серфингистом.
«Все отлично! У меня на берегу отличные помощники, которые подсказывают мне, что нужно делать!» — говорит он и снова падает в воду. Типичное поведение администратора, считающего управление универсальной функцией. Не повторит ли Стив Балмер подвиг Джона Скалли, который едва не довел Apple до исчезновениия, хотя совет директоров посчитал, что торговля пепси-колой — подходящая подготовка для руководителя компьютерной фирмы? Поклонники MBA склонны полагать, что справятся с управлением организацией, в работе которой они не разбираются.
С годами Microsoft разрослась, пребывание Билла у руля чересчур затянулось, а некоторые сомнительные с этической точки зрения решения вынудили руководство уделить слишком много внимания противостоянию с правительством США. Стив взял на себя роль CEO, теоретически для того, чтобы Билл смог больше времени посвятить тому, в чем он всего сильнее, — управлению организацией, разрабатывающей программное обеспечение, — но незаметно, чтобы в результате разрешились проблемы компании, обусловленные наличием тех самых одиннадцати уровней управления, вечными непрерывными совещаниями, упрямым стремлением создавать все мыслимые продукты (сколько миллиардов долларов Microsoft ушли на исследования и разработки, юридические услуги, поддержку репутации — только потому, что было решено не просто сделать веб-броузер, но и распространять его бесплатно?) и двумя десятилетиями безответственного и поспешного найма новых работников, в результате чего резко упал средний интеллектуальный уровень сотрудников Microsoft (Дуглас Купленд (Douglas Coupland) в «Microserfs»: «Только в 1992 году они приняли на работу 3100 человек, и можете не сомневаться, что не все из них оказались самородками»).
Ну, ладно. Все идет своим путем. Excel Basic превратился в Microsoft Visual Basic for Applications for Microsoft Excel с таким обилием ™ и ®, что я не знаю, как их все тут разместить. Я покинул эту компанию в 1994 году, полагая, что Билл совершенно забыл про меня, пока мне не попалось короткое интервью с ним в «Wall Street Journal», в котором он отметил, почти мимоходом, что очень трудно было найти, скажем, хорошего руководителя проекта для Excel. Дескать, такие люди на дороге не валяются, или что-то в этом роде.
Может, он имел в виду меня? Да нет, скорее, кого-то другого.
А впрочем, кто его знает.

 

Назад: Часть первая. Как управлять людьми
Дальше: Глава вторая. Как искать выдающихся