簡単なプログラミング言語

 プログラムが簡単にできる言語というのがいくつか作られたが、それらに共通の特徴は
「その言語で簡単に書けるプログラムは、その言語を使わなくても簡単に書ける」
ということである。

 うちの子が学校でプログラミングをやるんだとさ。ブロックを組み立てるように簡単なのだそうだ。個人的に思うのは素直にawkとかで始めたほうがよくない?MS-ExcelのVBAも実は悪くない。というのはデータ加工の段階が追いやすいのでプログラムの状態がよくわかる。ようするにワークシートを中間ファイルとして利用すれば、途中妙な動きをしたときに「あれ?」と値を目でチェックできるのだ。
 ブロックを組み立てるようにプログラミングってプログラミングの三要素のうち「連接」しか使えない印象があるのだな。確かに「分岐」はある。ただし条件に合わない時は処理しないというイメージだ。「繰り返し」もないわけではない。While文ならなんとかなるだろう。しかし、少し複雑な処理を与えるとあっという間に手に負えなくなる。サブルーチン化しようにも、変数の受け渡しってどうすんだろ。

 と、冷たい目で見ていたが、なるほどと納得できそうな適用分野があった。
 つまり「ビデオゲーム」なら何とかなるのだな。分岐の代わりに画面でクリック!で割り込み処理を入れればいい。プログラム全部がループみたいなものだ。脱出条件を満たせば(例:全部のターゲットをヒットする、ようするにステージクリアだ)おしまい。
なるほど、ゲームプログラミングには分岐もループもないからひたすら高速、という言い方を聞いたことがあるがこんなやり方をしていたわけか。納得しちゃったよ。

 連接・分岐・繰り返しの3つの要素にアルゴリズムは分解できる、というダイクストラの定理(「構造化定理」が正しいらしいが、私は敬意をもってこう呼びたい)をぼんやりとでも意識させてプログラミングを教えたいものだけどね。それこそ「学食で何を食べるか」の意思決定を基本3構造で表現することから始める。入口が「腹減った」出口が「A定食買った」。
 最初は、学食に着く→財布の中身を確認する→定食の値段→決定→購入、くらいの簡単なものになるだろう。ここで教えておくことは財布の中身を確認して昼食に払える金額を決定し、変数に格納したところで「プログラムの状態」がきまるということ。
 やがて「財布の中身を確認する」の後に「この後使う金額を控除する」のルーチンが入るかもしれない。人によっては定食の値段を確認してから
 もしA定食にするならば・・・B定食にするならば・・・C定食にするならば・・・の分岐が入ることになるのかな?実はループもあるよ。合計金額が価格を超えるまで自動販売機に貨幣を投入する。
 あたしだったら「どういう経路で判断すれば一番合理的にメニューを決められるか」という思考回路を定型化するところまで持っていきたいな。
 本当は「集計」なんて作業が典型的に基本3構造を教えるにはいいのだろうが、あえて誰もが頭の中で考えた経験のあることを材料にしたい。

 20年近く前に「コンピュータ教育」の対象として「社会貢献を教える」を呈示した私だから、プログラミング教育の狙いとして「論理的な思考を」をと呈示するのもよかろう、と思っている。
 そのうえで基本3構造と見かけのずれる「生活習慣」について考えるきっかけを見てほしい。「割り込み」と「脱出条件」である。ともに基本3構造で説明はできるが、自分の行動を律してゆくことを考えるなら、この二つをどう認識し、どう扱うか、は考えたほうが良いだろう。

コンピュータネタ、目次
ホーム