JSTTweet私が義務教育の段階でプログラミング教育が必要だ、と訴え続けてもう3年が経ちました。プログラミング、というくらい、プログラミングは重要です。少なくとも英語よりは重要だと思います。四科目でギチギチに完成された教育カリキュラムにプログラミングを追加することはそう簡単ではありません。いざ教えようとしてもプログラミングを教えることができる教員がそもそも足りません。昨年末に山本一太IT担当大臣主催の意見交換会で、「プログラミング教育の必要性」をジグの福野さんと私とで訴え、6月23日に閣議決定された「世界最先端IT国家宣言」の改訂で以下の項目を盛り込んでいただきました。習環境の充実(ソフト・ハードを含む)が必要となる。成することが重要であり、このための取組を強化する。いえ、実態はどうなのか。そこで東京都の公立中学校での技術家庭科の実態について現場の先生方にお話を伺ってみることにしました。すると驚くべきことに、現在の学習指導要領の範囲では、中学校の技術家庭科でプログラミングを扱える時間は年間で4時間から多くても5時間くらいしかとれないのだそうです。いうのも、技術家庭科という時間全体が年間で40時間あるとして、そのうち半分は家庭科なので技術を教えるのは20時間、その20時間の中で、さらに木材、栽培、エネルギー変換、そして情報、といった四分野を扱うので情報だけで5時間。情報の中でも、プログラミング以外の部分、つまり情報リテラシーやキーボードの扱い方、マルチメディアの取り扱いかたなど、を教えてしまうと、プログラミングに関わる部分はほんの1時間くらいしか扱えないことになります。1時間でプログラミングを教えるというのは現実的ではありません。これではプログラミングの奥深さや魅力に気付く前に通り過ぎてしまうことになります。MINDSTORMを使っているそうです。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教室はなくなっているそうです。Lesson、つまり言語学習用の機材が揃った教室で、個人用のカセットテープ再生機が設置されていました。多くの学校で、LL教室はコンピュータ教室になったそうです。コンピュータ教室がタブレット教室になるのではないかと思います。全ての子供が自分専用のタブレットを持ち歩くには時間がかかると思います。その前にタブレット教室ができるでしょう。タブレット教室を作ったとして、どのようにして何を教えるのか。インターネットの使い方やメールの書き方、はタブレットでも教えることが出来るでしょう。それだけではコンピュータを使っているとは言えません。タブレットでプログラミングができるようになるべきです。いう思いから、MOONBlockはタブレットでも動作するようにプログラミングしています。タブレットでプログラミングできるようになったことで、先日は思わぬ効能を見つけてしまいました。プログラミングができるということは道具の使い方を創造的にします。常に創造的な道具に触れていることが、結局はその人の創造性を引き出すことにつながるのです。Tweetおすすめ記事と編集部のお知らせをお送りします。亮(しみず・りょう)新潟県長岡市生まれ。LLC.とともにギリア株式会社を設立し、「ヒトとAIの共生環境」の構築に情熱を捧げる。センター客員研究員を兼務。(KADOKAWA)」「プログラミングバカ一代(晶文社)」など。マシンの処理速度は、プログラマーの生産性に直結する七角形の謎。