オブジェクト指向プログラミングと関数型プログラミングを対立的に考えない

少し前のものですが、こちらの記事がとてもおもしろかったです。

employment.en-japan.com

一部抜粋します。

オブジェクト指向プログラミングと関数型プログラミングは対立するものではなく直交する(直接関係がないため、自由に組み合わせられる)ものである

去年、この記事を読んだとき、この部分がイマイチ理解できてなかったのですが、最近、なんとなく理解できてきたような気がします。たぶん。というか、次のように考えてみると腑に落ちるような感じがします。

オブジェクト指向」は設計やプログラミングの 手法や指針のひとつ であり、「関数型」はプログラミング言語特徴 である。

「手法」や「指針」はいわゆるガイドラインみたいなものだろうし、「特徴」はそのものが持つ仕様みたいなものだと思っています。そう考えると、これらを対立的に考えたり、そもそも同じ土俵で比較すること自体があまり意味をなさないように思えます。

余談

あと、対立的な話としてたまに見かけるのが、例えば、「jQuery から xxx への移行」みたいな話。(xxx には JS フレームワークの名前が入る)

これらのフレームワークは、アプリケーションを構造化したり、ボイラープレートを隠蔽したりするための仕組みであり、jQuery は、DOM を操作するためのユーティリティであると思っています。「アプリケーションから jQuery の記述を駆逐して xxx に載せ替える」というのは、考え方がちょっと偏り過ぎというか、なんとなく手段が目的になっているようにも感じます。当然、適材適所はありますが、これらは共存できるわけです。

ものごとを対立的に考えすぎるあまり、本来あるべき姿と乖離しそうだなと思った次第です。