SE(たぶん)の雑感記

一応SEやっている筆者の思ったことを書き連ねます。会計学もやってたので、両方を生かした記事を書きたいと考えています。 でもテーマが定まってない感がすごい。

『C#実践開発手法』の感想を書く(第2版『Adaptive Code』の発売を受けて)

この記事は

以下のツイートを見つけました。

C#実践開発手法』は、私が好きな本の一冊で、このブログでもたまに話題にしていました。以下の記事でも若干触れています。

hiroronn.hatenablog.jp

しかし、一度も記事にしていない!
と、ふと気づきました。

というわけで、思いの丈を打ち明けてしまおう、そういう記事です。

本書が想定する読者

前書きに、

構文がC#に似ている言語のプログラミングの実務経験があるのが理想的
プログラミングの勉強を始めたばかりである場合、本書はふさわしくないかもしれません。本書では、プログラミングの基本概念を十分に理解していることを前提として、高度な内容を取り上げています。

とあるように、実務経験を含めた知識を持っている人を想定しています。

個人的には、条件を満たすなら、絶対に読んでほしいです。

本書の目的

前書きに、

アダプティブ」とは、コードを大幅に変更することなく、新しい要求や予想外のシナリオに対応する適応力のことです。

とあります。*1

つまり、適応力をコードに持たせるにはどうするか、ということを説明してくれます。

想定読者で、なぜ実務経験を必要としているのか、というのは、適応力について腑に落ちている必要があるからでしょう。
業務でコーディングする場合、要件や仕様の変更でソース修正を余儀なくされた、という経験は必ずあると思います。
そしてまた、それで苦労した経験も、必ずあります。

そういう場合に、理論上は、こういう作りにすればよいという原則があります。
それを現実にどう適用するのかを、本書は説明してくれます。

どんな本

三部構成です。*2

内容どんな感じ

アジャイルそのものの説明以外は、とにかくサンプルコードいっぱいです。
これはこういうことだよ、と理解させようとしてくれます。

サンプルコードが多いのは、上で書いた「現実にどう適応するか」を考えるのに、非常に役に立ちます。

例えば、こんな感じの内容です。(アジャイル部分を、自分の言葉で雑にまとめた)

アジャイルはこういう開発サイクルだよ
→その中で「理想的なコード」より「リリースを優先したもの」が生まれるよね
→それって技術的負債だよね

とか、

完成ってなに?

アジャイルプロジェクトの進捗とかは、こうやって測るんだぜ

不適応なコードって、なんだろうね*3

みたいなことが、次々と語られます。

アジャイルの専門書の復習に使うもよし、興味があったらアジャイルの専門書を読むもよし。
至れり尽くせり。

衝撃を受けた内容の数々

あえて、背景をぼかします。どういう意味なのかは、本を読んでほしいです。
以下で、コードの悪い部分を書きますが、前提としてこういう場合はダメというものがあります。

  • newキーワードの存在をコードの臭いとみなすことができる
    序盤に書かれることですが、いきなり依存性の注入について説明されます。それだけ大事な概念ということです。

  • newと同じく、Service Locatorもアンチパターン

  • 実装と抽象を、同じアセンブリに置いたら意味がない
    インターフェイスの具象クラスは、別アセンブリに置かないと…

  • IsNullプロパティはアンチパターン
    Nullable<T>は値型だし…。HasValueって名前だからOK、ということではなく、比較的低水準の処理だから無いと困る。

  • SOLID原則に関する説明が、全てサンプル付きで詳細に書いてある
    SOLID原則とはこれらのことだ!と書いてある書籍はありますが、実用に近い(ような気がする)サンプルコードを載せた本は、私の中では本書が初でした。

  • DIコンテナは、「すべて手動制御」か「パターンマッチング*4による自動化」以外は、よろしくない

第2版の英語版目次を見て

Amazonのなか見検索で、英語版の目次があったので。

…ずいぶん、変わってませんか?
そもそも、使っているツール等も全て最新にしてくれていそうな気がするし、第1版を持っていても第2版が欲しいのは、私だけでしょうか?

既に楽しみ

すごくどうでもいいしょうが、発売日の次の日が、ブログ筆者の誕生日です。
プレゼントでしょうか?買います。

おわりに

変更に強いシステムは、私が理想としているものです。
実際に作る場に立つのも当然大事なのですが、こういう、しっかり解説してくれる本を読んで、実際に手を動かして、他人の経験から学ぶのも、非常に大事だと私は思っています。

読んで損した、という気持ちにはならないと、私は思います。
業務でうまくC#Javaが扱えないなぁ、と思っている人は、一読を強くお勧めします。

…出版社や作者さんの回し者とかではないです。


*1:想定読者のほうが、実際には後に書いてある。あえて順番を逆転させた

*2:第2版では四部構成。内容は変わっている模様

*3:硬直性、テスタビリティの欠如が挙げられる。

*4:クラス名等、命名規則等によって自動で決める