Object-Oriented Programming (OOP) をC# で学習することにした
さて昨日からC# を学び始めたわけだが、色々とPythonと比べて分かったことがある。そして実はPythonからプログラミング学習を始めてもまったく悪くなかったと感じている。Pythonのいいところも分かってきた。それらを踏まえてC# とどう付き合っていくのかをまとめてみようと思う。
(約 3,200文字の記事です。)
私がC# でやりたいこと
色々考えていると頭がこんがらがってきたので一度マインドマップで整理してみた。Pythonのときに考えていた内容などもごちゃ混ぜになっていたので一度「なぜC# を学ぶ?目的は?」などなど自問自答してまとめ直してみた。結果としては、
Unityで使いたいから
Object-Oriented Programming (OOP) を学びたいから
自分用アプリ開発
この3つだ。そして昨晩C# の教材を少し進めてみて気が付いた。
C# はOOPが基本
もちろんPythonでもOOPはできるが、Hello worldレベルからすでに記法がかなり違う。まずサンプルのソースコードからしてC# ではOOPを前提としているな、という感じがした。なのでOOPに習熟していないと割と早い段階で詰む、と予感した。
学習中だったPythonでも「次はOOPを身につけて過去の自分のソースコードをリファクタリングしよう」と思っていたところだった。なのでこのタイミングでC# を学ぶのは当たりだと思った。
なのでまずはC# でOOPを学べるUdemy教材を探してみた。よさそうなものを見つけたので早速購入して学習中。近いうちに感想を書く予定。
(2024年8月30日追記)
英語という壁を乗り越える意思があるなら超絶オススメコースです😊
普通の人と学習順が逆
多くの人はゲームを作りたくてUnityを始め、その過程でどうしてもC# の力が必要になってから渋々C# を学ぶというパターンだと思う。
私は逆で、C# というプログラミング言語を学び、C# でできることを知った上でUnityに使っていくという逆順でスタートすることにした。プログラミング言語を軸として学習を開始しているため。なので今回は「C# でOOPを学習する」というテーマでスタートすることにした。
また、特にゲームを作りたい欲求もないし、作りたいのはソフトウェアなので、ゲームに必要な要素から学ぶ必要もないというのも一因。なおソフトウェアを作る上では、ある程度の規模以上のコーディングではOOPを理解していないと詰むことは間違いない。
なのでゲーム作りではなくてソフトウェア作りの視点でC# を捉えているので、Unity学習よりも先にC# でプログラミング言語としての学習を開始することにした。
よく考えたらすぐに作りたいGUIソフトはなかった
マインドマップで色々深掘りした結果、今すぐに「GUIで」作りたいソフトは残念ながらなかった😱あんなにTkinterでWindows GUIソフトにこだわったのに、自己整理した結果、逆にGUIへの依存度はなくなった。Zbrushプラグインを1つ、PythonのTkinterのGUIで仕上げられたので目的は達成できてしまい、モチベーションがなくなった。またPythonでなくてC# ではGUIは割と簡単に作れそうなことが分かったし、今作りたいGUIソフトもまだ見当たらない。なので後回しでいい。
それに将来的にGUIが必要になったとしても、それはWindows上でのGUIなのかUnity上でのGUIなのかで、やるべきことも必要なノウハウも変わる。なので必要になったときに改めて教材を探した方が効率的だと判断した。
Python学習は無駄にならない。共通概念は2度学ばなくてOK
そうなるとC# で今すぐ学ぶべきことはOOPとC# というプログラミング言語の全体像だったりする。
その次にUnityで3DCGモデルを物理演算で動かすことに入っていく。その次が深いところのシェーダー開発。それらを駆使するUnityソフトウェアの開発。そう、ゲームが作りたいわけじゃないんだな。3DCGモデルのリアルタイム物理演算を制御するソフトを作りたいわけ。なのでC# の深い理解が必要なことは明らかだから先に押さえておこうという作戦だ。
さてC# の全体像を押さえるといっても、Python完全学習で一通り学べば、ほとんどの項目は共通する。細かい記法の違いはいちいち「今」学ぶ必要はない。追々リファレンスで確認したり、ChatGPTの吐いたコードを学んでもいい。抽象概念についてはほぼ共通なので、さっと眺めておしまい。むしろPythonと比べてPythonにはない概念、こういうところを押さえる必要がある。
となるとC# の完全学習コースはムダが割と多い。なのでC# パーフェクトマスター的な長時間コースは今回は除外することにした。
実際のコーディングがChatGPTのソースの修正で組み上げるならば、微に入り細に入り全部知らなくても実装できることをPythonで知ったので、C# 学習にそんなに時間をかけるメリットはないと感じたので。
むしろアルゴリズムの理解などプログラミング全般に関わる常識的なことを全部押さえる方が先かも?ということでC# のコースではサラッと全体像を押さえつつ、プログラミング業界の常識を押さえるためのコースを物色して買った。
パーフェクトマスターか、速習コースか
こんなふうに、各自の学習状況やバックグラウンドに応じて「最適な学習コース」というものは異なる。なので一概に「このコースは万人にオススメ」という紹介はあまり適切ではないと感じるようになった。私がもしPythonを学んでいなくてC# から学習開始ならば、前述のように「C# パーフェクトマスター」的な長時間コースを買っていたと思う。だが今の私の要求は異なる。なので定番コースではないが高評価のコースを選ぶことになった。
それにUnity学習でもUnityに必要なC# 知識ならばそのコース内でも紹介されることになるだろうから、そこで改めて復習と知識強化を兼ねればいいや、ということで「深く広く」ではなくて「浅く広くで速習」する作戦。
まずはOOPをC# で学習中
まずはOOPのディープダイブをC# で学習する予定。ここはもし何かが違えばPythonでOOPを学習していたのだろう。世界線が変わった。だがC# でOOPを解説する良質なコースが見つかったのでそれもまた運命。学習を進めて「万人にオススメできる!」と思ったら改めて記事にします😊
とはいえ、Udemyはコースを半分くらい進めてみないと「こりゃ自分に合わない講師だ」と決定できないことが多いので、まずは学習を進めてみないと。
というわけで今はC# でOOPの学習中です。まだまだUnityには辿り着かなそう。
さて、Pythonはどうしようか。使わないでいると知識が錆び付いてしまう。でも必要ないものをメンテし続けるよりならば必要な知恵の獲得を優先した方がいいのかも。悩み中。
今回の創作活動は約1時間30分(累積 約3,894時間)
(1,138回目のnote更新)