ゾンビの王様

Victor Stone
Microsoft Corporation

2000 年 1 月 10 日

おかしな前提と非現実的なシナリオに数週間も取り組んできたボニーは、半ば壊れかかって不眠症になってしまっていた。その状況は、彼女の良き指導者であるウェイと、ミネラル ウォーターでびしょ濡れになったホワイト ボードを使った議論でついに突破口が開かれたのだった。

「君は余計にものごとを難しく捉えていないか。どんな場合でも、他より早くこなす方法がある。問題は、支払うべきコストは何か、ってことなんだ。君のコードに仕込まれたステート マシンはパラメータを指定しているじゃないか。それ以外はなんでもネゴシエートできるさ」と、ウェイはアドバイスを与えた。

ボニーはその場を離れながら、その知恵を自分の場合に当てはめてみた。彼女は、自分のコードの状態遷移と入出力、それから副次的な効果を一覧にまとめてみることにした。こうしてコードを整理したところ、的確に修正を要するポイントがいくつか浮かび上がってきた。初期のテスト結果によれば、彼女の書いたコードは品質保証テストをクリアしながら実測 40 パーセントも性能が向上していた。次の週を変更点をリファインし、良い話を聞きたがっているウェイへのプレゼンテーションの準備をするのに費やした。

プレゼンテーションでは、ウェイはドリルダウン式の質問をほんのいくつかしただけで、ボニーがモジュールに加えた変更は有益だと満足した。

「ボニー、すばらしいよ。よくやったな。あとは、構造設計チームに見てもらって、大きな問題がないかや、チーム間で調整すべき問題があるかどうかを確認するだけだね」

「それは勘弁してください。構造設計チームの前に私が出ていくなんて。そんなことしても良いことは何もありませんよ」とボニーは顔を押さえてうなだれた。

ウェイは分かっていたかのように笑みを浮かべ、「ボニー、君なら大丈夫だ。彼らは害のない連中だし、頭から怒鳴ったりするようなことはないからね」と言って不安を取り除こうとした。

ボニーはうめきながら、「心配しているのはそういうことではありません。私が彼らを怒鳴ることになりやしないかと心配なんです。これだけは言えるのが、あの人たちにはまるで現実認識がなってことですよ。パフォーマンスについて何がわかるのですか。彼らがやっているのは、ただひたすら、ベタベタとレイヤの上にレイヤを重ねているだけじゃないですか。私のコードをご覧になりましたよね。問題なく動作しますよね。なのにどうして彼らの前でチェックしてもらわなければならないんですか?」

「ボニー。今日は遅いから家に帰って休みなさい。明日の 10 時半には構造設計チームとのミーティングだ。出席してみれば何も心配することはないから、必ず出席するように」と顔いっぱいに微笑みを浮かべてウェイは付け加えた。

アーキテクトたちに囲まれて

翌朝、ミーティング ルームに最初に到着したのはボニーだった。時計をあらためて見てみると、10 時 31 分を指していた。ホールから自動販売機のある場所に降りて、レモン味のミネラル ウォーターを選ぶ。カップをゆっくりと口元に運び、ひとくちで一気に飲み干した。鼻で深くため息をついた後、わざと時間をかけて息を吐き、ミーティング ルームの方へ向かった。まだ誰も来ていない。と、そのときだ。背後から声が聞こえた。「構造設計チームのミーティングに出席される方ですか」

メレディスの声だった。彼女は構造設計チームの業務アシスタントで、ホールの向こうにあるオフィスの自分の机から声をかけてくれた。ボニーはほっとした。というのも、メレディスはミーティングが中止になった、あるいは日時が変わったか、遅れて始まることを伝えてくれるのだと思ったからだ。それも、構造設計チームは、会社への貢献度が不足しているために解散になったからとか、ユーコンにある支社に全員転属になったからだろうとまで考えた。でも、これはボニーの都合の良い考えでしかなかった。

「みなさん、これからいらっしゃいます」とメレディスは大きな声で言う。「みなさん、副社長とのレビューで遅れてるみたいです。先に部屋でお待ちください」

期待とは違った言葉にぶつくさつぶやきながらも、ボニーは礼を述べた。重い足取りでミーティング ルームに入り、木製の大きな楕円テーブルの端っこに座った。

