2013年度・お勧め書籍 13冊

昨年までに続いて、今年のお勧め書籍を紹介します(※今年の新刊ということではなく、過去に発売されたもの全てが対象です)
今回も 1冊増えて、13冊です。 同一シリーズのものは 1冊とカウントしているので、本当はもう少し多いですが。
なお、選考した 13冊は、1位〜13位というように順位付けしている訳ではありません。

選出の対象となる本は、当サイトで現在までに公開している内容に合わせたものとなっています。 具体的には、以下のようにジャンル分けし、各ジャンルから最低1冊ずつ選定しています。

できる限り、当サイトで扱っていないジャンルの知識を必要としない本を選出しています。 例えば、「Java でアルゴリズムとデータ構造を解説している良書」があったとしても、当サイトは Java を扱っていないので除外されていますし、 「Windowsプログラミング」に .NET関係の本は含まれていないということです。

1.本当は怖いC言語

書名 本当は怖いC言語
レベル 初級
ジャンル C言語
出版日 2012年3月
ISBN 978-4798032627

C言語を正しく理解できる、基礎固めの良書。

C言語の全体像を順番に学んでいく、一般的な教科書スタイルになっています。 初級レベルですが、初めての本としてはちょっと難しいかと思います。

実際にエラーとなる例を幾つも挙げており、そういったことも実際に試しながら進めていく点が、他の本との大きな違いです。 こういった実験(本の中では「恐怖実験」と呼ばれています)を実際に行ってみることで、 理解が深まり、実際のプログラミングの中で起きる謎めいたエラーにも対処できるようになるでしょう。
初級レベルの本にしてはページ数が多めですが、1つ1つの説明が非常に丁寧であるが故です。

本書は、Windows、OS X、Linux の各環境に対応しています。 しかし、Visual Studio や XCode といった統合開発環境を使わず、 昔ながらの makefile を使った手法で、コンパイル、リンクの過程を踏むようになっています。
統合開発環境ではボタン1つで実行ファイルが出来上がり、ボタン1つで実行できますが、 その背後で何が行われているのかを理解するには、昔ながらの手法は有効です。

2.EffectiveC++

書名 Effective C++ 原著第3版
レベル 入門書レベルのプログラムを書けるようになったら
ジャンル C++
出版日 2006年4月
ISBN 978-4894714519

正しい C++プログラミングを理解するための必読書。

本書に書かれているガイドラインは、C++ を使っている限り、確実に理解しておかなければならない内容になっており、間違いなく必読と言えます。
本書を読む前に、まずは好みの入門書で C++ の概要を掴み、実際にプログラムを書いて動作を確認しておきましょう。
その後、本書を読み始めましょう。 オブジェクト指向プログラミングの考え方などで躓くでしょうが、それでも構わないので、本書で C++ の正しい書き方を学びましょう。 本書の理解だけでも1〜2年は掛かると思います。 何度でも読み返し、とにかく真似をしながら、小規模のプログラムをたくさん書きましょう。
オブジェクト指向プログラミング自体の考え方は、本書よりも更に後で学習した方が良いと思います。 そうでないと、現実に即して考えられないはずです。

本書を読んだかどうか、そして実践できているかどうかで、C++プログラムの質は大幅に向上するでしょう。 同じことを繰り返しますが、C++ を使っている限り、本書の理解は必須事項だと考えていいです。

去年、正式に標準規格となった C++11 には対応していませんが、 本書の内容は C++11世代でも基本事項として抑えておくべきものだと思います。

なお、出版社が、技術書事業から撤退したため絶版となってしまいましたが、 2014年に、別出版社より再版される予定になっています。

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

書名 C++ のための APIデザイン Kindle版
レベル 中級者〜
ジャンル C++
出版日 2012年11月
ISBN 978-4797369151

API設計を扱った数少ない本。

本書はタイトル通り、C++ による API設計を扱う本です。 つまり、他人に使ってもらうクラス群、関数群をどのように作っていけば良いかを解説しています。 このテーマに絞られた本はほとんど存在しないので、貴重な本と言えるでしょう。

