コンピュータのプログラムとは何か?(3) 〜 プログラミング入門一歩前
3回目になります。
前回は、コンピュータが行う”単純な計算”について説明しました。
表1:コンピュータが行なっている単純な計算例
数値を受け取る 処理 答えを出す
0 → コンピュータ → 0
1 → コンピュータ → 1
…
いったいコレは何でしょう?
と、これを掘り下げるのは後回しにして、まずはその可能性について見ていきましょう。
単純な計算の可能性
ひとまず”単純な計算”は、コンピュータのプログラムの"原子"的なもの、レゴのプロックの一片、ちぎり絵の千切った紙片のようなものだと思ってください。
これが一つだけなら何もコンピュータなど必要ありません。
例えばこの程度のことです。
単純な計算の例1
スイッチを 入(1)にしたら電灯を点け(1)、
スイッチを 切(0)にしたら電灯を消す(0)
単純な計算の例2
トランプを1枚引いて
ハートやダイヤ(0)なら赤い箱(0)に
スペードやクローバー(1)なら黒い箱(1)に入れてもらう。
例1なら小学校の豆電球の実験程度、例2なら訓練された動物だってほぼ確実にできます。
お金を払ってコンピュータを使うほど役に立つようには思えません。電卓の方がマシです。
そこで、コンピュータを自由に、バリエーション豊かに、クリエイティビティ溢れる仕事のために使うには、この単純な計算を組み合わせることから始まります。
計算を組み合わせる
例えば 99 × 5 など、2桁以上の掛け算はどのように解くでしょうか?
一般的には九九と1桁の足し算を組み合わせて答えを出していくと思います。
コンピュータの場合も、表1のような ”単純な計算” を組み合わせて、目的の作業をさせるのです。
どのように組み合わせるか?
図にしてみましょう。
単純な計算の図
-●-
左の - : 数値を受け取る部分
● : 何らかの判断
右の - : 答えを出す部分
となると、この計算を組み合わせるということは
計算の組み合わせの例1
-●--●--●-
となります。
”順番” に数珠つなぎのように計算をつなげました。
これは例えばピタゴラ装置のように、一つひとつは取るに足らない小さな動きをする装置が、1つのボールなり物理的なエネルギーなりを伝えあって壮大な装置を作り出していくイメージでもあります。
このようにして単純な計算を組み合わせていくことで、LEGOのように小さなブロックが(だからこそ)様々なキャラクターや物を作ることができるように、コンピュータを自由に、バリエーション豊かに、クリエイティビティ溢れる様々な仕事を助けるために使うことができるのです。
つまり、
小さなことを組み合わせて大きな(多様な)事を可能にする
ということがコンピュータプログラムの一つの側面です。
プログラムとはプロ+グラム
さてもう少し掘り下げてみましょう。
プログラムは プロ + グラム = 前もって + 書く という意味です。
ある目的のために、前もって、私たちがコンピュータにさせるあーしなさいとかこうしなさいとかいう計算の組み合わせを書いておくことです。
なぜ、前もってなのでしょうか?別に気が向いたときにコツコツ指示を出せば良いではないですか?
ダメなんです。
なぜならば、
それじゃあ遅いから!
あの計算もその計算も、
答えが欲しい時にすぐに欲しいの!
だから予め書いておくの!
そしていざその時がきたらさっと渡すの、
あんた、これやってって。
全部やることここに書いてあるから、
書いてある手順通りにすぐやって。って。
ちょっと人間ワガママな感じですね💧。
ですが、そのワガママを叶えるためにコンピュータは進化を遂げます。
"どんなプログラムでも直ぐに受け付けます"
と。
コンピュータがプログラムを受け付ける上での心構え
人間側が予め用意するのだから、コンピュータ側も予めいろいろ用意が必要なのです。
あ、そう。と、思うかもしれませんが、考えてもみてください。
コンピュータだって機械です。
金属や木材、ネジやらバネやら何か物理的な材料で組み立ているわけです。
そうなるとそうそう気安く機械の目的=ここでは計算式としましょう、それを変える事は出来ないのです。
例えばまず表1の単純な計算だけをする機械を考えます。
数値をビー玉に置き換えれば、この処理で必要な部品といえばそれを出力先に渡す一本のパイプで良いでしょう。
ー
次にそれを組み合わせて二つのビー玉をいっぺんに運ぶというプログラムにするとしたらこうなります。
=
この時、パイプを2本にするという"工事が必要"になります。
レゴだってサンタクロースを作った後でトナカイを作ってと言われればブロックを一度分解して作り直します。
ピタゴラスイッチでも放送のたびに毎回組み立て直しているわけです。
それは当たり前すぎて、悩むところではないのですが、本当は出来るだけ組み立てなおすことはしたくないのじゃないですか?
だっていちいち面倒だから。
そう考えるオオナマケモノ🦥というべきか探求者というべきか、そういう人がいても不思議ではありません。
それに、作り直せば作り直すほど組み立て間違えたり、劣化したり壊してしまう可能性だって高くなります。
そのように考えれば立派な合理主義だともいえます。
じゃあどうするか?
ちょっと長くなったので宿題にしましょう。
まとめ
今回はプログラムのもつ可能性=小さなことを組み合わせて大きなことを行う、ということと、コンピュータはいかにしてそのような多様なプログラムを受け付けるか?ということの入り口に立ちました。
次回はコンピュータプログラムがコンピュータプログラムであるための画期的なアイデアを見ていきましょう。
令和2年12月12日 イッチニイッチニにと乾布摩擦の声が聞こえていた頃だなあ