狐の王国

人は誰でも心に王国を持っている。

だれでもわかるプログラミングの教え方もある……といいな

プログラミングできる人とできない人との間の深い溝という記事。確かにプログラムは書ける人と書けない人の間に深い溝があるように感じることはある。

けど別にこの記事で紹介されてる変数の代入くらい、簡単に教えられるんじゃないかという気がする。「最初のハードル」なんて言う程のハードルだとは思えない*1

そう言えるのは俺がたまたまプログラム書ける人だから、というわけじゃなく、俺が8歳か9歳の頃に「こんにちはマイコン」という漫画で解説されたプログラムの初歩でされてた説明がとてもわかりやすかったからだ。

a = 10
b = 20
c = a + b
print c

aとかbとかってのは「変数」といい、これは数字を入れておく「バケツ」なんだ。「a = 10」っていうのはaという名前を付けたバケツに、10という数字を入れておくという意味。

じゃあ「c = a + b」はどうなるのか。

これはcという新しいバケツを用意し、aとbを足した数字を入れろという意味だ。

最後の「print c」はcというバケツの中身を表示しろ、という意味になる。

それではcに入れてしまったaやbのバケツの中身はどうなったのか?

こういうのは実際に試してみた方が早い*2

a = 10
b = 20
c = a + b
print a

などとやって実際にaを表示してみるとどうなるか見てみよう。同様にbの中身も見てみよう。また、cというバケツを新たに用意せず、「a = a + b」としたらどうなるかも見てみよう。

……と、さすがに四半世紀も前なので細部は覚えてないが、だいたいこんな感じだった気がする。最後の部分は教わる側の「あらし」が実際に動かして「わお、10が出た!! そうか、中身を他のバケツに入れてもaやbのバケツの中身はそのまんまなんだ」とか言ってたような気がする。いやそんなはっきりとは覚えてないけど。

ちなみに「a = a + b」としたらaのバケツの中身は一度空っぽにされる。しかしそれは足し算したあと、バケツに入れ直される前だ。

ともかく8歳か9歳だった俺はそんな説明を漫画で読んですぐに変数と代入を理解した。配列は「仕切りのついた箱」と説明されていた。

このバケツというメタファはすごくわかりやすくて、変数と代入の概念はこれで充分誰にでも理解できると思う。俺はプログラミングの教師などしたことはないが、何人かにそのまま説明して分からなかった人はいなかったし。

こうやって実際に動かしながら学べば誰でも理解できると思うんだけどなあ。確かに再帰とかそのへんになるとどうしても理解できない人が出てきてもしょうがない気もするんだが。

どうだろうか、冒頭の記事の問題がわからなくて、この説明を読んでもまだわからないという人はいるだろうか?

*1:ただ元の論文に反論するというわけじゃない。最初のハードルと言うほどのものか?という疑問を持っただけだ。そしてハードルは教育手法によってハードルじゃなくすることができる(こともある)はず。

*2:このコードはRubyPerlに読みこませるとホントに実行できる。どちらもMac OS Xや各種Linuxには普通に入ってるはずなので実際に実行してみるといいと思う。インストールや実行のしかたの詳細は初心者向けの解説ページをぐぐるといい。

Sugano `Koshian' Yoshihisa(E) <koshian@foxking.org>