ソフトウェア開発における“無知”は攻撃的な意味ではない

2014年9月29日(月)
Jaroslav Tulach(ヤロスラフ・ツゥラッハ)柴田 芳樹(しばた よしき)

無知の起源

私が「無知」という用語に初めて遭遇したのは、オレゴン州ポートランドでのOOPSLAカンファレンスで、あるプレゼンテーションを聞いた2006年10月です。そのカンファレンスの招待スピーカであるMartin Rinardは、「Minimizing Understanding in the Construction and Maintenance of Software Systems(ソフトウェアシステムの構築と保守における理解を最小限にする)」と題したプレゼンテーションを行いました。これは議論を呼びましたが、私を鼓舞してくれる内容でした。

彼は、人の頭脳は有限であり、限られた量のデータだけを処理できるという観察を示しました。ますます大きなアプリケーションを構築することが目的であれば、アプリケーションの限られた部分だけしか知らなくても構築する方法を学ぶ必要があります。彼は、探求すべき次の3つの方向性を説明しました。

  1. プログラム検証
  2. システムエンジニアリング
  3. エラーに耐える

彼のプレゼンテーションでは、エラーはあるが受け入れられるプログラムの作成方法の探求へと話が続きました。それは、真実、美しさ、優雅さを愛する人々にとっては恐ろしい見方です。しかし、実際のソフトウェアシステムを作り出そうとしている人々にとっては、受け入れられる妥協です。

私は、Rinard氏の提起を非常に気に入りましたし、エラーに関する彼の結論にも同意します。しかし、この本は、システムエンジニアリングに加えて、プログラム検証にある程度焦点を当てます。信頼性のあるシステムを作り出しながら、できる限り無知であるということを達成する方法を学ぶことは、それでもやはり魅力的で望ましい目標です。

「無知」という用語は、攻撃的な意味ではありません。ここでは、理解の様々な種類を区別するためです。対象物を利用するために最低限必要なことだけを理解しているという浅い理解、および、背後にある原理を理解しているという深い理解があります。日々の生活では、私達はたいてい浅い理解だけを必要としています。テレビを見たいのであれば、テレビが実際にどうやって映像を映しだすのかを深く理解する必要はありません。正確な位置を知る必要があれば、地球の周りを飛んでいる人工衛星の精巧なシステムを理解する必要はありません。衛星の機能や衛星同士間の位置の重要性は、私達の理解を超えています。私達にとっては、GPSに表示される緯度と経度を認識するだけで十分です。もちろん、人によっては、もっと深く理解する必要があります。たとえば、GPS機器、自動車、テレビなどを修理する人は、もっと深く理解する必要があります。それでも、そのような人々も浅い理解だけが必要です。彼らは、すべての詳細を知る必要はありません。テレビや自動車についてはほぼすべてを学ぶことは確かに可能であり、必要ならば学ぶことができます。しかし、そのような深い理解は普通は必要なく、そのため、私達のほとんどが、日々の活動を浅い理解だけで行うのです。

同様に、ソフトウェア開発における無知というのは、私達が少なくともほとんどの場合に浅い理解にだけ頼ることができることを意味しています。「選択的無知」という用語は、ここでは何を私達が深く知り、何を深く知る必要がないかを積極的に選択することを意味しています。それが、「選択的無知」(この本の残りの部分では単に「無知」と呼んでいます)が全体として積極的な用語である理由です。

この記事のもとになった書籍
APIデザインの極意 Java/NetBeansアーキテクト探究ノート

Jaroslav Tulach 著/柴田 芳樹 訳
価格:3,200円+税
発売日:2014年05月23日発売
ISBN:978-4-8443-3591-7
発行:インプレスジャパン

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

なぜ、設計の良くないAPIを持つソフトウェアが量産されるのでしょう。エンジニアが良いAPI・悪いAPIについて分かっていない、あるいは、適切なレビューを受けていないからかもしれません。本書では、NetBeansアーキテクトの著者が遭遇してきた様々な誤りを解説し、APIの発展を考慮した設計について詳しく説明。あまり語られることがなかったAPI設計について、貴重な10年間の経験をベースに幅広くノウハウを披露。API設計の技術や知見の水平線を押し広げることができる稀有な一冊です。

Amazon詳細ページへImpress詳細ページへ

著者
Jaroslav Tulach(ヤロスラフ・ツゥラッハ)
NetBeansの生みの親で、初期のアーキテクト。NetBeansは当初、Java統合開発環境として開発され、現在はJavaScript・Ruby・PHP・C/C++などにも対応。今も、オープンソースプロジェクトで開発が続けられている。著者は、NetBeansを支える技術の生みの親として、このオープンソースプロジェクトの成功に貢献。現在も、プログラマーの設計スキルを向上させる新たな方法を探求しつつ、このプロジェクトに参加している。
著者
柴田 芳樹(しばた よしき)
1959年生まれ。九州工業大学情報工学科で情報工学を学び、1984年同大学大学院で情報工学修士課程を修了。以来、様々なソフトウェア開発に従事。ゼロックス社のパロアルト研究所を含め、5年間米国に駐在してソフトウェア開発に携わる。現在はソフトウェア開発、教育、コンサルテーションなどを業務としている。 本書の翻訳を担当。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています