プログラムテクニックはダイエットや健康法みたいなものか

フレンスブルガー ピルスナー

変数のスコープがどうこうだとか、1関数の行数は何行までとか、重複を共通化するとか、プログラムをよくするというテクニックがあるけど、あれいつも疑問に思ってた。
果たして、そんな単純なルールでプログラムが良くなるものかと。

プログラムというのは手続きであって、よいプログラムというのはよい手続きのことだ。
データ構造も結局のところよい手続きのためにあるのであって、データ構造としてきれいな形だったとしても手続きに無理がでるのであれば、そんなデータ構造を使うプログラムはよいプログラムではない。

そう考えると、たとえばひどい手続きのプログラムがあったとして、いくらそのひどい手続きの重複を共通化しても、短い関数にぶったぎっても、オブジェクト指向やなんやで条件分岐構文をなくしても、変数のスコープをせまくしても、ひどい手続きはひどい手続きのままだ。
それどころか、ひどい手続きにプログラムテクニックを適用すると、もっとひどい手続きになることもよくある。

よい手続きを書くには、言語を勉強する、アルゴリズムを勉強する、いろいろなアルゴリズムのコードを書く、論理や集合を勉強するという地道な積み重ねが必要で、単純なルールでよい手続きが書けますよというものは、たぶんない。

こういった、地道な努力が必要なのだけど単純なルールに走りがちというのは、つまりダイエットや健康法と一緒なのだなと思った。
関数30行プログラム健康法、関数の行数を30行に制限するだけで、あなたのプログラムもよいプログラムに!とか。

スコープを可能な限り狭くしたり、名前やらインデントを統一したり、重複部分を共通化するのは、礼儀みたいなもんで、ちゃんとやったほうが人とのコミュニケーションがうまく取れていい。