非常に面白い小学校のプログラミング必修化論争

最近小学校プログラミング必修化がとてもホットな話題になっています。

なぜならここにはIT分野での文系vs.理系の構図が垣間見えるからです。

小学校のプログラミング必修化はほぼ確定

まず事の発端として、文部科学省の有識者会議で小学校でのプログラミング必修化が大筋了承されて、ほぼ必修化が確実視されるところまで来ています。

産経新聞の記事から引用します。

政府の新成長戦略に必修化が盛り込まれた小学校のプログラミング教育について、文部科学省の有識者会議は3日、コンピューターのプログラム作成技術ではな く論理的思考力などの育成が目的とする報告を大筋了承した。平成32年度から実施される次期学習指導要領で義務付けるため、中央教育審議会で議論される

2016.6.3 19:58

小学校のプログラミング教育必修化 IT技術でなく論理的思考力が大事 文科省有識者会議 より引用

一応解説しておくと文部科学省の有識者会議は法的拘束力はありません。それをふまえて中央教育審議会という「審議会」になるとそれには法的拘束力が生まれます。

有識者会議の決定がひっくり返されることは、国会で与野党ねじれていて野党から袋叩きにされるほど荒れてるとかでない限りはあり得ないので、今のように自民党が衆参単独過半数を獲得している安定化では小学校プログラミング必修化はほぼ決まったことと言えるでしょう。

小学校プログラミング必修化を産経正論で訴え続けてきた東大教授

そしてこの小学校プログラミング必修化について、イスラエルではプログラミング教育が以前から日本よりも先行しており、それが人口数百万人しかいないイスラエルという国が科学技術分野で先進国になっているという論調で、ひたすら推進の論陣を張ってきたのが産経の「正論」論客でもある東大の教授です。

小学校プログラミング必修化に産経正論で異論を唱えた同志社大三木教授

そして2016年8月1日に、この小学校プログラミング必修化に異論を唱える論陣を張る情報工学の教授が産経の「正論」に寄稿しました。

同志社大学の三木光範教授です。

朝日新聞や毎日新聞だと「報道しない自由」を行使して自分たちの意見を代弁してくれる人を論客に選ぶので、このように意見が対立する人が同じ欄に寄稿するなんてありえないのですが、産経は自分たちに不利な意見もしっかり発信する機会を与える新聞ですのでこのような意見対立者同士が寄稿することはよくあります。

よく読むと同志社大三木教授はまともなことを言っている

この正論のタイトルを読むと、同志社大の三木教授は「小学校プログラミング必修化に反対なのか」と短絡的に捉えてしまいがちです。ですがよく読むとまったく違います。

ただし、小学生がプログラミングを好きになり、大きく成長するきっかけになることや、ICT(情報通信技術)産業に貢献する人が増えることは否定しない。このため、プログラミング教育を入り口部分だけ必修とし、興味を持った子供が深く学べる選択性にするのが良い

このように入り口としてプログラミングをやらせるくらいは全然かまわないし良い効果があると認めています。深くやりたいなら選択科目でやらせるくらいでいいというものです。

文部省有識者会議もプログラミングの文法ではなく論理的思考力=アルゴリズムを重視している

同志社大の三木教授の記事からです。

有識者会議は、「プログラミング的思考」を、自分の意図を実現するための手順を論理的に考える力と定義。

このように文部省有識者会議も、小学校のプログラミング必修化ではプログラミングの文法や作成技術ではなく、「問題を解く手順=アルゴリズムを考える力」を養うことを目的とすると名言しています。

これは私も大賛成であり、これには同志社大の三木教授も、東大の教授も賛同しています。

プログラミングの文法なんて覚えても意味がないからです。Excel VBA、COBOL、Rubyのように小学校で教えてもしょうもないプログラミング言語なんていくらでもあります。

それなら擬似言語でもいいから、問題を解く手順=アルゴリズムを考える力を身につけさせることのほうが大切です。エラトステネスのふるいでもいいです。ユークリッドの互除法でもいいでしょう。ソートなどを行う手順を考えさせて「誰が最も最小のステップで完了するか」というのを競争させればいいのです。nの3乗の手数がかかるアルゴリズムを考える生徒もいれば、n lg nで完了するアルゴリズムを考案する小学生が出てくるかもしれません。

アルゴリズムを実現する手段にすぎないプログラミング言語なんてどうでもよくて、要は問題を解く手順であるアルゴリズムや離散数学が重要だということです。

プログラミングの文法なら文系でも社会人になってから十分

三木教授が小学生でプログラミングを教えることに反対している理由は、「問題を解く手順=アルゴリズム」を教えるためには、何もプログラミングを教える必要はないという考えを持っているからです。アルゴリズムというのは数学の分野だから、算数や理科の授業の中で教えればいい、プログラミングとセットにする必要はないだろうという主張なのです。

よって、三木教授はプログラミングの文法を小学生で教えることに反対しているようですし、それならば私も反対です。

私の所属する学科は情報系であり、卒業生の多くはコンピューターのシステムエンジニアになる。しかし卒業生の話を聞くと、たとえ文学部出身でも工学部の化学系出身でも、優秀な人はプログラミングが初めてであってもすぐに上達するという。

ここが非常に賛否両論ありそうなところですね。

プログラミングは文系でもできます。RubyやPHPをやっている文系が多くいることからもわかります。

ですが、「私はプログラミングはできますけど、アルゴリズムとデータ構造はできません」という人がいたら、あなたはどう思うでしょうか?

プログラミングというのはアルゴリズムとデータ構造という離散数学分野の”実装”にしか過ぎません。

