手続き型に改宗しました

つい先日にあのような資料をアップロードして心苦しいのですが、手続き型に改宗することにしました。誰よりも関数型言語を愛し、常日頃よりどうして関数型が流行らないのかを考え続けていた私ですが、10年余りを経てようやく気付きました。関数型がイケてないから流行らないのだと。

関数型の人たちは言います。immutableこそ正義であると。でもそうなんでしょうか?変数に代入できる方が書きやすいに決まっています。書きにくいと思いつつも、Haskellというのは曰く、素晴らしい言語なのだから、そんなことはないはずだと自分をごまかしごまかしこれまで生きてきましたが、そうじゃないんです。ようやく目が覚めました。変数に代入できる方が書きやすいのは当たり前なんです。

モナドなんてへんてこなものを当たり前のように持ち出さなければならない時点でおかしいことに気付くべきでした。なぜ私はコンソールから文字を入力したいだけなのに、そんな妙な数学の匂いのするものを利用しなければならないのでしょうか。うまく使えば便利だという話はそれはそれで尤もですが、殆どの場合にそんなものは必要ないでしょう。他の言語を見てご覧なさい。どれも困った様子はないでしょう?

型も良くないです。型があれば実行時にバグに悩まされないなどと仰いますが、結局のところ配列の添字がおかしいとか、パターンマッチ漏れとかはわからないんです。コンパイルが通ってそれがそのまま動作するなんて、ほとんど幻想です。それなのに、コンパイルの通りは著しく悪くなります。コンパイル通すだけで一苦労です。私なんて、コンパイルが通らなくてプログラムを完成させるのを諦めたこともしばしばです。それならいっそ、バグっててもいいから動いて欲しいと思います。

高階関数も良くないんです。人間というのは、あまり複雑なものを扱えるように出来ていません。関数の時点で難しいんです。それなのに、関数に関数を渡すとか、難しすぎるんです。さらにそれが許されると、関数を渡す関数を渡す関数なども考えなければならなくなります。とても人間の制御出来る範囲を超えています。関数がファーストクラスじゃないというのは、考えてみれば、人間の能力の限界にフィットしたとても現実的な制約だったんです。ループを再帰で表すというのもありますが、無茶もいいところです。再帰というのは難しいんです。私の周りでも、再帰が分からずに躓く人を大勢見てきました。どうしてfor文で簡単に扱えるものを再帰で書かなければならないんでしょう。人は制御の流れをイメージするのは得意だけど、再帰的なものをイメージするのは苦手なのです。

冷静になって考えてみれば、とてもシンプルな理由でした。「関数型は書きにくい」。初めて関数型に触ったときは今まで自分がやってきたプログラムとは全く違っていて、それはそれは素晴らしいものに見えました。でもそれはプログラマが罹るはしかのようなものだったのです。10年もの間熱に浮かされていましたが、ようやく目が覚めました。現実が見えてきました。私は手続き型に改宗します。

ついでに言いますと、オブジェクト指向もいらないです。純粋手続き型(?)でいいのです。オブジェクト指向コンポーネント再利用できて生産性向上、というのが典型的なオブジェクト指向プログラマの言い分ですが、皆さん、クラスを作ってそれが他のプロジェクトで再利用できたためしなんてあるでしょうか?

デザインパターンなどというものもありますが、あれも必要ないです。ご存じの方はご理解いただけるかと思いますが、あれはとてもややこしいものです。やろうとしていることはどれもとても単純なことのはずなのに、クラス階層図は目を背けたくなるほどの複雑さです。そんな仰々しく天下り的なものを受け入れなければならない時点で、何かがおかしいと気付くべきです。

そうです。世の中にはC言語があればそれで十分なのでした。Cのプログラムやライブラリを見てみなさい。どれも何の過不足もなくうまく廻っているではありませんか。なぜ関数型などを持ち出す必要がありましょうか!そういうことなんです、関数型が一向に流行らないのは。こんな簡単なことに私もようやく気づきました。

これからはこのページは純粋手続き型雑記帳としてやっていこうと思います。以前の内容は、とてもお見苦しいものではありますが、若気の至りということで残しておくことにします。落胆された方も中にはおられるかと思いますが、必ずご理解いただけるものだと思っております。これからも変わらぬご愛顧をよろしくお願いいたします。