特集

プログラミング入門をどうするか
基 応
専 般

小学生に分かるコンピュータサイエンスとしてのプログラミング教育
─ビスケットを用いて─
原田康徳（デジタルポケット）

プログラミングでなければ学べな
いことビスケットで教えているコンピュータ観

プログラミングはコンピュータを使うすべての人が学

ここでは，筆者らが小学生に対して行っている授業やぶべきである．しかし，この主張に説得力を持たせるたワークショップなどの活動を例にして，我々が考えている

めには，プログラミングによって何を学ぶことができる「プログラムを書くことによってしか得られないコンピュのかを説明できなければならない．たとえば，プログ

ータ観」とはどういうものか説明する．この試みは始まラミングを学ぶことで，創造性であるとか問題解決力でったばかりであり，非常に未熟でこれから多くの人たちあるといったさまざまな能力が身に付く，という意見がの手によって膨らませていくべきものであることは重々ある．これは間違ってはいないけれど，これではすべて承知している．しかし我々の活動を通して，その内容もの人が学ぶべきという主張を裏付けるまでにはいかない．

少しずつ増えてきているので，本稿で紹介する．以下でそれらの能力が身に付くのはプログラミングを学ぶこと示すコンテンツはいずれも，実際にワークショップや授による副次的な効果であり，せいぜい，効率良く身に付業でビスケットを用いて実施してきたものである．なお，くとか，同時に身に付くといった程度である．プログラ

ビスケットについては本稿では丁寧に説明する余地はな

ミングでなければ教えられないことではない．

いので，文献 1）などを参考にされたい☆1．

プログラミングでなければ教えられないことは唯一「コンピュータとは何か」ということである．しかし，ただ単

1）プログラムで動くものとは純にコンピュータとは何かという問いでは，コンピュータ

次のコンテンツはビスケット未経験の状態から 5 分く上のアプリを数多く使いこなすことでなんとなく得られるらいで実施できるものである（画面の様子を図 -1に示す）．

「コンピュータはこんなもの」という感覚的なものも含まれてしまう．それらと明確に区別するために，より厳密に「プログラムを書くことによってしか得られないコンピュータ観」としよう．それが定義できたとして，そのコンピュータ観は義務教育の貴重な時間を奪い合ってまでみなが知る必要のあるものかどうか，そこが問われる．
「プログラムを書くことによってしか得られないコンピュータ観」とは具体的にどういったことであろうか．
コンピュータの専門家たちは，自分たちがあまりにも専門に慣れすぎて，それを知らなかったときのことを思い出すことが難しい．逆にそれらを知らない人たちは，自分たちが何を知らないのかを知らない．したがってこれらを明確にズバッというのはなかなか難しい．
344

情報処理 Vol.57 No.4 Apr. 2016

棒人間を描いてください（図 -1 左）．棒人間をステージにたくさん入れてください．
メガネを持ってきて，メガネの右と左に棒人間を入れると，ステージの棒人間が一斉に動き出します（図 -1 中）．
メガネの中の 棒人 間 の 位置をずらすと， ステー
ジの棒人間の動きが一斉に変わります．ずらし方で，動く方向と速度を制御できます．
メガネの中から棒人間が出てしまうと，メガネが壊れ，ステージでの棒人間は一斉に動きを止めます（図 -1 右）．
では今度は，皆さんが考えて，棒人間を水平方向に横に動くようにしてみてください．
☆1

最小限の説明をすると，「メガネ（2 つの○が並んだもの）の左側とマッチする絵を，右側の絵 + 配置に書き換える」ことがビスケットの基本動作であり，すべての動きはこれから作り出される．

図 -1

多数の棒人間を動かす

ここまでを，実際にタブレットを使って一人ひとりに病気の感染のシミュレーションるといった印象である．
1. に続いて，次の説明を提示する（図 -2）．

