C++の勉強法について質問です。


当方、ウェブプログラマーなのですが、初心者がウェブプログラミングをマスターするには、掲示板を自分で実装してみることが一番の近道だと思っています。理由は、ウェブプログラミングに必要な知識を一通り網羅できる為です。

C/C++の基礎は一通り勉強したのですが、実際に実務で通用できるレベルになるまでに、どのような勉強方が最適か思案しております。(他のスクリプト言語だと、クックブックやサンプルブックみたいなのが多数ありますが、C/C++でこの系統の本を殆ど見かけない気がするのですが、何故でしょうか?)

C++の初級から中級にステップアップして、実務で通用できるようになる為に、「これを作ってみるのが良い」ということや、「こういう勉強方が良い」というアドバイスがあれば、教えて下さい。

ちなみに私は、C, C++, Java, Perl, Ruby, PHP, Javascript等の基礎は一通り勉強し、Lisp、Pythonとかも少しだけかじっています。

宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/06/14 23:02:21
  • 終了:2007/06/21 23:05:03

回答(4件)

id:felix2007 No.1

felix2007回答回数600ベストアンサー獲得回数42007/06/15 00:13:13

ポイント23pt

掲示板はperlかphpです。

id:tomoyuki28jp

御回答どうもありがとうございます。

そう質問に書いたつもりだったのですが。。

質問の仕方が悪かったですね。

すみません。

2007/06/16 14:04:55
id:t_shiono No.2

t_shiono回答回数256ベストアンサー獲得回数222007/06/15 00:41:01

ポイント23pt

C/C++の基本的な部分を押さえたのであれば、あとは、「何を作る」によって大きく変わってくると思います。また、仕様するライブラリなどのポリシーによって書き方も大きく変わります。

C/C++はある意味なんでもできる言語と言えるので、これを作れば、業務レベルのコードが書けるというのはないのではないかと思います。

例えば、Windowsのスタンドアローンのプログラムを念頭に置くのであれば、WindowsのAPIや、MFCやATLなどのフレームワークの知識が大きなウェイトを占めると思います。

メディア系のプログラムであれば、それぞれのライブラリについての知識、メディアそのものの知識と、その知識をいかに扱うかを記述する

組み込み系であれば、ダウンサイジングや組み込み系ならではのテクニックが必要となってくるのではないでしょうか?(専門外ですので、間違っているかもしれません。)

ただ、敢えてこれができればというのを挙げるとすると、

・オブジェクト指向を理解する

・問題が発生した際にその解決方法をWebや書籍から自分で発見できる

・なぜ、そのプログラムをC/C++で開発する必要があるかを見極められる

といった辺りでしょうか。

あくまで、個人的な意見で参考にならないかもしれませんが。

id:tomoyuki28jp

御回答どうもありがとうございます!

参考にさせて頂きます。

2007/06/16 14:05:19
id:wm5775 No.3

wm5775回答回数351ベストアンサー獲得回数42007/06/16 11:25:13

ポイント22pt

【質問の意図の整理】

Webシステムする上でのC++プログラミングのテクニック/ノウハウをつみたいということですよね?

その上で、適切なサンプルが掲示板だと考えているということですよね?

【C++でWebシステムを構築する優位性】

C++でシステムを構築する優位性は、

・OSやコンパイラなどのプラットフォームが変化しない。

・リバースエンジニアリングされたくない。(ソースコードを公開したくない。バイナリからも極力解析されることを避けたい)

・速度が要求されるため、他の言語では要求が満たせない。

・ドライバなどの低水準な操作を必要としている。

・ネットワーク通信を行うが、専用アプリケーションによるリッチインターフェースを使いたい場合や、ActiveXコンポーネントを利用して、使用させる環境を限定させたい。

というケースだと思います。

【掲示板を作るにあたって】

こういった技術をマスターされるといいと思います。

・掲示板システムのオブジェクト指向モデリング

 →C++はオブジェクト指向っぽく書かないことがいくらでもできるので、Webシステムのような上位アプリケーションでは、オブジェクト指向モデルで記述することに留意して開発するのが一つのスキルとして認められる要件だと思います。特にデザインパターン・アナリシスパターンという考え方をマスターしてからモデリングをすると他の言語では気づかなかったことに気づくと思います。

・データベースとの接続

 →私はBCBが一番簡単だと思いますが、なんらかの形でデータベースを制御できるノウハウを獲得したほうが良いと思います。

・テンプレートの活用

 →STL(Standard Template Library)やBoostなどのテンプレートライブラリを活用することで、従来C/C++で書きにくかったプログラム表現がかなり容易にできるようになります。Javaも1.5からGenericを導入しましたが、私はC++のテンプレートはプログラマのスキルを引き上げるにはすごく良い素材だと思います。大抵はテンプレートライブラリはヘッダーファイルに定義されていることが多いので、ソースを読むのも非常に容易です。ここで基本的なアルゴリズムがどう実装されているかなどを学ぶとどんな言語でも通用すると思います。

