ちょっとひと言

「Never」ランド

David Platt

David Platt先月号のコラムでは、「ある行動とそれに反する行動にはそれぞれ適した時期がある」という人生にする考え方が、ソフトウェアにどのように当てはまるかを考えました。今月は、この考えとは反対のことについてお話したいと思います。つまり、あり得ない事象についてのお話です。

私はソフトウェア業界と医療業界を比べることがよくあります。医者は、患者の病気の行く末を完全にコントロールすることはできません。医療の状況は多種多様で、常にリスクが付きまとい、さまざまなことが起こります。しかし、患者を傷つけることだけは、絶対にあってはなりません。私たちは、どうしたら患者が傷つくのか、それをどうしたら防ぐことができるのかを知っています。このため、患者が傷つくことは、常に医療ミスと見なされます。「Never Event (決して起こってはならないこと)」という、専門家があってはならないと判断した医療ミスのリストがあります。これ (bit.ly/h9RMl8、英語) を見ると、顔をしかめたくなります。ここでは、誤って別の患者を手術した事件、誤って別の部位を手術した事件、そして患者の体内に手術器具を残してしまった事件などが挙げられています。「悪い知らせがあります。私たち (医者) は、あなたの健康な方の足を切断してしまいました。でも、良い知らせもあります。なんと、悪かった方の足は快方に向かっています」という、医療ミスを表したジョークは、こうした事象の受け入れが難さがストレートに表現されていて、私が好きなジョークの 1 つです (「Plattski、頭がおかしいんじゃないのか」ですって。わかっています。前にもそう言われたことがありますから)。

同じ考えを、私たちが開発するソフトウェアにも当てはめる必要があります。ソフトウェアにおいても、絶対に、何があっても許されないことというものが存在します。これにはどのような事象が当てはまるかを定義して、公表し、その内容と回避方法について開発者を教育すべきです。そして、ユーザーには、ソフトウェアのそのような振る舞いには絶対に寛容になってはならず、寛容になることを頼まれてもいけないことを説明しなくてはなりません。

まず、私が考えるソフトウェアの「Never Event」をご紹介します。患者が死なないことを医者が願うのと同様に、私たち開発者はプログラムがクラッシュしないことを願っていますが (医者は、私たちにリセット ボタンがあることを妬ましく思うでしょう)、どちらもすぐに起こるわけではありません。プログラムのクラッシュはたまにしか起こらないことがわかっているため、クラッシュによってユーザーの作業が失われることは「Never Event」だと言えるでしょう。Word や Excel で 2 時間もかけて作業していたとき、非常に恐ろしい、修復不可能であることを示すアプリケーション エラー メッセージ ボックスが表示されて、すべてを失った経験はありませんか。これは、どんなときも、何があっても受け入れがたい事象です。

怠け者のコンピューターおたくがこれに異議を唱えるのが聞こえます。「それは私たちの問題ではなくて、教育の問題だろう。ユーザーが 10 秒おきに作業を保存すれば、何も失わなくて済む話じゃないか」。これは、単なるたわ言です。それがユーザーの仕事でないのはあきらかです。「ちょっと、これは違う腕ですよ。メスの持ち方、本当に覚えていますか」と外科医に言うのは患者の仕事ではありません。手術を正しく行うのは外科医の仕事です。同様に、私たちの仕事は、ソフトウェアを正しく開発することです。

これらの事象は決して起こってはならないので、起こったときはたいへんです。権威ある外科医、David Ring 氏の件について考えてみましょう。彼は、マサチューセッツ総合病院で、ある患者の正常な方の腕を誤って切断してしまいました (つまり、誤った手術を行いました)。彼は自身のケースについて、隠ぺいしたり、非公開の死亡症例検討会のみで話し合ったりするのではなく、一流の医学雑誌『New England Journal of Medicine』 (bit.ly/gzWN9q、英語) に発表しました。外科医のチームは、根本的原因を掴むため、過失についての完全な解析を行いました (想像するよりずっと複雑です。論文をお読みください)。彼らは治療計画を調べ直し、そのうちのいくつかを変更しました。たとえば、消えないとされているはずなのに、手術部位へのマーキングを消してしまうアルコール製剤の使用を中止しました。受け入れがたい出来事に我慢せず、そして、思いがけず発生してしまうものへの対処法を開示することによって、世界はより良い方向へと向かうでしょう。

同じことが、私たちの業界にも必要です。失われるべきでないデータは、なぜ失われたのでしょう。ディスクに十分な領域がなかったのなら、これは容量の問題で、解決法はわかります。だれかが壁からプラグを引き抜いたのなら、これは耐久性の問題で、いくつかの解決法とそのコストがわかっています。null ポインターを確認するのを忘れていたのなら、解決するのは簡単です。このように考えていく必要があります。

私たちの職業が、社会の柱にふさわしい立場にあるなら、別の柱からこうした考えを取り入れるべきです。

ソフトウェアにおける「Never Event」は何だと思いますか。そして、どうすれば回避できるでしょう。著者紹介の最後にあるリンクから、皆さんのご意見をお寄せください。いつものように、読者の方を紹介するときは下のお名前を使わせていただきます。それ以外をご希望の場合は、その限りではありません。

David S. Platt は、ハーバード大学の公開講座や世界中の会社で .NET のプログラミングの講師をしています。『Why Software Sucks...and What You Can Do About It』(Addison-Wesley Professional、2006 年) や『Microsoft .NET テクノロジ ガイド』(日経BPソフトプレス、2001 年) などの、11 冊のプログラミング関連の書籍の著者でもあります。2002 年には、マイクロソフトから Software Legend に指名されました。David は、8 進法で数える方法を学べるように、娘の 2 本の指をテープで留めるかどうか悩んでいるところです。連絡先は rollthunder.com (英語) です。