By WOCinTech Chat

プログラマー向けのQ&Aサイト「Stack Overflow(スタック・オーバーフロー)」にある4000万件以上の質問・回答を分析して、質問の中で引用された回数の多い書籍、つまりは「プログラマーに最も信頼されている書籍」が、以下のサイトでランキング形式で公開されています。

Top mentioned books on stackoverflow.com

http://www.dev-books.com/



ページ上部では以下のようにタグが選択できるようになっており、「JavaScript」「C」といったプログラミング言語や、プログラミング関連の単語が表示されています。これらをクリックすれば指定した単語に関する話題で多く引用された書籍が表示されます。また、タグの下には検索ボックスがあるので自分で検索ワードを入力することも可能。



というわけで、スタック・オーバーフローの中の質問と回答の中で最も多く引用された書籍トップ10は以下の通り。

◆01:レガシーコード改善ガイド (Object Oriented SELECTION):引用回数309回



あなたは、Javaや.netでレガシーコードを書いていませんか?

本書は、システム保守の現場でありがちな、構造が複雑で理解できないようなコードに対する分析手法・対処方法について解説します。つまり、コードを理解し、テストできるようにし、リファクタリングを可能にし、機能を追加できるテクニックを紹介しています。レガシーコードとは、メインフレームのアプリケーションのことではなく、変更することが困難なコードを指しています。著者は、本書で「私にとって、テストがないコードはレガシーコードだ」「テストコードがあれば振舞いを変えても、すばやく変更、確認することができる。もし、テストコードがなければ振舞いを変更しても、それが正しいのか、悪いのか判断できない」「ソースコードがきれいで、良い構造であれば十分か?そうではない。もし、テストコードなしで大幅な修正を加えるとしたら、信じられないほどのスキルと明確な理解が必要になる」と述べています。本書はJava、C、C++でサンプルを記述していますが、記載されているテクニックは言語依存するものではないため、他の言語(Delphi、Visual Basic、COBOL、FORTRAN)でも使えます。


◆02:オブジェクト指向における再利用のためのデザインパターン:引用回数277回



オブジェクト指向における再利用のためのデザインパターン

建築の発想を持ち込む

オブジェクト指向はソフトウエア開発の手法として誕生したが,ほかの分野にも広がりつつある。その一つとして注目すべきなのが「デザイン・パターン」の登場である。

デザイン・パターンとは,オブジェクト指向でソフトウエア設計を行う際に利用するカタログ集である。例えば,経験豊かなプログラマは以前に解いた問題と,これから新しく解こうとしている問題が類似していることに気づけば,以前に使った解法が応用できる。デザイン・パターンとはこうした解法をだれでも再利用できるように一般化(パターン化)したものの寄せ集めと考えればよい。

この考え方と実現手法は,一般にGoF(Gang of Four:4人組)本と呼ばれる本書で有名になった。GoF本は建築家のクリストファー・アレグザンダーがまとめた都市計画のカタログ集『時を超えた建設の道』(鹿島出版会)に強い影響を受けている。この点はたいへん興味深い。オブジェクト指向の導入で,ソフトウエアの世界においても建築学のように,構造をパターン化できることを示しているからだ。


◆03:Clean Code アジャイルソフトウェア達人の技:引用回数256回



書籍の内容を知る上で、「さらにコードを洗練させるために読む本」というレビューが参考になります。

オブジェクト指向の原則やデザインパターンを駆使して

実際一行一行のコードを書く際にどのような判断を下すべきか、

その職人芸とも呼べる技術を学べる良書です。

オブジェクト指向の原則(SRPやOCPなど)やデザインパターンの

知識をある程度前提としています。

著者も書いているように、「アジャイルソフトウェア開発の奥義」

の続編ととらえると良いです。

著者の経験から、理解・保守・拡張しやすいコードを書くための

ノウハウをコードをリファクタリングしながら一つ一つ解説しており、

非常にためになります。

