『Simply Put』はシンプルとは何かをテーマとして書かれたビジネス書です。主に、良いコミュニケーションのためのシンプルなメッセージとは? を対象にしています。
認知負荷と流暢性
認知負荷は、プログラマー脳やA Philosophy of Software Designなどで紹介されたこともあって、ソフトウェア設計の文脈でも言及されることが増えてきました。
『Simply Put』では、単に文字数や要素数が多ければ認知負荷が高いというわけではなく、処理流暢性が大いに関係するという話が紹介されています。
処理流暢性とは、「どれだけ簡単に物事を理解できるか」という、いわゆる「分かりやすさ」を表すものですが、真面目な研究論文がいくつかあります。
ComplexとComplicated
シンプルさを語るために、対義語である複雑さとは何か、について分析していますが、この本では、ComplexとComplicatedを区別しています。
- Complex: 何かが多くのパーツを持っていて、それらが相互に繋がっている。
- Complicated: ものごとが長すぎたり、面倒くさすぎたり、混乱しすぎたりしている。
すなわちSimpleの対義語はComplexである。だが、Complicatedは処理流暢性を下げてしまい、本来のSimpleさを隠してしまう、ということです。
なお、このComplexとComplicatedを区別するのは、あまり一般的ではないようなのですが、同じような分類をしているものにCynefin Frameworkがあります。
Complicatedで必要以上に複雑に見えてしまうものの代表は、法律文章や利用規約です。
このComplexとComplicatedの区別は、ソフトウェア開発の文脈では、古典「銀の弾丸はない」(人月の神話)で分類されている、本質的複雑さと偶有的複雑さに対応していると言えます。
そしてソフトウェア開発の偶有的複雑さの1つの原因としても、処理流暢性が低いことがあります。
- 命名への無頓着
- 発音できない省略語(母音を全部抜いて英名を付ける)
- 〜情報、〜データなどの無くても意味が変わらないワードを付け足している。
- クラス名やインタフェース名を「ABC0001」のような符号化された名前を付ける
- 読み手を考えていないドキュメント
- 同じルールが重複して書かれている。
(例えば画面項目定義で、項目ごとに「最大値」「最小値」などのバリデーション仕様が書かれている。同じ意味の項目が複数の画面で登場するので、それらの整合性を気にしなければならなくなる。) - 変更箇所が取り消し線や赤字のままで表され、そのまま残されている。
- 同じルールが重複して書かれている。
- 共通化の名のもとに凝集度を下げる
- ある関数が引数をたくさん受け取っているが、あるケースでは使わないものも混じっている。
- インタフェースに共通項目がたくさん定義されている。
なお、本質的複雑さと偶有的複雑さの違い、ブルックスの言う「銀の弾丸はない」の本当の意味するところはこちらのスライドで解説していますので参照ください。