2007年3月に,米MicrosoftはTechFest2007という同社のイベントで,100件以上の将来技術の研究プロジェクトを公開した。そのプロジェクトの一つに,4歳ぐらいの子供を対象にプログラミングの楽しさを伝えることを目的としたXbox用ゲームがあった。

 Microsoftがデモしたそのゲームは,Boku(おそらく日本語を意識したもの)と呼ぶ,かわいらしい眼を持つ頭部だけのキャラクタ(ロボット?)を,3Dで表現される緑の島で,自由に行動させるというもの。ユーザーはBokuを,アクション(行動),オブジェクト(対象),ビヘイビア(振る舞い)などに相当するアイコンを,一連のバーの上に並べることでプログラミングする。

 赤いリンゴを食べるBoku,島に生えている木を揺さぶって実を落とすBoku,どこからか飛んでくるUFOを打ち落とすBoku,そうしたいろいろなBokuをプログラミングして仮想空間で自由に遊ばせる。同社のサイトなどから得た情報によると,そんな感じのソフトだ。

 実物を見ていないので正確なところはわからないが,プログラミング操作自体は,従来からあるアイコンによるビジュアル・プログラミングの一種のように思える。探せば,似たような仕組みを持つゲームもすでにあるのではないだろうか。とはいえ,ここで,いまだ研究段階のソフトをあれこれ評価するつもりはない。

 気になったのは,4歳ぐらいの子供にゲーム感覚でプログラミングの楽しさや喜びを教えるというコンセプトのほうだ。瞬間的に「ゲームとはいえ,4歳からプログラミングをやらされるとはかわいそうに」と思ったが,それではネガティブ過ぎると思い直し,子供にプログラミングを教える是非について考えてみた。

 この手の話を始めると必ず,「プログラミングなんか教える前に,子供には責任感や倫理といったモラルをきちんと教えるべき」とか「プログラミング言語の前に自然言語(日本語)をちゃんと学べ」といった意見が出る。至極もっともであり,それに異を唱えるつもりはない。ここでは,そうした教育全般の問題としてではなく,単純に,プログラミングを教えることが子供のためになるかどうかを論じてみたい。

手と頭を使うロボット・プログラミングの良さ

 プログラミングを教えるのに何歳が適切かという点について,筆者は明確な意見を持たない。MicrosoftがBokuの対象を4歳ぐらいとしている理由は見あたらなかったが,決められたストーリーをなぞっていくだけの普通のゲームソフトをやり始める前に,という意識があるのではと勝手に推測する。4歳は早すぎる気がするが,小学生ぐらいの子供ならプログラミングを教えることは無意味ではないと筆者は思う。

 ただし,それはプログラミング教育といった格式張ったスタイルで,JavaやCを体系的に教えるといったものとは違う。あくまで遊びの延長で構わない。もっとも,Bokuのようにゲーム・ソフトの中でプログラミング自体を楽しむといったもの(そうであるかどうかはわからないが)もちょっと違う気がする。プログラミングは手段に過ぎないのだから,やはり何らかの問題解決や目的達成の過程として体験してほしい。

 現実にあるもので,一番理想に近いのはロボット・プログラミングだろう。現在,教育用または子供向けのロボット開発キットにはいろいろな製品やツールがあるが,デンマークLEGO社が米Massachusetts工科大学(MIT)と共同で開発したLEGO MINDSTORMS(レゴ マインドストーム)がこの分野では最も有名だ。

 MINDSTORMSは,玩具でおなじみのレゴ・ブロックを使ってオリジナルのロボットを組み立てた後,ブロックの一つに組み込まれたマイクロコンピュータ(マイコン)に,パソコンで作ったプログラムを転送して,ロボットを思い通りに動かすというもの。

 例えば,マイコンの入出力ポートにモーターやタッチ・センサーのブロックを取り付けて車型ロボットを作る。そして,前方にまっすぐ進み,障害物にぶつかってセンサーが反応したらバックするといったプログラムを,アイコン・ベースのビジュアルなプログラミング環境で作成し,赤外線やUSBを介してマイコンのメモリーに転送するわけだ。この一連の作業を,遊びながら学習できる。かつ,手を使ってブロックを組み立てる作業と,パソコンでプログラムを作る作業がバランス良く楽しめる点が特徴だ。

 子供にとっては,最初のうちは,ロボットを動かすことが「主」であり,プログラミングは「従」に過ぎない。しかし,思い通りに動かすには,「従」であるプログラミングがより重要であることに自然と気付く。試行錯誤を繰り返して,ロボットが期待通りに動いたときは,画面に「Hello World!」と表示するよりずっと大きな喜びが味わえる。

 現在,ITpro Developmentで連載「再発見! VB 2005快適プログラミング」を執筆している金宏 和實(かねひろ かずみ)氏は,MINDSTORMSに詳しい。金宏氏は,日経ソフトウエアのWebサイトで,1999年からずっと「こうしろうのMindStorms日記」というコラムを書き続けている。

 そこでは,こうしろう君をはじめとするお子さん達が,MINDSTORMSなどを使ってもの作りを楽しむ様子をおもしろおかしく伝えている。連載当初小学5年生だったこうしろう君は,この春大学生になった。長寿連載コラムである。

 金宏氏は,富山県のソフトハウス「イーザー」に勤務するかたわら,地元のボランティア団体に所属しており,あちこちの小学校などで,MINDSTORMSを使ったロボット講習会の講師を務めている。彼に,小学生にプログラミングを教えることについてどう思っているかを聞いてみた。

 「ロボット・プログラミング教室をしていると,今どきの子供達が,いかに自発的に考えるという訓練をしていないかということがよくわかります。教えられたことを理解する訓練だけをして,いつかポンと“自分で考えなさい”という環境に放り出されたらどうするのだろうと心配になります。論理的な思考や問題解決能力を育むうえで,プログラミング教育は意義があると思います」(金宏氏)。

