このブログに来られた方がいたようです。
リファラによると。
で、で。
「プログラミングの勉強をしたのにプログラムが作れない」
最初見たとき吹きましたw
包丁とフライパンの使い方を勉強したのに、
料理が作れないと言う人がいたら
あなたならなんと答えますか?
私ならこう答え(聞き返し)ます。
「あなた、そもそも作りたい料理あったの?」
具体的な料理名を即答されたなら
加えて、こう聞きます。
「あなたは道具の使い方を勉強しただけで、
実践したことがないだけじゃないの?」と。
前者はそもそも何をしたいかイメージせずに
ただ勉強だけしてきた人のパターンです。
だから、
「作れないなら作らなきゃいいんぢゃね?」
ってことにしておきます。
そういう人はやらないほうがいいです。
時間の無駄ですので。
もっと有意義なことのために、生きたほうがいいw
で後者については
プログラミングの勉強をし始めたころは
たぶん誰もが考えることだと思います。
たとえばC言語を勉強し終えたとして
さあ、これでゲームでもOSでも
Webでも何でも思い通りに制御できますよ
「ってなわけがありませんw」
ほとんどなにもできません。
料理の本を読んだだけでは名シェフになれないのと同じ。
野球の本を読んだだけではイチローになれないのと同じ。
運転の教本を読んだだけではレーサーになれないのと同じ。
プログラミング言語の学習を終えた段階というのは、
きわめて基本的な技能知識を習得しただけの段階で、
それ以外の一切の知識も経験もノウハウも不足しているので、
なにも作れないのです。
という事までもわかってません。
つまり
「練習あるのみ」
「どんどん吸収して引き出しを増やすのみ」です。
いろんな状況を経験し、慣れてくると、
何が欠けているから作れない=何があれば作れる
そのためには
どこから、何についての、どんな情報を
取得しなければならないか、
またそれを理解するためにどの分野の知識が必要か、
ということが瞬間的にわかります。
数学も物理も知らない人間が
プログラミング言語を学習したからといって
高度な物理演算や科学技術計算のプログラムを
書こうとしても、はなから何も
できないことは容易に想像できます。
ゲーム独特のプログラムの組み方を知らない人間が
適当な思いつきだけでゲームを作ろうとしても
簡単にはできないことも容易に想像できます。
なら、数学と物理の勉強をすればいいですよね。
ゲームのサンプルプログラムを入手し
処理を追いかければ参考にはなりますよね。
あとは考えを形にして試行錯誤しながら、
磨くだけです。
ぼんやりイメージしていただけではわからなかった
現実的な問題を知り、それを克服、または回避する
方法を知っていくことがノウハウの蓄積であったり
引き出しを増やすことにつながります。
それらが溜まってくると
今度はどれをどう組み合わせれば
よりきれいな設計になるかなど
別のことを考えるようになります。
「何を作ろうとしていて」、
「何についての知識が欠けている為に」
それができないのかを、冷静に分析してください。
「何があれば」できるのか、
「ほかに効果的な策は無いのか」などを
はっきりさせればおのずと何をすべきかがわかります。
それとプログラミングの世界には
常識的な考え方が通用しないことがままあります。
(というより常識的な考え方で書いても動きますが、
より効率的に動かすためには、
トリッキーなことをしないといけない状況がありえます。)
たとえば、三角形の面積を求めるプログラムを
書くとします。
底辺と高さを引数にとり
底辺*高さ/2をreturnするような関数を
書けばいいだけなのですが、
普通誰もが学校で
底辺*高さ/2と習っているので、
プログラミングにおいても
そう計算するように書きがちです。
もし精度が重要でないなら、
底辺*高さの1ビット右シフト演算で代用できます。
こちらのほうが高速に動作するでしょう。
あるいは底辺または高さが2の場合、
2と/2で相殺されるので、
掛け算1回と割り算1回が省略可能です。
条件にあう入力が頻繁に発生する場合、
こちらのほうが大幅に高速に動作する可能性があります。
変な例ですみませんw
というように、
コンピュータならではの高速化、最適化を
考えたりする必要も出てきます。
もっさり激遅プログラムでもよければ
いっさい考えなくていいことですが、
できるなら「遅い」より「速い」ほうがいい。
今流行のマルチコアでガンガン処理させたい。
などと考えていると
やっぱりそれ相応のノウハウが必要です。
しかしながら「プログラミング言語」は
そんなこと教えてくれません。
日本語が達者な日本人だから、
全国民、すばらしい俳句やら短歌やら川柳やら
が作れるわけでもないのと同じです。
言語の問題ではなく、ノウハウや技巧の問題です。
どう表現すればより「効果的」に働くか。
どう修辞技法を駆使すれば、読者に伝わるか。
それを知るには言語だけでなく、
コンピュータ自体の性質、
ライブラリの使用法についても
知らないといけませんが、
「プログラミング言語」は
そんなこと教えてくれません。
とういわけで、
答えは「つべこべ言わすに練習しろ」。
え?
「プログラミングの勉強をしたのにプログラムが作れない」?
「プログラミング言語の勉強をしたのに~」じゃないの?w
ぢゃあ、知らないwあ き ら め ろw