私が義務教育の段階でプログラミング教育が必要だ、と訴え続けてもう3年が経ちました。
そしてようやく初等中等教育でプログラミングを教えるということが一般的な認識になりつつあります。
国語算数理科社会プログラミング、というくらい、プログラミングは重要です。少なくとも英語よりは重要だと思います。
しかし四科目でギチギチに完成された教育カリキュラムにプログラミングを追加することはそう簡単ではありません。
また、いざ教えようとしてもプログラミングを教えることができる教員がそもそも足りません。
昨年末に山本一太IT担当大臣主催の意見交換会で、「プログラミング教育の必要性」をジグの福野さんと私とで訴え、6月23日に閣議決定された「世界最先端IT国家宣言」の改訂で以下の項目を盛り込んでいただきました。
国民全体の情報の利活用力向上を実現するには、発達段階に応じた情報教育、及び学 習環境の充実(ソフト・ハードを含む)が必要となる。
その際、初等・中等教育段階におけるプログラミングに関する教育の充実に努め、IT に対する興味を育むとともに、IT を活用して多様化する課題に創造的に取り組む力を育 成することが重要であり、このための取組を強化する。
また、グローバル化への対応としても、英語など外国語によるコミュニケーション能 力とともに、IT を活用して課題解決を図る力などのこれからの時代に求められる能力の 育成について、これまで以上のスピードで、産学官が連携した社会全体での取組が必要 となる。
とはいえ、実態はどうなのか。
そこで東京都の公立中学校での技術家庭科の実態について現場の先生方にお話を伺ってみることにしました。
すると驚くべきことに、現在の学習指導要領の範囲では、中学校の技術家庭科でプログラミングを扱える時間は年間で4時間から多くても5時間くらいしかとれないのだそうです。
というのも、技術家庭科という時間全体が年間で40時間あるとして、そのうち半分は家庭科なので技術を教えるのは20時間、その20時間の中で、さらに木材、栽培、エネルギー変換、そして情報、といった四分野を扱うので情報だけで5時間。
また、情報の中でも、プログラミング以外の部分、つまり情報リテラシーやキーボードの扱い方、マルチメディアの取り扱いかたなど、を教えてしまうと、プログラミングに関わる部分はほんの1時間くらいしか扱えないことになります。
1時間でプログラミングを教えるというのは現実的ではありません。
これではプログラミングの奥深さや魅力に気付く前に通り過ぎてしまうことになります。
それで実際にどんな教材を使っているのか聞いてみると、例えばLEGO MINDSTORMを使っているそうです。
LEGO MINDSTORMのブロックプログラミングは確かにプログラミングの一種ですがとても単純なことしかできません。
これはプログラミングを教えているとは言えないと思います。
ごくごく初歩的なところで理解が止まっているのです。
ただ、それも仕方のないことで、学習指導要領には「プログラムが、順序、分岐、繰り返しの三要素であることを説明せよ」とか「フローチャートを説明せよ」とか書いてあるだけなので、その二つの説明だけならLEGOでも用は足りるのです。
これはまだ日本の文部科学省ではプログラミングが実際にどういうものなのか理解されていないためだと思います。
実際にはプログラミングは最も重要な思考のファンダメンタルであり、プログラミングを基礎として持った上で他の勉強(国数理社)を学ぶ方がいいと私は思います。
なぜなら、学ぶ時に思考するということの基礎が確立している場合としていない場合で、学習効率にあまりにも大きな差がでるからです。
たとえばプログラミングの基礎の基礎である順序、分岐、繰り返しの三要素。
これは算数で言えば掛け算は繰り返しであり、割り算は繰り返しと分岐の組み合わせだと理解することができます。
古文でいえば、レ点は分岐(順序を無視してジャンプすることをプログラミングでは全て分岐と呼びます)、一二三点、甲乙丙点も同様の分岐処理であることが理解をやさしくします。
理科に関してはいわずもがなですが、実験とは順序と分岐と繰り返しによってできています。社会では、時系列を順序で追いながらも、同時並行して起きた事柄に関して時間をややさかのぼって(分岐)説明します。そして歴史はしばしば、というよりもかなりの頻度で繰り返しがおきます。
算数でも難解な鶴亀算もアルゴリズムを理解していれば難解になりません。
中学校の数学では、闇雲にたすきがけによる因数分解やエラトステネスのふるいを教えていますが、それを理解するにはまずアルゴリズムというものがなんなのかを理解していたほうが遥かに理解が簡単です。
いまの教育現場では、アルゴリズムであると説明すればいいことを無数のまわりくどい言葉で教え、結局のところ教科書の内容を丸暗記させる、いわゆる「詰め込み型教育」を強要する結果に終わっています。
これでは子供が自発的に学習をするというよりも、まるでファーストフードのアルバイトのように教科書の内容を書かれた通りに学ぶ、完全なマニュアル型人間しか育成できません。
このような環境でいくら大人になってから「自由な発想でものごとを語れ!イノベーションを起こせ!」と発破をかけても、そもそもそのように育てられていないのだからできるはずもありません。
これはファーストフードのバイト店員に「お前がイノベーションを起こせ」と無茶ぶりする経営者のようなものです。
できる人もたまにいます。
でもそういう人は、教育されてない場所、つまりマニュアル化されてない場所でちゃんと育っているのです。だからごく少数しか日本にはそういう人がいないのです。
最も理想的なのは、教えられるのではなく、自ら知識を欲することです。
13歳の小さな物理学者、ジェイコブ・バーネットは「学ぶことをやめ、考えよう。創造しよう」とTEDxTeenで訴えたそうです。
自ら知識を欲する人間を育てるにはどうすれば良いでしょうか。
それは、まず考え方を教えてあげることだと私は思います。
全ての出発点はそれなのです。
考える方法、そして考えることの魅力。
それさえ伝えたら、そのあと、好きな科目を好きなだけ学べばいいのです。
それはゲームだろうがサッカーだろうが音楽だろうがなんでもいいと思います。
すると自然に知識を欲するようになります。
サッカーボールはなぜ曲線を描いて飛ぶのか。
もっと遠くまで飛ばすにはどうすればいいのか。
その疑問は、いずれ放物線を学び、重力加速度を学び、熱力学を学ぶことに繋がるでしょう。
子供は好きなことはすぐに覚えます。誰もが64ビットコンピュータをポケットに入れて持ち歩く時代に無理に九九を暗記させる必要はないのです。
子供は誰でも輝くような創造性を持っています。しかしそれが今の学校教育によってスポイルされてしまうのです。国語では自由な作文を書くことを求められますが、同時に先生が決めた通りに読解することも求められます。創造性をある領域の枠にあてはめてその中でしか創造性を発揮できないとしたら、その人が大人になってからもっと創造的になるのは無理です。柵の中で飼われた動物は柵を外しても外にはいけなくなります。
しかしこれだけ物流が自由になり、ごく当たり前に世界中のコンピュータと接続されるこの社会で最も重要なのは外国語を操る能力ではなくむしろ創造性をいかに発揮するかということです。
創造性を発揮するには、まず思考の基礎について正しい訓練が必要です。
それを訓練するのに、プログラミングほどうってつけなものはありません。
まず、他の科目ではあり得ないほど迅速に自分の思考を試し、それを否定される(バグやエラーなどで)ということを繰り返します。
たとえば作文の場合、作文を作って先生に見せて誤字脱字を指摘されるまで、最低1日、長ければ一週間くらいかかります。テストも同じです。
けれどもプログラミングの場合、誤字脱字があれば即座にエラーが発生し、論理的矛盾があれば正しく動作しません。
できる子供はどんどん先へ進み、できない子供はすぐに助けを求めることができます。
集団学習の問題のひとつ子供によって学習効率が大きく異なることですが、プログラミングならそもそも進度が違う子供が混在していても大きな問題にはなりません。
プログラミングは、いわば一人一人、個別指導する先生がついているのと同じです。
書く→試す→ダメ→修正する→試す→成功 というプロセスを必ず踏みます。
しかもできない子は何度もこのプロセスを踏むので強化学習され、できる子はどんどん創造性を発揮するゆとりを与えられます。
創造性はゆとりの中からしか産まれないので、出来る子は退屈することなくどんどん先に進むことが出来るのです。
唯一の問題はプログラミングが楽し過ぎるということです。
初等教育でプログラミングを教えると、夢中になってずっとプログラミングしてしまう子供が続出してしまうでしょう。
なぜかわかりませんが、学校は楽しいことはできるだけ禁止する傾向があります。
授業が楽しくてはいけない、という空気を意図的に創りだします。
だから本来は楽しいことであるはずの体育や音楽の授業では、筋トレやストレッチのような退屈な練習を取り入れたり、誰も知らないような大昔の退屈な曲を歌わせたりしてわざと楽しくならないように演出するのです。
プログラミングの場合、どれだけ退屈に教えたとしても、絶対に楽しくなってしまいます。
全員が楽しいとは感じないかもしれませんが、一度でも楽しさが解ってしまった時は中毒になります。これが数学や理科と違うところです。数学も理科もいくら中毒になっても、数学のドリルをやるのが楽しくて仕方がないという状態にはなかなかなりませんし、理科の実験をひたすら継続することもありません。大人になってから趣味で数学のパズル問題を解く人も居ますが、かなりの少数派です。少なくとも週末に趣味でプログラミングする人よりはずっと少ないのではないかと思います。
なぜドリルやパズルはダメで、プログラミングは趣味として成立するのか。
それはプログラミングには正解がないからです。別のいい方をすれば、創造的だからです。
プログラミングには間違いはあっても正解はありません。
同じ理由で絵を描いたり、ブログや小説を書いたりするのも創造的な趣味と言えます。
答えのない問題だからこそ、無限の答えがあり得るのです。
数学的難問はどれだけ難しくても、それが数学的問題として掲出された限り、答えが用意されています。
ドリルの問題などは最たるものです。それをぜんぶ終えてしまえば、達成感はありますが、また別のドリルを買って来なければなりません。そんなことを趣味として繰り返す人を私は知りません。
プログラミング中毒になった人は、逆に貪欲に数学や理科の勉強を始めます。
これは完全に共通した傾向です。
なぜなら、もっと創造的なプログラムを作るには、そうした知識を道具として使いこなすことが必須だからです。
しかし学校の授業を聞いているだけでは、数学や理科が「道具として役立つ」場面には滅多に遭遇しません。
道具として役立つわけでもないから、授業の意図や意義がわからず、詰め込まれているだけ、という形になるのです。
三角関数やベクトルは少なくとも高校卒業までに必ず習いますが、これを実用的に使っている人はどれだけいるのでしょうか。
本職の数学者やエンジニアにでもならない限り顧みる必要すらない概念です。
しかし、ゲームをプログラミングする人は、絶対にこの二つを避けては通れません。
そしてそのとき、三角関数やベクトルをとても好きになるのです。
それができると、今度は行列や級数といったもっと上位の数学的概念に興味が行きます。
または、リアルなボールの軌道を描くために放物線についてもっと考えるかもしれません。
物体の衝突を表現しようとしたとき、物理学に興味が行きます。
自分の作った小さな箱庭だけで遊ぶことに飽きたら、次は社会にインパクトを与えるためにはどうすればいいのか知りたくなります。そのとき始めて歴史や地理は道具として使える知識になるのです。
ゲームを作ろうとすれば、限られた文字数で正確に意図を伝える必要性に迫られます。
そのとき国語が必要になります。言葉でどんな表現ができるのか、似た言葉や同じ発音でも意味が違う言葉はどう処理するのか。
プログラミングという創造的な課題を基礎に置くことで、全ての科目はプログラミングのために必要なものだという認識を子供達は持つことが出来ます。
プログラミングは沢山ある知識のうちのひとつ、ではなく、人生の基本にあるべき思考する力そのものを鍛えるための基礎教養となりうる存在です。
人類は古くからずっとこの課題、すなわち思考するとはどういうことか、思考する方法を人に伝えるにはどうすればいいか、ということについて考えてきたわけですが、その結果ついに「考えること」だけを抽出することに成功したのが、プログラミングという分野です。
プログラミングほど忠実かつ無矛盾に思考のプロセスを体系化し、顕在化できる手段はありません。
そして自分の考えをプログラミングしたら、それを外から観察することで、自分の考えが間違っていたのかどうか、客観的に知ることが出来ます。このような手段もプログラミングの他には存在しません。
しかもそれは考えられないくらい速く結果を得ることが出来ます。
数学の有名な難問、四色問題を証明するためにはコンピュータが必須でした。コンピュータがなければ四色問題というごく直感的な問題(どんな地図も必ず四色で塗り分けられるという定理)すら解決することができなかったわけです。
当初、作られた四色問題の証明プログラムは複雑すぎて証明そのものが疑問視されましたが、そのプログラムを最適化していくことでアルゴリズムが明確化し、2004年にジョルジュ・ゴンティエのCoq(プログラミング言語)による証明がなされたことで、もはや四色問題の定理がプログラムによって証明されたことを疑う人はいなくなりました。
これは氷山の一角で、これから起きるであろう沢山の変化のほんの始まりにすぎません。
数学的証明といった特別な才能がある人たちだけの分野ではなく、より幅広い領域で、同様の革命が起こって行くでしょう。
現代のコンピュータは人間の50億倍高速に計算を繰り返し行うことが出来ます。
これは極めて大きな変化です。
自動車は20倍、飛行機は1000倍程度しか人間の能力を拡張できませんが、コンピュータは50億倍か、それ以上に思考能力を拡張できるのです。
いま、インドなどの発展途上国ではスマートフォンが凄い勢いで普及しています。
2013年は前年の2倍の伸び率でスマートフォンが売れました。
これはスマートフォンが売れているわけですが、見方を変えれば個人用コンピュータがその勢いで売れてるわけです。
日本人の10倍の人口がいて、しかも多くの人は貧しく、力のない人たちです。
それが子供たちに行き渡り、彼らが同じようにプログラミングという道具を手にしたら・・・・
次に起きるのはどんなことでしょうか。
プログラミングとコンピュータは革命的な道具です。
たった一人の個人が一夜にして革命を起こすことが出来ます。
FacebookやGoogleがそうだったように。
いま、みんなが当たり前のように使っているIntelのCPU設計は、イスラエルで行われています。
ヘブライ語など誰も知らないけど、ヘブライ語を話す人たちが設計したCPUを、世界中の人が使っているのです。iPhoneやAndroidの多くに搭載されているARMというCPUはイギリスで設計されています。これはもともとイギリスで子供達にプログラミングを教えるために産まれたものです。
大半のWebサービスで動作しているMySQLはスウェーデンの会社ですし、Linuxはフィンランドの大学生が作りました。たった一人の力が世界を大きく動かす。それがプログラミングの持つ潜在的な、そして最大の能力です。
アメリカでは初等教育からプログラミングを授業に取り入れるといったことがごく普通に行われていました。
しかしオバマ大統領はそれをさらに徹底して行うつもりです。
同じようなことが世界中で起きるでしょう。
プログラミングは人を創造的にします。
世界中の人が創造的な仕事をする時代が来るでしょう。
そのときの日本に、創造性のある仕事ができる人が今と同じ比率しか居なかったとしたら、もう世界のどの国とも競争できなくなってしまうでしょう。
創造的な人材をつくるために、初等中等段階でのプログラミング教育は最も効果的なものになりうると思います。
私は一人の日本人として、日本の小学校、中学校でプログラミングを授業でも、部活動でも、部分的にでも取り入れて行って欲しいと思っています。
そうすれば受け身だった授業が、まるで別の視座から、キラキラと輝いて見えるようになります。
詰め込まれるだけの受動的な学習から、創造的で貪欲な思考のための道具の獲得へと変化するからです。
全員が全員というのはいきなりは無理かもしれませんが、そういう変化が起きる子供が、一人でも二人でも増えたら、それだけで日本全体の創造性は上がります。
いま、中学校にLL教室はなくなっているそうです。
LL教室とは、知らない人もいるかもしれませんが、Language Lesson、つまり言語学習用の機材が揃った教室で、個人用のカセットテープ再生機が設置されていました。
多くの学校で、LL教室はコンピュータ教室になったそうです。
しかしいずれ、コンピュータ教室がタブレット教室になるのではないかと思います。
まだ全ての子供が自分専用のタブレットを持ち歩くには時間がかかると思います。
その前にタブレット教室ができるでしょう。
しかしタブレット教室を作ったとして、どのようにして何を教えるのか。
インターネットの使い方やメールの書き方、はタブレットでも教えることが出来るでしょう。
しかしそれだけではコンピュータを使っているとは言えません。
やはりタブレットでプログラミングができるようになるべきです。
そういう思いから、MOONBlockはタブレットでも動作するようにプログラミングしています。
タブレットでプログラミングできるようになったことで、先日は思わぬ効能を見つけてしまいました。
プログラミングができるということは道具の使い方を創造的にします。
常に創造的な道具に触れていることが、結局はその人の創造性を引き出すことにつながるのです。
おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)
登録はこちら新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。