情報処理学会 インタラクション 2015
IPSJ Interaction 2015

A66
2015/3/5

演示プログラミングを用いたプログラミング学習支援中田 豊久1,a)

概要：演示プログラミングとは，作成したいプログラムの動作をユーザがコンピュータに対して演じて見せて，そこからコンピュータが自動的にプログラムを作成することである．この演示プログラミングをプ
ログラミング学習に利用することを本研究の目的とする．学習の題材は迷路ゲームとし，演示プログラミングによる生成されたプログラムが，学習者のプログラミング理解度を向上させるかを検討する．

Programming Learning using Programming by Demonstration
Toyohisa Nakada1,a)Abstract: Programming by demonstration is a method to create program by user’s demonstration. The
purpose of the study is to use the programming method in order to enhance learning of computer program.
In this study a creation of searching goal on a maze is used for learning, and effect of the learning is discussed.

1. はじめに1.1 演示プログラミングとはること」を本研究では目的とする．プログラミングの学習は近年，低年齢化および広範囲化している．Scratch [4]，Stagecast Creator[5]，Viscuit [6] のようなプログラミング

演示プログラミングとは，作成したいプログラムの動作を誰にでも気軽にできるようにする研究は，これらの環境をユーザがコンピュータに対して演じて見せて，そこからの変化によってさらに重要性を増していると考える．しかコンピュータが自動的にプログラムを作成することであしそれでもなお，プログラミング教育の現場では，プログる．エディタや表計算ソフトウェアのマクロ機能と類似しラミング習得を挫折する人がいる．ているが，次の点で異なる．マクロは操作を記録して再生本研究では，これまでのプログラミング学習方法で挫折しているだけであり，マクロを作成した時とは異なる状してしまった，特にプログラミングに向いていない人に況では機能しないことが多い．一方，演示プログラミング対しての学習方法を検討する．学習方法の全体としてはは，ユーザの意図を推定してプログラムを作成する．よっ「ルールの抽出と適用」の練習に注目する．そしてその中て，マクロよりは汎用性の高い動作が期待できる．このよのルールの抽出において，解答を見つけられない学習者にうな演示プログラミングは，プログラミングの知識を必対するアドバイスの 1 つとして，この演示プログラミング

要としないプログラミング方法として，Programming byを利用する．

Demonstration[1]，Programming by Example[2][3] などの名称で研究が行われている．

2. プログラミングに向いていない人
2.1 多くの人が最初のプログラミング授業で挫折する

1.2 演示プログラミングをプログラミング学習に用いる

Richard ら [7] は，学力のレベルや専攻に関係なく，初め「この演示プログラミングをプログラミング学習に用いて受けるプログラミングの授業である程度の人数が挫折すると述べている．この挫折する人とは，ある現象を見てそ1a)

新潟国際情報大学 情報システム学科
Department of Information Systems, Niigata University ofInternational and Information Studies, Japan
nakada@nuis.ac.jp© 2015 Information Processing Society of Japan

こからルールを抽出する能力と，そのルールを別の状況でも正しく適用できる能力が欠けている人であるという．

405

重要であると主張している．アルゴリズムの理解をどの程度の抽象化で考えているかによって，プログラミング習得の度合いが計れるという．しかし抽象化能力とプログラミング習得には相関がないとする研究 [10][11] もあり，プロ$SSO\5XOHV

グラミングにおける重要な要素は，まだ確実なものが分かっているわけではない．

