はじめてのBillGレビューのこと

From The Joel on Software Translation Project

Jump to: navigation, search

Joel Spolsky / 青木靖 訳
2006年6月16日 金曜


かつてExcelは名もないまったく無様なプログラミング言語を持っていた。私たちはそれを「Excelマクロ」と呼んでいた。はなはだ機能不全なプログラミング言語で、変数もなく(値はワークシートのセルに入れる必要があった)、サブルーチンもなく、つまるところ、ほとんど保守不能なものだった。「Goto」みたいな先進的な機能も持っていたが、ラベルは実質不可視だった。

それがまっとうなものに見えていた唯一の理由は、Lotusのマクロに比べたらずっとましということだった。Lotusマクロはワークシートのセルに長々と入れられたキーストロークの並び以外の何物でもなかった。

1991年6月17日、私はMicrosoftのExcelチームで働きはじめた。私の肩書きは「プログラムマネージャ」だった。私にはこのマクロの問題を解決する方法を作り出すことが期待されており、その解法はBasic言語を使ってどうにかするということが含意されていた。

Basicだって? ウェーッ!

私はいろんな開発チームと交渉した。Visual Basic 1.0は出たばかりで、すごくクールだった。それからMacroManというコードネームで見当違いな努力が進められていた。それに"Silver"というコードネームでオブジェクト指向Basicを作ろうとする努力もなされていた。Silverチームは顧客がいると言っていた。Excelだ。Silverのマーケティングマネージャはボブ・ワイマンで、そのボブ・ワイマンが自分の商品を売らなきゃならない相手は1人しかいなかった。私だ。

MacroManは、さっきも言ったように、見当違いなもので、しばらくは周りを丸め込んでいたが、やがて打ち切られた。Excelチームは、我々に必要なのはExcelのためのVisual Basicなんだと言ってBasicチームを説得した。私は自分のお気に入りの機能を4つBasicにどうにか付け加えた。ひとつはVariant型だ。これはどんな型でも保持できる共用データ型で、これがなければswitch文を使わずにスプレッドシートのセルを変数に格納できなかったからだ。それからレイトバインディングを追加してもらった。これはIDispatch、別名COMオートメーションの名で知られるようになったものだ。Silverの元々のデザインはタイプシステムに対する深い理解を必要としていたが、それはマクロを書く人たちがおよそ気にかけるようなものではなかった。それからお気に入りの言語構文を2つ、cshからもらってきたFor Eachと、PascalからもらってきたWithだ。

そして私は腰をすえてExcel Basicの仕様を書き出した。それは何百ページもの巨大なドキュメントへと成長した。できあがったときには500ページくらいになっていたと思う。(「ウォーターフォールだ」とか言って笑ってるね。お黙んなさい。)

当時は、BillGレビューと呼ばれるものが時々行われていた。基本的には、大きく重要な機能はすべてビル・ゲイツのレビューを受けることになっていたのだ。私は書いた仕様書をレビュー用に彼のオフィスに送るように言われた。500枚のレーザープリンタのプリントアウトだ。

私は急いで仕様書を印刷すると、彼のオフィスに送った。

そのあとしばらく時間があったので、日付や時刻に関してExcelにできることが全部Basicでもできるだろうかと調べはじめた。

ほとんどの近代的なプログラミング環境では、日付は実数値として格納されている。整数部分は、エポックと呼ばれる過去のある時点からの経過日数となっている。Excelは、今日の日付の2006年6月16日を、1900年1月1日を1として数えた日数である38884として保持している。

私はBasicとExcelの日付と時刻に関する様々な関数を調べ、使ってみるうちに、Visual Basicのドキュメンテーションの中のある奇妙な記述に気が付いた。Basicは、1900年1月1日ではなく、1899年12月31日をエポックとして使っているのだ。しかしどういうわけか、今日の日付の値はExcelとBasicで同じになる。

ええっ?

私はその理由を覚えていそうな古株のExcel開発者を探すことにした。エド・フライズなら答を知ってるかもしれない。

「ああ、それね」と彼は言った。「1900年の2月28日を調べてごらん」

「59」と私は答えた。

「じゃあ3月1日は」

「61!」

「60はどうなったんだろうね?」とエドは聞いた。

