比例道

オブジェクト指向プログラミングが生産性を上げるという通説には疑問

2022年5月7日 07:00 ・ PC ・ 歴史 ・ 元の記事
オブジェクト指向プログラミング言語を初めて使ったのはsmalltalkだった。1980年代だ。smalltalkを使ってみてオブジェクト指向プログラミングは面白いとは思った。その後オブジェクト指向プログラミング言語としてJava、C++、perl、Ruby、Pythonなどを使ったが、オブジェクト指向プログラミングはバグが出やすいと思った。
なぜバグが出やすいと思ったのか。それはプログラムの全体を把握するのに読まなければならないコードの行数が多くなるからだ。プログラムの全体を把握するためには、クラスをたどって一番上のクラスまで理解しなくてはならない。そうなると必然的に読む行数が増える。頭の中のスタックにため込まなくてはならない情報が増え、混乱する。最近の大きなプログラムはC++やC#などで書かれていることが多いからいつまでたってもバグが取れないのだと思う。
これは巷のプログラミング本とは真逆の主張だ。それらの本ではオブジェクト指向プログラミングこそ、大規模プログラムの生産性を上げバグを減らす手段だと述べられている。それらの本と私と、どちらが正しいのか。
プログラミングを分業化して、たくさんのプログラマにコードを書かせる場合は、本の言う通りオブジェクト指向プログラミングの方が生産性が上がるだろう。それぞれのプログラマは指示された仕様通りにコードを書けばよい。自分が使うメソッドがスーパークラスで記述されている場合はスーパークラスのコードを読む必要があるが、それ以外は知らなくて良い。余計なことを覚える手間がない分生産性も上がる。
しかしこのコードの書き方では、「クラスの設計が最適ではない」と気付くことはできにくく改善もできない。最適ではないクラス設計によりコードを書き足していくとそのうちバグが入るが、それを誰も気付けない。ここがオブジェクト指向プログラミングの欠点だ。
私は1万行以上の大規模コードを書かないから、プログラミングを分業することはない。全部ひとりで書く。そうなるとオブジェクト指向プログラミング言語より、C言語の方が全体を見通しやすいしバグも入らない。C言語以外に使うのはマクロアセンブラくらいだ。
さて、私の意見と通説とどちらが的を得ているだろうか。それは実のところ私にも分からない。

2022年の記事 ・ トップ