2015年12月27日日曜日

C++をマスターする方法

以前の記事で
「過去社内で、C++を使っているプロジェクトを横目で見ていたが、習得するためには血反吐を吐くような厳しいOJTを乗り越えなければならないイメージがあった。個人的にも何度かC++ の勉強をトライしたことがあるが失敗に終わっている。あれから大分たったので、多少は状況は改善されているんじゃないかという望みももっていたが、ネット 上で調べると今でも相変わらずのようだ。仕事で仕方なく覚えるのでも困難なものを趣味で覚える場合、時間不足という制約も追加されるので、まず不可能だ。 しかしながら、100人に一人になるためには、なにかしら困難のあるものをやり遂げる必要があるので安易にできないと言うべきではない。ただし、C++を マスターするには根性論では無理なので、何か作戦が必要なのだ。たとえばC++を使うような社内のプロジェクトに加入するとか。(以下略)」
と書いたが、最近仕事でC++の物件をやったのでその際に、もっとこう進めればよかった
と感じたことを書き残しておこう。

自分が最近やったC++の物件も大変な仕事で、残業など体力で乗り切った面も多い。
以前C++を独習したとき大変だった点は、
①オブジェクト指向の機能が複雑で覚えるのが大変。
②しかもウインドウを制御をする仕組みが難しい。OSから受信したメッセージを処理するとか。
③MFCをおぼえるのが大変(MFCの仕様が必ずしも適切でないことが関係あり)
とどめに、DRAWイベントを受信したら、アプリケーションの再描画を自分でやらなければならない。ということがわかって、そんなのやってられるか!!と腹を立ててしまったのだった。


上記を今回の自分の仕事と対比してみると、
>①オブジェクト指向の機能が複雑で覚えるのが大変。
・これは事前に自習しておくしかない。C++を独学するための本は最近はたくさん出ているのでできないことではない。

>②しかもウインドウを制御をする仕組みが難しい。OSから受信したメッセージを処理するとか。
>③MFCをおぼえるのが大変(MFCの仕様が必ずしも適切でないことが関係あり)
>とどめに、DRAWイベントを受信したら、アプリケーションの再描画を自分でやらなければならない。
>ということがわかって、そんなのやってられるか!!と腹を立ててしまったのだった。
・これについては最近のC++は.NET FRAME WORK対応になっていてソフトでOSが送信したメッセージを処理しなくてもよいし、MFCも覚えなくてよくなっていた。
しかしながら.NETの機能を解説している本は少なく、ネット頼みになってしまったが、結局みつかるサンプルはc#のものばかりでc++ではそのまま使用することはできず苦労した。

また、VisualStudioを使い慣れていないことと、VisualStudio自身に不具合が多いことにも本当に困った。
以上のことから、C++をマスターする方法はこんなだろうかと思う。

【C++をマスターする方法】

①まずC言語をマスターする。
もともとC++はCの上位互換だった(今は厳密には違う)のでこれが第一関門となるだろう。今となってはCは必ずしもメジャーな言語ではないのでこれは困難かもしれない。

②C→C++で拡張されたオブジェクト指向の文法的ついても勉強しておく。
VisualStudioのC++を用いコンソールアプリケーションみたいなものを作ってもよい。上でも述べたように、今なら解説された本もたくさんあるのでできなくないはずだ。 ただしここで使う本は、あくまでもC++の文法的な部分に特化したものが良く、一冊で文法からVisualStudioの使い方まで網羅したものは結局解説不足で役に立たないこと多いように思う。

③Visual Studioを使いC#をマスターする。
なぜここでVisualStudioでC++ を使わず、C#かというと、C++は難しいので独学でマスターすることが困難だからである。VisualStudioの使い方を解説した本は少なく、内容は難しい上不具合も多い。不具合が発生した場合の対策に習熟しておく必要がある。また.NET FRAMEWORKの使い方もマスターする必要があるが、.それらはC++でプログラムを作成中に並行してやることは難い。.NETはネット上に解説やサンプルが多くあるが、C#かVBのものが多く、ズバリC++のものは少ない。C++に詳しい人に.NETの質問をしにいくと、「C#の.NETでできることはC++でもできる」といわれることが多く、C#の記事をもとにC++でのコーディング方法を自力で読み替える必要があり、事前にC#をやっとけば良かったと思うことが多かった。またオブジェクト指向の考え方はC#とC++で通じるものがある。

これに対しC#は独学でもある程度マスターできVisualStudioの使い方が解説された本は多い。上で述べたように.NETの疑問点もネット上で簡単に調べられる。このため、回り道のように思えてもC#をマスターしておいたほうが良い。

これを省いていきなり実務でC++をやったら血反吐を吐くことになるだろう。小さなプログラムでよいから、いろんな種類のソフトをたくさん作って環境に慣れておくのだ。またVisual StuioではCやVBも使えるが、Cで.NETを使えるかどうかは良く知らないし、いまからVisualBasicをやる意義があるかどうかもわからないのでC#が良いと思う。

④C#をマスターし自由にプログラムが組める段階に達したら周囲に周知する。

⑤C++で開発をしているチームに加わり作業をする。
今までもさんざん知識を蓄積してきただろうがそれでもわからないことは多いと思う。C++向けに技術解説した本は少ないので、おそらくネット上で調査することが多いだろう。.NETの場合はC#のサンプルが多いかもしれないが、自力でC++に読み替えて使う。また開発チームの人に質問できる体制を強いておく。そして結局最後は仕事でぶっ倒れるぐらいまでC++を使い込んで習得する。


こんな流れだろうか。

こうしてみると、誰にでもできる作業ではないなぁと実感するし不人気なのも納得いく。

というわけで私も2016年は暇があればC#をがんばるよ。

2 件のコメント:

  1. 自分はいまさらながらMFCで作っています。はっきり言って不便です。でも、自分の場合はdotnetはスピード的に無理だと思ったのでMFC使ってます。表はMFCGridなるもの使ってます。
    C++書籍を購入が正解なんでしょうが、自分の場合はネットで調べます。正しい正しくないは別で情報量が違うし自分の欲している情報が手に入るからです。
    C++でつくり慣れている人からすると?が多いでしょうが、日々良くすることを考えて作っています。しかし、難しい。

    返信削除
  2. 私もC++の仕事をやるにあたり、書籍はずいぶん買い込みましたが自分の欲する情報がなく、結局ネットで調べました。またC++はネイティブバイナリのコードを出力しマシン性能を限界まで使えることが利点と思いますが、画面周りは自動的にハンドル型、つまり.NETを使うことになり、しかも.NETはバーチャルマシンみたいなものなので実行が遅くなってしまうらしいので、いいのかなぁ?と疑問に思っていました。この件もいつか記事にしたいと思います。

    返信削除