オブジェクト指向が難しい理由。デザインパターンを学ばないと使えないから?
今日もObject-Oriented Programming (OOP) 学習の記録。
今日、気が付いた。いくらOOPの原則を学んだとしても、実際の使い方側からないということに。そしてこれ、OOPが生まれてから多くの人が悩んだらしい。
(約 3,200文字の記事です。)
OOPを実運用するためにはパターンがあった
んで今はカンペ、チートシートならぬデザインパターン本が既にあったのだ。有名な教科書、GoF本だ。(今日知ったけどw)
色々調べてみたら、おそらくソフトウェア専攻の人ならば知らない人はいないだろう、という鉄板な本らしい。ただ一般的な知名度は低いどころか、ほぼないと思う。
要するにOOPを、いつ、どんなときに、どうやって使うのがいいのかの指南書らしい。とはいえ「使い方」なので、時代背景やコードスタイルが変われば、使える法則もあれば陳腐化して使われなくなった法則もあるらしい。
なのでOOPの原理を理解しただけでは即自分のコーディングに生かせない。いつ・どうやって・どんな考え方を、目の前のコードに生かせばいいのか?これは実は考えて生み出すのではなくて、上記の知識によって「どのパターンが使えるか?効果的か」を考える必要がある。
そう、OOPの概念だけをマスターしても、まったく役に立たないのである。
なので次はデザインパターンを理解する必要がある。
OOP学習は学習曲線が急峻
上から順に書いて実行して分かりやすいハローワールド、あれはプロシージャル・プログラミングなので分かりやすい。学習曲線が直線的。なので分かりやすいし、プログラミング初心者が色んな文法を覚える場合でも「書いた分だけ実力になる」という線形な学習曲線だ。
対してOOPは、使いこなせるようになれば最強だが、そこまでの試練、修行期間が長い。これは1年以上は学習が必要だと感じる。年単位での継続学習でようやく使える武器になると予感した。ダッシュでも2~6ヶ月は学習が必要。毎日根を詰めて学習しても、1週間や1ヶ月程度では、ひよこに産毛が生えた程度な気がする。OOPの学習曲線はしばらくは低空飛行な期間が長いと思う。
なのでOOP学習に集中することはいったん終了。学習レベルをサブに落として、他のメインの何かと併走させることにした。
主要なデザインパターンから学ぶ
OOP学習ではこちらのコースで学んだ。講師のゾラン先生の説明が分かりやすかった。
ゾラン先生が作っている以下のコースで、GoF本の全部ではなくて、主要な幾つかを理解することにした。
というのも前述したようにGoFは執筆当時のパターンであって、絶対でもないし、廃れたパターンもあれば、GoF本にない新たなパターンも登場しているとか。なのでGoF網羅でOK、とはならないようだ。
要するに沼。
なのでゾラン先生の講義に従って、このコースに出てきたものだけは覚えておこうと思う。あとはそれをマスターしたあとに増強しても遅くはないだろう。
OOPじゃなくてもプログラムは動く!
そしてよくよく考えると、別にOOPじゃなくてもプログラムは動くんだ。モジュラープログラミングでも、プロシージャルなコードの集まりでも、動くんだよ。なので、どうやら今はそこまでOOPに拘る必要もないな、と考え直した(笑)
というわけでOOPは第2学習目標として格下げし、第1学習目標に「C# で何でもいいからアプリを作る」という目標に変更。
OOP学習だけじゃ「つまらない」から
そう、OOP学習は苦行に近い。それを覚えたから何なのさ?という感じだ。実際にコーディングに生かせるようになった瞬間から急激に伸びる、と思う。でもそこに至れない間は「だから何?何にもできないでしょ?」になってしまう。それではつまらない。
せっかくC# なのだから、GUIで色々やりたい。コンソールアプリはつまらない。
というわけでGUIメインでボタンや入力ボックス類と対話しながら結果を出力するアプリの学習教材を購入。明日からこちらをメインにしつつ、サブとしてデザインパターンの学習を進めることにする。
要するに遊びながら、楽しみながらC# の文法になれつつ、GUIベースのソフトを作りたいわけだ。それがもしプロシージャルな、モジュラーなコードでも構わない。
将来的にOOPをマスターしたときに、必要ならば過去の自分のプロシージャル・コードをOOPでリファクタリングしたっていい。今は「動くプログラム」になってさえいればそれでいい。
というわけでOOPの日記関連はいったん今日で終了予定。あとは散発的に気が向いたら書く程度で。
明日からは多分C# でのごく普通のアプリ作りの日記になる予定。
個人的にはOOPについて色んなことがわかったので満足😊
今まで不気味だったOOPも、学習をしてみて不気味ではなくなった。そして「なんでこんなにも難しいんだ?」も分かった。概念の理解も難しいが、実際どう使うの?が分からない理由も、結局はデザインパターンを学ばないといけないことが分かったので、納得。「なんでこの場合にこのコードをそう書き換えるのか?」には結局、いにしえのパターンの応用という裏技を知らないと魔法みたいに見えるわけね。多分。なのでそのいにしえのパターンを学ぶまではOOPは絵に描いた餅ってわけ。それが分かっただけで納得した。
ただしデザインパターンはGoF本で20個以上もあり、流行廃りもあるし実用性も賛否両論とのことで、GoF本を消化するよりも、信頼できるUdemy講師のオススメパターンをまずはしっかり体得しようと思った。それだけでもかなり前向きな気持ちになれる。
あとはそれと併走してC# そのものを自分の武器にするために、写経による学習。ただしPythonのときと違って最初からGUI。Tkinterみたいな謎の呪文もなく、最初から純正GUIエディタでGUIを設計できる。
長い長いOOP学習の旅だったが、突然に今日、終了。
明日から第2幕である。
今回の創作活動は約45分(累積 約3,906時間)
(1,151回目のnote更新)
読んでくれてありがとう。気長にマイペースに書いてます。この出会いに感謝😊