2016年度・お勧め書籍 10冊

昨年までに続いて、今年のお勧め書籍を紹介します (※今年の新刊ということではなく、過去に発売されたもの全てが対象です)

いつものように、同一シリーズのものは 1冊とカウントしているので、実際には 10冊より少し多くなっていますが。
なお、選考した書籍は順位付けしている訳ではありません。 何となくジャンル順に並べているだけで、順序に深い意味はありません。

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

できる限り、当サイトで扱っていないジャンルの知識を必要としない本を選出しています。 例えば、「Java でアルゴリズムとデータ構造を解説している良書」があったとしても、 当サイトは Java を扱っていないので除外されている、といった具合です。

1.本当は怖いC言語

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

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

C言語の全体像を順番に学んでいく、一般的な教科書スタイルになっています。 初級レベルではありますが、C言語の学習のために最初に手に取る本としては、ちょっと難しいかも知れません。
少々、前置きが長いので、本題が始まる Chapter5 (または開発環境の構築について説明している Chapter4) までは、 一旦読み飛ばしていいでしょう。ある程度、先に進んでから、戻ってきたらいいと思います。

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

本書は、Windows、OS X、Linux の各環境に対応しています。 しかし、Visual Studio や Xcode といった統合開発環境(IDE) をあえて使わず、 昔ながらの makefile を使った手法で、コンパイル、リンクの過程を踏むようになっています。
統合開発環境ではボタン1つで実行ファイルが出来上がり、ボタン1つで実行できますが、 その背後で何が行われているのかを理解することは大切です。 とはいえ、実践的には IDE を使う方が効率的なので、理解さえできていれば素直に IDE を使って良いでしょう。 (複数のソースファイルを使うようなプログラムでは、1度は makefile による方法を試すべきだと思います)。

2.プログラミング言語 C++ 第4版

書名 プログラミング言語 C++ 第4版 Kindle版
レベル 中級〜上級
ジャンル C++ (C++11世代)
出版日 2015年2月
ISBN 978-4797375954

C++ の生みの親による、C++11 時代のバイブル。

本書は、C++ の全体像を詳細に解説した、1360ページにも及ぶ大著です。 第4版ですが、前の版の加筆・修正という訳ではなく、完全な新作になっています。

非常に詳細かつ実践的な内容になっているので、初学者が読むのはかなり無理があると思います。 C++プログラミングに関して、ある程度の実践経験は必要でしょう。 C++11 で新たに追加された機能についても、基本的には特に断りなく解説されています。

流石に、1ページずつ順番に読み進めるのは相当大変ですが、リファレンス的に活用することができるので、 C++11プログラマは、入手しておくことをお勧めします。

なお、本書の第T部を抜き出した「C++のエッセンス」もあります。 ページ数が大幅に少なくなり、概要を掴む意味では価値があるかも知れませんが、別に初心者向けの解説になっている訳ではないので、ご注意下さい。 多少の加筆・修正が加えられているものの、本書を持っているのなら、ほぼ不要と言えます。

3.Effective Modern C++

書名 Effective Modern C++
レベル 中級者〜
ジャンル C++ (C++11/14世代)
出版日 2015年9月
ISBN 978-4873117362

C++11/14 に対応した、現代的な C++プログラミングの手法を学ぶための良書。

各言語(分野)におけるベストプラクティスを学べる、有名な「Effective」シリーズの1つで、 名著「Effective C++」 の続編に当たります。
「Effective C++」が、C++03 までの必読書であったように、本書も C++11/14時代の必読書と言える内容になっています。

C++ は、C++11 になって大幅に進化しました(対して、C++14 はマイナーバージョンアップです)。 多数の新機能はどれも、より良いコードを書くために重要なものであり、 C++11時代のベストプラクティスは、C++03 までのそれとは違ったものになります。

C++11/14 の機能がどんなものであるかについては、本書では解説していません。 すでに機能の内容は知っていることを前提としていますし、 更に言えば、C++03時代の作法についても理解があることも要求されているようです。
そのため、割と読み手を選ぶかも知れませんが、少なくとも、C++11/14 を実践的に使用する立場のプログラマは、 一読すべき本だと思います。

4.アルゴリズムを、はじめよう

書名 アルゴリズムを、はじめよう Kindle版
レベル 入門
ジャンル アルゴリズムとデータ構造(疑似言語)
出版日 2012年5月
ISBN 978-4844332015

アルゴリズム学習の導入書。