API設計には考慮しなければならないことが数多くあります。 API使用者とのインタフェース部分の設計、分かりやすいドキュメントの作成、バージョンの管理(前後のバージョンとの互換性)、性能、テストの仕方など。 これらの話題が網羅されています。
1つ1つの話題に割かれているページ数は、それほど多い訳でもありませんが、 参考文献が豊富に紹介されているので、興味のある部分はそれらの文献にも当たってみると良いと思います。

実は、API設計に限らず、どんな種類のプログラミング作業においても有益な内容が多く、 どの立場からでもお勧めできる内容になっています。

4.Perlベストプラクティス

書名 Perlベストプラクティス
レベル 中級者〜
ジャンル Perl
出版日 2006年8月
ISBN 978-4873113005

Perl で良いコードを書くためのガイドライン。

本書の内容は、C++プログラマであれば、 Effective C++C++ Coding Standards の Perl版といえば分かりやすいでしょう。 ( Effective Perl は別にありますが、ちょっと古いです。 洋書 なら新しいものがありますが)
Perl において、バグを生みにくく、効率的で、保守性の高いコードを書くためのガイドラインです。 Perl である程度の規模の大きいプログラムを書くことがあるのなら、本書の中から幾つもヒントを得られるでしょう。
なお、本書が扱う Perl のバージョンは 5.8世代で、より良くなる状況下では CPAN のモジュールも積極的に使われています。

Perl は、ちょっとした数行のコードのために使うことも多い言語だと思いますが、 その程度の規模では、本書の内容を必要としないかも知れません。
しかし、今後長く使われ続けるツールの作成などに Perl を利用するのなら、 将来、保守・改造を行うことになる人のためにも(それは自分自身かも知れません)、良いコードを書きましょう。 特に、Perl4 世代のような古い形式のままコードを書き続けている人は、是非、より堅牢な新しい手法を学ぶべきです。

この手の本はどれでもそうですが、それぞれのプラクティスに対して、「なぜそうすると良いのか」を理解することが重要です。 この本には、それもしっかり書かれていますから、自分の状況に合わないものを無理に受け入れる必要はありません。 複数人での開発に使うのなら、コーディングルールを議論する叩き台として使うのが適切かと思います。

Perl 以外の言語を使う人であっても、Perl が分かる人であれば、本書は良い内容です。 ただし、Perl初心者には難しいと思います。

5.APIで学ぶ Windows徹底理解 / APIで学ぶWindowsプログラミング

書名 APIで学ぶ Windows徹底理解
レベル 初級〜中級
ジャンル Windowsプログラミング
出版日 2004年4月
ISBN 978-4822228262
書名 APIで学ぶWindowsプログラミング
レベル 初級〜
ジャンル Windowsプログラミング
出版日 2010年6月
ISBN 978-4822228491

Windows の動作の仕組みを理解するための本。

「APIで学ぶWindowsプログラミング」は、「APIで学ぶ Windows徹底理解」の続編という位置付けです。
2冊とも、元々は雑誌の連載記事だったものを再編集したものです。 丁寧で詳細であり、入門レベル程度の記事に見えますが、実際には結構深いところまで扱われています。 図表も豊富で分かりやすいです。

Windowsプログラミングで、Windows API を直接使う機会は随分と減っています。 今なら、.NET Framework がありますし、Windows 8 では WinRT という新たな API も使えます。
しかし、Windows の動作原理を知るには、やはり Windows API のレベルで触ってみることは有効です。 Windows API のレベルで解説された本は、Windows2000 辺りの時代以降は(.NET の登場以降)、 ほとんど出版されていないので、この2冊は現代に近い視点で解説してくれている貴重な資料です。

「APIで学ぶ Windows徹底理解」の方は、API を通して、Windows の動作の仕組みを理解することが目的となっています。 メモリ、プロセス、ファイル管理、DLL、デバイスドライバといった重要な機能もきちんと扱われています。 描画周りを扱っていない点が気になるところでしたが、「APIで学ぶWindowsプログラミング」の方で、ごく簡単ではあるものの扱われています。

「APIで学ぶWindowsプログラミング」の方は、実際に Windows API を使って、簡単なゲーム(15パズル) と、バイナリエディタを作る流れを解説しています。 いずれも多くのページを割いて丁寧に解説されており、Windows API による Windowsプログラミングの感覚をつかむのには十分な内容だと思います。 Windowsプログラミングの経験が少ないのなら、こちらから読んだ方が入りやすいかも知れません。

