CODE COMPLETE 第2版(上)を読了しました。
一言で言うと、本書はプログラミングの総合ガイドです。
章の終わりにはたくさんの参考資料が紹介されているので、より知識を深めたいときには役に立ちそうです。
第1部「基礎を固める」は、ソフトウェアコンストラクションの概念から上流工程までを解説します。
気になった箇所では、
> 言語の「中で」プログラミングしているプログラマは、自分の考えを、言語が直接サポートしている構造だけに限定してしまう。 したがって、使用している言語ツールが初歩的なものであれば、プログラムの考えも初歩的なものになる。
とありました。文化の違う複数の言語を習得するのも、表現力に幅ができて良いと思います。
第2部「高品質なコードの作成」は興味深く読みました。後述します。
第3部「変数」、第4部「ステートメント」はコーディングのテクニックを解説します。
経験の浅いプログラマには大変参考になると思います。
また、経験豊富なプログラマにとっても、経験則で知っていることを理論的に理解することは、後輩に教えるときなどに役立つでしょう。
さて、第2部「高品質なコードの作成」です。
> 複雑さへの対処は、ソフトウェア開発における技術面での最も重要なテーマである。
そして、
> すべてのソフトウェア設計手法の目標は、複雑な問題を単純な問題に分割することである。
と言い切ります。
> オブジェクト指向プログラミングは、複雑さに対処するためのさまざまなテクニックを提供する。
オブジェクト指向プログラミングを「複雑さへの対処」という視点から見ると理解しやすいかもしれません。
複雑な問題を分割し単純な問題にしたのが「クラス」。クラスは一つのことに集中できるようにします。
「カプセル化」はクラス内の複雑さを隠蔽します。
「抽象化」は、サブクラスの詳細を無視することによって、複雑なものを単純に見せます。
「デザインパターン」も複雑な設計をパターン化することにより、複雑さを緩和します。
ちなみにRubyではデザインパターンをモジュールで提供しています。たとえばSingletonパターンでは
class SomeSingletonClass
include Singleton
end
SingletonモジュールをincludeするだけでSingletonパターンを実現しています。
複雑な実装はモジュール内に隠蔽されています。
逆に、複雑さを増大させる使い方はオブジェクト指向プログラミングの誤用です。
典型的な例が、深すぎる継承階層です。
「複雑さへの対処」という視点からオブジェクト指向プログラミングを見ると、理解しやすいと思いました。
あと、おもしろかったのは、
* ドキュメントだけではクラスの使い方がわからない場合、ソースコードを見て実装を調べないこと。作者に質問すること。
* 作者は質問に答えないこと。ドキュメントを更新し、新しいドキュメントを見てもらうこと。
というところ。個人同士のやりとりは、他人のコードの助けにならない、ということ。