プログラミングを学ぶ理由

ひさしぶりに彼女とお茶を飲んで、まったり雑談していたら、不意に

あなたがそんなに好きなプログラミングっていうの、私に教えてみてよ

と煽ってきたので、彼女のMacBook AirのシステムPerlで、ターミナルから「Hello」が出力されるだけのコードを目の前で書いてみた。

print 'Hello';

これをhello.plで保存する。
shebangさえ付けない。改行も入れない。ほんとに最小限。

実行。

$ perl hello.pl
Hello

この「Hello」って書いてある部分を書き換えると、出力される内容もどんどん変わっていくんだよ、と言ってそこをいろんな数字や言葉に置き換えていく。

print 'Hi';

実行。

Hi
print 1234;

実行。

1234

ほらね、という感じで様子を見ると、「これの何が面白いのか、まったくわからない」と言う。

なんで「Hello」って出さなきゃいけないの? 「1234」ってなに? 何か意味あるの? と言う。

あなたもPerl入学式で、人に教えたりするの? それはすごいね。私みたいな人だったら大変じゃない? だって本当に、何もわからないんだから。と言う。

いや、そうじゃない。とぼくは言う。

問題は、プログラミングをやりたいと思っているかどうかなんだよ。「わからない」なんて当たり前なんだよ。だって、最初は誰だって何も知らないんだから。

でも、「プログラミングをやりたい」って思う人は、わからなくてもわからないままやるんだよ。わからなくても、わかるまでやる人が「プログラミングをやりたい人」なんだ。

だから、そういう人に教えるのは何も難しくない。その人がわかるまで付き合ってあげればいい。「わからない」なんて前提なんだ。わからなくても、それはつまずきでもなければ間違いでもない。息を吸ったり水を飲んだりするのと同じだ。それは必要なことですらある。だから困ったりしない。

難しいのは、「プログラミングをやりたくない」という人に教える場合だと思う。そういう人にとっては、「わからない」ということが致命的な問題になる。「何のためにやるのか」ということが問題になる人に教えることは、だから難しい。

「プログラミングをやりたい」という人は、すでに「何のために」がはっきりしているか、そんな目的すらなくてただ何となく「やりたい」という人だから、ぼくらがわざわざ「プログラミングが何の役に立つのか」とか、「どこが面白いのか」なんて教えてあげる必要はない。その人たちはすでに学ぶこと自体を楽しんでいるし、「わからないから」という理由でやめたりはしない。

でも自分以外の意志によってやらされている人は、何かそれを「やる理由」がほしいと思うだろうね。「楽しみ」や「目的」を外部から提供してもらう必要がある。それが悪いってことじゃない。自然なことだ。ぼくだってプログラミング以外の何かに関してはそうだと思う。

そのうち小学校とかでもプログラミング教育をやるらしいけど、それはまた別の話で、基礎的な教養として教えるものだろうから、算数や漢字や英語に馴染ませるようにプログラミングに馴染ませるのはいいことだと思うけど、そういうことじゃないなら、まあ、やりたい人がやればいいことで、ということは「プログラミングの何が面白いのか」を他人が教えてあげたり、他人から教えてもらったりする必要はどこにもないってことになるだろうね。