6.定本 Cプログラマのためのアルゴリズムとデータ構造

書名 定本 Cプログラマのためのアルゴリズムとデータ構造
レベル 初級〜
ジャンル アルゴリズムとデータ構造
出版日 1998年3月
ISBN 978-4797304954

アルゴリズムとデータ構造の基礎を学ぶベストセラー。

ソートやサーチ、スタックやリスト構造、木構造といった、アルゴリズムとデータ構造の基礎をC言語を使って解説しています。 また、後半では正規表現やメモリ管理のアルゴリズムのような高度な内容も取り上げています。

文章量は多いですが丁寧で、図解も多用されており、 実際のプログラムコードも小さい単位(今説明している箇所だけを実装した関数、といった単位)で掲載されています。 文章量が多いのは、プログラムの中身を丁寧に解説した結果です。
アルゴリズムとデータ構造の性能を評価するのに重要な、計算量についても、詳細に説明されており、 入門書と言えども、ごまかしの無い良書です。

本書を読むにあたって、C言語の基礎は理解できていたほうがいいでしょう。 特に、C言語でデータ構造を表現するには、ポインタや構造体が必須なので、これらの理解が必要です。 C言語でプログラムが書けるようになった後、本書に進むのが順当な流れだと思います。
C言語に馴染みの無い人には、同著者による Java版 もあるので、こちらを当たってみるのも良いでしょう。 扱っている内容は同一のものになっています。

現在では、ほとんどのプログラミング言語には、標準ライブラリや言語仕様の一部として、 アルゴリズムとデータ構造を簡単に使える環境が整備されているため、 あまり、この分野を勉強しない人も多いと思います。
しかし、アルゴリズムとデータ構造を学習することは、プログラミング能力の向上につながります。 ほとんどの場合、新しいアルゴリズムを考案する必要がある訳ではありません。 本書が扱っているような基礎的な部分をしっかり理解しておくことの方が重要です。

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

書名 オブジェクト指向における再利用のためのデザインパターン 改訂版
レベル 中級〜
ジャンル オブジェクト指向プログラミング
出版日 1999年10月
ISBN 978-4797311129

GoF によるデザインパターンのバイブル。

GoF (Gang of Four) とは、オブジェクト指向プログラミングにおける設計手法を、23 のパターンとしてまとめあげた4人の人物の総称のことです。 このパターンのことをデザインパターンと呼びます。
本書は、この GoF のデザインパターンを本人達が記したバイブルです。

説明には C++ が使われおり、部分的に Smalltalk が登場します。 また、付属の CD-ROM には、紙面にあるサンプルコードを Java に直したものが収録されていますが、これは GoF の手によるものではありません。
本書のデザインパターンのカタログの部分は、付属CD-ROM に HTML形式で収められていて、Webブラウザ上で見られるようになっています。 むしろ、こちらの方が見やすいかも知れないので、1度確認してみると良いと思います。

最早、オブジェクト指向によるプログラミングは常識化している現在にあって、GoF のデザインパターンは古典の域に達しているかも知れません。 現代的には、これらのパターンだけでは足りないとか、分類の仕方が古いなどとも言われていますし、 実際、GoF のメンバーは、改めてパターンをまとめ直そうとしているようです。
それでも、多くのプログラマにとって共通理解となっていることもあるほど、GoF のパターンは広く浸透しているので、 やはり、知らないでは済まないでしょう。

記述は決して易しくはありませんが、 各パターンが必要となる動機、パターンが適用できる箇所やできない箇所、適用する場合の問題点などを完全に網羅しており、価値ある文献でしょう。
しかし、読みにくく理解しづらいのも事実です。 もっと噛み砕いて分かりやすく書かれている本もたくさん出ていますから、自分に合った副読本を先に当たった方がいいかも知れません。 (圧倒的に Java を使ったものが多いので、C++プログラマはほとんど選択肢がありませんが、いい機会だと思って Java を触ってみるのもいいでしょう)

8.プログラミング作法

