C++の勉強がつらい

2019年1月10日

こんにちは。

現在、昔作ったものをテストするために新人の頃に扱っていた教材を触っています。

言語はC++ですが、私は新人の頃にC++の勉強をいきなり「自分でやれ(にこっ)」とやらされていました。

このご時世にC++スタート!?というツッコミは受け付けておりません。

もちろん誰も教えてくれません、全て自主学習です。

その時に「君の先輩(10年目くらい)が、3~4年目の時に作ったコードがあるから、それを読むといいかも?」ととあるソフトのコードを渡されました。

そのソフト改良?したものを今読み直しています。

まぁ新人でC++どころかプログラミングのプの゜も読めなかった私は、必死に読み、自分で改良できるところを改良していました。

当時は気づかなかったが、ヒドいコード

この改良も、中身を大幅に弄るというよりは、コードの書き方をちょこちょこ変えていただけなので、特別な事はしてありません。

Effective C++に書いてある内容が適用できそうなところを探して、適用をしていただけであるといっても過言ではありません。

当時の私からしたらそれですら重労働でした。

なんせ、勉強初めに最初に渡された本がEffectiveC++だったのですが、まず1項目から何が書いてあるかわからず

「この上司は本当に大丈夫か?俺のことを買いかぶっているのか遊んでいるのか?」

と本気で心配になりました。

今思えば「読めなくて当然」だと思います。

何故なら今も半分くらいしか理解できないと思われるので

で、C++の勉強半ばで新人の私に割り込みの業務が入りました。

その時必要に駆られてC#の勉強を始め、使いだして以来C++は全く触っていませんでした。

当時改良していたソースも単純にC++の事を忘れているから読めないと思っていましたが、どうやらそうではなさそうです

単純にコードが複雑すぎる上に、謎の戻り値やおそらく重複しているであろうメンバ変数に完全に脳みそを占領されています。

C#の割とすっきりした書き方に慣れてしまった、というのもあるかもしれません。

例えば、戻り値boolの関数を呼び出しているのに、実行側ではその結果を受け取っていないのはザラです。

何か利用する可能性がある、と考えているにしても

return true;

が多すぎる(しかも使ってない)。

C#でWPFを使用していないのにも関わらず

「MVVMを意識して設計しないとだめだ」

初めてのコードレビューで罵倒された私からすると

「な、なんだこれは…」

としか思えません。

関数の内容が2行、内1行は使わないreturn true;。

C#なら

void Func() => 処理;

で終わりなのです。

あとはコメントが酷い。

私はつい最近まで「コメントなんてなくても理解できるようにつくってやろう」と考えており、コメントを全然使用していませんでしたが、レビューで罵倒されてからコメントを付けるようにしていました。

確かに関数の頭くらいにはコメントを付けると便利な場合が多いな、とは思いました。

「関数の内部にコメントを書くと、わかりづらくなる」

「そもそも関数の内部にコメントを書くような処理にするな」

という格言(個人的には)を目にしてからは、出来る限り関数中にコメントを挿入しない、挿入しなくても追って理解できるコードを書こう、と努めてきました。

が、このC++のコードはお構いなしに大量のコメントが関数中に入っています。

読みづらい、つらいよ母さん…。

C++は難しいから、先にC#を勉強すべきであった?

当時私は上司にこう告げられました

「難しいC++と、簡単なC#、どっちを先に勉強したい?どっちも使うからどっちもやってもらうんだけど」

と。

私はどちらも見たことも触ったこともなかったので「どちらでもいいです」と伝えたところ

「じゃあ面倒くさいC++からの方がいいね、C#を先にやるとC++の勉強をしたくなくなるから」

と。

確かにこれは間違っていませんでした。

ただC#で設計としてあるべき構造やら、簡単な概念を理解してからの方がC++に応用できる点は多かったのではないかと思います。

もちろん、C++をやっていてC#の学習の助けになった点もあります。

一長一短、個人差があるし、その当時の上司世代から言わせると「昔はCという言語があってだな…」となるのは火を見るよりも明らかなので、私はこの順序で良かったのかな、とも思います。

しかしC#を理解(全体の10%くらい)してきたので、いいタイミングだと考えて少しC++の理解を深めたいと思います。

ポインタ…うっ。