友達に「カレー作っといて」と頼めば、たぶんカレーが出てきます。玉ねぎの切り方も火加減も、相手が経験で補ってくれるからです。ところが同じ言葉をロボットに言うと、何も起きないか、とんでもないものが出てきます。補ってくれる人がいないからです。
プログラムとは、この「補ってくれない相手」に向けて書く手順書のことです。人間向けの手順書とは、要求される厳しさが違います。良い手順書には3つの条件があります。
- 順番が決まっている — 上から順に、1つずつ実行される
- 一つひとつが曖昧でない — 「適量」「いい感じ」「しばらく」は書けない
- いつか終わる — 永遠に終わらない手順は手順書として失格
3つ目は見落とされがちですが、実は事故が多い条件です。「お湯が沸くまで待つ」は、火をつけ忘れれば永遠に終わりません。コンピュータの場合、終わらない手順を渡すと本当に終わりません。画面が固まったまま反応しなくなる現象の正体は、たいていこれです(無限ループといいます)。終わる条件を書いたかは、手順書を書いたら必ず確認する点です。
順番が意味を持つ
「鍋に水を入れる」「火にかける」——この2つは入れ替えると空焚きになります。手順書では、並びそのものが意味を持ちます。プログラムもまったく同じで、上の行から順に実行されます。行を1つ入れ替えただけで結果が変わる、というのはCでも日常茶飯事です。
曖昧さを消す練習
試しに「じゃんけんの勝敗を判定する手順」を書いてみましょう。
- 自分の手と相手の手を受け取る
- 2つが同じなら「あいこ」と表示して終わる
- 自分がグーで相手がチョキなら「勝ち」と表示して終わる
- (以下、組み合わせを全部書く)
面倒に感じますか。その面倒くささこそがプログラミングの本体です。人間なら「グーはチョキに勝つ」と一言で済むところを、機械には組み合わせごとに教える必要があります。人間が普段いかに大量の判断を無意識に済ませているかが分かります。書き出していないことは、実行されません。
この手順の中身、つまり「どういう段取りで問題を解くか」という考え方の部分をアルゴリズムと呼びます。アルゴリズムは次のトラックでじっくり扱います。ここでは「プログラム=機械のための、抜けのない手順書」という一点だけ持ち帰ってください。
ちなみに、この感覚はAIへの指示にもそのまま効きます。「なんかいい感じの文章書いて」より「読者は初心者、400字、です・ます調」のほうが良い結果が返るのは、曖昧さを減らしているからです。相手が機械でもAIでも人でも、指示を具体化する力は同じ筋肉を使います。プログラミングを学ぶと日常の段取りが上手くなる、と言われるのはこのためです。手順書を書く訓練は、コンピュータのためだけのものではありません。