次の方法で共有


ちょっとひと言

不文律

David Platt

David Plattソフトウェア業界は、現代社会が一般的にそうであるように、多くの成文律 (明文化された規則) によって成り立っていて、その成文律の数は増え続けています。しかし、自分が歳を取り、思考が衰え、皮肉屋になるにつれて、社会もソフトウェア業界も、実は成文律ではなく不文律に左右されることが多いことがわかってきました。

成文律に「X をしてはいけない」とあっても、不文律では、「一定の条件を満たしてさえいれば、X をしてもかまわない。たとえば、仕事を終えるためならば」となります。前者は理想とする世界を表したものであり、後者は現実の世界を表すものです。

確かに複雑です。違いはわかりにくいものです。困ることも多々あります。でも、今度、航空会社のパイロットや看護師の労働組合がストライキではなく、順法闘争を始めたら観察してみてください。不文律という潤滑油がなければ、彼らの職場はすぐに行き詰まり機能停止に陥ります。社会も、成文律ではなく不文律に従わなければ立ち行かなくなるでしょう。

ニューヨーク ヤンキースのピッチャー、マイケル ピネダが、ボールがすべらないように指に松ヤニを塗ったとして 4 月に 10 試合の出場停止処分を受けたことを考えてみましょう。成文律では、「ピッチャーは松ヤニなどの物質を使用してはいけない」と定められています。不文律では、「控えめであれば、寒い天候のときに少量の松ヤニを使用するのは問題ない」ことになります。ピネダが出場停止になったのは、松ヤニを使用したからというよりも、アンパイアが注意せざるを得ないほどに露骨に塗っていたためです (詳細については foxs.pt/1i3R3fz (英語) 参照)。

ソフトウェア業界の例を考えましょう。オブジェクト指向のプログラマは、昔からグローバル変数はタブーであると宣言してきました。グローバル変数については考えるだけでも嫌になるでしょう。でも、static クラスならどうでしょう。公平のため、グローバル変数をラッパーでくるんだものは除きます。プログラマは、"Globals" というオブジェクト クラスにグローバル変数をまとめてしまうことがよくあります。プログラムの中に何かのインスタンスが 1 つしかなく、それが整数だとすると、そのインスタンスをいくつの抽象層、マネージャー、サービスでラップすれば満足できるでしょう。この文章を読んで血圧が急上昇するようであれば、質問の仕方を変えましょう。何に使ってもかまわないお金があるとしたら、何層分までなら料金を支払いますか。その小切手があなたの答えです。おそらく、ここまで読む前とは感じが変わったのではありませんか。

これまで世の中にあった不文律を文章にしただけの成文律もあります。通常、ファイル名などを文字列としてコードに直接ハードコーディングすることはよくない考え方だとされていますが、そうしなければならない場面もあります。このようなときは道徳的な響きがある標語を付けると気分的に救われます。

プロは「著名なデザイン パターンに従っているんです」と話し、技術に詳しくない上司は「それはすばらしい。カウボーイ コーディングとやらを使うんじゃなくって、デザイン パターンを使うのは良いことだ」と答えるのです。

皆さん、文字列をハードコーディングしているんですよ。必要なときに、目をしっかりと開けて、慎重に検討したうえで、コストを上回るメリットがあることを確認してから行動してください。いつか時間ができたら戻って修正するのだと自分に言い聞かせて不安な気持ちを落ち着かせます。しかし、美しい名前にしても本質は変わりません。バグを問題 (issue) と呼んだとしても、ユーザーは傷つき、怒ります (msdn.microsoft.com/magazine/ff955613 参照)。

このように危険の多い場所で進路を定めること、成文律に従う場合とそれを無視して不文律に従う場合を知ることが、ソフトウェア エンジニアリングです。この業界には、いくつか絶対に「やってはいけないこと」があります (ただし、「マーキー文字列をブラウザーのステータス バーでスクロールしてはいけない」はその一歩手前です)。私が必ずクライアントと学生に伝えていることが 1 つあります。「考えなさい。それが難しければ、私に報酬を払えば考えるのを手伝います」

私はソフトウェア開発に関する皆さんの好きな不文律に興味があります。ついでに言えば、他の分野の不文律にも興味がありますので、dave@rollthunder.com (英語) までお送りください。

「ここに書いてしまった規則はもう不文律にはなりません」と揚げ足をとる人が絶対いると思います。そのような人には、次のように返します。「誇張の多い裏ページに載せるコラム執筆者のつまらぬあら探しをするなんて、不文律違反です。10 試合の出場停止に相当すると思いませんか」


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 (英語) です。