革新を生み出すホビイストに

 少し気になったのは,子供に対して“きれいなプログラム”という観点で,説明したりヒントを与えたりするのか,という点だ。つまり,非効率な処理や無駄なループなどを見かけたときは,「こうしたほうが効率が良い」とか「このほうが見た目にわかりやすい」といった指導までするのか。

 「きれいかどうかは二の次です。汚いロジックでも,無駄なステップがあっても自分で考えられたことを褒めます。彼らは結果が出たプログラムを直したがらないし,誇りを持っているように感じられるときもあります」(同氏)。

 さもありなん。将来ソフト開発者になったときに役立つように,とか,プログラマとしての基本的な素養だから,といったことまで考慮して子供にプログラミングを教える必要はないと思う。そうしたことは,プログラミングを続けていればいずれ気付くはずだ。問題解決に向かって,自分で考えて結果を出すことが重要なのだ。

 MindStorms日記に紹介されている彼の体験談の中で,興味深かったのは「猛々しいプログラマ」との出会いだ。WRO(World Robot Olympiad)Japanというロボット競技の富山県予選大会で,審査委員長を務めていた彼は,優勝した子供とは別に,印象に残った子供がいた。

 小学3年生のその子供は,プログラムを作り始めると,人の言うことなど聞かない。ロボットの動きだけをたよりにどんどんプログラムを作成していく。彼はそれを「猛々しいプログラマである」と表現した。自分が作ったプログラムを人に説明することはできないが,人に指示されるよりも自分の理解を基にプログラミングを進めていく姿勢に対して,ベストプログラミング賞を贈ったという。

 猛々しいプログラマ──やや閉塞感のある日本のソフトウエア産業界にブレークスルーをもたらすとすれば,こうした人材像ではないだろうか。

 猪突猛進型で協調性のなさそうなプログラマなど要らない,と言う方もいるだろう。確かに,プロのソフト開発では,チーム開発が基本だ。他人の意見を聞かないプログラマはチームの和を乱す存在になる。

 しかし,筆者は彼のような子供に,ぜひプロのソフト開発者になって欲しいと思っているわけではない。革新を生み出す“ホビイスト”になってくれればと望むのだ。

 ここでホビイストというのは,川俣晶氏が,ITpro Developmentの連載「いまWindows Mobileプログラミングがおもしろい」の第1回で定義した言葉だ。ホビイストとは,プロを目指す中途段階などではなく,全く別個の独立した立場にあり,本人がおもしろいと思ったことは何でも実行する人々である。

 ただし,それだけでは単に自己満足な人々に過ぎないが,ホビイストはしばしば技術やパソコンの利用スタイルを革新する原動力になるという。おもしろさの追求だけで,ホビイストがしつこく開発/改良を重ね続けた無料ソフトが,プロが作った商用ソフトよりも優れているということはままあるからだ。

 例えば,まつもとゆきひろ氏は,職業としてはプロのソフト開発者である。しかし,Rubyの開発に限っては,完全にホビイストの立場だったのではないだろうか。彼がおもしろいと思いながらひたすら作り上げたRubyは,世界中で利用される優れたプログラミング言語となった。

 革新を生み出すユニークな人材を一人でも多く発掘できるのなら,子供にプログラミングの楽しさやおもしろさを伝える機会を設けることは,決して無駄ではない。出でよ,猛々しいプログラマ!