ブラウンチップ☆ 2020/01/05 13:20

『Adaptive Code C#実践開発手法 第2版の感想

はいどーもこんばんは、無職オブ無職です。
実は記事は書いてたのですが、年末年始いろいろと出かけていて、(IDとPW忘れて)Ci-enにログインできず記事が更新できませんでした。
今日から更新ぼちぼち再開していこうと思いますよ。

ちゅーわけで本日は久しぶりに読書感想文でも書いてみようと思います(昔ブログ時代によく書いてた)。
書籍タイトルは『Adaptive Code ~ C#実践開発手法 第2版』です。
ちなみに再読なので初読ではないです。

どんな本なのか

タイトルの通り、C#を用いて実践的な開発手法を紹介している本です。
ただ、内容としてはC#以外にも当てはまる話が多いかなと思います(実際原著では2版のタイトルからvia C#という言葉が取り除かれているらしい)。
最初の章なんてコードが全く出てこず、開発手法の一つであるスクラムについてずっと語っていますw
僕はスクラム開発をしたことがないのですが、同じくアジャイルナニソレという方でも「こういうものもあるのだなー」という感じで読み進められるかと思います。
2章からは馴染みのある言葉がポンポン出てきます。
個人的には第3章が最も面白く読めたかなと思います。

対象読者

タイトルに「実践」とついていることからもわかるように、プログラミング初心者を対象とした本ではありません。
一方で、他言語経験者でC#初心者、ということなら全く問題なく読み進められるかと思います。
もちろんC#特有の記述方法が使われたコードも出てきますが、他言語の経験があれば多くのコードの意味は何となくわかるのではないでしょうか。
この本で大事なのは「開発における考え方」であって「C#における記述方法」ではないと僕は感じているので、C#未経験の方にもオススメできるのではないかなーと思いますよ。

インターフェイスの重要性

本書で繰り返し説かれているのはインターフェイスを使用することの重要性です。
あるクラスがあるクラスに直接依存するよりも、インターフェイスに依存しましょうねと、そういうよく聞く話です。
もちろんその理由についても繰り返し詳述されているので、本書を読み終えたあとではインターフェイスなしのプログラミングは考えられなくなるでしょう(ダックタイピングを前提とした言語だとまた話は別ですが・・・)。
今までインターフェイスを全く使ったことがない、という方はおそらくデザインパターンについてもほとんど知らないと思われるので、GoFのデザインパターンくらいは先にざっと抑えておくと本書を読み進めやすいかもしれません。

依存しない設計

あるクラスを利用すると、他の実装が問答無用で一緒についてくることはコードの臭いとなります。
例えば「HogeClass」に依存するコードを書いたとします。
このとき、HogeClassがデフォルトコンストラクタを利用する方法以外でインスタンスを生成できない場合、普通は「HogeClass」以外になにか別のクラスに依存しているとは考えません(ビルトインのクラスとかは別として)。
ところがHogeClassが実は巨大なパッケージに依存していて、そのパッケージがさらに別のパッケージに依存していて・・・という連鎖が続くとします。
こうなると、単にHogeClassに依存したつもりのはずが、もはや簡単には理解不能な一連の巨大な依存関係ができあがってしまいますよね。
これはよくないですよね、という話が出てきます。
初読のときはあまりピンと来なかった記憶があるのですが、今読むとなるほどなあと得心できたので少しは成長したのかなーと思いましたw
このことに関連して、EntourageアンチパターンとStairwayパターンが紹介されています。
仮にインターフェイスを用いた設計をしていても、Entourageアンチパターンになっていてはダメだよと、そういう感じのお話です。

SOLIDコード

SOLIDコードを扱っている第4章は馴染みのある方も多いのではないでしょうか。
僕も主にプログラミングの作業要員として、このあたりのことは意識してコードを書いています。
とはいえリスコフの置換原則はまだ難しく、正直ジェネリック型のinとoutは未うまく使えませんw
なんとなくこうかなーという感じでやっているので、なんかおかしいときも多々あるかと思われます。
まあそれでもSOLIDコードを意識して書くだけでもコードがだいぶんよくなるんじゃないでしょーか。
SOLIDコードとは少し離れますが「コマンド/クエリ分離の原則」や「副作用のない関数」あたりのことも頭に入れてコードを書くと読みやすくなるのかなあ、なんてちょっと思っています。

依存性の注入

依存性の注入と言えば、Unity使いにとってはZenjectでしょうか。
ぶっちゃけ僕はあまりうまく使えていませんw
Poor man's dependency injectionはまあ・・・という感じなのですが、そこから先のIoTコンテナ等々については正直ウーンという感じです。
概念はわかるのですが、うまく使えるビジョンが見えてきません。
この辺はまだまだ勉強と実践が足りないかなーという感じです。

一通り読んでみて

再読してみて以前より理解できる箇所が格段に増えていたのはよかったですね。
最近停滞期に入っていた感があるので、自分の成長を久しぶりに実感できて読書が楽しかったです。

仕事も辞めてこれからどうしようかなと悩んでいるところですが、今後もまったりゆっくりボチボチ開発は続けていきたいと思いますよ。
ほなそんな感じでまた。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

記事のタグから探す

月別アーカイブ

記事を検索