書名 プログラミング作法
レベル 適当な言語でプログラムが書けるようになったら
ジャンル プログラミング全般
出版日 2000年11月
ISBN 978-4756136497

正しいプログラミングを学ぶ良書。

コーディングスタイルから、設計、テスト、デバッグ、パフォーマンス、移植性といったように、 プログラミングに関するノウハウが集められています(ただし、オブジェクト指向周りはあまり記述がありません)。
それぞれの話題は、30ページ程度の分量にコンパクトにまとめられています。

C言語、C++、Java、Perl、Awk といったように幾つかのプログラミング言語でのサンプルコードが登場しますが、 特定の言語に固有の知識はそれほど必要になりません。 実例を示すために特定の言語が使われているという程度であり、本質はどの言語でも同一です。 何か1つの言語に関して、入門レベルを卒業している程度の素養があれば、読み進めることは可能でしょう。

本書の2人の著者は、どちらも偉人と呼ぶにふさわしい存在です。
Kernighan は、K&R(「プログラミング言語C」のこと) の K の方です。 Pike は、UNIX の開発に関わり、テキストエディタ、プログラミング言語、ウィンドウシステムなど様々な実績を持っています (参考:Wikipedia)。
そんな2人の経験と考察をコンパクトにまとめた本書の価値は、ほとんどの類書と比較にならないほどでしょう。 幸い、日本語訳も最高の出来です。

新人プログラマに特にお勧めできる本です。 良いプログラムを考える癖、良いコードを書く癖を、早いうちに身につけておきましょう。
また、新人でなくとも、毎年毎年読み返してみるだけの価値がある本だと思います。

9.珠玉のプログラミング

書名 珠玉のプログラミング
レベル アルゴリズムとデータ構造の入門書レベルを終えてから
ジャンル プログラミング全般
出版日 2000年10月
ISBN 978-4894712362

問題の本質を見抜き、適切な解決方法を選び出す力を養う本。

本書の内容は、全体的に言えば、少ないメモリで最高のパフォーマンスを上げるアルゴリズムとデータ構造を探り出すことに集中しています。 ちょっとした発想の転換で、少ないメモリで最高のパフォーマンスを上げることが可能であることを教えてくれます。 これまで効率のことを考える習慣の無かった人は、新たな気付きを得られることでしょう。

難しい数学の話題が出てくる訳でもありませんし、登場するアルゴリズムとデータ構造の種類も入門書レベルのものばかりです。
コード例のほとんどは擬似コードで表記されていますが、 難しくはないので、自分の知っている具体的なプログラミング言語に置き換えることは容易だと思います。

いきなりプログラムを書き始めるのではなく、まず問題は何なのか定義することから始めましょう。 本書には、その思考過程も含めて、しっかり記述されています。 練習問題も豊富にあるので、自分でも同じようにやってみると良いでしょう。

何度でも読み返して欲しい一冊です。

なお、出版社が、技術書事業から撤退したため絶版となってしまいましたが、 2014年に、別出版社より再版される予定になっています。

10.コンピュータの構成と設計

書名 コンピュータの構成と設計 第4版 (上)
レベル 中級〜(素養がある分野についてはすぐにでも)
ジャンル コンピュータ知識
出版日 2011年11月
ISBN 978-4822284787
書名 コンピュータの構成と設計 第4版 (下)
レベル 中級〜(素養がある分野についてはすぐにでも)
ジャンル コンピュータ知識
出版日 2011年11月
ISBN 978-4822284794

ハードとソフトの両面から、コンピュータの構成を理解するための良書。

2人の著者(パターソン&ヘネシー)の名前を取って、「パタヘネ」の愛称で呼ばれている本で、この分野を学ぶための最高の良書です。 (今回は、Hennessy氏は関わっていないようですが…)
ちなみに「ヘネパタ」と呼ぶと「コンピュータアーキテクチャ」 という別の本のことを指すので、気をつけて下さい。

本書は、ソフトウェア開発者とハードウェア設計者の両方にとって、有用な内容となるように書かれています。 上巻の冒頭に、各話題がソフト・ハードのどちら向けの話題かの一覧表があります(なんだか見辛い表ですが)。 これを参考に自分にとって必要な情報が書かれているかどうか判断できます。
なお、基本的な事項は紙上に、発展的な事項は付属の CD-ROM に収められています。

