第41回デザインパターン(GoF)は必要か不必要か??

更新日:

こんにちは。森川です。

今日は技術的な話です。
前回までは、

これまでの流れ

今回は、「デザインパターン(GoF)は必要か不必要か??」というお題で書いてみたい。

デザインパターンとは、一番代表的なものと言えばGoF(Gang of Four)の23個のデザインパターンです。
そもそもGoFのデザインパターンがでてきたのが1990年代で、その当時とシステム開発の状況も大きく変わってきています。
今はフレームワーク主流の時代ですが当時はそんなものはないです。

そんな古い技術が今もまだ必要なのか??学習しないといけないのか??という話は、いろいろな人が自論を述べています。

今回は、デザインパターン(GoF)が必要なのか不要なのか?私なり自論のを述べてみたいと思います。

私の持論

■私の考え
・必要である

■開発現場で必要か
・知らなくても問題ない

■ではなぜ必要なのか?
オブジェクト指向の3大要素である「継承」「カプセル化」「ポルモーフィズム」を理解するために必ず通る道である。
いくつかは開発現場でもでてくるが、学習題材としての要素が強い。

解説

フレームワーク主流の開発状況になっている現在、GoFのデザインパターンを実装するという機会は少ないです。
知らない開発者の人の方が多いため、あえて使わないというところもあります。
またフレームワークによっては、アノテーションに記載するだけで、シングルトンになったり、コードをよく知らなくてもシングルトンを使ったりできます。

では、なぜ開発現場であまり使われないものが必要かというと、オブジェクト指向の3大要素である「継承」「カプセル化」「ポルモーフィズム」を学習して理解する過程で、必ずGoFのデザインパターンを通るからです。
GoFを学習していないと、おそらくオブジェクト指向の3大要素は理解するのは難しいと思われます。

私の経験

上記のことを私の経験を踏まえて話してみたいと思います。
少し長くなりますが、興味ある方はお付き合いください。

私は10数年前、自分のスキルに自信を持てない時期がありました。
なぜかというと、まわりからは「そんな仕事ができてすごいですね」と言われることはありましたが、心の中では「いやいや誰でもできます。システムを作るってそんなに難しいことじゃないです」と思っていました。
フレームワークありきの便利な時代に作るだけなら、そんな難しくないのです。
フレームワークの使い方を覚えればいいだけなので。

でも作ることはできたからと言って、システム開発の本質を理解しているかと言われたら決してそんなことないのです。
例えば、SQLインジェクションやらセキュリティまわりの話を別に知らなくても、フレームワークの使い方を覚えるだけでシステムって作れてしまいます。
詳しい話は別に知らなくてもフレームワーク君が勝手に対処してくれるからです。

「そんなので本当にプロと言えるのだろうか??」

当時の私の悩みでした。

当時の私は、
「あなたはプロのシステム屋ですか?」と当時こんな質問をされたら
「仕事でやっているのでたぶん。。。」と自信のない答えをしたことでしょう。

プログラミングの本質を理解したいと強く思い、では何を勉強すればよいのか??と常に悩んでいたのを記憶しています。

プログラミングに携わっていると「オブジェクト指向」という言葉に必ず出会います。
そして当時、これがすごく難しかった。「多様性」「カプセル化」とかオブジェクト指向に出てくる語句の意味するよくわからなかった。
漠然とですが、プログラミングの本質を学ぶにはこの難しい「オブジェクト指向」を理解しないといけないのだろうなぁと感じていました。

果てしない「オブジェクト指向」習得への旅立ち

当時私は、ASPを使ったWEB開発の仕事がメインでした。
ASPはVB6がベースになっているため、完全なオブジェクト指向の言語ではないです。

そこでオブジェクト指向→JAVAという先入観が持っていたため、JAVAを学習することにしました。
東京で勤め人をしていたときでかけられる時間も少なかったため、心の弱い自分では独学では習得は難しいだろうと思い、大手スクールに通うことにしました。

知らない間になくなっていましたが、ナガセキャリアセンターという比較的大手のスクールに通ったのを覚えています。