よって、「アルゴリズムがわからないのにプログラミングができます」、という主張は「???」にならざるを得ません。

例えばアルゴリズムや計算論というのは東大でも東工大でもお茶大でも教えています。一方でプログラミングというのは専門学校でも教えています。東大生でも専門学校生でもC言語ができる人は普通にいます。では両者の何が違うのでしょうか?

それは計算モデルを理解しているかどうか、計算量理論でアルゴリズムの効率性を定量的に解析できるかどうか、アルゴリズムによって得意不得意なデータ構造があり、データ構造をうまく選択することによって計算量を減らすことができるという「離散数学」ができるかどうかの違いです。

例えばACMが主催しているICPCプログラミングコンテストで上位に来るのは著名大学の人だけです。日本なら東大、中国なら北京大・清華大、米国ならMIT、Stanford、CMUです。なぜ専門学校生が食い込めないかというと、ICPCプログラミングコンテストではプログラミングの文法をどれだけ知ってるかということを競っているのではなく、数学的な問題が提示されて、その問題を解くアルゴリズムをその場で考え、それをプログラミングとして実装するというコンテストだからです。

つまり問題を数学的に解く手順=アルゴリズムを考案する能力がなかったら、どんなにC++の文法を熟知していて記述できるとしても、まったくプログラミングコンテストでは勝てません。

三木教授は、プログラミング授業の中ではなく、算数や理科の授業の中でアルゴリズムを教えれば十分だと主張

三木教授は「プログラミング程度なら文系でもできる」ということを言っていることが重要です。プログラミングの文法なら理系じゃなくてもわかるということです。

プログラミングの授業をやってしまうと、なんらかのプログラミング言語を教材として選択せざるを得ません。

例えばBasicのようなものです。三木教授はそういったプログラミングの文法を小学校で教える暇があるなら、自然科学の理科の実験、生物の観察などやるべきことがあるでしょう、ということを言っています。

これに対して、私は「プログラミング的思考」は、従来の教科の中でコンピューターへの指示など無しで養うのが良いと思う。

私も賛同です。小学校でプログラミングの文法を教える必要はありません。RubyやPHPでも小学校は簡単に理解できるほど、小学生世代は優秀です。でもそんなの大人になってからでもできることです。

それよりは、問題を解くための手順=アルゴリズムというのを算数で教えればいいだけの話です。ある問題が提示されて、それを解く手順はいくつかある。でもその手順には少ない手数で終わるものもあれば、多い手数かかるものもある。また作業領域を必要としないものから、多くの領域を必要とするものもある。これがトレードオフになっているということがわかればいいのです。

理系を理系たらしめているのは数学と物理

国家公務員試験には工学区分がありますが、「必修科目」として数学と物理があるのはご存知でしょうか?

その後「選択制」の専門科目になりますが、例えば専門科目には「情報工学・ソフトウェア」、「情報工学・ハードウェア」のようなものがあります。

実は物理と数学が必修科目になっているのは「国家公務員の工学区分には理系以外入ってこないでね」というものです。

専門科目だと文系でも得点できちゃう人がいるので、文系だと得点が難しい「数学・物理」を必修化して防波堤にしています。そしてこの「数学・物理」で出題されるのは、高3の理系が勉強するような大学受験レベルの問題であり、理系の一般受験を通過したような人ならできる問題がならんでいます。つまり「あなたは理系の大学受験を突破してきましたよね?」ということを確認するのが、国家公務員試験の工学区分試験の必修科目なのです。

米国では数学をしっかりやってきたStanfordの情報工学博士課程の修了生がGoogleの検索エンジンを作って活躍しているのは誰でも知っています。ビル・ゲイツでさえ数学科出身、著名なクヌース教授も数学科出身です。

私は情報工学出身ですが、情報科学や情報工学をやってきた人は、コンピュータサイエンスを発展させてきた立役者である数学者を尊敬していることが多いです。

米国がIT分野で世界のリーダーシップをとっていることに異論を唱える人はいないでしょう。

一方で、日本がいつまでたってもIT後進国のままであるのは、IT分野に数学ができない文系SE・プログラマが多いためです。

単に小学生でプログラミングを必修化しても、アルゴリズムとデータ構造という数学ができない文系SEやプログラマを生み出すことには変わりはありません。

やるべきことは、算数や理科、数学や物理といった問題を解く手順を自分で組み立てて、その手順の優劣を自ら評価できる力を身につけさせることです。

今回の三木教授の寄稿には賛成します。単に小学生をコンピュータに向かわせて、キーボードを叩かせていれば日本がIT先進国になれるかと思ったら大間違いです。特に山本一太のような、「TwitterなどのWebサービスを使いこなせるのがIT通」みたいな人がIT担当大臣に抜擢されていたようでは、本当に日本のITの先行きは暗いと思います。

ITで重要なのは数学です。数学さえしっかり義務教育でやらせていれば自然とIT先進国になれます。最近、日本の算数・数学力が中国韓国に負けたとのニュースがありました。まずは中国・韓国に小学生の数学力で負けていることからなんとかしないと、日本の文系SEとプログラマでは、数学をしっかりやってきた中国韓国の理系SE・プログラマに全く太刀打ちできないでしょう。

結局のところ、小学校のプログラミング必修化が単に「変数に代入するときはこう書く」のような文系でもわかる文法解説授業に成り下がってしまうことを多くの人は危惧しているのです。

しっかりアルゴリズムを教えること。離散数学を教えるということを、小学校の教員では厳しいでしょうが、数学ができる外部人材確保も含めて真摯に向き合って欲しいと思います。