ソフトウェア開発経験の最初の段階で「一つの機能には複数の選択肢が有って、メリット・デメリットがそれぞれ有り、それらはトレードオフの関係に有り、容易には決めることができない」という事実を教えてもらえる機会に遭遇できていれば、その人はとても幸運だと思う。
先輩や上司が一方的に、「一つの確かな方法」をただ伝える、みたいな場面(それが必ずしも一般的にはそうとは言えない方法であったとしても)も多いのではないでしょうか。
どんなに設計上の意思決定ができている人でも、その頭の中では「色々な選択肢の中で悩んで、ベストではないかもしれないけど、前の前の課題に対してよりベターな方法」を選んでいる。でもその思考の過程を見せてくれる人はとても少ない。
本書は、そんなトレードオフの思考の過程を丁寧に説明してくれる1冊。
デザインパターン(シングルトン)、コードの重複、エラーハンドリング、柔軟性、最適化......限られた開発期間の中でさまざまな意思決定をしていく中で必要なトレードオフ要素が解説される。その全てが実際に課題になるかはプロジェクトの状況次第だと思うけど、「正しいと言われていること」が常に最善・最適ではない、ということが分かれば、この本を読む価値はあるし、ある程度の経験があれば自然と判断してきたことが言語化されていることで、誰かに指導する時に役に立つに違いない。
ただ、実は自分はこの本を読んで「マジ最高!!」と思ったのは、「7章 日付と時間のデータを効率よく扱う」という章で、この章はあまりトレードオフっぽい話題ではなく、日付や時刻に関するライブラリの設計にあたって必要な知識がひたすら詰め込まれていて、いかに身近なテーマの裏には膨大なドメイン知識が必要なのか、ということがよく分かる章になっている。
歴史あるプログラミング言語では、日付系のライブラリが大きく作り直されていることが時々あるけど(JavaとかPerlとか)、なぜそんなことになってしまったのか......それは日付や時間を扱う上で考慮すべき要素がたくさん有って、それが初期のライブラリ設計の段階で十分に考慮できていなかった(考慮するためにはあまりに広範囲な知識が必要となる)のか......暦法、日付、時間、時間量、生年月日、年齢到達日......これでもか!と解説されるドメイン知識を見れば、「そりゃそうだよなー」という気持ちになることは間違いない。
そして、ライブラリの設計者だけでなく、日付/時間のライブラリを使う人が何を気をつけて使うべきかもしっかり書かれている。
そして更に大事なのが「7.2 日時情報を仕事で扱うための準備」という章で、もうこの章だけでも4180円を払う価値が有る、有りすぎる。
実際に日付や、時間/時刻の情報を元にビジネスロジックを組み立てる時に、あいまいな状態でもたらされる条件をコードに落とし込む際に考慮すべきポイントが列挙されていて、めちゃめちゃ役に立つ。
例えば、”顧客は3ヶ月以内は返品可能”と書かれた条件を実装する上で、どれだけ色々な条件を整理し、要求を出した人と合意しないといけないのか、一定の経験がある人が読めば必ず「分かる−」と叫ぶこと間違いなしです。
その後も日付や、時刻を扱うコードのテストに関する話など、お役立ち情報が満載です。
でも、これトレードオフでもなんでもなく、ただひたすら「これを考慮しないと死ぬ!」という知識、知恵の塊なので、ちょっと全体のテーマからは違和感が有るんですけど、とにかく読んで役に立つこと間違いなしです!!ぜひ読んでみて下さい!!
当然他の章もめちゃめちゃ有益なんですけど、この章の「今日、今すぐに役に立つ度」がずば抜けているので、紹介してみました。
というわけで、『ソフトウェア設計のトレードオフと誤り』、値段以上のお役立ち本なので、夏休みの課題図書に是非読んでおきましょう!