新案件に入る事になり,C++の学習をします。
しかしC++は全く未経験で,何から手を付けて良いのか分かりません。
そこで
・学習方針を判断する為の情報を頂きたいです。
・独習に適する本等の情報も合わせてご教示頂ければと思います。
【疑問点】
1:VC++環境で学習する上で,
・VC++の方言や特有のライブラリ等も平行して学習した方が良いでしょうか?
・それとも,実務に備える為ライブラリ等を使う事を優先し学習した方が良いでしょうか?
・欲張らず,学習に使用する環境でIC++の言語学習のみIをまず進めた方が良いでしょうか?
【状況・現時点の学習方針について】
[言語経験]
・Java,VB(業務 どちらも短期間)
・C(学生の時に少しだけ経験)
[プロジェクト]
・現在のコード= VC++6.0
・今年末頃.NET2005に移行
ただ「私はいつからソースを触る作業に入るか」「その際は6.0か.NETか」と
いった件を上司にお聞きしたら,「微妙な時期で分からん」との事でした。
[学習環境]
・方言,ライブラリ等から,VC++で学習出来ればと思います。
http://www.sbcr.jp/books/other/art.asp?newsid=680#cpp
�\�t�g�o���N �N���G�C�e�B�u�̖{
1.方言はプログラミングを進めていくと、身につくものだと思いますけど。方言よりも、むしろコーディング規約に沿ってプログラミングしないといけないと思います。
(コーディング規約はもらっていませんか?)
ただし、現在の学習状況が、C言語を少しだけというところが、ものすごく気になります。
既にご存知だと思いますが、VCを理解するためには、C++の理解が必要ですし、C++にはCの理解が必要です。
だからといって、Cを1から勉強し直す余裕はないと思いますので、
1.Cでポインタの勉強をする。
2.Cで構造体の勉強をする。
3.C++でクラスと名前空間の勉強をする。
4.C++でSTLの使い方を勉強する。
5.VCのAPIの勉強をする。
といったことを、VC上でされたらよいと思います。
4番までは、ファイルの新規作成のコンソールアプリケーションを選択すればできます。
ファイルがどばどば作られたくないのでしたら、
普通にVCをインストールされたのでしたら、
C:¥Program Files¥Microsoft Visual Studio¥VC98¥Bin
に、VCVARS32.BATを、ターミナルより実行すると、
Drive:>cl [ファイル名]
とすると、コンパイルできます。
Java の勉強をされているとのことですので、クラスの理解は容易だと思います。
私はLinuxからVCにやってきて、naruto_3616さんと同様現在も苦戦しています・・。がんばってください。
http://www.k.ctrl.titech.ac.jp/~mtanaka/vc/
Visual C++ $B9V:B(B
大学の研究室に配属される際、教授からVisualStudio.NETとOracleのソフトを渡されて数ヶ月放置され、途方に暮れた記憶があります。当時使えた言語はperlのみでした。僕の経験から述べますが、参考になることがあれば幸いです。
僕はまずは本を購入し、意味も分からず書かれている通りプログラムを組みました。本はリファレンス系ではなく、初心者でも「書かれている通り打てばとりあえず動く」感じの本です。同じような本2~3冊のプログラムを移していたら、徐々にオブジェクト指向の仕組みとか、ライブラリの使い方が分かってきたので、少しずつプロパティや変数をいじっていきました。2ヶ月後くらいに教授が1回生用のC言語の講義レジュメをくれたのでそれで初めてC言語の基礎を学び、ポインタという概念を初めて知りました。その後実際にデータベースの接続に必要なライブラリの関数をネットで調べて試行錯誤しながら組み込み、卒業前にはOracleからデータを取得して隣接行列からグラフ作れるくらいにはなりました。
というわけで、独学するのなら一からC++をやったりライブラリを勉強するのではなく、まずは他人のプログラムをパクってコツをつかむやり方の方がいいと思います。C++特有の知識(クラス関連とか)をまともに覚えると莫大な時間がかかりますが、実際に使うのはほんの一部ですし、Cの知識があればほとんど組めてしまいます。
ご回答ありがとうございます。
・他のプログラムを参考してとにかく実際に組んでみる
・必要になった知識から調べていく(特にライブラリ)
という努力は、やはり必要ですか…。
私はプログラムの勉強という際にどこか身構えた感じになってしまう事
がありまして、実際に取り掛かる前にあれこれ考えすぎてしまう場合が
あります。
ただ自分だけの情報と力では限界がありますし、出来る人のプログラム
を参考にする等もやはり必要と感じています。
人から「実際に書かないと、PGの能力が付かないよ」といったアドバイ
スを頂いたりしていますが、最近はなかなか手が動きません。
環境設定等でつまずく事も多いです。自信があまりありません。
そういった場合に、どうしたら気持ちを切り替えて前向きに進めるで
しょうか?
そういった点に関しても、もしご意見等ある方いらっしゃいましたら、
遠慮なく言って頂けると幸いです。宜しくお願い致します。
http://www.microsoft.com/japan/developer/library/vcmfc/mfchm.htm
MSDN Online Japan : File Not Found
ちょっと古めかしくなってるかもしれませんが、MFCから勉強するのがよいと思います。つまり疑問点の1.については
YES, YES, NOですね。
MFC(Microsoft Foundation Class)はWindowsのための最もよく使われるクラスライブラリです。
よくC++の教科書を見ると、C++の機能を説明するために何か自前でクラスを定義して、という書き方のがありますが、大抵は「複素数クラス」とか「自動車クラス」(笑)みたいな実用性のないサンプルばかりです。
C++のメリットはクラスを作ることではなくて、誰かがすでに作ってくれたクラスをいかに楽に使えるかというところにあると思います。
経験から言ってもあまりにも例題的なものは書いててもつまらないし身につきません。なので、どんどん業務で書きながら「つまみ食い」をしていくことをお勧めします。
MFCを使うと自動的にC++の機能(継承やメソッドのオーバーライドなど)を使うことになります。
http://mailsrv.nara-edu.ac.jp/~asait/visual_cpp/intro_cpp.htm
Visual C++ $BF~Lg(B (MFC)
また、VC++でプログラムを書くときは、エディタで全くのスクラッチから書くことはまれで、たいていはWizardを使ってスケルトン(骨組み)を生成させ、そこにいろいろ穴埋め・追加していく形をとります。ここのやり方がバージョンごとにかなり違っていてややこしい(Visual Studio 6/7と.NET 2003と2005で違ってたりする)ので、そういうところに慣れるだけでも時間を食うと思います。このあたりは経験者を捕まえていろいろ聞くしかないかもしれませんね。
ご回答ありがとうございます。
実際の業務で書きながら、ライブラリや既存クラスの使い方を覚えたり、人の良いと思った部分を取り入れる感じ、でしょうか。
そういうやり方もありますよね。(もし違っていたらすいません。)
むしろ自分の会社の先輩も、上記のようなやり方が業務で組む上では一番早いと常々おっしゃってます。
「C++のメリットはクラスを作ることではなくて、誰かがすでに作ってく
れたクラスをいかに楽に使えるかというところ」の部分でJavaを思い出しました。
確かに業務でJavaをやっていた時は、既存の共通クラス等を継承して、値チェックやDBコネクション等を利用してました。
「たいていはWizardを使ってスケルトン(骨組み)を生成させ、そこにいろいろ穴埋め・追加していく形…」というのがあるのは知りませんでした!
(しかもバージョンごとに違っていてややこしいのですね…。)
今は分かりませんが、そういうものがあるのだと分かり、参考になりました。
心してかかります。
http://www.amazon.co.jp/exec/obidos/tg/detail/-/books/4797318260...
Amazon.co.jp: 秘伝C言語問答 ポインタ編: 本: 柴田 望洋
http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html
$B#C%W%m%0%i%_%s%0?GCG<<(B
リンク先は、個人的に新人の頃(10年位前)に読んだ本(の再版本です)
以下、リンク先とは関係ありません。(ぉ
1.現在のプロジェクトの開発環境を構築する。
(これは、現在動いているプロジェクトがあるはず?なので、
上司等に聞く等して、構築を行う。)
2.プロジェクトの仕様を確認すると共に、プログラムを動かしてみる。
(何かが動作するところまで、完成しているプロジェクトということが前提ですが。。)
3.現在のプロジェクトのソースを解析してみる。
このとき、ソースはローカルにコピーしておき、
コメント等を自分なりに書き加える等をして、
実際の仕様と見比べてみる。
・一部、修正して思ったとおりの動作をするのかやってみる。
→兎に角、ソースをいじる。
→この辺まで、進んでくればC++での書き方の基本位は掴めてくると思います。
4.プロジェクトを進めていく上で、あると便利だなと思うようなツールを自作してみる。
(C++を使用して作成する。)
例)ログ解析
テストデータ生成・結果データ取得
自動テストツール
プロジェクト内の部品クラスのダミークラス(テスト用) 等
目的があるとモチベーションが変わってきます。
あまり、汎用性を考えずに、そのプロジェクトでしか使えなくても良いというレベルでも良いと思います。(兎に角作ることを優先)
5.通勤の電車・自宅などで、入門書を読む、サンプルプログラムを作成する。
→これは、上記1~4と平行にぼちぼちやっていけば良いかと。。
☆不明なところがあれば、周りの人に聞く。
→プロジェクトに関連することなので、問題なく聞けるはず。
→1年目ということなので、同じ事を何度も聞くとかじゃなければ、ある程度聞く回数が多くても許容範囲だと思います。
逆に聞かずに出来ていないほうが困るはずなので。。(笑
☆ソースに関しては、色々なソースを見てみるように心がける。
→やはり、個人差があり良いソース、悪いソースがあると思うので。。
→これは、プロジェクト内に限らず、ネットで検索すればソースを公開しているサイトは色々あるので。。
☆兎に角、自分で作る。
→基本的には何でも良い。
勉強したいことを重点的に使用する。
例)ポインタの勉強をしたいのであれば、string型を使用するのではなく、charポインタをわざと使用する。等
学習したことは、どんな形であれ一度は使ってみる。(無理やりにでも)
Java・C・VB の経験があるということですので、
プログラムのロジックに関しては、ある程度作る(見る)ことが出来るものと思います。
書籍に関しては、必要に感じてから購入してもいいかもしれません。
(ライブラリ系はひとつあれば便利だとは思いますが。。)
☆最後に
・プロジェクト内で、一番できる人(権限のある人とはまた別)と仲良くなる。
とりあえず、思いついたことをつらつらと書いてみました。
駄文・長文失礼致しました。
お返事が遅くなり、申し訳ありません。
ご回答ありがとうございます。
・現在のプロジェクトの開発環境を用いて、自分のローカルマシン上
だけでそのソースを変更したり、自分が欲しいと思うツールを試作
してみる
・自宅等での時間は、本を読んだりサンプルを少し作る
の部分は、何となく、「自分でプログラム作ってみる、やる気が続き
やすそう」な感じがします。。
今のプロジェクトのソースを直接参考に出来る環境なので、「ソース
をとにかく自分で作る(使われているライブラリを知る/使えれば使う)」という事にも努力次第で挑戦できそうですし、プロジェクトで仕事を
する上での学習の無駄も減りそうですね…。
(今までは、出来上がっている会社の環境を活かして試作してみても、
作っているのが本の中の例題的なプログラムだけでした。本の内容を
理解するには役立つのですが…あまりにも例題と業務のソースがかけ
離れているような気がして気が遠くなる感じがしていました。)
しかもこれなら、自宅で環境構築でつまづいて大きな時間を使わなくて
済みそうです…(^^;)
「業務の中で人のソースを覚えておいて参考にする余裕を作れるか?」
「自作ツールを作っている時間が取れるか?(無駄に残業せずに早く帰っ
て欲しい周囲の視線に耐えられるか?)」
と言われたら100%自身はありませんが、、そこは努力してみます。
明日上司に会社で勉強出来ないか提案してみようと思います。
ただ自分は恥ずかしながら、実際のソースを見て触っていたらその
うち何となく分かってくる、器用な(?)人間ではないと思うので、自分
だったら本での学習も重視したいかも、と感じました。
ご回答頂いた皆様、ありがとうございました。
質問するかどうかで少し迷いましたが、やはり自分一人で考えて悩み
続けるより断然良いと思いました。考えや視野がとても大きくなった
気がします。
本当にありがとうございました。
コーディング規約はまだ頂いてません。
(参加したばかりなので、ドキュメントの読み書きをしています。
聞いた感じではコーディング規約に限らず、「既存の書類はあるけど
作成作業が削られた等で必要な物が揃っている保障はあまり無い」と
いう感じが近いようです)
C言語を全て復習するのは確かに厳しいと思います。
ymlabさんのおっしゃる、C/C++の特に重要な部分を重点的に学習する、
という発想は自分にはあまり無かったので、参考になりました。
(知識が浅い事もあり、全体のバランスの中での傾向決めは考えても
「この部分とこの部分を」というのは出来ていませんでした)
ご紹介頂いた本で良さそうな物もありそうですので、明日にでも本屋で
チェックしてみようと思います。
ご丁寧な回答どうもありがとうございます。
お互いに大変ですが、頑張りましょう。