まぁ,ほとんどの人は,プログラムがうまくなるにはたくさんの時間と労力と知識が必要だと思っていると思います. まぁ確かにこれは間違ってはいないんですが,どうせなら効率のいい勉強の仕方があればそれをしたいもの. というわけで,ここでは自分の経験上での勉強の仕方をアドばいいすできればな,と.

勉強方法についてアドバイスを載せているところでよく見かけるのが,簡単なものを数をこなして知識をためる,といったものが多いですね.
ですが,プログラミングにおいては私はそうは思わないかと.
簡単なものだと,確かに簡単にできて自信に繋がると思う.だが,簡単なプログラムで習うことのできる知識量というのはたかが知れてます. それに加え,完成したことに満足し,逆にもう1つ上のステップではなく現状の知識のままプログラムを作ろうとしたりするのではないのかな,と.
なので,簡単なプログラムから作って,順々にステップアップ,という方法は正直かなり無駄が多いかと. では,どういった勉強の方法が一番効率がいいのだろうか. まぁ,ここからは自分の経験談みたいなものがあるんで,すべての人には当てはまらないと思いますが,まぁ参考程度に.

要は"高望み"です.
高望みすると挫折して成長が遅れる,と思う方もいるでしょう.
ですが,考え方を変えると,高望みしてもしなくても,結局のところ同じところで挫折するのです. つまりは,挫折するポイントを速くこなすか,先送りにするかということです.
では,具体的にどういった高望みをすればいいのでしょうか.
自分の知識量よりも数ステップ上のソフトウェアを作る,ということです.
あくまでソフトウェアであって,ただ単にプログラムを組むことではありません. ただ単にプログラムを組むだけでは知識という無形のものを残せても,逆に形あるものが残せません. それに,逆に形あるものの方がこれから先いろいろと役立つものです. もしそれが画像処理クラスであるのならば,それを用いればこれ以降のソフト開発において,画像処理の労力が下がります.
また,なぜ数ステップ上のソフトウェアなのかというと,そのようにすれば完成したときに得られる達成感,知識というのはかなり莫大なものになります. ただ,数ステップ上の知識が要求されるため,勉強を怠ることはできません. 十分合った参考書なり,自分の目的となるHPを見つけるなりする必要があります. ですが,こういった自己解決能力というのは簡単なプログラムから作っていっては身につきません. 現に初心者向けの参考書ではソースが書いてあり,そのソースを丸ごとコピーすれば動作できます. 果たして,それで一体どれぐらいの知識を得られるでしょうか.
つまりはそういうことです.
それに,自分で調べてちゃんと自分なりにプログラムとして組んだ場合,早々滅多なことがなくてはこのことは忘れません. 例え忘れたとしても,どこのHPに,参考書のどのページに,ぐらいは覚えているものなので2回,3回も見れば必然的に覚えれるでしょう.
なので,最初プログラムを作る際には例え無理だと思えるようなことであっても,高望みが一番だと思います.
私も大学2年の前期にソフトウェア開発の講義を受けたのですが,そのころはまだウィンドウすらろくに作れず,作れたとしてもそれは参考書の丸写しでした. ですが,それでも意地になっても作ろうと決心しました. 私の場合,こうでもしないと作る意欲がそのころ無かったので. 最初は一体何をすればいいか迷いましたが,やっぱり形が出来上がっていることが徐々にわかるように,まずはウィンドウの表示,そのあとウィンドウのクライアント領域に画像を表示する,という手順でやりました. 最初はクライアント領域を指定して,そこからウィンドウサイズを取得する関数を使ったり,ウィンドウを作る際,サイズ変更ができないように値を変更したりなどしました. また,画像に関してはほとんどHDCなどがわからないまま,まずは参考書のソースを丸写しし,そのあと1つずつ関数を解読して自分のほしい情報のみを取得していきました. その結果,当初はSetPixel関数しかドット単位での変換処理がわからなかったものの,CreateDIBSectionの際に指定してやる引数の中に,カラー情報が格納されているポインタのポインタがあることを発見したため,それ以来は画像の処理はかなりスムーズになりました. そして考えた結果,画像の処理はクラスで行ったほうが後々の処理が簡単になるということもあり,クラスについて詳しく勉強しました. そんなこんなで,一応はプレイできるゲームというものが完成しました.
なので,正直高望みするのは別に高慢なことじゃないと思います. 要は高望みしてもくじけない精神が必要だと思いますよ

