エントロピー増大の法則とは
エントロピー増大の法則というのは熱力学から導入された考え方で、物事の煩雑さが常に大きくなるという法則です。ブラックのコーヒーにミルクを入れるとかき混ぜなくても、自然と混じりあっていくように、ミルクとコーヒーという独立した状態からお互いが混じり合う無秩序状態になってきます。
一度煩雑性が増した物事を元に戻すためには、外からエネルギーを加えることが必要になります。コーヒーの例で言えば混ざったコーヒーからミルクとコーヒーの成分を分離するためには濾過したり、水分を蒸発させて分離させるような処理が必要になるでしょう。
プログラミングにおけるエントロピー増大の法則とは
プログラムのソースコードも、コード量が増えるににつれ、どんどん煩雑になりエントロピーが増大した状態になります。メンバーが増えて様々なコードの書き方の癖が入り混じるようになったり、後から追加された機能によってそれまで維持していたコーディングルールを守れなくなったり。
煩雑さが増すにつれて、ソースコードに修正するために必要なコストが増えていきます。新機能追加のソースコードを書き加えるときに、他の部分に及ぼす影響を把握するための確認の手間が増えたり、全体の整合性をとるために行う検討時間(設計工数)が増えるからです。
こうして、プロジェクトが進むにつれた新たな機能追加・改善に必要な時間的コストが増えてゆき、進捗が悪くなってゆきます。
エントロピーを下げるアクション
設計工程で、コーディング規約を決めたり、フレームワークを採用したり、実装時にコードレビューを行うのは、プログラミングにおけるエントロピーの増大を抑制するための手段だと言えます。開発が進むにつれて、進捗が悪くなるプロジェクトはこのあたりの設計を疎かにしていることが多いです。
一度複雑性が上がってしまったソースコードを修正して複雑性を下げるためには多大な労力が必要です。影響範囲を考慮しながら散らばったコードを整理し、機能でまとめ、抽象化したり具体化したり、、。エントロピーを下げるために行うエネルギーの注入作業が、リファクタリングです。
リファクタリングには、技術的な困難と共に、経営的・政治的な困難もつきまといます。リファクタリングでは、機能が追加されたり改善されたりはしないため、技術的なバックグラウンドを持たない発注者や経営者に、その作業の必要性を理解してもらうことが難しいからです。
そのため、設計工程で採用するフレームワークを検討し、コーディング規約やレビューのルールを決めるのは非常に重要です。リファクタリングの必要性・重要性をプロジェクトオーナーに伝え、初期段階からプロジェクト責任者に伝え、実行計画を予め盛り込んでおくことも有効だと思います。