自由課題

学んだり、考えたり、試したりしたこと。

インターフェイスを設計するために読んだ技術書まとめ

アーキテクトの(機能面での)主要な仕事の1つに、システムを構成するサブシステム/コンポーネントの境界、つまりインターフェイスを決める、というものがあります。またはそこまで大げさに捉えなくても、例えばライブラリのAPIを設計する、というのは単にプログラミングをする、ということとは少し違う視点が求められるように思います。

案外インターフェイスを考えるという観点での技術書まとめがないような気がしたので、需要があるかわかりませんが関連して読んだ本を紹介しておきます。なお、個人的なキャリア上、C++/Javaが対象です。(色々経験したら随時追加するかも知れません)

何か他にいい本があったらぜひ教えてください。

言語仕様をきちんと知る

まずはAPIを設計する対象言語をよく知る、ということは必要であると思います。これだけだと、結果的にプログラミングに精通するということとあまり変わりはないかも知れません。

少なくとも、アクセス指定子やconstもしくはfinalなどを適切に使いこなすことは必要です。もしフレームワークを作るのであれば、加えてテンプレート(ジェネリクス)やリフレクション、オブジェクトファイルやクラスの動的ロードなど、APIを利用するだけならあまり知らなくて良いところを知っておく必要があるのではないかと思います。

C++ プライマー 第4版 IT Architect’ Archive クラシックモダン・コンピューティング (IT Architects’ Archive―CLASSIC MODERN COMPUTING)

C++ プライマー 第4版 IT Architect’ Archive クラシックモダン・コンピューティング (IT Architects’ Archive―CLASSIC MODERN COMPUTING)

プログラミング言語Java (The Java Series)

プログラミング言語Java (The Java Series)

  • 作者: ケン・アーノルド,ジェームズゴスリン,デビッドホームズ,柴田芳樹
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2007/04
  • メディア: 単行本
  • 購入: 38人 クリック: 1,044回
  • この商品を含むブログ (73件) を見る

Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)

Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)

インターフェイスとはどういうものかを考える

下記の本は、インターフェイスを設計する、ということに力点を置いた書籍です。"インターフェイス指向設計"は、インターフェイスを考えるきっかけとして良い本だと思います。また、下の2冊は言語は違えど着目点は似ており、インターフェイスを設計する上での注意点やプラグインアーキテクチャを実現するための具体的な機構が載っていて有用でした。

インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践

インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践

C++のためのAPIデザイン

C++のためのAPIデザイン

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

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

Web APIを考える

基礎的なWeb関連の知識を学習するのであれば"Webを支える技術"を、基礎的な知識がすでにあるのであれば下の二冊のいずれかを選ぶのが良さそうな気がします。現状鮮度が高く内容が具体的という意味では"Web API: The Good Parts"は多数の有名サービスを分析しており参考になると思います。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Web API: The Good Parts

Web API: The Good Parts

アーキテクチャパターンを学ぶ

ライブラリの界面のような細粒度のインターフェイスではなく、サブシステム/コンポーネント界面を考えるようであれば、もっと俯瞰的にシステムを捉える必要があると思います。"ソフトウェアアーキテクチャ"は今となっては正直みんな知ってるような知識なのかも知れませんが、古典として改めて読んでみるのも良いかもしれません。

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented Selection)

エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented Selection)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)