「2月29日だ! 1900年はうるう年だよ! 4で割れるもの!」

「おしいけど、はずれ」とエドは言い、私を困惑させたまま行ってしまった。

なんと、調べて分かったのだが、100で割り切れて400で割り切れない年はうるう年ではないのだ。

1900年はうるう年ではない。

「これはExcelのバグだ!」 私は興奮した。

実際はそういうわけじゃない」とエドが言った。「Lotus 123のワークシートをインポートできるようにするために、そうする必要があったんだ」

「じゃあ、Lotus 123のバグってこと?」

「そう。だけどおそらくは意図的なものだ。Lotusは640Kのメモリに詰め込む必要があった。これはあんまり大きなものじゃない。1900年を無視すれば、与えられた年がうるう年かどうか判定するのは右端の2ビットが0かどうか見るだけで済む。そのほうがずっと早くて簡単だ。たぶんLotusの連中ははるか昔のふた月が間違っていたところで問題にはならないと考えたんだろう。一方でBasicの連中は、そのふた月にこだわってエポックを1日ずらしたんだ」

「あーっ!」私は声を漏らした。そして「1904年から計算する」というチェックボックスがオプションダイアログについている理由を知ったのだ。

その翌日がBillGレビューの日だった。


1992年6月30日

今と比べると、当時のMicrosoftはずっと官僚的でなかった。マネジメントの階層は今日のように11も12もあるわけでなく、私の上司がマイク・コンテで、その上がクリス・グラハム、その上がピート・ヒギンズ、その上がマイク・メイプルズ、その上がビル・ゲイツだった。一番下から一番上まで6階層だ。私たちはGeneral Motorsみたいにマネジメント階層が8層もあるような会社を笑っていたものだ。

私のBillGレビューミーティングには、階層のトップへのパス上にいる全員が、それぞれのいとこや姉妹やおばさんたちと一緒に勢ぞろいしていた。そして私のチームから来ていたある男の役割は、ミーティングの間にビルが何回Fワードを言うか正確に数えることだった。F***カウントは少ないほどいい。

ビルが入ってきた。

彼が2本の足と、2本の腕と、1つの頭を持っていて、普通の人類とほとんど同じように見えるのが、私には不思議に思えた。

彼は私の書いた仕様書を手にしていた。

彼が私の書いた仕様書に手にしている!

彼は腰掛けて、私の知らない取締役の一人と何か気の利いた冗談を交わしたが、私には意味が分からなかった。何人かが笑っていた。

ビルが私に顔を向けた。

私は彼の手にある仕様書の欄外にコメントが書き込まれているのに気づいた。最初のページを読んでくれたんだ!

彼は私の仕様書の最初のページを読み、欄外に書き込みをしたのだ!

私たちが仕様書を彼に送ったのがほんの24時間前だったことを考えると、彼は昨夜読んだのに違いなかった。

彼が質問をし、私がそれに答えた。簡単な質問だったが、それがどんな質問だったかどうしても思い出せない。彼が仕様書をパラパラとめくる手元に目をひきつけられていたからだ。

彼が私の仕様書をパラパラとめくっていて [落ち着けよ! 小娘みたいじゃないか!] …そして仕様書のすべてのページの欄外に書き込みがあるのを見たのだ。彼はあの分厚い仕様書をすべて読んで、欄外に書き込みをしたのだ。

全部読んだんだ! [ウワーッ、なんてこった!]

質問はどんどん難しく、ますます詳細なものになっていった。

彼の質問は幾分取りとめがなかった。しかし私はもうビルのことを友達みたいに感じていた。いいやつじゃないか! 私の仕様書を全部読むなんて! 彼は欄外に書き留めておいたことについてちょっと質問がしたいだけなんだ! 彼のコメントのひとつひとつをバグトラッカーに登録して、必ず要求に応えられるようにしよう。すぐにでも!

最後に、とっておきの質問がきた。

「分からないんだが」ビルは言った。「これをどうやって実現するのか本当に詳細に調べた者が誰かいるのか? たとえば、日付と時刻に関するあのたくさんの関数だ。Excelには日付と時刻の関数がすごくたくさんある。Basicが同じ関数を持つようになるのか? それが全部同じように動くようになるのか?」

「なります」と私は答えた。「1900年の1月と2月以外は」