解説は、MIPS というアーキテクチャ(基本的な設計思想)を元に行われていますが(幾つかの章では、他のアーキテクチャでの実例にも触れています)、 コンピュータの構成の本質を突く内容ですから、他のアーキテクチャを理解するためにも使える知識です。 概念や原理を理解することが重要であって、MIPS のことは実装例として見るという程度が良いと思います。

数年ごとの改訂を重ね、本書は 2008年出版の第4版を翻訳したものです。 第3版と比べると、並列処理、グラフィックス周り (GPUコンピューティング) の話題が大幅に増加しています。
そのほかの部分も全体的に徹底した見直しが図られ、整理されています。 実例を取り上げる箇所でも、より新しい題材に差し替えられています。

11.ディジタル作法

書名 ディジタル作法
レベル 初級
ジャンル コンピュータ知識
出版日 2013年2月
ISBN 978-4274069093

情報リテラシーを身に付ける本。

サブタイトルに "カーニハン先生の「情報」教室" とあるように、著者はあの有名なカーニハン氏です。 「プログラミング作法」の著者でもありますし、C言語の世界で「K&R」といったときの「K」の方です。 人によっては、カーニハン先生の著作というだけで買いでしょう。

本書は、専門知識を持ち合わせていない人達にも理解できるように、現代の情報技術を総ざらいしたものです。 ですから、プログラマでない人も対象者に含まれています。
コンピュータの動作の仕組みや、ネットワークの仕組みを扱ったり、 JavaScript を使って、Webブラウザ上で動く簡単なプログラムを作ってみたり、 世間を騒がすセキュリティ問題や、著作権問題を扱ったりと、 情報技術に囲まれて生活している我々現代人ならば知っておきたい基礎知識を丁寧に解説しています。

本書の内容はすぐに古くなるだろうと書かれていますが、やはり基本原理は当分は活きるものだと思います。 特に、自分の基礎知識に不安のある方は一読してみると良いでしょう。

12.プログラマの数学

書名 プログラマの数学 Kindle版
レベル 初級
ジャンル 数学
出版日 2005年3月
ISBN 978-4797329735

全プログラマに必須の数学的思考を身に付ける本。

数学のジャンルとしては、離散数学に当たるでしょうか。 コンピュータサイエンスの根幹を成す、重要な分野です。
何だか難しそうに聞こえますが、本書は、数学が苦手でも敬遠する必要はありません。 非常に易しく丁寧な説明になっており、ほとんど前提知識を必要としません。

本書は「数学」を勉強するための本ではなく、「(プログラマに必要な)数学的思考法」を勉強する本です。 本書を「数学」の参考書のようなつもりで読んで、低い評価を下す人を見かけますが、そういう本では無いと思います。

タイトルに「プログラマの」とありますが、実際のプログラムコードはほとんど登場しません。 また、数式も最小限しか登場しません。 思考の過程が詳細に書かれていますから、じっくり読み進めて下さい。

多分、数学が得意な人や、離散数学(あるいは情報工学、計算機科学のようなもの)の教育をきちんと受けた人には物足りないレベルだと思います。 そうでなくとも、分かっているつもりになって読み飛ばしてしまう人もたくさんいると思います。
しかし、前述したように、本書で重要なのは「思考法」ですから、 本当に自分が「思考」できているかどうか振り返ってみるといいでしょう。

13.プログラマが知るべき97のこと

書名 プログラマが知るべき97のこと
レベル 初級
ジャンル プログラマ読み物
出版日 2010年12月
ISBN 978-4873114798

世界で活躍するプログラマ達による、プログラマのためのエッセイ集。

本書はエッセイ集であり、何らかの技術や知識が体系的にまとめられたものではありません。 ほとんどが見開き2ページに収められており、ちょっとした隙間の時間にでも適当なページを開いて読んでみるのもいいでしょう。

プログラマとしてあるべき姿、勉強法、ツールの使い方やテクニックなどなど。 世界の現場で、あるいは個人のプロジェクトで活躍してきた先人達のノウハウが詰まっています。
読み進めてみると、同じキーワードが繰り返し登場することに気が付くかも知れません。 そういった事柄は、現代のプログラマにとって、確実に重要なテーマであるはずですから、 より深く勉強してみるのも良いでしょう。

