Andrei Arexandrescu 著『Modern C++ Design』

書店で見かけて、ついつい購入。

Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)

Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)


この本のメインテーマは「どうやって安全なコードを書かせるか」について(だと思う)。

ただ、この本では、C++という言語の仕様を極限まで活用して、templeteを駆使して、書けるコードの制約を課す(抜け道を断つ)ことで安全を確保している。結局、C++の仕様を理解していない人には理解できない。

実際のところ、この本を理解できるレベルまでC++の仕様を把握しているプログラマなら、問題が多発するようなコードを忌避する習慣を持っているだろうから、メインテーマに疑問符が付いてしまう。


この手の技術は、ディープすぎて「現場では使えない技術」なんだけれど、こういう考え方もあるのかーと唸ることを楽しめる。

とはいえ、部分的には「使い回しのできる技術」も含まれているので、バッサリと切り捨てるのはもったいない。

キレイに章立てをできていないことがこの本の最大の問題ではないだろうか。


C++のtempleteは、二度と手を加えることのない、デバッグ不要な、簡素なライブラリに使用すると強力な武器になる。

その反面、うっかり用法用量を間違えると、暴発して大惨事を引き起こす弾薬でもある。

Javaのgenericにも同じことが言えるだろうか。Javaは実行環境もセットだからC++と比べるとずいぶんマシだけど。)

なので、技術屋さんの粒が揃った現場では有用だけれど、粒がバラバラな現場では一律禁止にしてしまったほうが無難、という悲しい結論に行き着いてしまう。


基本的な考え方は、言語について書かれた本ならば、どのような本にも通じる。


簡素な(=品質が高く、メンテナンスのしやすい)コードを書け。

その心得をまとめた本が『Effective C++』であり、誰にでも使いまわせる技術(パターン)として具体的な方法を多く提示した本がGoF本である。


でも、C++の場合、簡素さを突き詰めると難解になりやすい。

作者の意図に反するのかも知れないが、悲しいことに、この本がその証明となっている。

簡素な(=意図の伝わりやすい)コードを書かせるなら「ほどほどに」ね。