私は「もし完全無欠のプログラマがいるとしたら、どんなプログラマだろう」と夢想することがあります。「完全無欠のプログラマ」と聞いてどんなプログラマをイメージするかは人によって異なるでしょう。「難しいアルゴリズムを使いこなしてすばらしいプログラムを書く人」を想像する人もいるでしょうし、「チーム内のプログラマの能力を極限まで引き出して最良の結果を生み出す人」といったチーム寄りのイメージを持つ人もいるかもしれません。

 「オブジェクト指向プログラミングや関数型プログラミングをバリバリ使いこなして優れたソフトウエアを作る人」というイメージを持つ人もいると思います。しかし、ちょっと考えてみると、これはおかしな話です。なぜなら、オブジェクト指向プログラミングも関数型プログラミングも、「人間がコンピュータの挙動をすべて把握することはできないことを前提に、そうした人間であっても良いプログラムを作れるように編み出された方法論」だからです。

 もし完全無欠のプログラマが存在するのであれば、そうした方法論に頼らなくても、完全に意図通りに動作するプログラムを頭から書き下していけばいいのです。オブジェクト指向プログラミングや関数型プログラミングは、不完全な人間のために用意されたもの、いわば「敗者の道具」といえます。

 もちろん、これは極端すぎる表現です。例えば、人は空を飛べないので飛行機に乗ります。このことをもって「飛行機は敗者の道具である」と言う人はいません。そうした意味では、オブジェクト指向プログラミングや関数型プログラミングを敗者の道具と呼ぶのは、単なる言葉遊びにすぎません。人間が全知全能でないのは当たり前ですから。