書籍購入:『ストラウストラップのプログラミング入門』は入門書か? 入門書だ。但し想定読者に注意。

厚いと評判*1のこの本、本当に厚かった。

ストラウストラップのプログラミング入門

ストラウストラップのプログラミング入門

でも凶器として使うならもう少し厚くてハードカバーのほうが(ry

参考までに手持ちの厚い本と比較してみた。ページ数と寸法はAmazonが元ネタ。

書名 ページ数 寸法 (cm)
実用 Common Lisp (IT Architects’Archive CLASSIC MODER) 928 23 x 18.4 x 5.8
FreeBSDビギナーズバイブル (MYCOM UNIX Books) 980 23.4 x 18.4 x 5.4
オペレーティングシステム 第3版 1100 23 x 18.6 x 5.4
コンピュータプログラミングの概念・技法・モデル (IT Architects' Archiveクラシックモダン・コンピューティング) 944 23 x 18.4 x 5.2
ゲームプログラマになる前に覚えておきたい技術 872 23.6 x 18.6 x 4.8
Advanced Windows 改訂第4版 1009 23.4 x 18.6 x 4.8
ストラウストラップのプログラミング入門 1176 23 x 18.6 x 4.8
ジェネレーティブプログラミング (IT Architects’Archive CLASSIC MODER) 776 23 x 18.6 x 4.4
COMMON LISP 第2版 914 25.6 x 18.2 x 4
オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング) 960 21.2 x 15.2 x 5.2
オブジェクト指向入門 第2版 方法論・実践 (IT Architects' Archiveクラシックモダン・コンピューティング) 800 20.4 x 14.6 x 4.6

まあ大きさとしては『Advanced Windows 改訂第4版』と同じくらいだと考えて備えておけば、置き場の確保に困ることはないはず*2

本書は何の本か? 現実のプログラミングの入門書だ。著者のまえがきによると「現実のプログラミングの基礎を最も簡単に学べる本」*3だ。また「実用的なソフトウェアを構築する方法に関する本」や「プログラミング(より一般的にはソフトウェアの開発技法)に関する本」でもある*4

一応私もプログラマとして食べている人なので分かるのだが、趣味の範囲でプログラムを書くのと仕事としてプログラムを書くのでは、求められる品質や技術要素が大きく異なる。どう頑張っても世の中に広く出回っているプログラミング言語の入門書とその言語のリファレンスとAPIやライブラリのリファレンスだけでは、その場しのぎはできても長い目で見た場合にプログラムは破綻する。

そんな悪夢を望まないプログラマも多いわけで、より良い実装を目指して――私の場合は大量の本に囲まれていたり、仕事以外で実験的にコードを書いて未体験の技術を使ってみたりしている。

まあ基本的に独習なのだが、難点は情報源があちこちに散らばっていることだ。よくまとまった良書だけど30年近く前のものなので現状に追随していないとか、特定の領域向けの内容だとか、どうしても「不足部分を補うための別の何か」が必要となってしまう。例え基本的な要素を学ぶだけでも、だ。

本書はあちこちに散らばった情報を集めて、その中から今や「基礎・基本」となっている(と作者が判断した)要素を抽出したものだ。一見して分厚くて圧倒されそうになるが、先人はこの何倍、何十倍もの厚さになるだろう情報源から学んできた(時にはまだ早すぎて満足な情報を得られない時期だったこともあるだろう)。つまり見た目は厚いが、実際には物凄くコンパクトにまとまった本なのだ。

本書は何の本でないのか? まず間違いなくC++の言語や標準ライブラリに関する本ではない。本書は現実のプログラミングについての本なので一般的なソフトウェアの実装にて使用されている言語の1つを使用していて、単にそれがC++なだけだ*5C++の文法・構文を詳細に学ぶ目的には適していない。ただ巻末付録にC++の簡易なリファレンスが付属しているので、この本を読み進める上ではC++の文法で戸惑うことはないだろう。

また本書はプログラミングの入門書でもない。まえがきにこんな記述がある。

本書はプログラミングを始めるための最もやさしい本ではないし、そのようなつもりで書いていない。著者が目指したのは、現実のプログラミングの基礎を最も簡単に学べる本である。現実のソフトウェアの多くがほんの数年前まで高度であると見なされていた技術に基づいていることを考えれば、実に意欲的な目標ではないか。
基本的には、他の人が使用するためのプログラムを書き、それを責任を持って行い、それなりの品質を維持したいと考えていることが前提となる。つまり、プロとして恥ずかしくないレベルを目指しているものと想定する。そこで、本書では教えたり学んだりするのがやさしいものではなく、現実のプログラムに取り組むために必要なものがカバーされるように話題を選んだ。(以下略)

本書の対象読者となりうるのは経験の浅めな職業プログラマオープンソースソフトウェアの作者、またはそういった「他人が使うソフトウェアを実装するポジション」を目指している人だろう。シェアウェアや(窓の杜的な意味での)フリーソフトの作者も含まれるかもしれない。

ただ「プログラミングを始めるための最もやさしい本ではない」訳で、何かしらの開発経験はあるけど色々と足りない部分を痛感しているような人なら本書で独習することも可能だろうが、それよりも経験値が不足している人やプログラミング未経験の人が独習用に使うのは避けたほうが無難だろう(教師役の人がいて講義スタイルで使用するとか、せめて同志がいる場合なら何とかなるかもしれない)。

*1:ちなみにC++関連の本には厚いものが多いらしいが、基本的にC言語の人でC++の本はそれ程持っていないので分からない。

*2:私のように置き場所が無いことを承知で購入した人は別として。……本棚が欲しい。

*3:まえがきのP.ivより。

*4:まえがきのP.viiより。

*5:もちろん著者がC++の設計者であることも要因の一つだろうけど :)