tech
ハッカーの遺言状──竹内郁雄の徒然苔
第22回:小学生に情報科学を教える
元祖ハッカー、竹内郁雄先生による書き下ろし連載の第22回。今回のお題は「小学生に情報科学を教える」。
ハッカーは、今際の際(いまわのきわ)に何を思うのか──。ハッカーが、ハッカー人生を振り返って思うことは、これからハッカーに少しでも近づこうとする人にとって、貴重な「道しるべ」になるはずです(これまでの連載一覧)。
文:竹内 郁雄
カバー写真: Goto Aki
中学生や小学生にプログラミングを教えることが流行り始めている、あるいは流行っているように思われる。私の身近なところでは、2012年1月末に俄かに結成された臨時特殊科学分析班の原田康徳隊員(遺言状第4回参照、現在合弁会社デジタルポケット代表)が開発した「Viscuit」による小中学生向けのビジュアルプログラミング教育が日本中にどんどん浸透していっている。未踏の若者たちも絡んでいる「Life is Tech」は、中学・高校生向けで、メニューがとても豊富だ。
文部科学省がプログラミングを義務教育化しようとしているらしい。2012年から中学校の技術・家庭科でプログラミングが必修になったというのだが、現状では、私が子供のころ学んだ裁縫による雑巾作りの延長にあるように思えてならない。中学校の3年間で数時間の時間しか割り当てられていないのだから、プログラミングはまぁそんな程度のものかという価値基準を子供たちに刷り込む効果しかなさそうな気がする。雑巾縫えなくても100円ショップに行けばいくらでも買える。プログラム書けなくても何も不自由しない……。
御上が定めた学習指導要領ではどーにもならんと思った人たちがどんどん独自路線で子供のためのプログラミング教育を始めている。
私がエジプトで大学院生に「プログラミングの心」みたいなことを教えていた2011年〜2013年の3年弱、早稲田大学から派遣されるという形だったので、早稲田の先生方にはいろいろお世話になったり、脅されたりしていた。脅したのは元副総長の村岡洋一先生だ。NTT時代の先輩でもあったので「ねぇ、ねぇ、竹内さん。エジプト大丈夫? 何かあっても早稲田はなんも面倒見てくれないよ」というのが、遭うたびのご挨拶だった。
その村岡先生、70歳で早稲田大学を定年退職されて、時間の余裕ができたせいか、「竹内さん、もうエジプト終わった? なら、これからちょっと面白いことをやりたいのだけれど、手伝う? もちろん、いやならいいよ」と、断れないお誘いをかけてこられた。
いわく、「お役所にいくら働きかけてもちっとも世の中変わらない。だったら、中学・高校生向けの私塾を作ってボトムアップでコンピュータの教育を改善していくしかない」と言うのだ。こうして情報教育の権威である筧捷彦先生、村岡研究室から明治大学にトラバーユした秋岡明香先生、それと私の4人でどんな私塾を作るのかの議論が始まった。
早稲田のネームバリューを活かそうというずるい魂胆もあったが、すでにあちこちで流行り始めたプログラミング塾とどのように一線を画して、独自性を出すかについて議論が集中することになった。ただし、独自性のための独自性ではなく、何か太い筋が通っていないと恰好悪い。そこで侃侃諤諤。いろいろな人がおっしゃっているようにプログラミングは手段、それを支える「情報科学」があるではないか。やはり、ちゃんと情報科学を教えよう、でも、それだけでは中学・高校生に人気が出ないかもしれないので、ビジュアルな効果が見えるプログラミングもそれに付随して教えようということになった。
幸い、2013年の未踏IT人材発掘・育成事業で採択された早稲田大学の鈴木遼君(当時大学4年生)が、未踏で開発した、というより未踏でフィニッシュした感のある「Siv3D」という、プログラミング初心者にも取り付きやすい言語の成果で、スーパークリエータ認定を受けた。鈴木君は特にプログラミングの教育も受けず、独学で高校1年からSiv3Dを開発し続けてきたというから、何と苦節7年目で大きく開花したことになる。情報科学を学んだあとのプログラミングコースにSiv3Dを採用することになった。
実は、Siv3Dは、中学・高校生に教えるには誰もが相応しくないと思うC++という強面の言語を拡張したというか、オブラートで包んだような言語(ライブラリ)である。いくらオブラート(袈裟?)で包んでも、C++の鎧がチラチラ見える。本当に大丈夫かという心配もあったが、鈴木君のデモを見て、みんな「おお、これなら大丈夫」と太鼓判を押した。鈴木君はプレゼンが猛烈にうまい。Siv3Dはゲームを作ろうとしたら、とても強力な言語なので、深く突っ込んでもそれを受け止める懐の深さがある。これは才能のある子供には好ましいことである。
結局、最初は座学で、Siv3Dで作ったビジュアルな教材を活用しつつ、情報科学の講義を2日間聞き、そのあとにSiv3D入門を3日間学ぶというコース設計になった。こういうカリキュラムの私塾はほかにないような気がする。最終的に決まった名前は「早稲田情報科学ジュニア・アカデミー」である。
何と5日間のコースのあと、みんなちょっとしたゲームを作ってプレゼンするところまで行くのである。
プログラミングと情報科学をどのようなバランスで教えるかは誰しも悩む問題だろう。私が電通大から東大に移ったころ、東大の理系の1年生の秋学期(第2学期)にプログラミングをどう教えるかについての再検討が始まっていた。それまではJavaによるプログラミング入門の科目があった。カリキュラムの抜本改訂により入学直後の春学期は文系・理系共通の「情報」という科目になり、それを受けて秋学期の理系共通科目は「情報科学」という名前になった(※1)。
私もいきなりこの準備委員会に参加することになった。科目「情報科学」のシラバス作成の基本方針には2つの選択肢があった。
(a)プログラム言語・プログラミングを通じて情報科学の基本概念や思考方法を身に付ける
(b)情報科学の基本概念や思考方法を主とし、プログラミングはその学習の手立てとする
準備委員会では後者の(b)案を採用することになった。すなわち、プログラミング技術は「学習の手立て」という位置づけになったのである。そして、学習の手立てとなるプログラミングには、導入が短時間ですみ、各種の実験的なプログラミングも容易な「対話型言語」を採用することまでは割りと早く決まった。
この対話型言語の選択には、進学先の専門学科からの期待など、非常に多面的な配慮をしなければならず、結構時間がかかったが、紆余曲折の上、Rubyに決まった。Lisp屋のはずの私も比較的早くからRubyを推したことがメールのやり取りを掘り返すと思い出される。ちなみに候補に上ったのは、OCaml、Scheme、Mathematica、Haskell、Standard ML、Common Lisp、Emacs Lisp、Ruby、Python、Perl、JavaScript、などなどであるが、多くは「試して合点」がすぐにできる対話型言語でないことで候補から落ちた。
途中で出てきた文書には以下のような文章も見える。
これまでの「実用プログラミング教育」は原理から離れた表層のみを扱っており、有効なプログラミング能力の育成方法としては非能率であるのに対し、基礎原理を早期にしかも容易に(楽しく)習得できる今回の方式は、学生のプログラミング能力を涵養するための近道である。
こういった議論があったことと「早稲田情報科学ジュニア・アカデミー」のコース設計の考え方には共通点がある。一言で言うと、プログラミングには「情報科学」という「学問」の背景があるということを子供たちや学生に知ってもらいたいということだ。
午前10時から、昼休みを挟んで午後4時までビッシリの授業とはいえ、わずか2日だから、中学・高校生に情報科学の何を教えるかは悩ましい。試行錯誤の結果、データ表現周辺に話題を絞ることになった。2進数はもちろん最初のテーマだが、そのあとは画像や音といったリアルなデータの量子化と標本化(視覚的にも聴覚的にも分かりやすい──Siv3Dによる教材がここで役に立つ)、そしてパリティの考え、そのあと簡単なアルゴリズムとモデル化、そして次に何とデータ圧縮と続く。そして、最後が「オートマトン、コンピュータ、プログラム」。
私は2日目のデータ圧縮(午前2時間)と「オートマトン、コンピュータ、プログラム」(午後2.5時間)を一気に喋りまくる。もう4回のコースを行ったが、最初のころに比べて受講する子供たちの質がかなり上がってきたのがよく分かる。まさに継続は力なり。
データ圧縮では、「情報を測る」という話から始めて、ほんのちょっとだけ「情報理論」という言葉に言及して、あとは数当てクイズで、二分法と2進数の関係を子供たちと遊びながら紹介する。そして、「情報量」と「データ量」は違うという話に持っていき、「データ量」なら圧縮できるぞという話をする。デジカメのJPEGは、人間の感覚のいい加減さを利用して非可逆のデータ圧縮をしている、など。RGBで24ビット、1000万画素だと真面目に記録するとすぐメモリがパンクするという話をすると子供にすぐ分かる。
そして、Huffman符号化とか、ファックスなどに使われるランレングス(連長)圧縮の話までする。中学生に教えるには何ともとんでもない内容だが、実は実例を示しながら説明すると中学生にも十分理解できる話なのである。「これ大学に行ったら勉強するかもしれない話だよ」と中学生の心をくすぐることを忘れてはいけない。
「オートマトン、コンピュータ、プログラム」では、コンピュータの歴史から始まり、簡単な有限オートマトンのダイヤグラムを書いてもらう演習も含め、コンピュータはプログラムも含めて内部はすべて2進数だよという話から、他のコンピュータを模倣する万能マシンまで一気に話を進めてしまう。まさに大学の講義のミニ版だ。
思えば、私も小学生のころ、親に買ってもらった本を読んで想像を脹らませたものだ。同じことを若い子供たちに再現してほしい。だから、ちょっと手の届かない話をやさしく紹介するのが秘訣だと思っている。
とはいえ、オートマトンの話をするときは、「先生はドラクエをIからIXまで全部クリアしたよ」と紹介したあと、「ドラクエ」の謎解き問題のほとんどはオートマトンが分かっていると簡単に作れるよ、と説明すると、ゲームを作りたくて受講している子供たちの目が輝く。「ほら、このオートマトンの練習問題で、初期状態に戻す『#』の入力はドラクエではダンジョンの元の階に戻ることだよ」でほぼダメ押し。
ついでに、「ロールプレイングゲームなどで次の怪物が出てくるタイミングはただの乱数で決めちゃいけないよ、ちゃんとポアソン分布というのを使うんだよ」とほのめかすと彼らの学習意欲フラストレーションが溜まってくる。ともかくこんなキーワードを散りばめるのが私塾の極意だろうなぁと思う。
さて、村岡先生、今年になってこの私塾を小学生にまで広げようと考えられた。夏休みに小学5、6年生を対象に、もっとやさしい内容でやろうというわけである。その最初のトライアルをこの8月上旬に行った。さすがにSiv3D入門はなしである。2進数入門から始めるのは同じとして、何と私は「情報とセキュリティ」という授業を午後1時から4時まで、1時間ごとに休憩を入れながら行うことになった。
私の授業は、簡単な暗号(IBM→HALなど※2)の話の紹介のあと、2人のうちの1人がコインを投げ、もう1人がコインの表裏を当てて駒を動かすというゲームを遊ばせる。そして、このゲームを映像のない電話越しで遊ぶにはどうするかという問題にする。つまり、相手の言っていることを信頼できるようにするにはどうすればいいかをテーマにした。十分にセキュリティと関係ある話だ。
授業の準備をしているとき、小学6年生は進学塾で全滅、小学4年生のほうが多くなったという情報が聞こえてきた。「あれ? 小学4年生はどこまで漢字が読めるのだろう?」「アルファベットは?」など、急に心配になってきた。Webを見ると、何と「情」も「報」も小学6年生で学ぶ漢字。あちゃあ、というわけでPowerPointにルビを振ることになったが、PowerPointにはルビの機能がない! 行間調整など結構大変な思いをして、いろんな漢字にルビを振った。
電話越しのコインの表裏当てには3つの設問を用意した。最初は太田和男先生たちが書いた講談社ブルーバックスの「情報セキュリティの科学」(1995年)の中の、同じ本を2人が持っていて、何ページの何行目の左から何文字目が「た」かどうかを1秒以内で当てさせるという方式である。言われたほうは所定の文字を1秒以内には見つけられないという原理である。
2つ目は大きな整数(10進数)の2進数表現の上から9桁目が1か0を1秒以内に答えさせるという方式だ。小学生は最初に10進数から2進数への変換の勉強をしているから、これが大変なことはすぐ分かる。
3つ目は、RSA暗号で使われる素因数分解だが、さて小学4年生が夏休み前に素数を学んでいるのかどうかが心配になってきた。文科省のページを見るとどうも怪しい。しょうがないのでちゃんと説明スライドを作った。素因数分解はさらに怪しいので、さらに説明を加えた。大きい2素数の掛け算の結果を素因数分解するのは本当に大変だという説明に苦労は要らない。ちょっとした桁数の練習問題を出せば小学生にもよく分かってもらえる。大きな2素数の積を素因数分解して小さいほうの素数の2進数表現の上から45桁目は0か1か?というような問いにすればよいのだ。
そこから先は、急に小学生レベルを超える話になるので、ざっとした話しかしなかったが、とりあえず電話で時間無制限でコインの表裏を当てるゲームをインチキなしでできることは小学生にも分かってもらえたと思う。
と、書くと、実に順風満帆の授業のように聞こえるが、いやぁ、小学生(10数名)相手の授業は本当に大変だった。ほとんどが初対面の子たちなのだが、すぐ仲良しになって、まぁ、よく騒ぐことよ。講話だけでは5分と持たない。みんなそわそわしだして前後の子供たちとつつき合いやら、ぺちゃくちゃ話を始める。一部の父兄の方が後ろで傍聴していても関係なしである。「はい、これからテストします」と言うと、急にシャキッとなるとも聞いていたが、私はその手は使わなかった。
最初に2進数の説明を3時間する予定だった村岡先生は何とこの喧騒にやられて2時間で「ダウンして」しまわれた。その話を聞いていたので、相当覚悟して3日目の授業に臨んだが、案の定、これはすごい。このときばかりは小学校の先生はすごいと、尊敬の念を持ってしまった。
例のコイン投げのゲームを実際の(100円ショップで調達した)玩具デカコインを使って2人ペアで遊ばせたら、もう大変。金色のコインが教室中を飛び転がり、それを追って、子供たちが教室中を駆け回る。なにしろすべてがこの調子なのだ。
しかし、驚いたのはみんな「情報」も「秘密」もルビなしで読めていたこと。そりゃ、そうか、文部科学省の学習指導要領などとは関係なく、マンガにはこういった漢字が氾濫しているのだ。素数もどなたか大人の方が「あ、それはもう塾では習っています」とおっしゃってくれた。やっぱり役所の公式ページなんか見ていてはいかんのだ。
もっと驚いたのは、騒々しいけれど、小学4年生なのに利発な子がいて、授業の話をほとんど瞬時に理解できていたことだ。盛んに手を挙げて「あ、その素数の話、聞いたことがあります」という調子。日本の将来は明るい!
8月17日から3日間、米子の近くの堺港のホテル(※3)で開かれた情報処理学会の「コンピュータと教育研究会 SSSS2015」にお招きいただいた。墨田区の「みどりっ子クラブ」で子供の放課後教育について熱心な活動をなさっている勝沼奈緒実さんが、パネル討論の最後の締めで「本当に子供たちに全員プログラミングを学ばせる必要なんかあるの?」という強烈な意見を投げかけられた。
それに対して、パネル討論の本当の最後の締めで、私は「プログラミングもサッカーも同じ。子供のときみんなでわいわいやって、その楽しさと難しさを体感し、大人になったときに、素晴らしいプログラマや、素晴らしいサッカー選手を尊敬できるようになる感性を培ってほしい。それが日本のITやサッカーを伸ばす基本だ」というような応答をした。時間オーバーなので、これが本当の締め。
さらに付け加えれば、何度も上で述べたように、コンピュータプログラミングがしっかりとした学問体系に基礎を置いていることをみんなに実感してほしい。うーむ、こんなプログラミング教育が学校でちゃんとできるのはいつの日だろうか?
いやあ、今回は写真も図版もなしの遺言状になってしまった。そういえば遺言状に写真や図版が入ったなんて聞いたことがない。(つづく)
※1:「情報」の試験は1年生全員の共通問題だったので、駒場周辺に向かう電車には山手線を含め、同じ教科書を開く学生がぞろぞろいて壮観であった。
※2:当然「2001年宇宙の旅」のHAL9000なのだが、いまごろの小学生はそんな映画見てないことをすっかり忘れていた。しかし、HAL東京とか、ロボットスーツHALを知っていた子はある程度いた。
※3:米子周辺はゲゲゲの鬼太郎の水木しげるさんにちなんで「米子鬼太郎空港」だったり、駅名の横に妖怪の名前が書かれていたりして、それを観光の売りにしているのだが、このホテルはそんな売りをするまでもなく、普通に妖怪があちこちに潜んでいるような由緒があった。
竹内先生への質問や相談を広く受け付けますので、編集部、または担当編集の風穴まで、お気軽にお寄せください。(編集部)
変更履歴:
2015年09月02日:「OCaml」の表記を、誤って「Ocaml」としておりました。編集の際のチェック漏れです。大変失礼しました。お詫びして訂正いたします。
2015年09月03日:小学生に対する講義の時間を「午後1時から3時まで」としていましたが、正しくは「午後1時から4時まで」でした。お詫びして訂正いたします。
2015年10月01日:「先生はドラクエをIからXまで全部クリアしたよ」は、正しくは「先生はドラクエをIからIXまで全部クリアしたよ」でした。また、脚注「米子周辺はゲゲゲの鬼太郎の……」の脚注番号が「※1」となっていましたが、正しくは「※3」でした。それぞれお詫びして訂正いたします。ご指摘いただき、ありがとうございました。
SNSシェア