プログラミング学習のはじめ方
プログラミングとは?
「コーヒーを淹れて」と人に頼めば、たいてい伝わります。豆をどれだけ使うか、お湯を何度にするかは、相手が経験で補ってくれるからです。同じ言葉をコンピュータに渡しても、何も起きません。補うための経験を持っていないためです。
「コーヒーを淹れて」では動かない
コンピュータに頼むときは、人が黙って補っている部分を、こちらが全部書き出すことになります。
プレーンテキスト
1. カップを用意する
2. コーヒー豆を 10g 計る
3. お湯を 200ml 沸かす
4. ドリッパーにフィルターをセットする
5. 挽いた豆をフィルターに入れる
6. お湯を注ぐ
7. 30 秒待つ
8. カップに注ぐ「何を」「どれだけ」「どの順番で」がそろって、ようやく動きます。プログラミングとは、頭の中にあるやりたいことを、ここまで割り開いて渡す作業のことです。
ここで気になるのが、どこまで細かく書けばいいのかという点です。答えは「相手が知らないところだけ」です。上の手順でも「お湯を沸かす」の中身は書いていません。相手がそれを分かっているなら、そのままで通ります。逆に「ちょうどよく」のような、相手の判断に任せる言い方だけは残せません。
最初から正しい細かさで書ける人はいません。書いて動かして、動かなかったところをもう一段割り開く。この繰り返しで、必要な細かさに近づいていきます。
書いたとおりにしか動かない
この手順の 6 番と 4 番を入れ替えると、フィルターをセットする前にお湯を注ぐことになります。人ならその場で気づいて手を止めますが、コンピュータは止まりません。書かれた順に、そのまま実行します。
抜けにも同じことが起きます。「お湯を沸かす」を書き忘れれば、水を注ぐ手順として最後まで動き切ってしまいます。指示どおりなので、間違いだとは扱われません。
プログラムが思ったとおりに動かないとき、原因のほとんどは「書いたつもり」と「実際に書いたこと」のずれです。コンピュータの側が気まぐれに間違えることは、まずありません。ここが分かっていると、動かないときに探す場所が自分の書いた手順に絞れます。
日本語のままでは渡せない
では手順を日本語で書いて渡せばよいかというと、そうはいきません。日本語は、同じ文が二通りに読めても会話が成り立つようにできています。「お湯を少し注ぐ」の「少し」がどれくらいかは、読む人によって変わります。
プログラミング言語はその逆で、書かれた文が一通りにしか読めないよう、文法が狭く決めてあります。
Python
water = 200
print(water)一行目で数値に water という名前をつけ、二行目でその名前の中身を表示しています。日本語の説明より短く、そして読み方が一通りしかありません。
記号が出てくるのは、見た目のためではありません。「この値をこの名前で覚えておく」「ここからここまでが一つの命令」といった区切りを、読み手の解釈に任せず確定させるためです。冒頭の図解にあるとおり、こうして書いたものが、最終的に機械の実行できる形へ翻訳されます。人間が読み書きできる形と、機械が実行できる形の、両方を満たす必要があるわけです。
覚えることが多そうに見えますが、最初に身につくのは記号の意味ではありません。やりたいことを手順に割り開く感覚のほうが先に育ちます。そしてこちらは、あとで別の言語に移っても、そのまま持ち越せます。
復習ミニクイズ
コンピュータに指示を出す際、プログラミングの考え方として最も適切なものはどれですか?