小学生に分かるコンピュータサイエンスとしてのプログラミング教育体験をしてもらう．小学校低／中学年を対象にこれを図 -2実施すると，いつも子供たちは動きに夢中になり，歓声があがる．このような簡単な体験ではあるがこれだ
けから次のようなことが説明可能である．
1. 1 つのメガネが何度も使われ，複数の棒人間が一斉に動く．
2. メガネを修正すると，その変更が全体に一瞬で反映され，一斉に動きが変わる．
3. メガネが壊れると，全体が一斉に動きを停止する．
これは，プログラムによって作られたものと，これまでの物理的なものとの違いを非常に明確に見せている．たとえば自動車のリコールというのは壊れるかもしれないけれど，必ず壊れるというものではない．そもう 1 人元気のない棒人間を描いてください．その人を 1 人だけステージに入れ，上に動くようにします（図 -2 左）．
最初に描いた棒人間は健康な人で，後から描いた
元気のない棒人間は風邪を引いています．健康な人と風邪を引いた人がぶつかると，風邪がうつる，というメガネを作ってください（少し間を置いて自分で考える時間をとる）．
答えは，このようにします（図 -2 中 その結果，1 人だけだった風邪がどんどん増えて行く）．
次に，病院を建ててください．
（少し間）病院を建てるということは病院の絵を描いて，病院をステージに入れ，病院に風邪の人がぶつかると治るというメガネを作る，ということです（図 -2 右 病院になかなかぶつからず，治りが遅い．病院を増やすと少しバランスがとれる）．

れに対してプログラムの不具合は起きるかもしれない
ではなく，必ず起きる．コンピュータの何かの不具合

この体験で 4 つのことが説明できる．
「プログラムでシステムが一斉に停止するという事件は頻繁に起きの複雑さはどこからくるのか」「ものと情報の違い」「仕ている．不具合の修正もプログラムの場合は簡単にす様からプログラムを作るということ」それと「シミュレべてのコンピュータに送ることができるが，物理的なもーションとは」である．のの場合は 1 つ 1 つ直していかなければならない．最近では製品が出荷された後から，プログラムを更新し2）複雑さはどこからくるのかて機能を向上させるといったこともよく行われている．

メガネ 1 つ 1 つは単純なことしか指令していない．

我々は大人向けの講座の場合にこのような裏側の

ここでの４つのメガネは，健康な人が横に動く．風邪

説明はするが，小学生向けの体験では，このようなを引いた人が縦に動く．健康な人と風邪を引いた人

説明はせず感覚としてコンピュータによって作られるがぶつかると，2 人とも風邪を引いた人になる．病院

ものとはどういうものなのかを知ってもらうようにしてに風邪を引いた人が入ると，病院から健康な人が出いる．子供たちがこれをどれくらい理解しているのかてくる．というものである．それぞれは 1 つのメガネを知ることは難しいが，これに続くほかの作品作りでで表せる簡単な命令でしかない．しかし，風邪がどんも，複数の絵が自分が気に入った動きを得られるまでどん広がったり，病院で治ってもすぐにまたかかってメガネを調整しているので，すんなりと受け入れていしまったり全体の振舞いはきわめて複雑である．

情報処理 Vol.57 No.4 Apr. 2016345

特集

プログラミング入門をどうするか

コンピュータには最初から複雑な命令が入ってい5）シミュレーションとはるのではない．単純な命令しか理解できないけれど，健康な人が移動する速さ，風邪を引いた人が移動

その単純な命令を組み合わせることで複雑な動きがする速さ，病院の数などを変えると，感染の広がり作れるのである．メガネがたった 4 つでもこれくらい方が変化する．このようにいろいろと変えて実験する

複雑な動きになるが，メガネをどんどん増やしていくことがシミュレーションである．子供や大人に対して，ことで，世の中にある便利なすごい動きをするプログ

シミュレーションはコンピュータの重要な応用の 1 つ

ラムに近づいていく．

であり，ほかにどのような例があるか（天気予報や大きな建物を建てるときといった）を説明している．そ

3）ものと情報の違い
感染は指数関数的に広がる．これに対し，病院では 1 回に１人ずつを治すので，線形関数的であり治療して（特に大人に対して）プログラミングが自由に書けることの強力な利点として，シミュレーションが自由自在にできるようになること，を説明している．

はまったく追いつかない．ものを他人に渡すと自分からはなくなる．ものは移動するだけ．それに対して，

6）脳の拡張としてのコンピュータ

情報は他人に教えても自分からはその情報はなくならシミュレーションの有用性を実感するには，結果がない．たとえば，他人に美味しいラーメン屋さんのこすぐ直感的には分からない題材が適している．風邪とを教えても，自分はそれを忘れたりしない．風邪のの感染の例の後に，次の課題が続く（図 -3）．

感染も同じで相手に風邪をうつしても自分は治らず風邪を引いたままである．風邪の感染も実際には情報の伝達を模倣しているものと考えることができる．相手に教えても自分からはなくならない場合，このように指数関数的に一気に広がっていく．広がり方がすごい．これは情報が持っている基本的な性質である．
情報には良い情報と悪い情報があるとすると，良い情報がすごい勢いで拡散するのは良いことだけど，悪い情報がすごい勢いで拡散するのは悪いことである．
情報によって作られた社会，インターネットには基本的にこの原理を持っているのだから，それをよく踏まえた上で使いこなせるようになるべきである．

