日頃から,僕はプログラミング入門で「繰り返し」「条件分岐」を教えることに極端に反対しているわけですが,その理由を説明したいと思います.
「だって,プログラミングの基本に繰り返しや条件分岐があるじゃないか」と言われます.それはその通りだと思います.しかしよく考えてください,その機能だけではプログラムはつくれませんよね.もう1つとても重要な概念「変数」とセットでなければプログラムは成立しないのです.
変数があるから,同じプログラムを繰り返し実行しても,そのつど変数に違う値が入っているから違う計算ができます.同じ条件分岐でも変数に違う値が入っているから分岐が変わります.変数がなければ,繰り返しも条件分岐もつまらないわけです.
変数を教えるのもそんなに簡単じゃないですよね.そこで発明されたのが「亀」です.スクラッチだと猫ですね.要するに内部状態をもったオブジェクトがあって,それを命令によってコントロールする.命令の実行でオブジェクトの内部状態が変化します.オブジェクトの内部にはXとYという位置を示す変数があって,「前に進め」という命令でそれらが変化します.さらにオブジェクトの向きを表す変数もあって「右に回転」の命令で変化します.
命令を繰り返して呼び出すような課題を考えて「繰り返し」を教えるきっかけにするんですよね.これが小学校のプログラミングが「多角形」の部分に入った理由でもあるんですが.
あと,ロボットとも相性がよいですね.ロボットの内部状態(今どこにいるとか)には触れずに,命令だけでロボットを動かすことができます.ロボットにつけたセンサーでライントレースといった「条件分岐」を教える課題にも繋げられます.
でも,本当に重要な「変数」を教えないでやっているので,これらには限界があります.入門としてそこそこのスタートは切れるかもしれませんが,そこからの応用が頭打ちになってしまうのではないでしょうか?
線の色とか内部状態を増やせば,そこそこバリエーションは出せますけど,応用の増えかたがゆるやかで,我々がプログラミングをやってて感じるプログラミングの万能感的には到達できていないように思います.
僕が問いたいのは「変数」を教える覚悟があって「繰り返し」「条件分岐」を教えているのか,という点につきます.「はいそうです」という人には全然問題を感じてないです.変数を自由自在に扱えたときの万能感はすごいですよね.大変ですが,ぜひ頑張って教えてください.
じゃなくて,「変数」を教える気がないのに「繰り返し」「条件分岐」を教えるツールがはびこることに大きな疑問を感じているのです.それは変数がわかる年齢になるまでやんなくていいんじゃないでしょうか.
ちなみにビスケットはどっちも教えなくてよくて,プログラミングの万能感を伝えられるツールです.その辺に関しては次回書きます.