Software Entropy【The Pragmatic Programmer】

二つ目は "Software Entropy"。

割れ窓理論

ソフトウェアは物理世界とは隔離されているが、エントロピー増大の法則からは逃げられない。 どんなに素晴らしいソフトウェアであっても時間と共に朽ちていく。こういう状況を錆びに例えて "Software Rot" というようだ。

これを防ぐため『割れ窓理論』を応用しようと書かれている。割れ窓理論とは次のようなものである。

割れ窓理論(われまどりろん、英: Broken Windows Theory)とは、軽微な犯罪も徹底的に取り締まることで、凶悪犯罪を含めた犯罪を抑止できるとする環境犯罪学上の理論。アメリカの犯罪学者ジョージ・ケリングが考案した。「建物の窓が壊れているのを放置すると、誰も注意を払っていないという象徴になり、やがて他の窓もまもなく全て壊される」との考え方からこの名がある。 (https://ja.m.wikipedia.org/wiki/割れ窓理論

窓が一つでも割れていると、加速度的に環境が悪化していく。 一方、綺麗に装飾された家が建ち並んでいれば環境は悪化しない。

これをソフトウェアに応用しようという話だ。 割れ窓のようなコードが一つでもあると「ここもそうしてるしいいだろう」と思ってしまう。 一方、綺麗に整理されたコードではそういうことは起こらない。 「汚す」という行為に対して心理的な抵抗が現れる。

ソフトウェアの品質

ソフトウェアの割れ窓を見つけることはそれほど難しくない。 プログラマならば担当してるソフトウェアのイケてない点をいくらでも挙げられるだろう。 きっとそれが割れ窓だ。 クラス構成がいけてない。語彙が統一されていない。ビルドシステムが古い。

しかし、割れ窓やサビに注目しすぎるもどうだろう、と思うことがある。 割れ窓理論はソフトウェアの品質に寄与すると思うけれど、「ソフトウェアの品質」とはユーザーにとっての価値がベースである、とどこかで読んだ気がする(『テストから見えてくるグーグルのソフトウェア開発』だったかな?) 割れ窓に注目しすぎて、ユーザーを置いてけぼりにしないように注意したい。

テストから見えてくるグーグルのソフトウェア開発

テストから見えてくるグーグルのソフトウェア開発