特定のプログラミング言語を用いず、擬似的なコードや、豊富な図を用いて、基本的なアルゴリズムを学べます。 解説も詳しく、図・イラストも見やすく分かりやすいので、導入として非常に優れた本だと思います。

あくまでも、アルゴリズムの動作を視覚的な方法で理解するところまでが本書の守備範囲なので、 理解できたら、実際のプログラミング言語で記述する練習をしてみると良いと思います。

5.アルゴリズムC・新版

書名 アルゴリズムC・新版
レベル 中級者〜
ジャンル アルゴリズムとデータ構造(C言語)
出版日 2004年6月
ISBN 978-4764903098

硬派なアルゴリズムとデータ構造の解説書。

探索や整列、スタックやキュー、リストや木構造といったように、アルゴリズムとデータ構造の基本的な部分を解説しています。 内容的には、アルゴリズムとデータ構造の入門書によくある題材です。 一から丁寧に書かれた模範的な教科書だと思いますが、入門用とするにはかなり難しく感じるでしょう。

文章がやや堅めで、訳語にも少々違和感を感じることがあります。 サンプルコードはこれ以上無いほど簡潔で(コメントもほぼ無いですし)、それ故にかえって読み解くことに苦労するかも知れません。
また、ページの端の列(左側のページなら左端、右側のページなら右端)に狭っ苦しく書かれた、実行の途中経過の例などの図解も、 正直、ちょっと分かりづらいと感じます。

そういった少々の読みづらさを差し引いても、本書は非常に良い内容と言えます。 1つ1つの題材について、詳しく検討、解説しており、基礎理論と応用の両面を学ぶことができます。

6.CODE COMPLETE

書名 CODE COMPLETE 第2版 上 Kindle版
レベル 中級〜
ジャンル ソフトウェア開発全般
出版日 2005年3月
ISBN 978-4891004552
書名 CODE COMPLETE 第2版 下 Kindle版
レベル 中級〜
ジャンル ソフトウェア開発全般
出版日 2005年3月
ISBN 978-4891004569

ソフトウェアコンストラクションに関する名著。

ソフトウェアコンストラクションとは、ソフトウェア開発に必要なプロセス全般のことを指した言葉で、 設計、コーディング、テスト、デバッグといった要素を含んでいます。

本書は、章ごとのテーマに沿って、所謂、ベストプラクティスを扱っています。 「こうすると、こういう観点から良い」「こうすると、こういう観点から良くない」といったことが、 根拠となるデータ、事例とともにまとめられており、説得力の高い内容になっています。 読み返すたびに新しい発見があると言う人も多く、それだけ豊富で詳細な価値ある本です。

本書は本当に評価が高く、10年以上前に書かれたものではあるものの、 今でも、プログラマ向けに推薦する技術書の筆頭に挙げられることが多い本です。 まだ読んだことの無い方は、是非、一読することをお勧めします。

なお、Kindle版には、上下巻を合わせた電子合本版があります。

7.ディジタル作法

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

現代人に必要な「情報」の基礎を身に付ける本。

サブタイトルに "カーニハン先生の「情報」教室" とあるように、著者はあの有名なカーニハン氏です。 C言語のバイブル的な書籍「プログラミング言語C」は、 2人の著者名から「K&R」と呼ばれますが、その「K」の方です。 また、プログラミング言語AWK の開発者の1人でもあり、この「K」もカーニハン氏です。
人によっては、カーニハン先生の著作というだけで買いでしょう。

本書は、専門知識を持ち合わせていない人達にも理解できるように、現代の情報技術を総ざらいしたものです。 ですから、プログラマでない人も対象者に含まれており、前提知識が無くても読み進められるようになっています。

コンピュータの動作の仕組みや、ネットワークの仕組みを扱ったり、 JavaScript を使って、Webブラウザ上で動く簡単なプログラムを作ってみたり、 世間を騒がすセキュリティ問題や、著作権問題を扱ったりと、 情報技術に囲まれて生活している我々現代人ならば知っておきたい基礎知識を丁寧に解説しています。

本書の内容の一部は、すぐに古くなってしまうだろうと書かれていますが、やはり基本的な部分は今後も活きるものだと思います。 特に、自分の「情報」分野に関する知識量に不安のある方は、一読してみると良いでしょう。

8.プロセッサを支える技術

書名 プロセッサを支える技術
レベル 中級〜
ジャンル コンピュータ知識
出版日 2011年1月
ISBN 978-4774145211

CPU とその関連技術についての詳細な解説書。

