トラック1・📜プログラムとは何か

プログラムとは「手順書」である

読む目安 約10分・ゴール:プログラムが満たすべき3条件(順序・明確さ・有限)を理解し、曖昧な指示との違いを説明できる

アプリでこのトピックを学ぶ(無料・登録不要)

このトピックの要点

友達に「カレー作っといて」と頼めば、たぶんカレーが出てきます。玉ねぎの切り方も火加減も、相手が経験で補ってくれるからです。ところが同じ言葉をロボットに言うと、何も起きないか、とんでもないものが出てきます。補ってくれる人がいないからです。

プログラムとは、この「補ってくれない相手」に向けて書く手順書のことです。人間向けの手順書とは、要求される厳しさが違います。良い手順書には3つの条件があります。

  1. 順番が決まっている — 上から順に、1つずつ実行される
  2. 一つひとつが曖昧でない — 「適量」「いい感じ」「しばらく」は書けない
  3. いつか終わる — 永遠に終わらない手順は手順書として失格

3つ目は見落とされがちですが、実は事故が多い条件です。「お湯が沸くまで待つ」は、火をつけ忘れれば永遠に終わりません。コンピュータの場合、終わらない手順を渡すと本当に終わりません。画面が固まったまま反応しなくなる現象の正体は、たいていこれです(無限ループといいます)。終わる条件を書いたかは、手順書を書いたら必ず確認する点です。

順番が意味を持つ

「鍋に水を入れる」「火にかける」——この2つは入れ替えると空焚きになります。手順書では、並びそのものが意味を持ちます。プログラムもまったく同じで、上の行から順に実行されます。行を1つ入れ替えただけで結果が変わる、というのはCでも日常茶飯事です。

ビット「材料をそろえる」より先に「炒める」があったら、ボクは何も持たずにフライパンを振っちゃうよ。

曖昧さを消す練習

試しに「じゃんけんの勝敗を判定する手順」を書いてみましょう。

面倒に感じますか。その面倒くささこそがプログラミングの本体です。人間なら「グーはチョキに勝つ」と一言で済むところを、機械には組み合わせごとに教える必要があります。人間が普段いかに大量の判断を無意識に済ませているかが分かります。書き出していないことは、実行されません。

この手順の中身、つまり「どういう段取りで問題を解くか」という考え方の部分をアルゴリズムと呼びます。アルゴリズムは次のトラックでじっくり扱います。ここでは「プログラム=機械のための、抜けのない手順書」という一点だけ持ち帰ってください。

ちなみに、この感覚はAIへの指示にもそのまま効きます。「なんかいい感じの文章書いて」より「読者は初心者、400字、です・ます調」のほうが良い結果が返るのは、曖昧さを減らしているからです。相手が機械でもAIでも人でも、指示を具体化する力は同じ筋肉を使います。プログラミングを学ぶと日常の段取りが上手くなる、と言われるのはこのためです。手順書を書く訓練は、コンピュータのためだけのものではありません。

アプリでこのトピックを学ぶ(無料・登録不要)

確認問題

確認問題 1

機械のための手順書(プログラム)が満たすべき条件として、当てはまらないものはどれでしょう。

  1. 手順の順番が決まっていること
  2. 一つひとつの手順に解釈の余地がないこと
  3. いつか必ず終わること
  4. 手順の一部を、読み手が経験で補ってくれること
答えを見る

正解:D(手順の一部を、読み手が経験で補ってくれること)

「補ってくれる相手がいない」ことこそが、人間向けの手順書との決定的な違いです。書き出していないことは実行されません。残りの3つ(順番・明確さ・有限)は、プログラムが満たすべき条件そのものです。

確認問題 2

次の2つの手順のうち、上下を入れ替えると結果が変わってしまうのはどれでしょう。

  1. 「玉ねぎを切る」と「にんじんを切る」
  2. 「鍋に水を入れる」と「鍋を火にかける」
  3. 「皿を出す」と「スプーンを出す」
  4. 「窓を開ける」と「テレビを消す」
答えを見る

正解:B(「鍋に水を入れる」と「鍋を火にかける」)

先に火にかけてしまうと空焚きになります。手順書では並びそのものが意味を持ち、プログラムも上の行から順に実行されます。他の3つはお互いに影響しない独立した作業なので、順番を入れ替えても結果は同じです。「入れ替えても大丈夫か」を考える習慣は、のちにバグを減らします。

「プログラムとは何か」の目次

  1. コンピュータは何をする機械か
  2. プログラムとは「手順書」である
  3. ソースコードから機械語へ——コンパイルの旅
  4. CPUとメモリの模式図
  5. 命令実行サイクル(Fetch-Decode-Execute)
  6. プログラミング言語の地図とCの位置
  7. なぜ最初にC言語なのか
  8. 0と1ですべてを表す——2進数の入口

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版の販売ページは準備中です。

ほかのトラック

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版