この本の良い点は、著者の豊富な経験に基づいた考えを学びながら、

賛成したり反対したり深く考えさせられたり、、、

それを繰り返してコードのクオリティに関する哲学を磨けることです。

正直、コードは後に進むに従い膨れ上がって難易度も増すので大変です。

しかし、信じて読めば得るものは大きいです。

その点は前記「アジャイルソフトウェア開発の奥義」と同じです。

印象に残った考えをいくつか挙げておきます。

・関数は、何らかの処理を行うか、何らかの応答を返すかの

 どちらかを行うべきで、両方を行ってはなりません。

・プログラマは基本的にコメントをメンテナンスする能力がありません。

 コメントは長い時間を経て嘘になるため、コメントに時間を費やすより

 解説的なコードを書くことに時間を費やしましょう。

・関数の第一規則は、小さくせよ。第二の規則は、さらに小さくせよ、です。

 20行を超えるような関数はほとんどあってはなりません。


◆04:Java並行処理プログラミング ―その「基盤」と「最新API」を究める―:引用回数201回



マルチスレッドで失敗しないために」というレビューが参考になります。

ずっとサーバーサイドをやっていたのですが、非同期の処理はコンテナまかせで、マルチスレッドで悩むことはほとんどありませんでした。最近、普通のクライアントプログラムをいくかつくったのですが、「複数のタスクを同時に実行して全部の結果を得るまで待つ」「バックグラウンドで実行して処理過程をGUI部品に表示する」といった処理にけっこう骨をおりました。その後この本に出会いましたが、先に読んでおけばよかったと激しく思いました。

マルチスレッドプログラムで注意すべき点から、Concurrent APIの使い方までマルチスレッドプログラムを書く人は必見ではないでしょうか。なお、本書はやや難しいかもしれないので、初心者の方は「Java言語で学ぶデザインパターン入門 マルチスレッド編」(こちらもオススメ)などから読まれてもいいかもしれません。


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



ソフトウェア開発コミュニティでは、ドメインモデリングがソフトウェア設計の中心であることが広く認められてきています。ドメインモデルを通して、ソフトウェア開発者は豊富な機能を表現し、それをユーザの要求に本当の意味で応えるソフトウェアの実装に移すことができます。しかし、明らかに重要であるにもかかわらず、効果的なドメインモデリングをどのようにソフトウェア開発プロセスに組み入れるかを説明する、実用的なリソースはほとんど存在しませんでした。ドメイン駆動設計はこの要求に応えるものです。これは具体的な技術についての本ではなく、読者にドメイン駆動設計への体系的なアプローチを提示するものです。設計のベストプラクティスの応用的なセット、経験に基づくテクニック、さらに、複雑なドメインに直面するソフトウェアプロジェクトにおける開発を容易にする基本原則を紹介する一冊です。


◆06:JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス:引用回数178回



「JavaScriptは言わばひとかたまりの大理石であり、私はその中からこの言語のすばらしい本質が現れるまで、美しくない機能を取り除いていく。最終的に私が削り出すことになる美しいサブセットは、より信頼でき、読みやすく、メンテナンスがしやすく、すべてにおいて非常に優れた言語になると私は信じている。」(「1章 良いパーツ」より)―本書は、JavaScript言語の「良いパーツ」に注目し、良質なコードを書くためのポイントを示唆する。「良いパーツ」を通してJavaScriptを再評価することで、見落とされていたJavaScript言語の本質が見えてくる。


◆07:エンタープライズアプリケーションアーキテクチャパターン:引用回数173回