沈黙。

F***カウンタの男と私のボスが驚いて見交わしていた。なぜそんなことわかるんだ? 1月と2月って何のことだ?

「いいだろう。よくやった」とビルが言った。彼は書き込みをした仕様書を手に取った。

…あ、待って! それ、欲しい…

そして彼は行ってしまった。

「4回」とF***カウンタの男が宣言した。「ワォ、これは私が知る限り一番少ないぞ。ビルも年で丸くなったようだ」とみんな話していた。彼は36だった。

後になってこんなことを聞いた。「ビルは君の仕様を本当にレビューしたかったわけじゃなくて、君がしっかりコントロールできているか確かめたかったんだよ。彼のやり方は、相手が分からないと認めるところまでどんどん質問を難しくしていって、そうして準備ができてないじゃないかと怒鳴りつけるんだ。彼が考えた一番難しい質問に君が答えたらいったい何が起きるのか、実のところみんな見当がつかなかった。そんなことはかつて一度もなかったからだ」

「ジム・マンジがあのミーティングにいたらどうだったろうね?」と誰かが言った。「『その日付関数って何だ?』と聞いたんじゃないか?」

ジム・マンジはLotusをだめにしたMBAタイプの人間だ。

これはいい点を突いている。ビル・ゲイツは驚くほど技術的な人間だ。彼はVariant型やCOMオブジェクトやIDispatchを理解しており、 Automationとvtableがなぜ違っていて、そしてなぜデュアルインタフェースが必要になるのかが分かっている。彼は日付関数を気にかけている。信頼している連中が取り組んでいるソフトウェアについてうるさく干渉することはなかったが、そうかといって一瞬でも彼を誤魔化すことはできなかった。彼がプログラマだったからだ。実際の、本物のプログラマだ。

プログラマじゃない人間がソフトウェア会社を運営しているのを見ると、サーフィンの仕方を知らない人間がサーフィンしようとしているみたいに思える。

「それは問題ない! 私には浜からどうやればいいか教えてくれるアドバイザーがいるから!」と彼らは言うが、その後ボードから落ちるのだ。繰り返し、繰り返し。マネジメントが汎用的な機能であると信じているMBAのたわごとだ。バルマーはもう一人のジョン・スカリーになるのだろうか? ペプシを売るのはコンピュータ会社を運営するための良い下地になると重役会が考えたばかりに、Appleは潰れるところだった。MBAの信仰は、自分では理解できないことをやっている組織を運営できるというものだ。

何年にも渡って、Microsoftは大きくなり、ビルは無理をしすぎ、疑わしい倫理的な判断により、マネジメントの注意の多くを米政府との闘いに向ける必要が生じた。スティーブがCEOの職を引き継ぎ、それによってビルはより多くの時間を彼が一番うまくやれることに注げるようになるはずだった。ソフトウェア開発組織の運営だ。しかしあの11層のマネジメント階層の引き起こす問題は解決しなかったようだ。絶え間ないいつまでも続くミーティング、どんなものであれ作れる製品は何でもつくることへのこだわり(Webブラウザを作るだけでなく、それをただで配らなきゃいけないと決めたために、Microsoftが研究開発や訴訟費用や評判へのダメージという形で失った金は、いったい何十億ドルになるのだろう?)、それに20年に渡るルーズで急激な採用によってMicrosoft社員の知力の中央値がいかに落ちたか(ダグラス・クープランドがマイクロサーフスで書いている。「Microsoftは1992年だけで3100人採用したが、それがすべて逸材だとは考えられない」)。

まあ、パーティは別な場所に移ってしまったのだ。Excel BasicはMicrosoft Visual Basic for Applications for Microsoft Excelとなり、たくさんの(TM)やら(R)やらをどこにつければいいのかも分からない。私は1994年にMicrosoftを去り、ビルは私のことなど覚えてはいないだろうと思っていたが、ウォールストリートジャーナルの短いインタビューの中で、何かのついでにビル・ゲイツが、優れたExcelのプログラムマネージャを雇うのはすごく難しく、自然に木になったりはしないのだと話しているのを見つけた。

彼は私のことを言ったのだろうか? いんにゃ、たぶん別な人のことだろう。

それでも--


(オリジナル: My First BillG Review)

戻る

Personal tools