嫌われプログラミングの代弁者

「何で頭ごなしに嫌う人間が居るのか」を色々考える

JavaScriptが大変 2

2つの思潮?

本当に、関数型プログラミングについて「形而上などと言ってしまった事を恥じる
必要が有る」のか釈然とせず、色々考えたのですが、

関数型プログラミングについて2つの思潮が有るとすると、上手くまとまります。

それは、

  1.  何か素晴らしいとされ、しかしながら、いつまで経っても「手法固有の」事例集が作れない、形而上の“何か”を奉じて、他を排除しようとする思潮
  2.  大データに絡みつく様に関数が実行され、大データの読み書き(副作用)
    を本質的な実行内容とし、同時に実行している関数間には直接的な通信手段が
    無い、様な書き方のプログラミングを良しとする思潮

です。

1. の様な事は、jQueryより新しい、ユーザインタフェース構築のためのJavaScriptライブラリでもしばしば起こり「モダンな規範作成」分野の一種の業病で有るのかも知れません。

また、2. はデータのコピー(高コスト)が最小限となり、大規模な処理でも実用的な時間内で完了する現実的な手法となります。

具体的には?

20年前に、

  • 何を言っているんだ、それを考えるのはお前たちだろ

と言い、20年経っても解を持たなかった、関数型プログラミングを奉じていた
人間は、間違いなく1. の側ですし、それと同じ時期に「関数型言語の代表」と
されていたC言語は、間違いなく2. の側です。

 

2. の側の例として、

  • C言語は、実メモリという大データに、関数が副作用として読み書きをする手法ですし、
  • JavaScriptは、DOMという大データに、(無名の)関数が副作用として読み書きをする手法ですし、
  • SQL言語は、データベースという大データに、(部分部分が)関数的ともいえなくも無いSQL文が、副作用として読み書きをする手法ですが、

これらは1. の人間からは「関数型では無い」とされるものです。

なぜなら1. の人間は全てを「違う」と言うからです。素晴らしい何かを永久に祭り続けるのが唯一無二の目的です。

2. が有るなら良いじゃないか?

1. と関わらなければその通りです。しかし1. と関わり、納得した人は、それが提示する圧倒的な良さから、それのみを期成してしまい、現実的なプログラミングを学ばなくなるのです。

関数型全てが有害では有りませんが、有害で無い関数型は語られる事が無く、それ故、現在語られている関数型は形而上の議論であり、本当に有害です。

結論

JavaScriptは特定の問題を良く解ける手法ですが、素晴らしい形而上の関数型とは違う様で、これからも「JavaScriptが大変」な事でプログラミングが嫌いになる人は存在し続けることでしょう。