数分後、きれいに髭を剃り、ま新しいジーンズとボタンダウンのシャツを着た数人の男がどやどやと騒ぎながらミーティング ルームに入ってきた。ボニーは 1 人 1 人の顔を見て、そのうち少なくとも 2 人はブルースという男だとわかった。彼らは快活でよく喋り、興奮気味だった。ところが、ボニーがミーティング ルームの端に座っているのにみなが一斉に気付くと、話すのを止め、凍ったように固まった。とてつもなく長く感じられた 4 秒間の間、男たちはボニーを見つめ、ボニーは男たちを見つめていた。言葉も息も飲み込み、瞬きさえせずに。2 人のブルースのうちの 1 人が、ボニーがどうしてここにいるのかということを言おうと言葉を探し、「この部屋は使用中…」と言いかけた。

ボニーは、「ウェイがここでミーティングをやると言ったのですが」とその言葉を遮った。

男たちは揃って「あぁ、そうだったのか」と声を出し、群れる男たちに戻りながら、テーブルの周りに各自腰掛け始めた。「ウェイは来るんですか」とブルースのうちの 1 人が問いかけた。

「来た方がいいと思うけど」とボニー。

そして、ボニーと同じようにウェイが少し驚きながらミーティング ルームに入ってきた。ボニーは、ウェイが落ち着いていて控えめで、思慮深い男だとずっと思っていた。ところが、この状況の中ではウェイも快活でよくしゃべり、ひげをきれいに剃った他の男たちと突然同化したように見えた。

ウェイはすばやく、ボニーを全員に紹介した。実際にはブルースは 3 人いた。そして、ウェイは現在の状況の概要を話し始め、ボニーが担当しているモジュールについて説明し、彼女が加えた変更の種類について大まかにまとめた。仕事上の儀礼として、ウェイは、テストで非常に優れたパフォーマンスが発揮されたことをボニーに説明するよう求めた。ミーティング ルームには、心から驚いたというほとんどうわべだけの雰囲気が流れた。

「どんなインターフェイスなんですか?」と 1 人目のブルースが尋ねた。

「いつもと同じです。さまざまなステートをより適切なやり方で対処できるように、一部の関数にフラグを追加しただけです」と、この話はどういう方向に行くのだろうと戸惑いながら、ボニーは説明した。

「ということは、そのインターフェイスは CoDEPP に準拠していないわけですね」と 2 人目のブルース。

「コーデップ (CoDEPP) って何ですか」とボニーは関心を示した。

話の流れをスムーズにするためにウェイが割って入り、「CoDEPP は新しいアーキテクチャのことで、Constituent Design Engineering Pattern Process を略したものなんだ。ブルース L とブルース W が生み出した。全社的に注目されているよ。ブルースが言いたかったのは、ボニーのモジュールのインターフェイスを CoDEPP 仕様に適合させれば、大幅なパフォーマンス向上が会社全体で共有できるということですよね」。

「そのとおり」と 2 人目のブルースが答え、「そうなると、第 7 棟のプロジェクトにも参加してもらうことになりますね」と続けた。

「でも、私のコードは第 7 棟のプロジェクトには対応してませんよ」とボニーは深く眉をひそめて答えた。

「そのとおりですが、CoDEPP インターフェイスのラッパーであなたのコードをラップすれば、何かしら適用できるものがありますよ」と 3 人目のブルースが口を挟んだ。

「私のコードを汎用のアーキテクチャ インターフェイスでラップすると、パフォーマンス ゲインを失い、安定性を損なう可能性も高くなりますよ」

「パフォーマンスはいくぶん低下するでしょうが、全社的な方向に従う方が戦略的に健全じゃないですか」と 1 人目のブルースが応じた。

「高速で信頼性の高いコードは、戦略的な健全性を損なうってことですか?」。この会話の流れに、ボニーは驚きを顕わにしはじめた。脈が上がり、あえぎを隠そうと少し前に体を傾けた。ボニーには、このグループの承認は必要なかった。そして、このグループに承認してもらいたいとも、同じ部屋にいたいとも思わなかった。

ゾンビ ステート

「あ、それから、彼女は 『ゾンビ』 ステートのことを考慮してませんよね」と 3 人目のブルースが言った。ブルース全員が頷いて同意した。ボニーは、不安と落胆が入り混じった様子でウェイの方を真直ぐ見たが、ウェイは黄色いメモ用箋に書かれている何かに目をやっていた。

「『ゾンビ』ステートって何ですか」

「つまり、2 つの CoDEPP モジュールのリンクが解除されたときに、プロセス内に共有オブジェクトがドロップされることがあるということなのですね」と 1 人目のブルースが恩着せがましく答えた。「あなたのモジュールが CoDEPP 対応になれば、『ゾンビ』ステートを考慮しなければなりません。こうしたオブジェクトをゾンビ オブジェクトと呼ぶのですよ」

