「プログラム」と一言で言っても、学芸会の「プログラム」もパソコンの「プログラム」もあります。これらを「プログラム」にしているのは一体なんでしょうか。
カレーライスのプログラム
とりあえず、カレーライスでも作りながら考えてみましょう。あなたは、どうやってカレーを作りますか?「カレーを作る」というと、だいたいこんな手順が思い浮かぶと思います。
- カレールウを作る
- 材料を揃える
- 材料を下ごしらえする
- タマネギは薄切りに
- ニンジンとジャガイモは皮を剥いてぶつ切りに
- 肉もぶつ切りに
- 材料を炒める
- 野菜を炒める
- 肉を炒める
- 材料を鍋で煮込む
- カレー粉を鍋に入れる
- よくかき混ぜる
- ご飯を炊く
- ご飯にカレールウをかけて、出来上がり。
ところが、ずぼらな現代人は、こんなやり方もします。
- カレールウのレトルトパックを温める
- コンビニで買ったご飯をレンジでチンする
- ご飯にカレールウをかけて、出来上がり。
逆に、材料にこだわる人なら、こう考えているかも知れません。
- カレールウを作る
- 材料を揃える
- 材料を作る
- 種芋を畑に植える
- 肉牛を肥育する
- 材料を作る
- [以下略]
このいずれもが、ただしいレシピであり、そして正しい「プログラム」なのです。
プログラムとは、仕組み
上のレシピをよく見ると、二つの点に気がつきます。
一つは、どのレシピも、材料があり、それをレシピに従って調理し、その結果が料理となっています。図に書くと、こうです。
材料 → レシピ → 料理
これをプログラマーの言葉で書くと、こうなります。
入力 → プログラム → 出力
このことから、プログラムを以下のように定義することが出来ます。
プログラムを組み合わせてプログラムを作る
カレーライスのレシピを見て、もう一つの点に気がついたあなたは、プログラマーの素養ありです。
それはなにかというと、「ある手順の結果は、次の手順の材料として使える」ということです。
図に書くと、こんな感じです。
種芋 → 畑 → ジャガイモ + 肉牛 → 肥育 → 牛肉 +→ カレールウ + 米 → 炊飯 → ご飯 →→→→→→→+→ カレーライス
レシピがレシピの連鎖で出来ているように、コンピューター・プログラムもプログラムの連鎖で出来ています。コンピューター・プログラマーの仕事というのは、つまるところレトルトパックをご飯にかける人のように、プログラムどおしを組み合わせて別のプログラムを作ったり、農家のように別のプログラムが使うデータを用意するプログラムを書いたりすることを変わらないのです。
断言します。カレーを作れるあなたは、プログラマーになれます。たとえレトルトをチンするだけの人でも。さらにこの考えをつきつめていけば、何かを何かに変えるための仕組みを作る人は、すべてプログラマーとも言えます。その意味において、全ての人、いや生きとし生けるものはすべてプログラマーであると言っても言い過ぎではありません。
コンピューター・プログラマー
ただし、本書で扱うプログラマーは、そこまで大げさなものではありません。コンピューター上での入力を、コンピューター上で動くプログラムが加工し、コンピューター上で出力する。そういうプログラムを書くコンピューター・プログラマーのことを、本書では略して「プログラマー」と呼ぶことにします。
それでは、プログラマー達は、どうやってコンピューター上に仕組みを作っているのか。次にそれを見て行くことにしましょう。
Dan the Programmer
カレー作りをプログラムと勘違いしたところなんでしょうね。
抽象化の落とし穴ですね〜