JavaBlackで始まるあの人の意見を私も聞きたい

JavaBlackで始まる名前のあの人の意見をききたいと思った(敬称略) - 神様なんて信じない僕らのためにさん経由http://www.kt.rim.or.jp/%7ekbk/zakkicho/07/zakkicho0708b.html#D20070815-3さん。

このたび、仕事で初めてC++を前提にした設計をすることになったのですが、プログラミングも含め、C++自体が全く初めてです(オブジェクト指向自体も初めてです)。あまり時間もないので、良い参考書を探しております。特に、良いクラス設計の思想、設計例などが解説されている参考書などありませんでしょうか。時間が無いので極力邦書を希望します。GoFの再利用のためのデザインパターンの本(業務命令により購入済み)と、平行して進めるつもりですので、これと思想が違わないものが希望です。

http://www.kt.rim.or.jp/%7ekbk/zakkicho/07/zakkicho0708b.html#D20070815-3

なんかデジャブ。

「設計をする」と成っていることと、こんな所に質問が上がっている状況から、開発チーム自体がC++ / OOP が初めてに等しいと仮定します。

これに対する建設的な解答は「プロジェクトを中止する」もしくは「退職する」しかないです。デスマーチを避ける方法は無いでしょう(経験有り > 死にそうになりました(^^;)。退職やプロジェクトの中止がどうしても嫌なら、C++ を Better C として使い、OOPの存在など忘れてしまうのが一番上手く行くかも知れません。

余談1: 我が家の C→C++ 移行計画

今やっているプロジェクトがちょうどタイムリーな事に、チームを C から C++ に移行したのですが、

  • 6人チームのうち OOP & C++ を理解している人間を 2名配置
  • OOPのラーンニングを 実施(週1で8回程度=約2ヶ月)*1
  • 未経験者は設計・実装のやり直しが発生する。それを見越したスケジュールと設計レビュー、コードレビューの実施工数の確保

という所までやってなんとかといった感じです*2。逆にこの程度のコストと準備期間を取れないのであれば、絶対発生するであろうデスマーチのコストなんて支払えるわけありません。

手続きプログラミング/構造化プログラミングと OOP ではプログラムの組み立て方に関する根本的な感覚が変わります。いくらベテランのプログラマであっても、OOP初めて = プログラミング初めて と考えるべきです*3。また C++自体も上手く使うのが難しい言語なので、たくさんの勉強や習得期間が必要になります。これらを上手く使えないと間違ったプログラムを作ってしまって、開発自体もデスマーチ、その上何年も保守で泣くことにもなります。

デスマーチは技術者の身体を摩耗させ、技術的負債を抱えたプログラムは会社の利益を長期的に削ります。みんなが不幸になる決断の典型例ですね。

余談2: C++ のお勧めの本

C++の開発をするので本を買いたいというのならば、とりあえず、会社に ピアソンの C++ in-Depth シリーズ一式 と Effective C++ シリーズを買いそろえてもらってもバチは当たらないと思います。最低でもC++ Coding StandardsEffective C++ は読んでおくべきだと思います。

個人で買う一冊なら C++ Primer 4/E がお勧めです。プライマーはプログラマのためのC++入門書です。特に 4/E は携帯性に優れています*4



よいオブジェクト指向プログラミング/オブジェクト指向設計を学びたいのならば、http://www.amazon.co.jp/Head-First%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E2%80%95%E9%A0%AD%E3%81%A8%E3%81%8B%E3%82%89%E3%81%A0%E3%81%A7%E8%A6%9A%E3%81%88%E3%82%8B%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%A8%E3%83%AA%E3%83%83%E3%82%AF-%E3%83%95%E3%83%AA%E3%83%BC%E3%83%9E%E3%83%B3/dp/4873112494/ref=sr_1_1/249-3569201-7705948?ie=UTF8&s=books&qid=1187239196&sr=1-1:Title= Head Firstデザインパターンがお勧めです。この本はデザインパターンを「良問」として、オブジェクト指向プログラミングで作られる「良いプログラム」とはどういうモノか、なぜ良いかを MindHackぎみに教えてくれます(コードはJavaですが)。
また、OOPの入門書ならカモノハシ本もはずせません。OOPとはどういうモノの基本的なところから、実践的な課題(しかも同じ課題を様々なプログラミング言語で解いている*5)までを扱っています。私の私見ですが、OOPの入門書としてカモノハシ本を超える本を未だ見ません。

*1:コーディングを伴うモノ。宿題と称したプログラミング課題(カモノハシ本の 8Queenとか)多数。プログラマのプライベートタイムに依存したラーンニングは確かに問題ですけど、自分で考えてコード書かなきゃ身に付くわけないですよってことで。ホントはラーンニング用の模擬プロジェクトをやりたかったのだけれど、さすがにそんな工数は出なかったです(T△T

*2:実は3番目は確保しきれていなくて、ちょっとプロジェクトの遅れが深刻になってきてますよ...。今年の冬は危険です。

*3:むしろ先入感があるだけずぶの素人さんよりヤバいかもしれません

*4:冗談ではなくってプライマー4/Eは携帯しやすいと思います。前の版とか他の網羅的C++の本の大きさ・重さがスゴイので(TT)

*5:アプローチは似ていても言語変われば最適解は変わります。...ということを地でいっているこの本は、読んでなきゃモグリな位有名な本なのですが、その割には 設計と言語は完全に切り離せるという世迷い言が後を絶たないのは何故?