とりあえずプログラムが書けるようになるというのと、C++を「理解した」ということは大きな差があるでしょう。思うにC++は、彷徨える初心者が最も多い言語じゃないでしょうか。
C++は沢山の良書と、それ以上に沢山の悪書があります。
そして残念ながら、C++を始めたばかりの方にはそれを見分けることは出来ないでしょう (出来るなら初心者ではないでしょう)。
constとかstaticとか意味は分かるけど、何の為に使うのかが分からない。 ポリモーフィズムもコードは読めるけど、どういう時にどうクラスを設計したらいいのか分からない。
そういう方にお勧めの本を5冊紹介します。
***
Effective C++ (Scott Meyers)
1冊目で文法を学んだら、次にこのEffective C++を読んで間違いないです。
この本は文法そのものに対する解説は深くはしませんが、何故constをつけるのかを考えることによってconstなどの文法への理解が深まります。
C++自体への理解を深めると同時に、50のルールとして、実際のプログラミングに役立てられるようにまとめられています。
More Effective C++ (Scott Meyers)
大まかにC++はC、オブジェクト指向、テンプレート、STLの4つの集合にゆるやかにまとめることが出来ると言われております。Cとは大きく異なる言語です。Cにちょっと機能を足した、というものではありません。(ちなみにC++は++CではなくC++なので、返し値はCだというジョークがあります。)
MoreEffective C++は主にオブジェクト指向の部分と例外について扱います。何故エラーコードではなく例外を投げるのかなど、オブジェクト指向としてのC++について丁寧に解説されています。多くのプロジェクトはオブジェクト指向でしょうから、とりあえずこの本は優先的に読むべきかもしれません。javaでのオブジェクト指向の経験のある方も、C++固有の事情が結構あるので参考になると思います。
C++ Coding Standard (Herb Sutter and Andrei Alexandrescu)
プロジェクトメンバーとお作法を統一するなどという狭い意味ではなく、C++の言語の設計思想や言語実装と照らし合わせ、最もスマートな方法(標準)を知ることでパフォーマンス・移植性・頑強性のトレードオフを高い水準で保つことが出来る、という本です。
標準化の方法について、101のルールにまとめて明文化してあります。
Effective STL (Scott Meyers)
STLはオブジェクト指向とテンプレートに内包された集合ですが、それらに比較して重要度が小さいということではありません。また、オブジェクト指向を先に学ばなければならないということでもありません。STLを学ぶべき理由をいくつかあげると、
1. プロジェクト中に実装するデータ構造の殆どはSTLを利用する
2. オブジェクト指向やテンプレートの勉強になる
3. アルゴリズムとデータ構造について学ぶことが出来る
といったことが挙げられます。
Effective STLはプロジェクトにSTLを使うためのTipsをまとめてあります。それらのTipsを知ることは1のプロジェクト中に実装する為の知識となります。また、Scott Meyersは必ずWhyについて言及します。何故そのようにコードを書くべきなのか。それを理解することで2, 3の知識を得ることが出来る、という構成の本になっています。
C++ Template: Complete Guide
(David Vandevoorde and Nicolai M. Josuttis)
テンプレートがそうであるように、非常に内容の大きい本です。
この本一冊読めばテンプレートの本質とその実装が出来るようになります。テンプレートの魅力を理解できるようになる一冊です。
***
これらの本をすべて(或いは一部)読んだならば、一通りのオープンソースのコードを読みこなすことが出来ると思います。習うより慣れろというのはプログラミングの鉄則ですから、上記の本を読みつつ、オープンソースのコードを読んだり、自分で何か作ったりしてみてはいかがでしょうか。
5冊合わせると約1550ページ(索引除く)ですので、Introduction to Algorithmを越すページ数です。C++は、それくらい大きな言語です。そして、それらを理解してもまだまだ深い世界があるのです。テンプレートメタプログラミングや並列処理など、まだまだトピックはいくらでもあります。
Peter NorvigのTeach Yourself Programming in Ten Yearsという記事があります。
C++に限った話ではないですが、C++は10年かけて学ぶ価値のあるものだというのは皆の共通見解でしょう。
0 件のコメント:
コメントを投稿