まずはプログラミングに限定せずに一般的な言葉から.
教育というのは知っている人が知らない人に教えて,その人が知るようになることです.一方,大衆化というのは,それまで専門家だけが使えていたものを(本質を失わないようにしながら)簡単に使えるようにして大衆がその恩恵を受けられるようにすることです.ピアノ教室とカラオケの違いでしょうか.
プログラミングの場合,例えば大学や専門学校であればプログラミング教育のゴールは明確にあって,仕事や研究で使うプログラミング言語で自由にプログラムが作れることということになります.
プログラミングの大衆化としてみると,それまで専門家しかできなかったプログラミングが専門的な知識がなくても自由に作れるようになるということです.ポイントは本質を失わないで面倒なことをどこまで隠せるか,ということになります.
大衆化を目指すシステムは「本質」の捉え方と「面倒なことを隠す」ことのちょうど良い切り口を見つけるのが一番重要な課題になります.当然ながらそのシステムの設計者がコンピュータをどのように捉えているか,なにを本質と考えているかがそのまま反映されることになります.
たとえば,カラオケは音楽教育者の発想というよりは,声を出して歌うことの楽しさを多くの人に届けたい,という発想の方が強かったのではないでしょうか.同じように,プログラミングの大衆化も「頭に思い浮かんだことをコンピュータで動かす楽しさ」を多くの人に届けたいというところから始まります.
さて,小学生・幼児向けのプログラミング教材が沢山ありますが,どれも「大衆化」より「教育」を重視しているよう見えてしまいます.その違いを端的に示す例をご紹介しましょう.
問題として,お化けの絵を黒い線に沿って進めたいと思ったとしましょう.そのとき,お化けを動かすプログラムとして,上下左右の移動の命令を横一列に並べたものとする場合です.
こちらは,同じ問題ですが,用意されている命令が,お化けの向きも考えた移動(まっすぐすすむ,右に曲がる,左に曲がるの3つ)になっています.これはお化けがどっちを向いているかを考えながら作るのでとても難しいプログラミングになります.プログラムも量が増えて2列になっています.ロボットを制御するプログラムはこれに近くなります.
いずれの方法も命令を横一列に並べるという点では一緒です.
それに対して,こちらはお化けを進ませたい道順にそって矢印命令を並べています.矢印が順に繋がるように並べることだけ注意すればよいだけです.あとは自由自在.ほとんどトレーニングなしにお化けを好きなコースで進めることができます.
やりたいこと(お化けを黒い線に沿って進ませたい)をプログラムによって実行できたという点で,この3つの方法はどれも同じですが,上の2つに関しては各ステップごとにお化けの位置(や向き)を念頭にいれながらプログラムを作らなければならず,それなりに難しくなっています.
ここでシステム設計者の考えが現れます.「プログラミングの本質は命令を一列で表現することである」と決めてしまえば,3番目の例は失格です.「プログラミングの本質はロボットを制御することである」の人は難しいけれど2番目を選ぶかもしれません.実際に,その時々でコンピュータの状態を念頭におきながら命令を並べることは本当のプログラミングでもよくやることですから.「プログラミングの本質はやって欲しいことをコンピュータにやってもらうこと」と広げたときに3番目の例が一番優れていることがわかります.やって欲しいことをストレートに表現できますから.明確に上二つが教育を目指していて,3番目が大衆化を目指しています.
3番目の例はビスケットというよりはビスケットの上で作ったプログラミング言語の例です(ここ).
僕は自分の立ち位置を明確にするために,今まで言ってきた言葉を少し修正しようと思います.
小学校の義務教育ではプログラミング教育はやらなくていいんじゃないでしょうか.それより前にプログラミングの大衆化をすすめるべきだと思います.大衆化は小学生に限らず社会全体に対してすすめます.特に小学校の教員こそプログラミングの大衆化の恩恵を真っ先に受けるべきです.プログラミングつまり,コンピュータをプログラムで自由に動かすことができると,様々な可能性を広げますが,それは教科を教えることにも十分役に立ちます.そのあとで小学生にも大衆化を広めましょう.プログラミング教育じたいは小学生ではなく,連立方程式を習うくらいのタイミングで教えるので十分だと思います.
もちろん,イチローの子ども時代みたいな小学生にはどんどん英才教育をした方がよいと思いますし,そちらが経産省,総務省が目指しているのもわかっています.
でも,義務教育は大衆化の恩恵だけで,文科省が目指していることに十分応えているのではないでしょうか.