はじめに
3連休もう一回やらせて! nikkieです。
『Clean Agile』を読み返していて、XPのテクニカルプラクティス「シンプルな設計」はあっさりしているという感想を持ちました(文字サイズにもよると思いますが、Kindleで5-6ページです)。
ふと『Clean Craftsmanship』を手に取ったときに6章で「シンプルな設計」のプラクティスをがっつり扱っていることに気づき、「これ読みたかったやつでは」と読んだログを綴ります。
目次
第6章 シンプルな設計
公開されている目次より
第6章 シンプルな設計
YAGNI
テストでカバーする
表現の最大化
重複の最小化
サイズの最小化
シンプルな設計には4つのルールがあると導入され、「テストでカバーする」から「サイズの最小化」がUncle Bobの言葉による4つのルールの説明です。
シンプルとは
この章の導入は「シンプルな設計」の「シンプル」についてです。
シンプルは「簡単」という意味ではない。シンプルとは「もつれていない、絡み合っていない」という意味である。(Kindle版 p.262)
注にてClojureの開発者Rich Hickeyによる「Simple Made Easy」が言及されます。
なおMade Easyですが、
実は XXX Made Easy という表現は,入門書や宣伝・広告などのタイトルに常用される一種の定型句である.日本語でいえば『○○入門』『誰でもわかる○○』『単純明快○○』といったところだ.
#4263. ''XXX Made Easy'' というタイトル (1)より
なので、Rich Hickeyは「誰でもわかるSimple」という発表をしているのです。
この解説については以下のエントリをたびたび参照していまして、
Rich Hickeyの言うSimpleとはLEGOブロックのイメージでとらえています1。
LEGOブロックのように1つ1つは単純なものを組合せてどんな大きなものでも作れるのが、今の私が理解しているシンプルです。
この章の冒頭でUncle Bobが言う「シンプルな設計」はRich Hickeyの言うシンプルと同じと確認できました!2
Uncle Bobは次のように説明します。
シンプルな設計とは、高レベルの方針が低レベルの詳細を知らない設計である。(Kindle版 p.262)
ここを読んでなぜ『Clean Architecture』が書かれたかその一端が分かったというか、Cleanシリーズの結びつきに気付きました。
これはHighLevelInterface
を用意し、高レベルの方針は(低レベルの詳細ではなく)インタフェースに依存し、低レベルの詳細がインタフェースを実装することで実現します。
シンプルな設計のルール
ケント・ベックの4つのルールが紹介されます。
これは『エクストリームプログラミング』の14章(14.1)にあるものだと思います。
『Clean Agile』でもケント・ベックのルールが引かれています(認知負荷の話がされます)。
この4つのルールについて言い換え例も紹介されています。
- Understanding the Four Rules… by Corey Haines [PDF/iPad/Kindle]
- ケント・ベックの設計のルール - Martin Fowler's Bliki (ja)
書籍ではUncle Bobによる言い換えが読めます3!
詳細は手にとって確認いただくとして、この記事では公開されている目次の4つをUncle Bobが言い換えたルールとして進めます
- テストでカバーする
- 表現の最大化
- 重複の最小化
- サイズの最小化
上ほど優先順位の高いルールです
Uncle Bobによる4つのルールの指南の感想・気づき
- テストでカバーする
- 表現の最大化
- 重複の最小化
- 重複には2つある
- 本物の重複は排除する
- 偶然の重複は残す
- いまはたまたま重複しているという理解(片方だけ変更しうる)
- サイズの最小化
4つのルール(ひいてはシンプルな設計)は、ソフトウェア開発におけるパラダイム・シフトのように思えます。
1980年代〜1990年代はフックを仕込む実装が一般的だったそうです。
その理由は技術的な制約により変更しづらかったから(マシンパワーの低さによる)。
マシンパワーの向上によって、ビルドやテストコード実行に時間がかからなくなり、YAGNIや4つのルールが一般的になっていったという説明でした。
Uncle Bobも言っていますが、マシンパワーが向上してなんでもできるようになっているのに、開発においては「なんでもは作らない」がプラクティスになっているのは逆説的で面白いですね。
終わりに
『Clean Craftsmanship』第6章を読んで、シンプルな設計について探し求めていたUncle Bobの解説をインプットできました。
「シンプルな設計」は『Clean Code』・『Clean Craftsmanship』(4つのルール)、『Clean Architecture』(もつれていない設計)とCleanシリーズの中に通底しているのかもしれませんね。
-
Clojureと「Simple Made Easy」 - 紙箱
↩Clojureの作者Rich Hickeyの「Simple Made Easy」の紹介記事。「シンプルと簡単は違う」「プログラムをシンプルにするには抽象化」。シンプルなプログラム=LEGOブロックのイメージ(組合せられるし、組合せの変更も用意)
2020/06/16 19:58 - シンプルは難しい単語で、人によっては簡単なものをシンプルと言うので、こうして確認できたのは私としては大きな一歩です。非常に安心しました。そういえば、Uncle BobはClojureにも造詣が深かったような↩
- シリーズ1冊目の『Clean Code』からUncle Bobは4つの設計のルールに言及しているとのことでした。Cleanシリーズのつながりですね。↩
- ちょうぜつ本 5章のジェネリックFizzBuzzの例が頭によぎりました。↩
- 5章の読書ログはこちら ↩