プログラミングでわからないところがわからない解決法
わからないことがわからん症候群!
プログラミングを始めてみたのはいいが、わからないことだらけ!っていう現象は必ず訪れます。
その中でも先輩プログラマに聞いてみようにも、 そもそもわからないところがわからない現象に陥っている人は少なからずいるはずです。
わからないことがわからない現象の場合何をどう聞けばいいのかもわかりませんし、 聞くのも相手が困ってしまうしどうしたものか...という悩みが出てきます。
実際、私もプログラミングを覚えたてのころはわからないことがわからない現象は何度も遭遇しています。
私は無駄にプライドが高くて周りに聞ける人もいなかったですし、 質問掲示板に書き込むのもダルいしとにかく検索しようにも何を検索したらいいのかわかりません。
多分この現象に陥る人は、プログラミングの基礎(if文やfor文の勉強だけ)をやって 次になにをやればいいかわからない人に多いのではないでしょうか。
そんな人は何をつくりたいのか考えましょう
ここで気をつけてほしいのがいきなり
- ゲームを作りたい
- iPhone or Androidアプリを作りたい
- ハッカーみたいなことをしたい
- AIを作りたい
- 何も浮かばない
と最後以外はアバウトな目標が出てくると思いますが別に悪いことではありません。
ですが冷静に考えて初心者がいきなりすごいものを作るのは不可能なので、 これらを作りたいのであれば、作るために何が必要かを考えてみるといいでしょう。
何も浮かばない人は、なんでもいいので何かを作るという目標を立ててください。
私のオススメはゲームを作ることです。
これで何を作ればいいかわからない人も目標ができましたね。
しかしすでに目標のある人も今出来た人も次に何をしたらいいのかわからない。
何がわからないの?っと聞かれてもわからないことがわからない状態です。
まずは完成品を作るための部品を作ろう
結論だけ先に言うと、完成品に必要な部品(基本構文の組み合わせや関数の呼び出し)を作らないと完成品(プログラム)は出来上がりません。
具体的に言うと、画像を左から右に動かして画面の右端にいったら今度は左端まで動かすのを繰り返すプログラムを作りたい場合 基本構文(変数や配列・for文やif分など)を使ってスクリプト(画像表示関数等)を呼び出せばいいですね。
以下、これでもよくわからない人に詳しく解説します。
「わからないことがわからない現象」に陥る最大の理由は0の状態から完成品を作ろうとしているからです。
プログラムを攻略しよう
ゲームで例えると完成したプログラム=ボス敵です。
例えばボスが炎のモンスターで物理攻撃がまったく効かない状態とします。
物理攻撃が効かないのでボスを倒すには素手で倒すことは無理なのがわかりますね。
対策はいくつか思いつくかもしれませんが単純に考えると、 RPGとかであれば「水の魔法があれば楽に倒せる」という思考になるはずです。
ここ!この「水の魔法があれば楽に倒せる」という考え方に注目してください。
一度プログラミングに視点を戻してみます。
先ほどの炎のボスと水の魔法の例に例えると、 「完成品を作り上げるには〇〇〇があれば楽になる」となりますね。
炎のボスの場合は名前・見た目からして水で大ダメージを与えられそうという考えは 今まで得た知識や経験から行き着く結果だと思います。
最初に話を戻すと、わからないことがわからない状態で完成品を作り上げることができないというのは 素手で炎のボスを倒そうとしているけど、どうしたらいいかわからない状態ですね。
「炎のボスを倒すには水の魔法が必要」という結論にたどり着くのは知識や経験があってこそです。
「完成品を作り上げるには〇〇〇が必要」の〇〇〇が何かわからないのは、 単純に知識も経験が無いだけということになります。
では、この〇〇〇は何なのかというと部品や道具です。
プログラミングに置き換えると部品はスクリプト、道具は基本構文(IFやFORや変数や配列等)になります。
数値を計算して表示するだけのプログラム(完成品)であれば道具(基本構文)だけで作ることができますね。
しかし画像を表示したり動かしたりボタンを押したりできるソフトを完成させるには、 基本構文とスクリプトを組み合わせていかなければいけません。
武器は手に入れた
ここまでで貴方はプログラミングに対して素手から剣を持てばいいということが判明しました。
しかし剣を持ってみたものの使い方がわからない状態です。
次にやらなければいけないことはなんでしょうか?
そう、剣の使い方を覚えることです。
剣を基本構文に例えた場合、また基本構文の勉強かよ!
ってなってしまいますね。
そうなった人は剣の使い方はもう身に付いているということです。
しかし実戦経験がないので剣の使い方を覚えても思うようにダメージを与えられません。
基本構文だけ学んでも何をどう作ったらいいかわからない状態なのです。
じゃあどうするかというと、魔法(スクリプト)を覚えたらいいわけです。
魔法を覚えたら相手を怯ませて剣でダメージを与えることができます。
ちょっと混乱してきたと思うので、ゲームの話は抜きにしてプログラミングだけでいうと
プログラミングとは、基本構文をうまく使ってスクリプトを実行して完成品を作る
ということです。
他人が作った魔法を使おう
基本構文は入門書やググればすぐわかとして、スクリプトはすでにプログラム言語に組み込まれているものや 有志の方が作ってくれたライブラリをダウンロードして使ったりすることが基本です。
ゲームで例えると誰かが作ったスクリプトは魔法が込められた使用回数に制限がない杖ないしスクロールですね。
魔法使いでなくてもスクロールや杖を振ると魔法が使えるといった感じです。
レベルが上がってくると、基本構文とスクリプトを使って新たなスクリプトを生み出すこともできます。
魔法と攻撃を組み合わせて新たな魔法を作るとかなんかロマンがありませんか?
プログラミグって高校数学で使うような難しい計算式を使ってうんたらかんたらしてるようなイメージですが、 そういったことをしているのはごく一部だけです。
プログラマに至っては天才プログラマが組んだスクリプトを使って俺tueeeeeee!していることが多いです。
しかしこれがバカにしたもんではなくて、俺tueeeeeee!していると物足りなくなって、 それを使って新たな武器を作ってもっと俺tueeeeeee!を体験するので 単なるコピぺ野郎ではなく自力でコードを組むことになるので実力がついていきます。
これはWebプログラマだけではなくCを使うような組み込みプログラマも同じです。
凄腕プログラマもこの道を必ず通ってきています。
そしてその凄腕プログラマになった人が新たな武器を生み出し、後期のプログラマがそれで俺俺tueeeeeee!して どんどん技術が発展していきます。
プログラミングは完全にRPGですね。