組み込みプログラマがステップアップするための推薦書籍

 仕事に慣れ始める時期のせいもあるのか、最近プログラミングで良い参考書籍がないかと聞かれるようになっています。丁度良い機会なので、今回は組み込みプログラマの新人の方向けに、プログラマとしてのステップアップをサポートする推薦書籍を、自分なりにまとめたいと思います。
 想定として、CやC++で一通りプログラミングができるようになった方を対象としています。基礎的・入門的な書籍がほとんどなので、中級者以上の方には平凡かもしれません。なお良書というのは世の中にあふれているので、今回は各トピックごとに2冊づつピックアップするスタイルをとりたいと思います。
 

ソフトウェアの設計をより良くする

 ここで挙げる書籍は、設計のための仕様分析や、モジュールといった上位構造の設計について扱った書籍です。
 なお留意点として、OOPやLL、関数型等の分野で話題となっている現代的・先進的なプログラミングや設計についての解説は、今回挙げる書籍では少ないため、将来に備えて別途補完した方がよいと思います。仕事で使う具体的な技術を学ぶだけでなく、将来の展望や本質を別途学ぶ姿勢は大事だと思います。
 

組込みソフトウェア開発のための構造化モデリング 要求定義/分析/設計からソースコード作成までソフトウェア開発上流工程の基本を構造化手法に学ぶ

 内容はDFDを主体とした構造化設計の説明が中心です。文章は平易で内容もシンプルです。実践の上では記述不足を感じる所もあるものの、構造化設計の基本的な流れやキーワードは押さえられており、少なくともインデックスとして有効だと思います。また設計品質の章等、重要な内容を優しくシンプルな文章でまとめた優れたテキストも含みます。
 なお設計と言っても、内容は構造設計の前の仕様分析に多くの紙面が割かれています。プログラミングの記述が物足りないなら「組込みソフトウェア開発のためのリバースモデリング (組込みエンジニア教科書)」が副読本として読みやすいです。またDFDでなくUMLを重視したいなら「組込みソフトウェア開発のための オブジェクト指向モデリング (組込みエンジニア教科書)」が副読本として読みやすいと思います。
 

ずっと受けたかったソフトウェア設計の授業

 こちらはJSP/JSDの説明が中心です。DFDや状態遷移の設計もそれなりに言及しています(特にハレルチャートの入門解説として有益だと思います)。前述の本と同じく平易でシンプルな文章ですが、専門用語が多いほか基本概念の説明が中心なため、内容は少し難しくなっています。読む際は、前述の本等で予習しつつ、挙げられているキーワードについて必要に応じて別途ウェブ等で理解を深めておくと無難だと思います。なおこの本は概念的な説明が洗練されていて、中級者以上の人にも考え方や知識を整理できるという点で有効な書籍だと感じます。
 

「リッチなC」から「C++」に進む

 組み込みでもC++はありふれた言語となっていますが、リッチなC言語として手続き型パラダイムのままC++を使用している現場が少なくありません。ここで挙げるのは、そうした状態から脱却するための書籍です。
 

Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

 C++プログラマ必読というべき有名な名著です。OOPからメタプログラミングまで、色々なパラダイムでのC++のテクニックを解説しています。なおC++の言語解説の本ではないため、読者はある程度C++を使えるようになっていることが前提です。
 

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

 こちらも大変有名な名著です。OOPに則った保守性に優れた設計・実装パターンを解説しています。この本がおすすめなのは実装サンプルがC++である点と、実際の現場を想定したサンプルを多く掲載している点です。最近のデザインパターン本はJavaRubyのようなGCを持つ現代的な言語で書かれたものがほとんどなのでこの本は結構貴重といえます。なお予習・副読本として「デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)」も良書でおすすめです。

 

処理の最適化・効率化を進める

 組み込み開発で日常的に要求される、処理の最適化・効率化について扱った書籍です。今回はアルゴリズム集・データ構造集でなく、それらを考え出す/使いこなすためのアプローチについて扱った本を挙げています。

 

珠玉のプログラミング—本質を見抜いたアルゴリズムとデータ構造

 処理の効率化について解説が充実しています。この本が良いと思うのは、問題に対して、すぐ答えやアルゴリズムを並べて終わりにするのでなく、問題から答えに行き着くまでの試行錯誤の過程を解説しているところです。それにより処理効率化を進める上での、普遍的な考え方やアプローチを学べるようになっています。

 

Efficient C++パフォーマンスプログラミングテクニック

 こちらはC++の書籍です。処理の実装内容を扱う前述の珠玉のプログラミングと違い、既存のライブラリや言語文法などの使用方法に重きを置いています。効率化と、OOPC++等を活用した良い設計の両立を、プログラミングの工夫によって実現できるという考え方・自信を得る事ができます。

 

プログラミングや開発のスタイルを磨く

 常日頃のプログラミングでより優れたコードを書くための書籍です。
 

プログラミング作法

 自分の学生時代からの愛読書で自分の基礎となっている本です。古い時代の本であるためか、C/C++のサンプルや解説が充実しています。コーディングスタイルからプログラミング、デバッグ、テスト、開発環境と、プログラミングに関わる事柄を時代を超えた洗練された説明で解説しています。

 

Code Complete第2版〈下〉—完全なプログラミングを目指して

 古典の部類に入りつつある本ですが、組み込みC/C++ではまだまだ有益な書籍です。
 上巻では、適切な名前や関数の長さといった細かなコーディングの話から、設計やアーキテクチャの話まで「良いプログラミング」を行うために必要な事柄を徹底的に詳しく書いています。
 一方下巻ではテストや環境について扱っています。ただ下巻は良解説であるとは思うものの、時代遅れになっている説明も結構あるので、ブログや人、最近の書籍等で適宜最新情報を補完しておくのが無難です。
 なおかなりボリュームがあります。読み切れないならば、自分にとって必要だと感じる章をピックアップして断片的に読んでいくのも手です。
 なお最近類書として「Clean Code アジャイルソフトウェア達人の技」が出ています。現代的な開発言語や環境を使っているのなら、コードコンプリートに勝るとも劣らない良書としてお勧めできます。
 

プログラマとしての心構えを学ぶ

 よりよいソフトウェア開発を実現し、またプログラマとして成長していくための情報が記載された書籍です。設計方法やパラダイムが変わっても普遍的に有効な、日頃の勉強方法やキャリアの磨き方について有益な解説があります。その点一番普遍的に価値のある書籍と言えるかもしれません。
 

達人プログラマー—システム開発の職人から名匠への道

 少し古い本ですが、こちらも学生時代から読み続けている自分の愛読書です。ツールや勉強方法、プロジェクト管理など、プログラマとしての身の振り方について解説を行っています。この本は最近でも講演等でよく引用されたり勧められたりしており、時代を超えた名著だと感じます。

 

Clean Coder プロフェッショナルプログラマへの道

 最近出された本です。こちらもプログラマとしての身の振り方について解説を行っています。特に見積もりや業務上の約束事について良い解説があります。職場でトラブルを起こして引きこもりになってしまった、といった、ユーモアの効いた親近感を感じる文章が多いです。