コンピュータを構成する技術の中でも、プログラマにとって特に重要な CPU についての解説書です。 基本的に、Intel社の x86系プロセッサを対象にしています。 また、CPU だけでなく、GPU、メモリ、仮想化といった重要技術にも触れられており、 コンピュータアーキテクチャに関して、全体的に学ぶことができます。

本書は、プログラムを行う人をメインターゲットに据えているとのことで、 性能を引き出すために必要な知識が得られるように書かれています。 特に、キャッシュメモリ、パイプライン、並列化、GPGPU といった辺りは、プログラマにとって非常に重要でしょう。
最新(といっても 2011年ですが)の実在する環境について触れられているので、理論だけでなく、現実が分かる本です。

なお、同著者による 「コンピュータアーキテクチャ技術入門」 が 2014年に出版されています。 こちらは、性能向上や省電力に関する話題が中心ですが、コンピュータアーキテクチャ全般について解説されていますから、 興味があれば、こちらも一読をお勧めします。

9.数学入門

書名 数学入門
レベル 中学〜大学
ジャンル 数学
出版日 2012年7月
ISBN 978-4480066664

基礎的な数学を学べるコンパクトな良書。

解説の方法、特に話の展開の手順に著者の工夫が見られます。 ピタゴラスの定理から、三角関数、座標、ベクトルへと展開する、最初の章だけでもなかなか引き込まれるものがありました。 その他、「関数」「微積分」「集合」など、基礎的かつ重要な題材を扱っています。

あなたが作るプログラムに、どれほど数学の知識が必要かは分かりませんが、 基礎的な部分ぐらいは理解したいと思うなら、新書スタイルでコンパクトな本書を当たってみてはいかがでしょうか。 安いですし、持ち運ぶのも楽で良いです。

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

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

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

本書はエッセイ集であり、何らかの技術や知識が体系的にまとめられたものではありません。 ほとんどが見開き2ページに収められているので、ちょっとした隙間の時間にでも適当なページを開いて読んでみるのもいいでしょう。
本書は翻訳版ですが、この日本語版では新たに、日本人プログラマの記事10本が追加されています。

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

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

なお、本書を含めて、このシリーズの本に掲載されたエッセイは、Web上で無料で読むことができます。 以下にリンクを掲載しておきます。

総括

いかがでしたでしょうか?
昨年、殿堂入りとなった「珠玉のプログラミング」「プログラマの数学」に代わり、 「アルゴリズムを、はじめよう」「数学入門」が加わりました。
(正直、今年はあまり本を読めていなくて、追加する本のネタが無くなって困りました。勿論、追加した本は良い本ですけど)

また、「プログラマが知るべき 97 のこと」は、今年で殿堂入りとなりました。 去年から、関連するシリーズ本も含めて、Web上で無料で読めるようになっていますから、是非、読んでみて下さい。


当サイトの今年は、古臭い C++03 を基本とした C++編の一旦の終了を目指していましたが、結局、達成できませんでした。 あと数章なのですが・・・。来年初頭は引き続き、書き進めていく予定です。


最後に、今年1年に起きた、当サイトと関連のある出来事について取り上げてみます。

今年、TIOBE Software による、プログラミング言語の人気調査(TIOBE Index。検索エンジンの検索結果から、どれだけ話題に上がっているか)で、 C言語の人気が過去最低を記録しました。 まだ、全言語で第2位にランキングされていますが、急速に低下しているようです。 3位が C++ で、差が小さくなっているので、近い将来に逆転することがあるかも知れません。

その C++ ですが、次期標準規格 (通称 C++1z) が、来年2017年中に策定される予定になっており、 多数の新機能、標準ライブラリの強化が行われます。 C++ はより便利で強力になります(ますます、近付きがたい言語にならなければ良いのですが)。

Windows は、勝手に Windows 10 へアップデートされるというような騒ぎで問題になりましたが、 無料アップデート期間も終わり、一般的にはあまり話題に上らなくなった感じがしますね。 (最近また、Windows Update 周りでトラブルがあるようですけども)。

OS X は、10.12 (Sierra) が登場しました。 Siri が使えるようになった等、幾つか新機能が追加されています。 なお、このバージョンから、「OS X」の表記は「macOS」に改められたので、「macOS Sierra」が正式な名前になります。


更新履歴

'2016/12/23 新規作成。



昨年のお勧め書籍へ

書籍紹介のトップページへ

Programming Place Plus のトップページへ