プログラミングセオリー
プログラミングの最大の関心事は最高のコードを作り上げること。
最高のコードとは、拡張性が高く、余分な要素が無く、読みやすいコードのことです。
そのコードに到達するのは、3つの価値が重要になります。
- コミュニケーション
- シンプル
- 柔軟性
価値観を技術の選択に
上記に上げた価値を、技術の選択基準にしましょう。
プログラミングは、問題解決を目的としています。エンジニアとしては、技術を知る、理解する、覚えるというのは重要ですが、技術を知っていても「使える」ようにはなっていません。
価値観は原則を通じてコードに適用
価値観を判断に使用しましょう。技術や手法の適用、不適用などの判断が正確になります。
しかし、価値をそのままプログラミングに使用するには抽象的すぎます。なので、価値をプログラミングに橋渡しをする6つの原則を使用して、価値を適用しましょう
- 結果の局所化
- 対称性
- 繰り返しの最小化
- ロジックとデータの一体化
- 宣言型の表現
- 変更頻度
シンプル
コードの複雑性を排除する
コードから余分な複雑性を排除し、シンプルに保ちましょう。
余分な複雑というのは、問題解決をしようとし、どうにかコードを動かそうとして出来た「余分な複雑性」のことです。
コードの複雑性は禍根となる
余分な複雑性に価値はありません。
ソフトウェアの動作に不安定さをもたらすどころか、コードの難読さが上がります。また、将来性の無いコードになります。
余分な複雑性を排除したコードはシンプルになります。完結なコードは障害が入る可能性が少なくなります。
ロジックとデータの一体化
ロジックとロジックが操作するデータは近ければ近いほど良いコードになります。
ロジックとデータの修正タイミングは同じ
ロジックとデータの修正は大抵の場合、同じタイミングで発生します。
なので、それらの処理が同じ部分や近い位置にあると修正も容易になります。
データと操作は同じ場所に
ロジックとデータを、コード上で同じ場所に配置します。
初めからベストな場所なんてわかりません。のちに修正が入ることを見越して、同じ場所や近くにセットで置いておくことで、修正が容易になります。
対称性
コードに一貫性を持たせる
対称性とは、ある操作に対して不変であるということです。対称性のあるコードとは、どこの部分に現れても同じように表現されるコードのことをいいます。
同じ部分を類推出来る
コードで対称性を特定し、明確に表現することができれば、格段に読みやすくなります。
また、対称性にすることによって、まったく同じ処理をしているコードの存在に気づくことが出来ます。それらを一個のコードで表現すれば、重複しているコードの量も減り、読みやすさがまた一段と上がります。
7つの設計原理
設計原理とは、コードに障害が入らないように定めた、コードの構造上の核心観点です。
この原則は、開発現場の分析した結果から導き出された、こうしたほうが良いという経験則です。
この原理は、コードレビュー時に使用します。
- 単純原理
- 同型原理
- 対象原理
- 透明原理
- 安全原理
- 線形原理
コードの価値観が漏れない、ブレない
ソフトウェアの品質を担保するのにコードレビューはかなり有効です。
しかし、レビュワーがそれぞれ違う価値観を持っていたり、観点が違っていたりすると指摘が散漫になります。
レビューの観点に一貫性が無いと、品質は劣化します。そのため、この7原則に従ってレビューをすることでレビュワーの価値観、観点を統一して品質を担保出来るようにします。
単純原理
- シンプルにこだわる
- 自然なコードを書く
- 複雑なコードを書かない
同型原理
- 処理の形にこだわる
- 形の違うものに敏感になる
- 一貫性のあるコードを書く
対称原理
- コードの処理の対称性にこだわる
- 条件のあるものは反条件がある
- 命名の対称性にこだわる
透明原理
- 副作用を起こすコードを避ける
- 処理は一直線になるようにする
- 分岐の少ないコードを書く
安全原理
- コードや設計の安全性にこだわる
- 「例外的な処理」を考慮して書く
- 機能の必要十分を満たすまでは最小限にする