仕事と趣味とOOP

プログラミング言語に何を使用するかの選択は難しい。仕事では当然、過去の資産やアプリの都合など色々な要件によって決定される。ある意味始めから決まっていたり、選択肢がないことも多いと思う。
しかし、趣味でプログラミングするなら、面白い機能があるとか、開発効率が良いなどの理由で選ぶこともできる。


また、ネットを色々見ていると、あるプログラミング言語自体や言語のポリシー、パラダイムを頭ごなしに否定する人も多い。しかし、私はプログラミングはバランスが大事だと思っているので、そんな単純な話ではないと思っているし、記事を読んでも納得もできないことも多い。


見かけたものとしては、オブジェクト指向を全否定していたり、動的言語を全否定していたり…。
私は、オブジェクト指向(以下OOP)について考えたときに、例えば、Cのような手続き型言語よりも優れているというのを一言で表現することはできない。OOPは奥が深いからだ。逆に私も含めてOOPのメリットをきちんと説明できる人はほとんどいないと思う。まだ納得いく説明を書いている記事を見かけたことがない。


有名な表現を借りれば、「再利用性が増す」であるが、それは抽象化の賜物なので、OOPではなくて、新しいパラダイムの言語全てに言えることではないのか!?それじゃあ言い方が、抽象的過ぎる!!
思うに、所詮OOPのメリットなんて、地味な部分の積み重ねに過ぎないと思う。


しかし、OOPにより、インタフェースの考え方やモジュールの考え方をプログラマに意識させたと思うので、そういうのは大きいような気もする。
また、インスタンスの考え方やオブジェクトが1つずつばらばらに働くという考え方も大きいと思う。
そう考えると、所詮、見る角度を変えただけ(いわゆるパラダイムシフト)であるが、そのための構文もサポートしているので、OOP言語以外でOOPを実現するのはメリットが半減すると思う。


# 明日は、ライブラリの観点からOOPを再考してみよう。
# ポイントとしては、「ビルトインデータで作成できるライブラリ的処理」、「ユーザデータを伴うライブラリ的(サプライヤ側)処理」、「アプリより(クライアント側)の処理」の3階層に分けて考えてみる。