オブジェクト指向への拒絶反応
世の中に「オブジェクト指向」が登場して、かなりの時間が過ぎています。プログラミングの世界でのオブジェクト指向プログラミング(OOP)、設計分野でのオブジェクト指向分析(OOA)、さらにはオブジェクト指向設計(OOD)と、システム開発でその思考を用いる事ができるようになって久しいことと思います。
しかし、現実を見ると、設計・実装共にオブジェクト指向にて行うことができたケースというのはまだまだ少数側なのではないでしょうか。
わたし個人は「オブジェクト指向」を必須とも思わず、「設計・実装する際の1つの手段」として捉えています。手段の1つですから特にこだわる必要性もないのですが、ただ最近の開発言語は、どちらかというとオブジェクト指向の考え方と相性が良い、ここは利用するメリットの1つだと感じています。
ただし、それも実装に関連する部分においてで、「分析・設計分野ではどうだ?」といわれると、特に強く推す部分はないと感じています(わたしが理解できていない部分でもありますので)。異なる考え方で進めていて、思考の行き詰まりを感じた時に利用してみる、という程度です。実際「オブジェクト指向分析できますよー」などと言い切る自信もありません。
わたしが最初にオブジェクト指向を勉強し始めた時は、
「何がメリットなのかさっぱりわからん」
という状態でした。再利用性は別にOOPでなくともやり方によっては十分確保できるし、多態性においても結局全体のコード量はほぼ変わらないのに何がメリットなんだ? と頭を抱えていた時期だったと思います。
ちょうどそのころのわたしはシステムエンジニアな世界から離れ(略すと同じSEですが)、セールスエンジニア的な仕事をやっていた時期であり、実際に利用する場面もなく頭の中で理解するだけでしたので、なおさらよく分かりませんでした。
そこからさらに時は流れ、わたしが業務でオブジェクト指向を利用できるようになるまで大体3年程の時間が必要でした。形は理解できていても実用性が分からない、そのようにモヤモヤしっぱなしだった中、唐突に「あ、こういうこと??」とひらめきに似た何かがあったのですよね。それを境にガシガシと利用する側に回ることになりました。
わたしの周りに聞いてみても、同じように数年程の期間を経て、初めてある程度まともに利用できるようになったケースが多いように思えます。ただし未経験であればある程、最初からオブジェクト指向の考え方ができる割合が多いようにも思えます。
このように書いてしまうと、
「じゃあ別に使えなくてもいいじゃないの。それがなくとも同じように仕事できていたんだから」
と思われる方もいらっしゃるでしょうが、わたしとしては、実のところあまりそのようには考えていません。「ユーザーは何で開発されていようと構わない」という意見の延長線上でこの話題を扱うので、変に問題が複雑になっていると思います。
ユーザーとしては「目的を達成、問題を解決」できることがシステムを利用するうえで必須の条件です。そこは異論ありません。使う側としてはどのように作られた物ものあるか、ということにはそれほど重要度はないと思われます。
ですが、わたしたち作る側、そしてプロの仕事としてはどうでしょう。
仕事としてシステム開発を行う以上、必ず保守・運用フェイズまでを考えて行う必要があります。受注内容、契約内容にも左右されますが「作って終わり」で済まないケースが多々あります。そのような場合によく考えなければならないのは「保守性」ではないでしょうか。
保守フェイズでは「メンテナンスしやすい」ことが重要な要素となります。社内(場合によっては社外も含め)の人材を用いてコードのメンテナンスを行う際には、やはり「見通しが良い」「依存度が低い」「環境を再構築できる」など、よく言われるポイントが重要になると思います。
そこを踏まえて考えると、恐らくネックになるのは「社内の技術レベル」ですとか、「習得者の割合」ですとか、実装などとは異なるレイヤで問題になるのではないでしょうか。たとえ、有用な技術であろうと適用する土台がまだそこまで辿り着いていないのならば、逆に有害になることは多々あります。そのような場合は将来への努力目標とするのが適しているのではないか、と考えます(わたしの勤務先でも「努力目標」扱いです……)。
このような話題は、使う側には一切関わりのないことです。ですがシステム開発という仕事を行う側にとっては非常に重要なポイントです。「使う側には関係ないことだから」といってそのままにしてしまうというのは、自分たちの仕事を放棄しているようなものだ、と個人的に思います。
極端な言い方をしますと「ユーザーに関係ないからどのように作っても構わない」と、業務としてAPを作成する立場な方が本気でそのように思われるのでしたら、もう一度「自分たちにとっての開発業務」とはどのような物か、という点を考え直してみることをお勧めします。
ユーザーにとってより良いものを提供する、これは当然のことです。
開発業務としてはそれに加えて「自分たちの生産性を向上する」「保守性を高める」といった要素が、仕事である以上必須項目として存在するのだと思います。保守性・生産性の向上は巡り巡って利益の向上へと繋がります。業務であるならば利益を生み出す、それが単純にして重要な原則です。
オブジェクト指向が世の中に出てかなりの時間が過ぎているのは冒頭でも述べた通りです。IT関係の世界で生き残る技術というのは、何かしらの大きなメリットがあるのは間違いないところでしょう。使うことに疑問を持たれている方々は、反対に「なぜ、今になってもオブジェクト指向が生き残っているか」という方向から考えてみるといいかもしれません。どのように考えていようと、今現在も生き残っているのは間違いのない事実です。きっとそこにはまだ気づいていないメリットが潜んでいることでしょう。
※「長いこと生き残っている技術だから良い」というほど簡単ではないのですが、これはまた別として。
技術の進化はとどまるところを知らず、正に日進月歩という言葉通りです。ですが見ていると「使いこなせるまで辿りついていない」にも関わらず否定する方も残念ながら見受けられます。使いこなすまでの時間が足りないという難しさは含んでいるのは承知していますが、どうも反射的な意見も見えてしまいます。
「使えない(と思っている)から使わない」ではいつまでたっても先に進むことはできません。
「使えるようになった時のメリット」が大きいから使うのだと思います。たとえ習得に多くの労力を割いたとしても、それを補う程のメリットがあるのですから。
オブジェクト指向に限らず何かしらの技術・手法を使わないと決めるのは、使った時に得られるメリットが、かかる負担や社内に与える影響などのデメリットを超えられない場合なのだと思います。
もしオブジェクト指向に限らず、他の技術・手法を「全く」取り入れる事ができなくなったのであれば、
「土台とする組織自体が、世の中や同業者等から取り残されてしまう危険領域に突入している」
と思えてなりません。そうならないよう、気をつけたいものです。
コメント
がると申します。
…そうですねぇいわゆる「オブジェクト指向は使えない」と騒いでいる方のなかで「ある程度真っ当に、OOについて理解していると思われたりそれなりに真っ当な使い方で試してみたりしている」ように見受けられるケースは、知っている限りでは皆無ですね(苦笑
単純に。OOは「便利なお道具の一つ」なんですけどねぇ。
Ahf
がるさんコメントありがとうございます。
私もOOの議論の場で、そのような方は見たことないですね・・・。
ひょっとしたら、議論する、という時点で・・・。
返信有難うございます。
そうなんですよねぇ…議論するなら、議論対象に対して相応の造詣がない限り、せいぜいが「素人としての1見解」に過ぎないと思うのですが。
概ね「OOに対して無知である」のに「断定口調で否定する」傾向があるように思われるんですよね。
どこぞで「オブジェクト指向などクソの役にも立ちません!」と書いてある、「コンサルティングやインテグレーティングをしている会社」の代表取締役さんもいますからねぇ B-p
Ahf
さらなるコメントありがとうございます。
断定口調での意見、という傾向はその通りだと思います。
「~と思う」ではなく「~だ」という強い口調なんですよね。
あれもまた不思議なところです。
件の方は、意図的にそうやっている時と、本気でそうしている時両方あるように見受けられますからねぇ。コメントの難しいところです(苦笑
ただ人を呼ぶスキルはかなり群を抜いているかな、と思ってますよ。
ThinkerInC#
オブジェクト指向に関する記事以外は、同感率95%です。
オブジェクト指向(OO)が登場した背景は、世の中の要求がOOになってきているからです。現在、それらは、XMLという形で、既に、一般化し浸透しています。一般人の知らない裏方で機能しているということでしょうか。
お客の要求がOOなのにも関わらず、フラットな設計・実装しか出来ないSE/PGがソフトウェアの可能性を潰してしまっている悲しい現実を多々見受けます。
OOの価値に気づかないと、XMLの存在も便利に思えないことでしょう。
そもそも.NETの登場自体が、XMLへの対応を主目的としていた、と個人的には思っているのですが。
Ahf
ThinkerInC#さんコメントありがとうございます。
世の中の要求がOOになってきている、というご指摘ですがこのあたりは少々難しいところですね。私の感覚としては、要求がOOになってきているというよりも「OOが適した要求が増えてきている」感じですね。
要求を出す側としてはそこまで意識するかどうか、出せるとしたらそれは結構限られたユーザーかな、と思います。
OOとXMLの関係も、EDI等XMLを利用しているけどOOとは離れている領域もありますから、一概に結びつけてしまうのはどうかな、と思います。
ちなみに、XMLへの対応、ということであれば.Net以前でもDOMやら何やらありましたので、そうそう変化していなかったような気がします。もちろん、.Netになって非常に対応しやすくなりましたので、目的の一つではあるかと思いますが。