C#はやっぱり難しいという話

C#

どうも、最近C#を勉強中の湯川です。

UnityでVR開発的なものをしたくて、一か月くらい前からC#をだらだら勉強していました。

 

ということで、覚えることやルールがたくさんありすぎて頭がいい感じにパンクしそうなので、ここらへんでC#がめっちゃ難しいという話を書いてきたいと思います。

 

C#(オブジェクト指向言語)はマジで難しい

 

もともと私はC言語を学校のプログラミングの授業のために少しだけ学んでいました。どのくらい学んでいたかというと、for文やwhile文などの制御構文から配列、関数からポインタの基本ぐらいです。

 

それらC言語の基本は、学校におすすめされていた「明解C言語」というものと、図書館で借りた「やさしいC」という有名なプログラミング参考書から学びました。

 

どのプログラミング言語でも共通する基本的な知識だけですね。

とはいっても、基本的なことはC言語できているからC#もそこまで苦労しないだろう。と、その時までは思っていました。

 

オブジェクト指向という言葉を知るまでは…

 

そうです。

この「オブジェクト指向」とそれを実現するC#の構文と独特な機能は、C言語が少しできるくらいでイキっていた私の想像をはるかに超えてめんどくさかったのです。

 

プロパティ、コンストラクタ、デリゲート、ジェネリック、その他たくさんのメソッドとクラスなどなど…。はっきり言って、覚えることが多すぎ!

 

また、これは慣れの問題なのかもしれないですが、. (ドット)で区切られてるメソッドやメンバを見ると、それぞれのクラスやメソッドがどんな機能を持っていたのかを思い出せないのです。

 

えっと、このメンバはここにあって~

あれこのメソッドどこにあった?(;’∀’)

みたいなことが、かなり頻繁にあります。

私の学んだC言語では、あちこちを行き来する必要があるのは基本的に関数やポインタぐらいでしたが、そもそもC#にはこの関数的な役割をするメソッドがいくつもあります。

 

なのでいろんなメソッドであちこちのクラスを行ったり来たり。

 

また、メソッドがクラス内にあるのはまだわかるけど、そのクラスも名前空間の中にあって、実際にコードを読んでいくと細かい所の包含関係が入り組んでいてかなりややこしいとになっています。

 

型の種類もまあ豊富です。

C#にはC言語と違ってクラス型とかデリゲート型とかがあります。しかもそれらはクラスとメソッドがあるだけ作れるので、変数の型だけでも覚えるの大変なのに、どれがどの型なのかの対応関係がよくわからなくなるのです。

 

 

ん?

こんな型あったっけ?(←そもそも把握してない)

 

とはいってもやっぱりC言語を習っていたのは幸いでした。

C#のif文やWhile文、配列の概念などはC言語とかなり酷似していたのですんなり理解できましたし、C#はいろいろと細かい分、様々な設定ができることがわかりました。(使いこなすほど習得できていないからそこまで実感はないが)

 

というか、C#とオブジェクト指向は本来、効率化ができる便利なもののはずなんですけど…

この手こずっているというあたりが、まだまだC#を使いこなせていない感が出ていてリアルですね。

 

長・中・短期間目標

 

  • 長期間目標は、C#でゲームを作ること、UnityとC#を組み合わせてゲームを作ってみたい
  • 中期間目標は、今年中にC#をある程度マスターすること
  • 短期間目標は、今月中に「独習C#」の制御構文を読んで理解する、それが終わったら次は標準ライブラリを学ぶ

 

「目標は長期間から短期間までを決めて、短期間目標を細かく刻んでいくことが成功へ近づく鍵」という格言的なものを誰かから聞いたことがあるような、ないような。

 

とにかく今後は、このように現実可能な小さな目標を地道に踏んでいくことにします。

 

最後にもう一度書きますが、今までプログラミング言語を一回も触れいていない人からすると、オブジェクト指向言語ってルールとか書き方とかほんとうにめんどくさいから好きでやってないと絶対に挫折しちゃうなと思います。

 

そもそも目標がないと続かないし、なんとなくで始めるとまずモチベーションが上がらない…

 

もし私が初めに学んだ言語がC言語じゃなくてC#だったら絶対挫折してます(確信)

 

自分は単純にいつか実現したい目標があるのと、学校で使うプログラミング言語にC#を選んでるからなどの勉強せざる負えない状況だから続いてる感じはありますね。

 

まあこれからも頑張ります。

 

では。

コメント