・ポインタ

 →C/C++以外の言語では、なかなかメモリをダイレクトに操作することが難しいので、クラスや構造体、関数のポインタやハードウェアのポートを叩くなどの操作をマスターすると良いと思います。

・ネットワーク通信

 →ソケットやHTTP通信のスキルも必須かもしれません。

・スレッド

 java以外のスクリプト言語でスレッドを扱うのは結構面倒です。先ほどのデータベースとのリンクも含めて大量のアクセスがあっても多数のプロセスを立ち上げずにスレッドで処理するプログラムを作ってみるのも良いスキルアップになると思います。

・SWIGの活用

 SWIGはC/C++で作ったプログラムを他のスクリプト言語から使用できるようにするためのラッパー生成プログラムです。他の言語で作ったシステムでボトルネックになっている部分があった場合にC/C++で作り直してパフォーマンスを上げるのも一つのスキルだと思います。

【掲示板以外での例題】

・例えば、Webサーバーのログを監視して、障害が起こったときにモデム経由で自分の携帯電話に電話させてみるというのも一案かと思います。(メールのほうが便利ですが、それは簡単にどんな言語でも実現できてしまうので、ここはあえてモデムを使って電話をするようにしてみます。)

・Apacheなどのモジュールを解析する/作る

 →どんなモジュールを作るかは自由ですが、こういうことのできるエンジニアは重宝されると思います。

・Web経由でUSBやPCに接続されたインターフェースを操作させる。

 →意味があるかどうかわかりませんが、Web経由でCD-ROMのドライブのトレイをオープン/クローズしてみるとか、そういうプログラムを作ってみると、Web経由で家電を操作するとかそういったこともできるようになると思います。

・組み込みWebサーバー/アプリケーションを作る

 例えば、小型のLinuxサーバーを買ってきて、ルータを作ってみるとか、Webカメラや温度センサなどの情報を読み取って別のサーバーに送って表示したり記録を残したりするというのもとても良い経験になると思います。

【クックブックの少ない理由】

・C++のクックブック自体は洗練された著作がたくさんありますが、開発環境やプラットフォーム間の差異が大きいため、総合的なノウハウや定石になる傾向があります。

・さらにPerlやPHP、RubyやPythonのような簡易な言語でも十分なパフォーマンスと高度なサービスが提供できるようになった現在、C++でWebシステムを組まなければならないケースというのは前述のような非常に特殊なケースに限定されます。

・ですから、C++を使ったネットワーク通信のプログラムのクックブックなどはどちらかというと最近は組み込み機器の本の方へ移っている傾向にあります。

id:tomoyuki28jp

丁寧な御回答どうもありがとうございます!

PHPとかでウェブプログラミングを勉強するのであれば、掲示板が一番良いと思うけど、C++だったら何を作るのが一番近道なのかな、という質問の意図でした。

質問の仕方が悪くて申し訳ないです。

しかし、御回答頂いた内容、大変参考になりました。丁寧な御回答、どうもありがとうごじざいました。

追記:

ちなみに、オライリーのクックブックを発見したので、買って読んでみたのですが、細切れな小さなプログラム集って感じで、今回の質問の解答になるものではなかったです。

2007/06/16 14:07:44
id:pascal7 No.4

pascal7回答回数582ベストアンサー獲得回数982007/06/16 17:50:36

ポイント22pt

C++の勉強なら電卓なり、家計簿なりPC上で動作するアプリケーションを作って遊ぶのがいいと思います。

良いソフトが出来たら公開できるかも知れませんし。


C/C++をCGI言語として使うのは可能ですが

システムに障害をあたえるソフトも書けるので

プロバイダーが好みません。

ですのでC/C++をCGI言語として使うのは流行しないと思います。


WEBのアプレットをC++で書くと言う言うことなら出来るはずだと

思います。

id:tomoyuki28jp

C++の勉強なら電卓なり、家計簿なりPC上で動作するアプリケーションを作って遊ぶのがいいと思います。

良いソフトが出来たら公開できるかも知れませんし。

*******

上記、大変参考になりました。

僕の質問の仕方が悪かったのですが、実際ウェブプログラミングをC++でやりたい、という質問ではなかったので、御回答、大変参考になりました。

どうもありがとうございます!

2007/06/16 21:55:19
  • id:pascal7
    お役に立ててたら幸いです
    自分家のローカルLAN上にWEBサーバーを準備して
    C++でWEBプログラミングしてみると言う事は出来ると思いますが
    勉強しても将来の役に立たないと思います。

    ローカルの知識で終わってしまうと思います。
    アプリの作りかたを勉強したら
    それはそれて仕事のネタになりますし。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません