いろいろやってみるにっき

てきとーに生きている奴の日記

古いエントリのサムネイル画像がリンク切れになってたりするけど、チマチマ修正中


釣られてみる 『記者の眼 - オブジェクト指向や関数型は「敗者の道具」である:ITpro』

二連休ってすばらしい(挨拶)。

 

記者の眼 - オブジェクト指向や関数型は「敗者の道具」である:ITpro に釣られてみる。ちょっと長いが引用する。

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

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

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

 

Scala」と「OCaml」の話を振るのに、これはいくらなんでも釣り針が大き過ぎるだろ。 

情景小物 092 釣り堀

情景小物 092 釣り堀

 

 

 人間が得意な情報の処理方法は抽象化。コンピュータが得意なデータ処理は具体そのもの。人間は「なんとなくこんな感じ」で処理できるが、コンピュータにそういうことをさせるためには、何をどの程度抽象化するのかを具体的に決め、決めた通りにプログラミングする必要がある。逆に人間の処理能力では、コンピュータと同じようにビット単位で大量に高速処理することは難しい。

「人間がコンピュータの挙動をすべて把握することはできないことを前提に、そうした人間であっても良いプログラムを作れるように編み出された方法論」じゃなくて、抽象化・隠ぺいしているんだよ扱いやすいように。

 

コンピュータ言語(高級言語)も同様である。人間がコンピュータを扱いやすいように抽象化している。細かく見る必要が無いものは隠ぺいしている。あんたはレストランに行って何か料理を頼むとき、材料の作り方(農作物、加工食品)、材料の採りかた(漁や猟)についてそれぞれ実施内容を指示するのかという話。それだと料理を頼んでから何か月も先じゃないと料理にならない。材料の確保についてはレストランにお任せするのが通常。オーナーでもなければ。料理方法についても以下同文。

実現できているかどうかは別にして、プログラミング対象をそのままプログラミングできるようにしているのがコンピュータ言語(高級言語)。DRYの原則を守ってメンテナンス性を上げるために考えられたのがOOA/OOPなどの手法。

 

なんかすごく基礎的な部分は理解せず、いきなりOOや関数型とか知ったんで書いてみましたみたいな文章でP1~P2とP3,P4の乖離が大きい。日経BP所属の人はITproではこういう釣りメソッドを強要されているのか?外部の人が書いたものは釣りが少ないのに。 

 

 

あとオレの個人的な意見からすると、昔誰かのツイートで見た「OOは人類には早すぎた」に賛同する。OOを完全に使いこなしている少人数のチームに、全ての実装を任せられるのであればOOは素晴らしいと思うけど。

もちろんプロセス指向やDOAじゃなく、DIやAOPくらいがいいんじゃないかと思う。

 

お時間あったら、他のエントリもクリックして頂ければ幸いです。