本書は翻訳版ですが、この日本語版では新たに、日本人プログラマの記事10本が追加されています。 なお、英語版は無料で読めます

また、同シリーズに 「ソフトウェアアーキテクトが知るべき97のこと」「プロジェクト・マネジャーが知るべき97のこと」「ゲームクリエイターが知るべき97のこと」「ゲームクリエイターが知るべき97のこと 2」 があります。 それぞれ、ご自分と関わりがあれば一読をお勧めできます。

総括

いかがでしたでしょうか?

今年は、「C言語入門」に代わり「本当は怖いC言語」が加わり、 新規で「ディジタル作法」を追加しました。

C言語入門」は、良書ではあるものの、やはり古くて取っつきにくいかと思い、 2012年発刊の「本当は怖いC言語」に置き換えてみました。 Windows、OS X、Linux に対応しており、現代の PC環境で試しやすいかと思います (でも、あえて昔ながらの手法を使うことで理解を深めようと試みています)。
ディジタル作法」は、有名な著者による、情報処理全般に関する良い入門書です。

また、「プログラマが知るべき97のこと」のシリーズに、今年新たに、 「ゲームクリエイターが知るべき97のこと 2」 が加わっています。


当サイトは、今年初めは去年に引き続き、アルゴリズムとデータ構造編を進め、 旧サイトで扱った内容を網羅するに至ったので、一旦の終了としました。
その後、C++編を始めました。今回は最新の C++11 についても言及するようにしています。 また、C言語編では、C99 へも対応する運びとなりました。


最後に、今年1年に起きた関連のある出来事について触れて終わりにします。

ピアソン桐原が、技術書の取り扱いを終了するという告知がありました。 ピアソン・エデュケーションという名前で出版されていた本も、どうやら同じ扱いのようです。 この出版社から出ている技術書は本当に数多く、良書も多く含まれているため、結構騒ぎになりました。 例えば、今年の 13冊の中では、「Effective C++」「珠玉のプログラミング」が該当します。
一部の書籍のみ、丸善出版が再出版するというお知らせもありました(⇒リンク)。 「Effective C++」「珠玉のプログラミング」も入っています。

一方で、電子書籍化される技術書も増えてきています。 今年の 13冊で言えば、「C++ のための APIデザイン」「プログラマの数学」は、 今年になって、Kindle版が公開されました。 Kindleストアで販売されている電子書籍は、専用のアプリをダウンロードすれば iPad でも見られますから、 必ずしも Kindleシリーズのデバイスを購入する必要はありません。

最新の C++規格である C++11 の全機能を、世界で初めて clang というコンパイラが完全実装しました。 ようやく理論上ではなく、現実のプログラミングの中で C++11 をフルに活用できるようになりました。 ちなみに、各コンパイラの対応状況はこんな感じです
なお、C++ の規格の今後もある程度見据えられていて、次は C++14 の予定です。 更にその先、C++1y という仮称で呼ばれているものも存在しています。 このように C++ は、急激に進化のスピードが速くなっています。 C++プログラマは、今後も注目していきましょう。

Perl は 5.18.1 になりました。5.14系はサポート対象外になっています。 ただ、セキュリティパッチのようなものは、5.12系以降には公開されるようです。 要するに、現状では最低でも 5.12系以降を使えということでしょうか。
当サイトの Perl の記事は、旧サイトのときに書いた 5.10世代のものなので、随分古くなってしまいました。 早いところ更新したいところですけど、需要あるのかな?

Windows 8.1 が発表されました。 このバージョンアップは、これまでの Windows におけるサービスパックのようなもので、 Windows 8 を持っていれば、無償でアップデートできます。
Windows 8.1 向けのストアアプリの開発には、これまた新たに発表された VisualStudio 2013 が必要になります。 VisualStudio 2013 になって、C++11 への対応度合もまた少し向上しているようです。


更新履歴

'2013/12/22 新規作成。



昨年のお勧め書籍へ

参考書籍のトップページへ

Programming Place Plus のトップページへ