風 邪の例では，健 康な人が一方的に風 邪にやられてしまいました． 今 度 は 絵 を 3 つにして， それぞ れ が やられる３すくみ の 関 係 を 作ってもらいます．1 つの 例がじゃんけんです． たとえばグーとチョキがぶつかるとグーの勝ちなのでグーとグーになる， というものです． これを 作 るには， まず 3 つの 絵 を描 いて， それぞれを動かして（3 つのメガネ
図 -3 左から 1 番目），2 つがぶつかると勝った方の絵になる（3 つのメガネ 図 -3 左から 2 番目）というのを作ります．メガネは全部で 6 つです．ステージには同じ数のグー，チョキ，パーを入れて走らせるとどうなるでしょう（図 -3 左から 3 番目）．

15 分くらいでほとんどの子供は完成させられる．これを体験したほとんどの子供は（実は大人も），何度やってもどれか 1 つの手だけになってほかが全滅してしま

3464）仕様からプログラムを作るということう（図 3 左から 4 番目）ことに首をかしげる．予想で「病院を建ててください」という一言で，すぐに何をは，メガネがバランスしているのでいつまでも 3 つのすべきか分かる人が 1 割くらいいる．この一言は３つ部品が動き続けると思っていたからである．プログラのステップ「病院の絵を描く」「病院をステージに置く」

ムが間違っていないか何度も見直すが，簡単なプログ「病院で風邪が治るというメガネを作る」に分解される

ラムなので間違えていないことがすぐに分かる．プロ

が，一言で分かった人というのは，この３ステップへのグラムが間違っていないのに，自分の予想と違う結果分解ができる人である．仕様からプログラムを作るとが得られた．そこからもう一度，この 3 すくみのメガいうことは，人間が分かる文章からコンピュータが理ネを考えてみると，グーが頑張ってチョキを滅ぼして解できるステップへの変換を意味する．プログラミン

しまうと，パーにとっての天敵であるチョキがいなくグというのはこの繰り返しである．

なるので，最終的にグーはパーにやられてしまう．つ情報処理 Vol.57 No.4 Apr. 2016

図 -3

じゃんけんのシミュレーション左）．すると，矢印で作った経路自由に並べて，好きな経路を作って遊ぶことができる．さらにメガネを追加して，矢印を通過するたびに矢印の向きが変わる，というものを作る．ここでは下矢
図 -4

ピタゴラスイッチ的なプログラム

印にぶつかると，矢印を斜めにして下に移動する．斜め矢印にぶ

まりこの 3 すくみでは最初に頑張りすぎて相手を滅ぼ

つかると矢印を下にして，斜めに移動する（図 -4 右）．

してしまうと，その手は負けることになっているので顔が矢印を通るたびに経路が変化するプログラムがある．この結果を踏まえてメガネを注意深く検討するできた．と，たしかに理解できる．しかし，人間はそこまで最

このプログラムは今までのものと異なり，2 つのレ初から深く考えずに，先入観から単純にバランス良くイヤの遊びが混在している．メガネで動きを作るとい動き続けると思ってしまう．

う従来からの遊びと，矢印の並べ方で動きを変えてコンピュータが人間の脳の拡張であるといわれるの遊ぶプラレール的な側面である．矢印の並びはプロは，この点においてである．人間はあまり注意深くはグラムにとっての操作対象であると同時に，その並び考えない．そこをシミュレーションで精密に計算する．

自体で動きを規定しているプログラム的でもある．そその結果は人間にとって予想外の結果かもしれない．の場合メガネによる矢印の解釈はプログラミング言語

しかし，その結果を踏まえて判断すれば，人間が注を定義していると見なせる．

意深く考えないという欠点をコンピュータが補ってくれているということになる．

プログラミング言語というのは，それまで操作対象としてデータであったものが，並び替えることでプログラム的な意味を持たせることができて，記述のレイ

7）プログラミング言語とはどういうものか
ビスケットでピタゴラスイッチ的なプログラムを作☆2

る．

ヤが 1 つ上がるということである．
小学校１年生くらいでも作業として同じものを作ることは可能である．彼らがどれくらい理解しているの  たとえば，顔と上，下，左，右向きの矢印を用意し，かであるが，これまでとは違う種類の遊びと認識し，顔が矢印に沿って移動するメガネを用意する（図 -4