当時はまだJAVAがサンマイクロの時代で、JAVAの資格といえばSJCPでした。
資格をとれるぐらいしっかりやれば、オブジェクト指向も理解できるようになるだろうと勉強しました。1年ぐらいスクールに通ったかな。

しかし!!!

結果は、資格はとれましたが、「オブジェクト指向」がより一層わからない???という状況になってしまいました。
なぜかというと、JAVAを勉強すると、新しいことがたくさんでてきました。継承、実装、抽象クラス、抽象メソッド、インターフェースなどなど。
勉強したので文法的には書けます。でもこれらをいつ使うのかわからないのです。

文法的には書けるけど、使い道がよくわからない!!自分の作るシステムに使おうとしても使えないのです。
そんな混沌とした状況になってしまいました。

私は、文法だけを勉強しても「オブジェクト指向」は理解できないことに気付きました。
文法を勉強することは単なる道具の使い方を勉強しているだけで、いつどのようにそれを使うか(設計)は別の話だったのです。

では、オブジェクト指向の設計を勉強するためには何をすればよいのだろう?といろいろ悩みました。
文法を教えてくれるスクールはたくさんあります。でもオブジェクト指向の設計について教えてくれるところってほとんどないです。
実務の中で学ぶしかないと思い、うれしげに継承じゃなんやら使っていましたが、結果は本当にこの使い方であっているのだろうか??と疑問がますます増えるだけ。
そうやって数年か格闘しました。

そんな中あるときにGoFの23のデザインパターンに出会いました。

何をきっかけに知ったかは覚えていませんが、初めて見たときにすぐわかりました。
オブジェクト指向の設計を学ぶにはこれだと。これを理解すれば、オブジェクト指向の難しいやつらを克服できることを。これを学習すれば自分の悩みが解決できることを。

しかし!!!

一番有名な著書であろう結城さんのデザインパターン入門の本を購入して学習しましたが、全く意味がわからん!!
なんでこんなめんどくさいことをするのだろうか???

デザインパターンを使う理由が全くわからなかったのです。
だからコードは書けるけどデザインパターンを自分が開発する仕組みに応用することはできませんでした。
「これは独学ではちょっと厳しいわ」と思いました。

誰か教えてくれるところはないかと探したのですが、全くと言っていいほどないね。
大手スクールでもそんなコースやっているところはなかったです。
高度過ぎてニーズがないのと、それを教えられる人もそんなにいないからだと思います。

しかし!!!

私の執念を神は見捨てませんでした。
灯台下暗し、近くでそれを教えてくれるところがありました。
それがアドバンスクール広島の野辺先生でした。
あれから数年たちますが、当社の社員の研修をしてもらったり今もお付き合いさせてもらっています。

デザインパターンから気づかされたこと

デザインパターンを学習して、プログラミングの視点を180度変えないといけないことに気付かされました。
私は必至に「作る」という視点でプログラミングを考えていました。
それじゃ理解できないのです。デザインパターンは「運用する」という視点で考えられている技術ですから。(詳しくは前回のブログを参考にしてください)
そもそも物を見る視点が180度違うからデザインパターンの意味がわからなかったのです。

このデザインパターンを理解して、自分の作るシステムに実装できるようになって気付きました。
オブジェクト指向の小難しいやつらを理解できるようになっている自分に。
そして、もう一つ気づきました。これで終わりじゃない、もっともっと先があることに。これは始まりにすぎないことを。

まとめ

デザインパターンは、プロのシステム屋として他の人と差別化したいなら是非習得することをお勧めします。
どの言語でも使える技術です。

いろいろな人がブログやYouTube言っていますが、デザインパターンをきちんと学習して理解している人は、そう多くはないです。
そして、理解しているとしていないで大きな差があります。それは上記で述べたように視点が全く違うからです。

私もまだまだ完全ではなく、えらそうに言える立場ではないですが、上記に同感です。

私の技術的なブログに、オブジェクト指向を取り上げているのは、今回書いたように自分自身が理解するのにいろいろ苦労したからです。
このブログを読んだだけで理解することは難しいですが、同じ悩みを抱えるプログラマーさんのヒントや指針になればと思い書いています。

ではでは。

システムコンサルティングの詳細はこちらから

システム開発の詳細はこちらから