プログラミング教育について

久々に matz にっきが更新されたので、駄文を書いてみる。

小学校や中学校での情報処理の教育やプログラミング教育に力を入れようという動きもあるようです。しかし、自分自身のプログラマとしての経験から考えると、これにはなかなか困難がつきまとうように思えます。

2013-06-12 「ちょっと待った!小中学校でのプログラミング教育」- matz にっき

「教育より、未来のプログラマの『発掘』に力を入れるべき」という主旨だと思うんですが、プログラミングに触れる機会がなければ未来のプログラマになることはないので、どっちも必要なんじゃないですかね。競技人口を増やすことは重要。


プログラミング教育の実施の難しさばかり書かれてますが、むしろ実施することによる弊害があるのかが気になります。「プログラミング嫌いが増える!」というのは、そういう人は元々プログラマにならないんで、弊害とは思わないです。そして、プログラマの素質がある人がプログラミングに触れる機会を得られるというメリットは大きそう。

少しでもたくさんに人にプログラミングに触れる機会を与え、(略) 未来のプログラマを「発掘」できるのかもしれません。

って matz 自身も言ってるのに。他の弊害として、「他に教えるべきことを教える時間がなくなる!」とかは納得できる。英語の方が重要だと思う。

まあそんな感じなんで、特に弊害なくてそれなりにできるんならやればいいんじゃね、という気分です。


それはそれとして、matz の言ってる「実施の難しさ」も結構微妙な気が。

第一の課題: 誰が教えるか?

プログラミングを教えるというのであれば、少なくとも教える人はプログラミングの楽しさを自覚している人でなければ成果をあげられないと思いますし、そのような人をそれぞれの学校に配備するのは大変な困難ではないかと思います。

  • プログラミングの楽しさを教えたい
  • そのためにはプログラミングの楽しさをわかってる人が教えなきゃいけない

という気持ちはわかります。特に matz は "enjoy programming" の人ですし。でも、たとえば数学に置き換えて考えてみれば、

  • 学校の先生がみんな数学の楽しさをわかってるとは思えない
  • それでも数学の楽しさをわかる子は勝手に楽しんでる

わけです。「楽しさを教える」とか無理。「楽しさ」は勝手に見出すものであって、教育で伝えるものじゃないかと。

なお、「最低限教えられるだけの人を確保するだけでも難しい」というのはわかります。

第二の課題: どう評価するか?

人によって出来栄えが 10 倍、100 倍あるいは 1000 倍も違うようなものを学校の成績としてどのように評価したらよいのか途方にくれます。

これはちょっと理解できませんでした。人より多少できる程度の子も、数学オリンピックに出ちゃうような子も、100 点つければいいだけじゃないですかね。「未来のプログラマを発掘」することに意識が行き過ぎて、教育とは関係ないことを言ってる気がしました。


むしろどうやってテストするのかに興味があります。仕様を出して、その仕様を満たすプログラムを実装させるのかなあ。今のセンター試験だと BASIC プログラムの穴埋め問題とか出してますが、実行環境なしで解かせるのはプログラミング教育として残酷過ぎると思う……。

第三の課題: なにを教えるか?

この点は最初のふたつの課題に比べればなきに等しいものです。

ここが最も重要じゃないですか……。
プログラミング言語は今も変わってるので、プログラミング言語の詳細より、プログラミングによる問題解決や、プログラム設計みたいな汎用的な話を教えるべき。
……なんて感じのことを matz にっきのコメント欄で見ましたが、そんな抽象的なもんがプログラミング言語の詳細を知らない状態で理解できるんですかね……。あと第一の課題に関係しますが、適当なことや嘘を教えるのは明らかに害悪なんで、これこそ教えられる人が足りない気がします。
そういう意味では、ちゃんと動くかどうか確認できるトイプログラムの学習の方が向いてると思う *1
プログラミング言語については、BASIC を教え続けてる現在のカリキュラムもどうかと思うんですが、まあしょうがないのかなあ。

それはそれとして

自分の好きなことを次世代の人たちにも好きになってもらいたい、という気持ちはすごくわかるんですが、今の時代でどういうすりゃいいのか未だ答えを持たないです。大学時代から 10 年以上考えてるんですが。まあとりあえずこれは、学校教育とは関係ないエゴイズムの話と思ってます。

さらに関係ない話

「早すぎる最適化は諸悪の根源」という考え方を教育してほしい。「効果は小さくてもコツコツやる」が世の中で評価されすぎかと。何事もプロファイルとって効果が大きいことからやることを意識した方がいいと思う。

例えば、ペットボトルのふた回収とか、まさに「早すぎる最適化」だと思う。でもこういうの教えてるのはまさに学校な気がしてきた……。

*1:まあ、未定義動作で動いた気になってる可能性はあるけど。