矢印の並び替えを自然と楽しんでいるようである（斜め矢印のアイディアは子供から出た）．もちろん彼らは☆2

このアイディアは東京工業大学の首藤一幸さんによっている．

プログラミング言語の存在自体に親しみはないだろう

情報処理 Vol.57 No.4 Apr. 2016347

小学生に分かるコンピュータサイエンスとしてのプログラミング教育に沿って顔が移動する．矢印を特集

プログラミング入門をどうするか

けれども，自分で遊び道具を作って，その道具で遊部分は，シンプルな調味料の組合せで複雑な味が作ぶという階層の面白さと可能性については伝えられたられるという言い換えはできるかもしれない．と思う．
プログラミング言語を新しく作ることの魅力は，コ

これらは，貴重な義務教育の時間を削ってでも教える必要があるほど重要なことだろうか？

たとえ

ンピュータそのものの可能性を大きく高め，人間が巨ば，3）の情報は原理的に拡散しやすいということを大なプログラムを間違いを少なく作れる理由にもつな

教えることは，ネット安全教室などで「XX は危険だがっている．

から気を付けよう」といった言葉でインターネットを安全に使う方法を教えるよりも，ずっと効果的であコンピュータの理解
以上の体験による説明をもう一度並べてみよう．

る．5）や 6）は，これからのほかの学習においても，シミュレーションを活用するべきであるという提案にもつながる．

1）プログラムは何度でも使われ，プログラムは簡単に修正でき，一斉に壊れる．
2）単純な命令の組合せで，複雑な動きができている．

残された課題3）情報はすごい勢いで拡散する．これは情報の原理．

本稿ではビスケットによるプログラミングを用いて，

4）プログラムを作るということは，人間が理解してい子供たちに分かるかたちでコンピュータサイエンスをる意味を，コンピュータが分かる単純な意味へ分解取り上げるやり方について述べた．これらがプログラする作業．

ミングという体験を通じなければ理解できないかどう

5）シミュレーションは簡単に実験できる場．

か，これらの内容が義務教育の時間を奪い合ってま

6）脳の拡張としてのコンピュータ．

で知らなければならないほど重要なのか，これらの問

7）プログラミング言語とはどういうものか．

いについては一切答えていない．我々，コンピュータ

これらのことは，どれもプログラミングができる人の専門家ができることは，専門的な内容をできるだけならば，明確に言語化できているかどうかは別として，優しく教えられるようにすることであり，ひとまずはそ直感的に知っていることばかりである．一方で，コンピれに徹する．

ュータをただのユーザとして使っているだけではなかな

ここで述べてきた内容は，ビスケットを使う前提でか知ることのできないことでもある．たとえば 2）の構成されているが，ここで扱われていないけれど重要組み合わせるから複雑になるということに対して，最近なことはまだたくさんある．たとえば TCP/IP やプロトのアプリはどんどん高度化し，小さな操作でさえも細コルの考え方など．これから多くの方々と協力しながかいところにまで考えが行き届いた作りになっている．

ら，進めていきたい．

これを使えば使うほど，その裏側で作っている人の苦労は感じられなくなり，この理解から遠のくだろう．
プログラミングという体験をせずに，これらの内容を伝えることができるだろうか．筆者はきわめて難し

参考文献
1） 原田康徳，勝沼奈緒実，久野 靖：公立小学校の課外活動における非専門家によるプログラミング教育，情報処理学会論文誌，Vol.55, No.8 (2014).
（2016 年 1 月 4 日受付）

いと考えている．というのは，いずれもプログラミン
グ以外で体験することのない，きわめてオリジナルな原田康徳 ■ viscuit@gmail.com体験だからである．たとえばプログラミングは料理の1963 年生．1992 年北海道大学大学院情報工学専攻博士後期課
程修了．同年日本電信電話（株）NTT 基礎研究所．2000 ～ 2015
年 NTT コミュニケーション科学基礎研究所．1998 ～ 2001 年 JST
さきがけ研究員．2004 ～ 2006 年，2010 ～ 2013 年 IPA 未踏ソフ
トウェアプロジェクトマネージャ兼務．2015 年より合同会社デジタルポケット代表．博士（工学）．ワークショップデザイナー．

レシピに例えられることがあるが，料理の体験をしたからといって，上記のことが伝えられるだろうか．2）の単純な命令の組合せで複雑な動きができるという

348

情報処理 Vol.57 No.4 Apr. 2016