2.3 迷路ゲームにおけるプログラミングに向いていない人の例
例えば図 1 のような迷路を探索するプログラムを作成([WUDFW5XOHVすることを考える．迷路上のプレイヤは，前後左右に壁があるかどうかが分かるようになっているとする．そしてス
タート地点とゴールが与えられ，ゴールまでの移動ルールをプログラムとして記述することが求められる．例えば図1 においてスタート地点を 1，ゴールを 8 としたときの移崚嵤嵈峘嵓嵤嵓崿嵔崌嵌峙‫؜‬৚ૡ峒৐ਤ峘峩岶峑岷峵‫؝‬動ルールは，同図の下に書かれているプログラムとなる．

崿嵔崌嵌峙৐৏ంక峘෢峼ੴಁ峑岷峵‫؝‬

プログラミングに向いていない人は，例えばスタート地点崿嵔崌嵌峘୎৿嵓嵤嵓を 1 としゴールを 2 としたときのような簡単な例であって嵓嵤嵓峘ྴল岜岜ഊଡ଼঱峘 岵峳峨峑୎৿峃峵嵓嵤嵓峼েਛ峃峵‫؝‬嵓嵤嵓峘ి৷岜岜ଖ岲峳島峉嵓嵤嵓峕ป峍峐崿嵔崌嵌峼୎৿岿峅峵‫؝‬

図1も，プログラムが作成できないことがある．
しかしプログラムを作れない場合であっても，ゲームコルールの抽出と適用を繰り返し行うことにより，プログラミングを学習する．

Fig. 1 Learning computer programming by repetitive extrac-

ントローラによって迷路内のプレイヤを一歩ずつ動かす方
法ならばゴールに辿り着くことができる．つまりプレイヤの動きはイメージできるわけであるが，そこからルールを

tion and application rules導き出せないわけである．これは，Richard ら [7] のいうউটॢছ঑থॢ৾ಆ঻ऋু৿दഊଡ଼঱भউঞॖখ॑৿ऊघ‫؝‬भ৉ਡऊै৚‫ڂ‬य़‫ش‬औैप ৚‫؜ڂ‬ઃपऔैप‫؜ڂ‬‫ڂ؜ڀ‬ध॑োৡघॊ‫؝‬‫؜ځ‬जखथ‫ڂ‬धোৡ‫؝‬य़‫ش‬োৡघॊ‫؝‬「ある現象を見てそこからルールを抽出する能力」が足りていないことを示している．

3. 「ルールの抽出と適用」を迷路ゲームによって練習する「ルールの抽出と適用」を繰り返し練習することによって，Richard ら [7] のいうプログラミングに向いていない人に対してプログラミング教育を行うことを提案する．図 1にその例を示す．この迷路ゲームは，丸で表されているプᆠઃ৓पউঞॖখभ୎৿ঝ‫ش‬ঝऋঽ৿েਛऔोॊ‫؝‬QRWXUQJRVWUDLJKW

図 2

LI OHIWVLGH
FORVHG ^QRWXUQ`HOVH^WXUQOHIW`JRVWUDLJKWLI OHIWVLGH
FORVHG ^QRWXUQ`HOVH^
LI ULJKWVL]H
FORVHG ^WXUQOHIW`HOVH^
WXUQULJKW``JRVWUDLJKW

プログラミング学習者が手動で動かした迷路上のプレイヤから，その移動ルールを逐次的に自動生成する．

Fig. 2 When a learner of programming moves player on themaze, the rule of the movement is automatically created one by one.

レイやを指定した場所から指定した場所まで移動させるゲームである．プレイヤは，その場で回転することと前進することしかできないとする．またプレイヤが知覚できる情報は，前後左右に壁があるかどうかだけである．このゲームによって次の練習を行う．

( 1 ) ルールの抽出( a ) 自動で動くプレイヤからそのルールを特定する．
( b ) 指定した場所から指定した場所まで移動するルールを作る．

( 2 ) ルールの適用( a ) 与えられたルール通りに，ユーザがプレイヤを移動させる．

2.2 抽象化能力とプログラミング習得
Perrenet ら [8][9] は，プログラミングには抽象化能力が© 2015 Information Processing Society of Japan406

として，ユーザが実際に動作させた行動からその行動を自4. 演示プログラミングによるルール生成支援
4.1 スタートからゴールまでの移動ルールを見つけられない時のアドバイス
プログラミング学習の初心者やプログラミングに向いていない人は，迷路ゲームにおいて指定したスタート地点からゴールまでの移動ルールを記述できないことが多い．しかしそのような場合であっても，例えばゲームコントロー
ラによって迷路上のプレイヤを一歩ずつ進めてゴールまで到達させることはできる．

動的にプログラミングする演示プログラミングについて提案した．
今後は，この提案を実際にプログラミング学習の現場で実施することと，このルールの抽出と適用の出来具合によってプログラミングの素養があるのかどうかを判定することに対しても考えていきたい．
参考文献
[1]

そこで学習者が手動で迷路上のプレイヤを一歩一歩動かすごとに，そこまでの移動ルールを自動的に生成し学習者[2]に提示することを提案する．

[3]

4.2 演示プログラミングによるプログラムの自動生成例
図 2 は，ユーザがキーボード操作でプレイヤを一つずつ[4]移動し，そこまでのプレイヤの行動を自動的にルール化して表示している例である．まず最初に 1 の地点からスタートし，前進する．このときのプレイヤの移動ルールは，プ[5]レイヤ周りの環境に関係なく常に前進するとなっている．
次に最初の突き当たりに到着して左に向きを変える．ここでは，左側が壁が無く通行可能であれば左に行く，という[6]ルールが自動的に生成されている．そして再度突き当たりに到着したときに，右に曲がっている．このときには，プ[7]レイヤの左側が通行可能でも，右に行けるならば右に行く，というルールに変わっている．

4.3 演示プログラミングの期待される学習効果
ユーザは，自らプレイヤを動かして一つずつプレイヤの[8]移動ルールを確認することができる．迷路の分岐点に到着したときに，これまでに作成されたルールと，これから作成したいルールを照らし合わせ，ルールを統合していくことを学ぶことができる．

[9]

これは，問題を分割して考えていることになる．スター
ト地点からゴールまでの移動ルールを見つけられない学習者は，スタート地点からゴールまでを一気に考えていると思われる．そして問題が大きすぎるため，理解できずに解[10]答を見つけられない．そこでキーボード操作で一歩ずつ迷路上のプレイヤを移動させて，そのつど自動生成されるプログラムを 1 つずつ理解していくことにより，最終的にスタート地点からゴールまでの問題を解けるようになると考える．

[11]

Cypher, Allen: Watch What I Do: Programming by
Demonstration, Daniel C. Halbert, MIT Press, ISBN 0262-03213-9, (1993).
Halbert, Dan: Programming by Example, U.C. Berkeley(PhD diss.). Retrieved 2012-07-28, (1984).
Aditya Menon, Omer Tamuz, Sumit Gulwani, Butler
Lampson, Adam Kalai: A machine learning frameworkfor programming by example, The International Conference on Machine Learning (ICML), (2013).
John Maloney, Mitchel Resnick, Natalie Rusk, Brian Silverman, and Evelyn Eastmond: The Scratch Programming Language and Environment. Trans. Comput. Educ.
10, 4, Article 16 (November 2010), 15 pages. (2010).
Jill Denner, Linda Werner, and Eloy Ortiz: Computer
games created by middle school girls: Can they be used
to measure understanding of computer science concepts?.
Comput. Educ. 58, 1 (January 2012), 240-249, (2012).
Y. Harada: Computer Programming Education Using
the Visual Programming Language Viscuit, NTT Technical Review, Vol. 8, No. 11, 2010.
Richard Bornat, Saeed Dehnadi, and Simon: Mentalmodels, consistency and programming aptitude, In Proceedings of the tenth conference on Australasian computing education - Volume 78 (ACE ’08), Simon Hamilton
and Margaret Hamilton (Eds.), Vol. 78. Australian Computer Society, Inc., Darlinghurst, Australia, Australia,
53-61, 2008.
Perrenet, J., Groote, J. F., and Kaasenbrood, E., Exploring students’ understanding of the concept of algorithm: levels of abstraction, 10th Conference on Innovation and Technology in Computer Science Education,Lisbon, Portugal, pp.64-68, (2005).
Perrenet, J. and Kaasenbrood, E., Levels of abstraction
in students’ understanding of the concept of algorithm:
the qualitative perspective, 11th Conference on Innovation and Technology in Computer Science Education, pp.
270-274, (2006).
Bennedsen, Jens and Caspersen, Michael E.: Abstraction ability as an indicator of success for learning objectoriented programming?, SIGCSE Bull. vol.38, no.2,
pp.39-43, (2006).
Bennedssen, Jens and Caspersen, Michael E.: Abstraction ability as an indicator of success for learning computing science?, Proceedings of the Fourth international
Workshop on Computing Education Research, ICER ’08,
pp. 15-26, (2008).

5. おわりに本研究では，プログラミングに向いていない人に対する学習方法として，ルールの抽出と適用を繰り返し行うことが良いと考え，そしてその中のルール抽出を支援する機能© 2015 Information Processing Society of Japan407