オブジェクト開発を経験した技術者が、アーキテクチャを理解しないまま開発を行うために、エンタープライズアプリケーション開発では共通の失敗がしばしば生じます。本書は、エンタープライズアプリケーション開発者が直面するやっかいな課題に対する直接的な回答を示したものです。技術は変化(SmalltalkからJava、.NET、CORBAまで)していても、共通の問題を解決するために同じ基礎的な設計の考え方を適用することができるのです。本書は40以上のパターンを紹介しています。これらは、エンタープライズアプリケーションプラットフォームに適用可能な解決策です。前半は、エンタープライズアプリケーションの開発についての短いチュートリアルです。後半は、各パターンについて詳細に解説しています。各パターンは、JavaまたはC#でコード例を詳述し、使用法および実装について説明します。概念についても、豊富なUMLダイアグラムで例証します。


ただし、カスタマーレビューには「どんなに英語が苦手でも原書を入手すべき」「訳業のせいで星1つですが、原著は文句なしの5つ星です。」とあり、翻訳に難があるものの原書の素晴らしさはお墨付きのようです。

◆08:Code Complete 第2版 完全なプログラミングを目指して:引用回数154回



本書は効果的なコンストラクションプラクティスについての知識を集めた、実践的なプログラミング解説書です。ソフトウェア開発プラクティスは目覚しい進歩を遂げていますが、一般のプログラマにはなかなか浸透しません。本書は、業界の第一人者らの知識と、一般の商用プラクティスとの橋渡しをします。10年前の第1版とコンセプトは同じですが、第2版は、全体を通じてオブジェクト指向の考え方が反映されたものになっています。また、「リファクタリング」の章が追加され、サンプルコードはC++、C#、Java、Visual Basicなどにアップデートされています。本書は、ソフトウェア開発の総合ガイドを求めている経験豊富なプログラマ、経験の浅いプログラマを教育する技術指導者、正式なトレーニングを受けたことのない独学プログラマ、これから社会に出る学生や新人プログラマなどを特に対象としています。本書で説明されている研究成果や過去の経験は、高品質なソフトウェアを作成し、問題を少なく抑えて作業をより短期間で行うのに役立ちます。また、大きなプロジェクトを制御し、要求の変更に応じてソフトウェアの保守や修正を適切に行うのにも役立ちます。


電子書籍版が1万800円で、単行本版は巻に分かれており、それぞれ6588円です。

◆09:新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES):引用回数148回



日本では新装版が販売されており、「旧版を読んでいないJavaプログラマーは必読物です。開発チーム内での回し読みや読書会の題材にすることをオススメします。」というレビューがあるほどオススメされています。

基本的な内容は「リファクタリング―プログラムの体質改善テクニック」とほぼ同様ですが、

オリジナルの訳者による丁寧な見直しが新装版にも反映されています。

まだ全て読み終わってはいませんが・・・

(旧版との比較を厳密にしながら読み進めているわけではないですが・・・)

旧版はもう販売していませんので、多くの方に購入する機会をとの考えで新装版を発売されたそうです。

新装版の目玉は、付録「 Java のバージョンアップに伴うリファクタリングをめぐる環境の変化」です。

旧版出版以降のJavaとそのテスティングフレームワークの進歩の記載があります。

対象となるJavaは7までとなっています。

Javaとそのテスティングフレームワークの進歩の記載の後に、その進歩を反映して、

本書に含まれるコードを再びリファクタリングしています。実際にはジェネリック等が取り扱われています。

この部分が新装版の最も注目されるべき箇所であると思います。

本書が全面的にJava7に対応されていないことについては不満がありますが

今後は、Oracleは今までと違ってJavaの言語仕様の強化に注力して行くことが見えていますし

既にJava8でかなりの変更があったといえ、付録の再リファクタリングで十分に新装版の意味はあると考えます。


◆10:Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本:引用回数140回



初めて学ぶ方、過去に挫折した経験のある方、知識を確固たるものにしたい方を対象に、イラストや写真を使ってやさしく楽しく解説する人気のHead Firstシリーズのデザインパターン編。刺激的なレイアウト、思わず膝を叩く見事なたとえ、引き込まれる小話、楽しいクイズやパズルで飽きることなく読み進むことができます。複雑難解なデザインパターンの概念が面白いほどよくわかる、目からウロコの画期的な書籍です。