#1.オブジェクト指向が持て囃された時代
私がソフトウェア開発に関わり始めたのは2006年。その当時、Webシステムの開発が盛んになりはじめて、Java、Perl、PHPでの開発することが多かった。
2006年はmixiがSNS企業として上場をした年で、当時、SNSを開発する会社は多かった。
当時、開発手法としてはJavaでオブジェクト指向設計で開発することが良いとされており、UMLでモデル設計をして、クラス設計をして開発しようという「号令」が開発現場ではよく聞かれた。Javaに限らず、PHPでもオブジェクト指向設計を取り入れようという動きは当然あった。
あくまでも「号令」であって、実際に、オブジェクト指向できれいに組めている現場はあまりみたことがないのだけど、とりあえず、オブジェクト指向設計を使うことが「指向」されていた。
ソフトウェア開発の「流行り」の技術は、耳目を引きたいがために、最初は良さしか喧伝されない。
そして、その「流行りの技術」は「神聖視」され、それがわからない、使いこなせない人は「老害」、「時代についていけない」、「能力がない」というレッテルを貼られがちだと思う。
それは昔も今も変わらないと思う。
そうした背景を「オブジェクト指向」をもっていたように感じる。なので、理解しているか否かは別にして、「号令」としては「オブジェクト指向設計」を採用していた。
#2.Javaやクラスを使えば「オブジェクト指向」?
では、オブジェクト指向設計を取り入れることで開発は効率化したのだろうか?
その答えは難しい。
というのがおそらく、JavaやPHPでクラス文法をつかっていれば「オブジェクト指向」だと思っている、または、そうとしか考えられないようなコードを現場でたくさんみてきた。
つまり、実際、「オブジェクト指向」という「号令」はあれど、内実はCOBOLでしてたのと同じく、手続き指向的な設計でされていたのが多かったように思う。
よく指摘されるのは、「static」を多用しているコードがあげられるだろう。
#3.オブジェクト指向への批判、関数型パラダイムの台頭
また一方で、オブジェクト指向の要素は取り入れているのだけれど、多階層の抽象化による実質GoTo文のような「スパゲッティ・コード」がたくさんあったりと、「オブジェクト指向」の要素を取り入れようとして形を変えた既知の問題が発生したり、逆に手続き型のコードよりわかりにくくなるものもあった。
その他、オブジェクト指向設計自体の問題、または、それを使いこなせないことが原因で、2015年あたりにはオブジェクト指向への批判がみられるようになった。
「OOP harmful bad waste」などのキーワードで検索すればいくらでもそうした記事は見つけられる。
最近は、Go、Rust、Nimなどの次世代言語がクラス文法を採用しないことや、関数型言語のパラダイムが取り上げられることで、益々、オブジェクト指向への風当たりはきつくなっている。
最近は、Javascript、特に、Reactの開発においても関数型のパラダイムが取り入れられており、オブジェクト指向一辺倒な設計ではなくなっている。
#4.設計手法に銀の弾丸はなく適材適所
個人的に、オブジェクト指向設計が有害だとも思わず、そこにまつわる単一責任、カプセル化、ポリモーフィズムなど処理を共通化させ、コード量を削減する手法は有益だと思う。
要は、オブジェクト指向一辺倒でアプリケーションすべてを構築するのは限界があるということで、利用領域によっては向かない部分もあるということだと思う。
値・状態の加工がメインの場合、オブジェクト指向は有効な手段だろうし、一方で、状態より値と値の関係に注目し、冪等性を担保する場合、副作用をなくすなどの関数型のパラダイムの方が有効だろう。
また、Webやスマホのアプリでは、クリーンアーキテクチャやコンポーネントなどモデルとインタフェースとの関係を深堀りして考えた設計手法などに意識を向ける必要もある。オブジェクト指向の否定というより、それも踏まえて、さらに深化した設計の観点が必要だということだと思う。
#5.「流行り」に潜む問題点
ソフトウェア業界は「最新技術」への関心が高く、「最新マウント」を取りたがる人もたくさんいる。
技術系の記事や書籍は最新技術の告知が一つの売り物なので、それは仕方ないし、それによる恩恵もある。
流行るにはそれなりの論理的な意味もある。
けれど、「商売」「マウント」というものが発信される裏にはあり、ともすれば、「メリット」しか喧伝されない。
おそらく、これまでもそうでったように、これからも技術には「メリット」「デメリット」「限界」「守備範囲」というものがあり、ある技術だけですべての問題を解決することはないと思う。
できれば、「流行り」の技術の「デメリット」「限界」「守備範囲」などがあるという意識をもって情報を読んだり、
または、発信する側もそこへの配慮もないと信憑性が薄いと思う。