プログラムで大切なことは読むべきコードを少なくすること。ただそれだけだ。

オブジェクト思考とか手続き型とか、関数型とかの議論はまったく無価値だ。
こういう議論をしているお前らは、どうやら、プログラムで大切なことを理解していないのだろう。

const性も、オブジェクトも、ライブラリや部品の再利用、グローバル変数の禁止も、継承を避けることも、巨大な関数を避けることも、それはたった一つのことをやるためにあるといってもいい。

それは、読むべきコードを少なくすることだ。

コードを読むのはとにかく疲れる。
だから読むべきコードを少なくしないといけない。

コードがたくさんあると、どこにバグがあるのか、探すのが大変だ。
新しい機能を実装するべき場所を探すのが大変だし、
何を変更したときに他を間違えて、他を壊さないかのチェックも大変だ。


お前らは、printfを知っていますか?
画面に文字を表示する関数だ。


では、この関数がどのように実装されているか知っていますか?

まあ知らないだろう。俺様も知らない。
知る必要がないからだ。

仮に、この関数の内部に100万行のソースコードがあったとしても、我々はそれを読む必要はない。
printfの仕様を知っていれば、実装を読む必要がないのだ。
これで、100万行のソースコードはたった1行のコードになった。

100万行のコードがあったとしても、ブラックボックス化して無視することができる。
これがとても重要なことなのだ。


const性があれば、その機能はデータを読み込むだけで破壊しない。
よって、その関数を読んだとしてもデータが壊れない。
だから、仮に、そのデータがおかしな状態になってデバッグするときにも、その関数の先の実装を読む必要がない。


C++のconstメソッドやstaticメソッドの場合は、クラスの状態を変えないことを言語が保証してくれる。
だから、仮にクラスの状態が何か変になったとしても、そのメソッドがクラスの状態を壊さないことわけだから、そのメソッドの実装を見る必要がない。


ライブラリや部品の再利用についても同じだ。
動作実績があり、枯れているライブラリの場合、何か変な事象が起きたとしても、そのライブラリの内部まで追いかける必要性が低い。
たいていは、自分が書いたライブラリを呼び出す手順に問題があるということになるわけだ。
(これが不安定なライブラリだと、内部まで追跡しないといけず、時間と体力を消耗してしまう)


グローバル変数の禁止も同様だ。
いつどこで変更されるかわからない変数を追跡するのはとてつもなく時間がかかる。
だから禁止されるのだ。

また、オブジェクト化して、変更されるスコープをより限定することで、読むべきソースコードの範囲を狭くすることができる。


継承を避けるのも同様だ。
なぜなら、継承はクラスの足し算だからだ。
巨大なクラスになってしまうと、メンバ変数はグローバル変数の性質をより強く持ってしまう。
だから、グローバル変数の禁止と同じ理由で禁止される。
(似たようなものでsingletonをできるだけ避けるというのもあるだろう。)


巨大な関数を避けることも同様だ。
巨大な関数になってしまうと、どこで何をやっているのか追跡するのが大変だからだ。
ソースコードをひたすら読まないといけない。


テストについても、一部については同様のことが言える。
テストされて動作が保証されているコードは、枯れているライブラリと同じく内部を読む必要がないのだ。


契約による設計については語るまでもないだろう。
契約に従っていることが保証されれば、内部を読む必要がないのだ。

よって、すべてのことは、「読むべきコードを少なくする」ことのために存在する。


ここまで理解できれば、どういうコードが最良なのかわかるはずだ。
それは、読むべきコードができるだけ少なくなるように書かれたコードだ。
部品は独立しており、十分にテストされ枯れていて、いちいち内部の実装を確認しなくてもいいコードだ。


逆にどういうコードが最悪なのかも明白だ。
それは、読むべきコードが多いひたすら多いコードだ。
ドリフのコントみたいに、こちらのドアをパーンと閉めたら向こう側のドアが連動して開くみたいに、複雑に依存して全部読まないと意味がさっぱり分からないコードだ。


コードを書くときは、それは読むべき内容を増やさないだろうか?と疑問を持ちながらコードを書けばいい。
そうすれば多少はマシなソースコードが書けるだろう。

関数型でも読むべき内容が多い最悪なコードな書くことができるし、手続き型でも読むべき内容が少ない良いコードを書くことができる。
しょせんは、読むべき内容を少なくするための方法論の一つにすぎない。
どちらがいいかを議論するのは時間の無駄だ。
そんなのを議論している暇があれば、お前らのクソコードから読むべき部分を少なくする努力でもしてください。