Мой первый обзор для БГ

From The Joel on Software Translation Project

Jump to: navigation, search

Автор: Джоэл Спольски
Переводчик: Сазонов Денис
В оригинале статья называлась My First BillG Review, опубликована 16 июня 2006 г.

Мой первый обзор для БГ

Когда-то давно в Excel был очень неудобный язык программирования без названия. Мы его называли «Excel-евские макросы». Это был довольно ущербный язык программирования без переменных (значения нужно было сохранять в ячейках листа), без локальных переменных, без подпрограмм: короче говоря, на практике он был почти неприменим. У него были возможности типа «Goto», но метки были почти ниоткуда не видны.

Он выглядел прилично только в сравнении с макросами Lotus, которые представляли собой лишь последовательности клавиатурных нажатий в виде строки в ячейке листа.

17 июня 1991 г . я начал работать на Микрософт в команде Excel. Моя должность называлась «Ведущий программист». Я полагал, что нашел решение этой задачи. Идея была в том, чтобы все, что нужно делалось на языке программирования Basic.

Basic? О да!

Какое то время я потратил на обсуждения с разными группами разработчиков. Visual Basic 1.0 только что вышел и был довольно сырым [friggin' cool]. Существовало тупиковое направление под кодовым названием MacroMan, второе – сторонники объектно-ориентированного Basic-а, под кодовым названием «Silver». Команда Silver-а полагала, что у них есть потребитель для их продукта: Excel. У директора по продажам Silver-а Боба Вимана (да тот самый Боб Виман), был единственный клиент, которому он намеревался продать свою технологию: это я.

Направление MacroMan, которое, как я уже сказал, было ошибочным, одно время имело вес, но, в конце концов, затихло. Команда Excel убедила команду Basic-а, что в действительности нам нужна некоторая разновидность Visual Basic для Excel. Мне удалось добиться добавления четырех небольших возможностей в Basic. Я уговорил их добавить Variant, общий тип данных, который может содержать любой другой тип, т.к. в противном случае я не мог сохранить значение ячейки в переменной, не прибегая к оператору switch. Я уговорил их добавить позднее связывание, которое затем стало известно как IDispatch, оно же COM Automation, поскольку исходная концепция для Silver предполагала глубокое понимание системы типов, а это не то, на что обращают внимание люди, пишущие макросы. Также я уговорил их реализовать две небольшие синтаксические конструкции: For Each, позаимствованное из csh, и With, позаимствованное из Pascal.

После всего я засел за написание спецификаций для Excel Basic, огромный документ, который разросся до сотен страниц. Думаю, к моменту завершения в нем было страниц 500. (Кто то ухмыльнется: «Прорвало» - знаю, знаю, заткнитесь.)

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

Я поспешил отпечатать и выслать спецификации в его офис.

Позже, в тот же день, у меня появилось время, и я принялся выяснять, есть ли в Basic нужные функции даты и времени, чтобы выполнять те же операции, какие можно было делать в Excel.

В большинстве современных сред программирования, даты хранятся как вещественные числа. Целая часть числа есть количество дней, прошедших с определенной выбранной даты в прошлом, которая называется «эпоха». В Excel дата 16 июня 2006 г. хранится как 38884, считая дни от даты 1 января 1900 г., которая принята за 1.

Я принялся экспериментировать с различными функциями даты и времени в Basic и Excel, проверяя то и это, и заметил кое-что странное в документации на Visual Basic: в качестве начальной даты в Basic использовалась 31 декабря 1899 г, вместо 1 января 1900г., но почему-то сегодняшняя дата в Excel и Basic была одинаковой.

Каково?

Я разыскал разработчика Excel, который был достаточно стар, чтобы помнить, почему это так. Эд Фраез вроде знал ответ.

«Ох» - сказал он мне. «Проверь 28 февраля 1900 г.»

«59» - сказал я.

«А теперь 1 марта»

«61 !»

«А куда делось 60?» - спросил Эд.

«29 февраля 1900. 1900 год был високосным! он делится на 4!»

«Догадка хорошая, но неправильная» - сказал Эд и подержал меня в недоумении некоторое время.

Опа! Я кое-что выяснил. Года, которые делятся на 100 не високосные, если они не делятся еще и на 400.

1900 не был високосным.

«Это же баг в Excel!» - воскликнул я.

«На самом деле не совсем» сказал Эд. «Нам пришлось сделать так, чтобы можно было импортировать книги 123».

«Значит, это баг в Lotus 123?»

«Да, но возможно преднамеренный. Lotus надо было уместить в 640Кб памяти. Это немного. За исключением 1900, можно определить является ли год високосным, просто проверив, равны ли нулю младшие два бита. Это легко и быстро. Ребята в Lotus, вероятно, решили, что не стоит беспокоиться, что два месяца в прошлом ошибочны. Похоже, что парни, разрабатывавшие Basic, не захотели иметь геморрой из-за этих двух месяцев, поэтому они сместили начальную дату на один день назад».

«Ага!» сказал я, и, уходя, понимал, зачем нужен был эта галочка в опциях под названием «система дат 1904.

Следующий день был бы днем отчетов у большого Билла.

30 июня 1992 г.

В те времена в Microsoft была гораздо меньше бюрократии. Вместо нынешних 11 или 12 уровней управления было так: я подчинялся Майку Конте, который отчитывался перед Крисом Грэхэмом, который рапортовал Питу Хигинсу, который докладывал Майку Маплесу, а тот уже рассказывал Биллу. Примерно 6 уровней снизу доверху. Мы посмеивались над компанией типа General Motors, с ее девятью уровнями или около того.

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

Билл входит.

Мне подумалось, как странно, что у него две ноги, две руки, одна голова и т.п., и вообще он выглядит, как обычный человек.

У него в руках был мой отчет.

У него в руках был мой отчет!

Он сел и обменялся парой остроумных замечаний с подчиненными, меня почему-то не замечали. Кто-то засмеялся.

Билл повернулся ко мне.

Я заметил пометки на полях моего отчета. Он прочитал первую станицу!

Он прочитал первую станицу моего отчета и оставил пометки на полях!

С учетом того, что мы отправили ему отчет 24 часа назад, он должен был прочитать его этой ночью.

Он задавал вопросы. Я на них отвечал. Они были довольно просты, но я ни за что не вспомню какие именно, потому, что я, не отрываясь, следил, как он листает мои спецификации ...

Он листал мои спецификации! [Успокойтесь, что с вами барышни?]

... И ПОМЕТКИ БЫЛИ НА ВСЕХ ПОЛЯХ. НА КАЖДОЙ СТРАНИЦЕ СПЕЦИФИКАЦИЙ. ОН ПРОЧИТАЛ ВЕСЬ ЧЕРТОВ ОПУС И НАПИСАЛ КОММЕНТАРИИ НА ПОЛЯХ.

Он прочитал все! [О, БОЖЕ, СМИЛУЙСЯ!]

Вопросы становились труднее и более детальными.

Казалось, они идут немного вразброс. Но теперь я относился к Биллу как к приятелю. Он отличный парень! Он прочитал мои спецификации. Вероятно, он хочет задать мне несколько вопросов по примечаниям на полях! Я создам замечание в баг-трекере для каждого из его комментариев и прослежу, чтобы они были назначены исполнителям. Безотлагательно!

Под конец вопрос на засыпку.

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

«Да» – сказал я – «За исключением января и февраля 1900 года»

Тишина.

Счетчик слов «п***ц» и мой шеф обменялись удивленными взглядами. Откуда я это узнал? Январь и февраль ЧЕГО?

«О`кей, хорошо, отличная работа» - сказал Билл. Он взял свою исчерканную копию спецификаций ...

... подождите! Я хотел...

... и вышел.

«Четыре» - объявил счетчик «п***ц», и все сказали: «Вау, на нашей памяти это самое меньшее число. Билл с возрастом становиться добродушен». Ему тогда было, как вы знаете, 36.

Позже, я все себе объяснил. «На самом деле Билл не собирался рецензировать твои спецификации, он лишь хотел убедиться, что ты взял все под контроль». Его обычный прием – задавать все более и более сложные вопросы, пока вы не признаете, что чего-то не знаете, после чего он начинает кричать, что вы не подготовились. Никто точно не знал, что произойдет, если ответить на самый сложный вопрос, потому, что этого никогда прежде не случалось.

Кто-то спросил – «Представьте себе, что бы было, если бы Джим Манзи присутствовал на этой встрече?» Манзи бы тогда спросил: «Что это за функция даты?».

Джим Манзи был парень с MBA , вогнавший Lotus в могилу [Jim Manzi was the MBA-type running Lotus into the ground].

Это был хороший знак. Бил Гейтс был технарем до мозга костей. Он разбирался в Variant-ах, COM-объектах, и IDispatch, а также понимал отличия Automation и vtables, и почему это приводит к двум интерфейсам. Он беспокоился о функциях даты. Он не вмешивался в софт, если доверял людям, его разрабатывающим, но Вы не смогли бы нести чушь ни минуты, потому, что он сам был программистом. Настоящим, знающим программистом.

То, как непрограммисты пытаются развивать софтверные компании, напоминает людей, пытающихся кататься на доске, не знающие что такое серфинг.

«Все в порядке! У меня отличный консультант , стоящий на берегу, подсказывающий, что надо делать!» – считают они, а затем снова и снова падают с доски. Обычное восклицание для MBA, свято верующих, что способы управления везде одинаковы. Неужели Балмер собирается стать вторым Джоном Скалли, который привел Apple почти к краху, так как совет директоров считал, что торговля Pepsi – подходящий опыт для управления софтверными компаниями? Представители MBA культуры привыкли думать, что можно управлять организацией, которая занимается тем, в чем не разбираешься.

Спустя годы Microsoft стала большой, Билл стал просто огромным, и какие то непонятные этические баталии привели к необходимости посвящать слишком много времени борьбе с правительством США. По идее, Стив стал CEO, что позволило Биллу посвящать больше времени тому, что он делает лучше всего – развивать компанию, разрабатывающую софт, но, похоже, это не решило эндемических проблем, связанной с этими 11 уровнями управления. Все эти постоянные бесконечные совещания, упрямое стремление выпускать все подряд, неважно что (сколько миллионов долларов Microsoft потеряла на R&D, судебных выплатах и ущербе репутации, потому что они решили не только сделать web-браузер, но и раздавать его бесплатно?), несколько десятилетий, поспешной и непродуманной кадровой политики привели к тому, что интеллект среднего работника Microsoft стремится вниз (Дуглас Коупланд, "Рабы Майкрософта": «Они приняли 3100 человек только в 1992 году, и знаете ли, гениями были не все из них»).

Ну, хорошо. Вечеринка переместилась в другое место. Excel Basic стал Microsoft Visual Basic for Applications for Microsoft Excel, с таким количеством (TM)-ов and (R)-ов, что я не представляю, куда их всех поместить. Я покинул компанию в 1994, и полагал, что Билл совершенно забыл меня, до тех пор, пока не заметил небольшое интервью Билла Гейтса в журнале Wall Street Journal, в котором он почти между прочим, высказался в том смысле, что как нелегко было отыскать, скажем, хорошего ведущего программиста для Excel. Что-то вроде того, что они на дороге не валяются .

Может быть, он говорил обо мне? Нет, наверно о ком-то другом.

А впрочем ...

Personal tools