ソフトウェア開発における“無知”は攻撃的な意味ではない
無知の起源
私が「無知」という用語に初めて遭遇したのは、オレゴン州ポートランドでのOOPSLAカンファレンスで、あるプレゼンテーションを聞いた2006年10月です。そのカンファレンスの招待スピーカであるMartin Rinardは、「Minimizing Understanding in the Construction and Maintenance of Software Systems(ソフトウェアシステムの構築と保守における理解を最小限にする)」と題したプレゼンテーションを行いました。これは議論を呼びましたが、私を鼓舞してくれる内容でした。
彼は、人の頭脳は有限であり、限られた量のデータだけを処理できるという観察を示しました。ますます大きなアプリケーションを構築することが目的であれば、アプリケーションの限られた部分だけしか知らなくても構築する方法を学ぶ必要があります。彼は、探求すべき次の3つの方向性を説明しました。
- プログラム検証
- システムエンジニアリング
- エラーに耐える
彼のプレゼンテーションでは、エラーはあるが受け入れられるプログラムの作成方法の探求へと話が続きました。それは、真実、美しさ、優雅さを愛する人々にとっては恐ろしい見方です。しかし、実際のソフトウェアシステムを作り出そうとしている人々にとっては、受け入れられる妥協です。
私は、Rinard氏の提起を非常に気に入りましたし、エラーに関する彼の結論にも同意します。しかし、この本は、システムエンジニアリングに加えて、プログラム検証にある程度焦点を当てます。信頼性のあるシステムを作り出しながら、できる限り無知であるということを達成する方法を学ぶことは、それでもやはり魅力的で望ましい目標です。
「無知」という用語は、攻撃的な意味ではありません。ここでは、理解の様々な種類を区別するためです。対象物を利用するために最低限必要なことだけを理解しているという浅い理解、および、背後にある原理を理解しているという深い理解があります。日々の生活では、私達はたいてい浅い理解だけを必要としています。テレビを見たいのであれば、テレビが実際にどうやって映像を映しだすのかを深く理解する必要はありません。正確な位置を知る必要があれば、地球の周りを飛んでいる人工衛星の精巧なシステムを理解する必要はありません。衛星の機能や衛星同士間の位置の重要性は、私達の理解を超えています。私達にとっては、GPSに表示される緯度と経度を認識するだけで十分です。もちろん、人によっては、もっと深く理解する必要があります。たとえば、GPS機器、自動車、テレビなどを修理する人は、もっと深く理解する必要があります。それでも、そのような人々も浅い理解だけが必要です。彼らは、すべての詳細を知る必要はありません。テレビや自動車についてはほぼすべてを学ぶことは確かに可能であり、必要ならば学ぶことができます。しかし、そのような深い理解は普通は必要なく、そのため、私達のほとんどが、日々の活動を浅い理解だけで行うのです。
同様に、ソフトウェア開発における無知というのは、私達が少なくともほとんどの場合に浅い理解にだけ頼ることができることを意味しています。「選択的無知」という用語は、ここでは何を私達が深く知り、何を深く知る必要がないかを積極的に選択することを意味しています。それが、「選択的無知」(この本の残りの部分では単に「無知」と呼んでいます)が全体として積極的な用語である理由です。
この記事のもとになった書籍 | |
---|---|
Jaroslav Tulach 著/柴田 芳樹 訳 |
APIデザインの極意 Java/NetBeansアーキテクト探究ノートなぜ、設計の良くないAPIを持つソフトウェアが量産されるのでしょう。エンジニアが良いAPI・悪いAPIについて分かっていない、あるいは、適切なレビューを受けていないからかもしれません。本書では、NetBeansアーキテクトの著者が遭遇してきた様々な誤りを解説し、APIの発展を考慮した設計について詳しく説明。あまり語られることがなかったAPI設計について、貴重な10年間の経験をベースに幅広くノウハウを披露。API設計の技術や知見の水平線を押し広げることができる稀有な一冊です。 |