ボニーは大笑いしたがすぐに表情を引き締めた。ミーティング ルームの誰もが、彼女の笑いは、単に『ゾンビ』という言葉についてだけのものだと思っている。だが、彼らがこうしてその言葉を定義したことから生まれた、構造設計チームへの軽蔑的なニックネームである 『ゾンビの王様たち』を知っていれば、ここで笑わずにはいられない。

「私の新しいコードを、ノロくてバギーな標準化コンポーネント インターフェイス レイヤでラップして、その新しいステートに対応しろってことですね? CoDEPP に適合しない場合、ゾンビ オブジェクトはどうなるのですか」

「適合してもしなくても違いはありません」と 2 人目のブルースが言い、「CoDEPP のデザインの一部として、オブジェクトが行方不明になると、そのオブジェクトはもはや安全に使用できなくなることが定められています。このオブジェクトに関連するメモリ領域にアクセスしようとした場合には、新しいエラー コードが返されることになります」と言うと、彼は立ち上がってホワイト ボードのところまで行き、"E_THIS_MEMORY_INTENTIONALLY_LEFT_BLANK" と書いた。

ボニーはあきれて、「あなたたちはどうして嫌われているか、わかっていないのね」と言った。

少しのあいだ、決まりの悪い静けさが流れた後、ウェイは力無くほくそ笑み始めた。男たちも次から次へと同じようにほくそ笑み、ついにはウェイがその場を取り繕おうと話題を変えた。「ボニーがこのエラー コードをどう扱うかは今晩相談することにします。プログラム マネージャーの誰かに、CoDEPP インターフェイスのコスト計算をしてもらって、変換できる段階になったら設計者チームのみなさんにはお知らせします。現実的には、本製品の最新リリースは " 現状 " のまま進むと考えて良いでしょう。それから、CoDEPP インターフェイスのコードへの組み込みが間に合うかどうかについてはこれから検討します」。

3 人目のブルースは、この点について明らかに心配していた。「けれども、Sleeper プロジェクトのタイムフレームまでには、新しいコードを用意しておかなければなりませんよね」と強調した。「それは大問題だ。Sleeper は 100 パーセント CoDEPP だし、ボニーのコードが必要になるかもしれない」

ボニーは自分だけ置いてきぼりにされたような思いで苛立っていた。ところが、ウェイには何か考えがあるようだったので、ボニーはウェイに答えさせた。

「確かにそうです。コードが必要となる件については問題ありません」とウェイは目一杯、その場を納める調子で言った。

ボニーは幻滅していたものの、さらにやり合うには疲れ切っていた。ウェイと彼らはボニーには読めないように速記で何かを話しているようだった。

今しかない

ボニーとウェイの 2 人が構内の自分の持ち場に戻る途中、ボニーはウェイに自分の気持ちを伝えずにはいられなかった。「先ほどのミーティングについてはどのようにしたらいいんですか。私が向上させたパフォーマンスは、私のモジュールに行儀の悪いインターフェイスを取り入れたとたんに失われてしまいます」。

「ボニー、落ち着いて。今回のプロダクト サイクルだと今のまま出荷することになるよ。その後、Sleeper プロジェクトが始まれば、CoDEPP にきちんと取り組むことになるけどね。Sleeper がいつ始まるか知っているかい?」

「Sleeper が何かも、いつ出荷されるかも知りません」と、まだ好戦的な調子でボニーは返した。

ウェイはいつもの落ち着いて控えめな男に戻っていた。「出荷が予定されているのは今から 2 年後だから…」

「…ということは、2 年以内に出荷されなければ、それっきり…」と安堵しながら言った。まるで頭の上で燈っていた 1,000 ワットの電球が消えたかのように。そして、彼女は大きなため息をつき、ようやく脈拍がいつもの状態になるのを感じることができた。

「そうだね」とウェイは言って笑みを浮かべた。「ボニー、こういうときにどうやって自分を落ち着かせるかを知っておくように。仕事に、コードに、パフォーマンスの数値に集中しなさい。気を散らすものは一切気にしないように」。

2 人がそれぞれのオフィスに戻ったとき、本当だろうかという気持ちでボニーは首を振っていたが、ウェイに対しては新たな尊敬の念が芽生えていた。彼女は躊躇なくすぐにドアを閉め、パフォーマンスの強化点をコードベースに登録した。

Victor Stone は、Microsoft で RAD Tools の Product Design Team にいます。彼は言います。「属するな。群れるな。自分のために考えろ。ピース」