次に述べるのは参考書の選び方についてです.
皆さん,はじめにプログラムをする参考書はどういったものが一番後々の結果としていいものが得られるのでしょうか.
まぁ,ほとんどの人は○日でマスター,見たいな感じの初心者向けの参考書がよいのでは,だったり,逆引き大辞典みたいに使いたい処理ができる関数が大量に載っている本がいいと思う人がほとんどでしょう.
前者の初心者向けの本は,正直マスターしてもなんらろくなプログラムは作れません.
そんなの買うぐらいなら,息抜き用のゲームなりお菓子なり買ってたほうがまだましです.
なぜかというと,そのような参考書に載っているものは,本当に触り程度なだけであってプログラムを組む,という次元からは程遠いのです. 単にプログラミングとはどういうものかを教えてくれるようなものです.
なので,参考書を買うならばさっき出した後者のような,逆引き大辞典をまずは買うことをお勧めします.
もし本当にプログラミング初心者ならば,それプラス文法の本を買う必要が出てきます. あくまで文法の本であって,プログラムを作る方法が載っている本ではありません.
なぜ逆引き大辞典なのかというと,普通の参考書などでは,関数の使い方は載っていても,やりたいことができる関数が載っている参考書は少なく,載っていてもその参考書の一部だけ,というのがほとんどです. ウィンドウ一つ作るにしても,こちらは一体どういう関数を使っていいのかわからずに"VC ウィンドウの作成"などのようにググって見るものの,お目当ての内容が書いているHPを見つけるのは結構疲れます. ですが,逆引き大辞典などではこれらのことは一切無く,すぐに使う必要のある関数が見つかります. ですが,逆引き大辞典などでは説明が少なく,応用力に欠ける場合があります. その場合は"vc createwindowex"などといったようにググって見ると結構自分に合ったHPが見つかると思います. ウィンドウ作成,として検索するより関数名で検索したほうが,自分のほしい情報にあった内容を容易に見つけることができます.
それによってプログラミング能力が上がると思います. 私が思うに,プログラミング能力とはプログラムを組む力だけではなく,それプラス如何にどんな関数でどういった処理ができるかを知っていることが大きなウェイトを占めているように思います.
もしそれなりにプログラミング能力が培えたのならば,あとは自分の好きな分野なりの参考書を買ったほうがいいと思います. ネットワークに関してならその系統の本を,暗号化やアルゴリズムならその系統の本を,といった具合にです.

最後にですが,もし高望みでソフトを作れたら,また高望みしてさらに数ステップ上のソフト開発に着手してもいいですが,今開発したソフトを改善するというのもかなり身につきます. ふとしたきっかけで,今まで行ってきた処理のうち冗長な作業が見つかるかもしれません. また,とある関数を見つけて,さらに処理速度なり,機能なりに拡張性を持たせることができるかもしれません.
逆にそうすることによってソフトウェアの開発の楽しさがよりいっそう理解できると思います.

最後に締めといった感じのことを一言
高望みして達成しても,それに満足しない,不屈の探究心こそが上達の最大の武器だとわたしは思っています.
挫折したとしてもあきらめずに達成すれば,きっと挫折しなかったときより知識の幅や量は確実に増えています.
人間でも,骨が折れれば,くっついたあとは以前より強度が増したり,骨が太くなったりするものです.
楽な方法はありませんが,結果は必ずついてくるものです.自分には無理だと諦める前に,まずは一度頑張ってみてはどうでしょう.
きっと,予想以上に自分ができることに驚くのではないでしょうか.


と〜っぷ