(57)【要約】【課題】一の課題に対して作成されるプログラムを評価するプログラミング学習において、学習者が自由度の高いプログラミングを行うことを可能とするプログラミング学習プログラムを提供する。また、本発明によれば、予め用意されたプログラムを再現するプログラミング学習において、学習者が、目的となる当該プログラムを再現することを支援することができるプログラミング学習プログラムを提供する。【解決手段】コンピュータを、各々が同一の実行結果を出力し、プログラムの記述が互いに異なる複数の正解プログラムを記憶する記憶手段と、入力プログラムの入力を受け付ける受付手段と、複数の正解プログラムの各々に対し、入力プログラムとの類似度を算出する類似度算出手段と、算出された類似度に基づいて、入力プログラムの成績を判定する判定手段として機能させるためのプログラミング学習プログラム。【選択図】図２Ａ
2020166292.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
正解プログラム、前記正解プログラムを再現する入力プログラムを作成するための示唆となる質問データ、及びその解答データを記憶する記憶手段と、
前記質問データに対する回答の入力を受け付け、前記解答データに基づいて、前記回答の正誤を判定する回答判定手段と、
前記回答判定手段が正解と判定した場合に、前記入力プログラムを作成するための作成画面を表示させる表示制御手段として機能させるためのプログラミング学習プログラム。
【請求項２】
前記正解プログラムは、複数の対象物の動作を規定し、
前記質問及びその解答は、前記複数の対象物ごとに記憶されていることを特徴とする請求項２に記載のプログラミング学習プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラミング学習のためのプログラムに関する。
【背景技術】
【０００２】
プログラミング学習を支援するプログラミング学習装置やプログラムが知られている。
例えば、特許文献１には、正解用プログラムを記憶する記憶手段と、前記正解用プログラムに基づく見本を表示手段に表示させる表示制御手段と、入力手段によるプログラムの入力を受け付ける受付手段と、前記受付手段が受け付けたプログラムの正誤判定を行う正誤判定手段と、を有するプログラミング学習装置が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１７−２１９７１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一の実行結果を得るためのプログラムは、必ずしも一意的に決定されるものではない。上記の従来技術においては、正解用プログラムを実行することで見本が表示され、学習者によって入力されたプログラムは、当該正解用プログラムを基にその正誤が判定される。そのため、入力されたプログラムが当該正解用プログラムと同一の実行結果を出力するとしても、入力されたプログラムの構成が当該正解用プログラムの構成と異なる場合には正解とは判定されない。
【０００５】
また、上記の従来技術においては、学習者は、表示された見本を視認した後に、これを頼りに当該見本と同じ実行結果を出力するプログラムの作成を開始する。しかし、この段階でそのようなプログラムを作成することは、特にプログラミング言語に習熟していない初学者にとってはどのようにプログラムを記述すべきかを検討する段階から困難であると考えられる。更に当該見本が複雑であるほど学習者にとってプログラムの作成が困難になり、学習意欲が低下することも考えられる。
【０００６】
本発明の目的は、一の課題に対して作成されるプログラムを評価するプログラミング学習において、学習者にとって自由度の高いプログラミング学習プログラムを提供することにある。また、予め用意されたプログラムを再現するプログラミング学習において、目的となる当該プログラムを再現することを支援するプログラミング学習プログラムを提供することにある。
【課題を解決するための手段】
【０００７】
上記目的を達成するための主たる発明の一は、コンピュータを、各々が同一の実行結果を出力し、プログラムの記述が互いに異なる複数の正解プログラムを記憶する記憶手段と、入力プログラムの入力を受け付ける受付手段と、前記複数の正解プログラムの各々に対し、前記入力プログラムとの類似度を算出する類似度算出手段と、算出された前記類似度に基づいて、前記入力プログラムの成績を判定する判定手段として機能させるためのプログラミング学習プログラムである。
【０００８】
また、上記目的を達成するための主たる発明の一は、コンピュータを、正解プログラム並びに前記正解プログラムを再現する入力プログラムを作成するための示唆となる質問データ及びその解答データを記憶する記憶手段と、前記質問データに対する回答の入力を受
け付け、前記解答データに基づいて、前記回答の正誤を判定する回答判定手段と、前記回答判定手段が正解と判定した場合に、前記正解プログラムを再現する入力プログラムを作成するための作成画面を表示させる表示制御手段として機能させるためのプログラミング学習プログラムである。本発明の他の特徴については、後述する明細書及び図面の記載により明らかにする。
【発明の効果】
【０００９】
本発明によれば、一の課題に対して作成されるプログラムを評価するプログラミング学習において、学習者が自由度の高いプログラミングを行うことを可能とする。また、本発明によれば、予め用意されたプログラムを再現するプログラミング学習において、学習者が、目的となる当該プログラムを再現することを支援することができる。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係る学習者端末を説明する図である。
【図２Ａ】実施形態に係るプログラミング学習プログラムが行う処理を説明するフローチャートである。
【図２Ｂ】実施形態に係るプログラミング学習プログラムが行う処理を説明するフローチャートである。
【図３Ａ】実施形態に係る正解プログラムの実行結果を説明する図である。
【図３Ｂ】実施形態に係る正解プログラムの実行結果を説明する図である。
【図３Ｃ】実施形態に係る正解プログラムの実行結果を説明する図である。
【図４】実施形態に係る入力プログラムを作成するための作成画面を説明する図である。
【図５】実施形態に係る入力プログラムのブロックの配置を説明する図である。
【図６】実施形態に係る学習者端末を説明する図である。
【図７】実施形態に係るプログラミング学習プログラムが行う処理を説明するフローチャートである。
【図８Ａ】実施形態に係る正解プログラムの実行結果を説明する図である。
【図８Ｂ】実施形態に係る正解プログラムの実行結果を説明する図である。
【図８Ｃ】実施形態に係る正解プログラムの実行結果を説明する図である。
【図９】実施形態に係る表示制御手段が表示する質問を説明する図である。
【図１０】実施形態に係る入力プログラムを作成するための作成画面を説明する図である。
【図１１】実施形態に係るプログラミング学習システムを説明する図である。
【図１２Ａ】実施形態に係る正解プログラムを説明する図である。
【図１２Ｂ】実施形態に係る入力プログラムを説明する図である。
【図１２Ｃ】実施形態に係るグラフを説明する図である。
【図１２Ｄ】実施形態に係るグラフの頂点に付された番号と、ブロック又はブロックに入力された引数等との対応関係を説明する図である。
【図１２Ｅ】実施形態に係る隣接行列を説明する図である。
【図１３Ａ】実施形態に係る正解プログラムを説明する図である。
【図１３Ｂ】実施形態に係る入力プログラムを説明する図である。
【図１４Ａ】実施形態に係る正解プログラムを説明する図である。
【図１４Ｂ】実施形態に係る入力プログラムを説明する図である。
【図１４Ｃ】実施形態に係るグラフを説明する図である。
【図１４Ｄ】実施形態に係るグラフの頂点に付された番号と、ブロック又はブロックに入力された引数等との対応関係を説明する図である。
【図１４Ｅ】実施形態に係る隣接行列を説明する図である。
【発明を実施するための形態】
【００１１】
＜第１実施形態＞
図１は、本実施形態に係る学習者端末１００の構成を説明するブロック図である。学習者端末１００は、学習者が所有するコンピュータ機器であり、例えばパーソナルコンピュータ、タブレット端末、スマートフォン又は携帯電話機等である。学習者端末１００には、表示手段及び入力手段が付属されている。表示手段としては、例えばディスプレイである。入力手段としては、例えばキーボード、マウス又はタッチパネルである。学習者端末１００は、制御部１０２及び記憶部１０４を有する。
【００１２】
制御部１０２は、ＣＰＵ等の演算処理回路、メモリ等を有する。制御部１０２は、記憶部１０４に記憶された後述するプログラミング学習プログラムを実行して、各種機能を学習者端末１００において実行させる。プログラミング学習プログラムは、電気通信回線を経由して学習者端末１００にダウンロードされて記憶部１０４に記憶される。尚、磁気記録媒体、光記録媒体、光磁気記録媒体、半導体メモリなどのコンピュータ読み取り可能な記録媒体に記憶した状態で提供されてもよい。この場合には、学習者端末１００は、記録
媒体を読み取る装置を備えていればよい。また、プログラミング学習プログラムは、予め記憶部１０４に記憶されていてもよい。
【００１３】
記憶部１０４は、不揮発性メモリ、ハードディスク等の記憶装置である。記憶部１０４には、上述したプログラミング学習プログラムが記憶される。
【００１４】
本実施形態においては、ＣＰＵがメモリに記憶されるプログラミング学習プログラムを実行することにより、制御部１０２を、記憶手段２００と、表示制御手段２０２と、受付手段２０４と、類似度算出手段２０６と、判定手段２０８として機能させる。
【００１５】
記憶手段２００は、一の課題に対して設けられた複数の正解プログラムを記憶する。本実施形態における課題とは、予め用意されたプログラムの実行結果と同一又は類似の実行結果を出力するプログラムを作成することを目的とするプログラミング学習である。
【００１６】
複数の正解プログラムの各々は、同一の実行結果を出力する。一方、複数の正解プログラムの各々は、プログラムの記述が互いに異なる。ここで、プログラムの記述が異なる場合とは、例えば用いられる変数名等が異なるためにプログラムの記述が視覚的に異なる場合や、当該同一の実行結果を導き出すための制御構造が異なる場合等を含む。
【００１７】
本実施形態において、正解プログラムは、所謂ビジュアルプログラミング言語によって記述されている。ビジュアルプログラミング言語は、対象物に対し予め用意された複数種類のブロックの中から、使用するブロックを選択して配列する。そして、選択したブロックに対応する命令をその配列に従って順次実行することによって、当該対象物の動作を規定するプログラミング言語である。ビジュアルプログラミング言語としては、例えば、Ｓｃｒａｔｃｈを挙げることができる。つまり、本実施形態において、複数の正解プログラムの各々は、使用されるブロックの個数、種類、配列等が互いに異なるが、同一の実行結果を出力する。
【００１８】
表示制御手段２０２は、学習者に与える課題に対して設けられたプログラムの実行結果を学習者端末１００の表示手段に表示させたり、学習者が入力プログラムを作成するための作成画面を表示手段に表示させる等の制御を行う。入力プログラムは、学習者が与えられた課題に対して作成するプログラムである。入力プログラムは、作成画面において作成され、完成した入力プログラムは、後述する受付手段２０４によって受け付けられる。
【００１９】
受付手段２０４は、入力プログラムの入力を受け付ける。入力プログラムの入力は、表示制御手段２０２が表示させた作成画面を介して行う。
【００２０】
類似度算出手段２０６は、記憶手段２００が記憶している複数の正解プログラムの各々と、学習者が入力した入力プログラムとの類似度を算出する。ここで類似度とは、２つのプログラムの記述が類似する度合いを示す指標である。類似度及びそれを算出する方法の詳細については、後のフローチャート及び具体例を用いた説明で詳述するが、入力プログラム及び正解プログラムの各々についてベクトルとして表現し、この一対のベクトルの余弦類似度を算出することによって、それを入力プログラム及び一の正解プログラムの類似度とする。
【００２１】
判定手段２０８は、入力プログラムの成績を判定する。成績とは、例えば課題に対する入力プログラムについて、その正誤や、それを点数化したものとすることができる。成績は、複数の正解プログラムの各々に対する入力プログラムとの類似度に基づいて判定される。具体的には、成績は、複数の正解プログラムの各々に対する入力プログラムとの類似度の内で最も高い類似度（最大の類似度）に基づいて判定される。
【００２２】
本実施形態において、成績は、課題に対する入力プログラムの正誤とする。入力プログラムの正誤は、予め設定された閾値と比較することによって判定する。例えば、最大の類似度が当該閾値よりも大きい場合に正解と判定し、それ以外を不正解と判定してもよい。ここで予め設定された閾値とは、余弦類似度の性質から、＋１よりも小さい値を適宜選択すればよい。
【００２３】
（プログラミング学習プログラムが行う処理）
本実施形態に係るプログラミング学習プログラムが行う処理について、図２Ａ及び図２Ｂを参照しながら詳細に説明する。図２Ａ及び図２Ｂは、プログラミング学習プログラムが行う処理を説明するフローチャートである。
【００２４】
＝単純な例（１つの対象物の動作について）＝
先ず、学習者は、学習者端末１００にログインし、本実施形態に係るプログラミング学習プログラムを実行させる。プログラミング学習プログラムが実行されると、Ｓ１０１において、表示制御手段２０２は、学習者に与える課題に対して設けられたプログラムの実行結果を、学習者端末１００の表示手段に表示させる。課題において作成すべきプログラムは、ここで表示された実行結果と同一又は類似の実行結果を得るためのプログラムである。学習者は、Ｓ１０１で表示された実行結果を視認し、作成すべきプログラムを検討する。
【００２５】
この例では、課題に対して設けられているプログラムとは、図３Ａ〜図３Ｃに示すように、「ランボタンがクリックされたときに、キャラクタＡが右へ１００歩移動する。」といった実行結果を出力するものである。この実行結果において、学習者は、マウス等を介してランボタンを選択し（図３Ａ）、クリックする。ランボタンがクリックされると、キャラクタＡが初期位置から右へ移動していく（図３Ｂ）。そして、キャラクタＡが初期位置から１００歩進んだ時点で移動を止めて（図３Ｃ）、課題に対して設けられているプログラムの実行が終了する。
【００２６】
Ｓ１０１のプログラムの実行が終了すると、表示制御手段２０２は、当該実行結果を確認した学習者を次の段階へ誘導させるためのボタンを表示する。学習者が当該ボタンをクリックすると、表示制御手段２０２は、図４に示すように、学習者が入力プログラムを作成するための作成画面２１０を表示手段に表示させる。図４に示す画面には、プレビュー画面２１２、選択画面２１４、入力画面２１６及びガイド画面２１８が表示されている。プレビュー画面２１２は、入力プログラムの実行結果を表示する。選択画面２１４には、入力プログラムの作成に使用することができる複数のブロックが表示されている。入力画面２１６は、学習者が入力プログラムを入力する画面である。学習者は、入力画面２１６において入力プログラムの作成を行う。ガイド画面２１８は、本実施形態に係るプログラミング学習において、学習を進める上での示唆となるコメント等を表示する。学習者は、選択画面２１４に表示された複数種類のブロックを、入力画面２１６へマウス等でコピーすることができる。そして、学習者は、入力画面２１６にコピーされたブロックを配列することによって入力プログラムの作成を行うことができる。
【００２７】
次いで、Ｓ１０２において、受付手段２０４は、学習者が作成した入力プログラムの入力を受け付ける。
【００２８】
次いで、Ｓ１０３及びＳ１０４において、類似度算出手段２０６は、記憶手段２００が記憶している複数の正解プログラムの各々と、Ｓ１０２において学習者が入力した入力プログラムとの類似度を算出する。つまり、入力プログラム及び一の正解プログラムの類似度を算出する処理（Ｓ１０４）を行う。ここで算出手段は、記憶手段２００に予め記憶されている当該一の正解プログラムに関するデータを読み出して、両者の類似度を算出する。ここで、一の正解プログラムに関するデータとは、正解プログラムそのもののデータであってもよいし、後述するベクトルとして表現されたデータであってもよい。このＳ１０４の処理を、全ての正解プログラムについて繰り返す（Ｓ１０３）。
【００２９】
ここで、入力プログラムと、一の正解プログラムとの類似度を算出する方法について説明する。ここでは、ビジュアルプログラミング言語の例で説明する。本実施形態において、類似度算出手段２０６は、複数種類のブロックの各々が使用される個数を、入力プログラム及び正解プログラムの双方について算出して両者を比較することによって、類似度を算出する。
【００３０】
類似度を算出する方法について更に詳細に説明する。先ず、入力プログラムを、１つのベクトルＶｂとして表現する。この場合、添字ｂをブロックの種類とし、その成分Ｖｂをブロックｂがそのプログラムにおいて使用される個数とする。
【００３１】
図４に示す例では、３種類のブロックが配列されている。具体的には、「ランボタンがクリックされたら」と付されたブロックｂ１が１個、「１０回繰り返す」と付されたブロックｂ２が１個、「１０歩動かす」と付されたブロックｂ３が１個、互いに連結されて配置されている。このような場合、この入力プログラムについて表現されたベクトルは、（Ｖｂ１，Ｖｂ２，Ｖｂ３）＝（１，１，１）となる。
【００３２】
一方、複数の正解プログラムの一例として、次に示す２通り（サンプル１及びサンプル２）が予め記憶手段２００に記憶されているとする。
【００３３】
（サンプル１）
サンプル１の正解プログラムは、「ランボタンがクリックされたら」と付されたブロックｂ１が１個、「１０回繰り返す」と付されたブロックｂ２が１個、「１０歩動かす」と付されたブロックｂ３が１個、互いに連結されて配置されている正解プログラムである。サンプル１の正解プログラムにおいては、１個のブロックｂ３による処理が１０回実行されることによって、１００歩動かす実行結果を出力する。サンプル１は、上述した入力プログラムと同一の正解プログラムである。サンプル１のベクトル表現は、入力プログラムと同一であり、（Ｖｂ１，Ｖｂ２，Ｖｂ３）＝（１，１，１）となる。
【００３４】
（サンプル２）
サンプル２の正解プログラムは、「ランボタンがクリックされたら」と付されたブロックｂ１が１個、「１０歩動かす」と付されたブロックｂ３が１０個、互いに連結されて配置されている正解プログラムである。サンプル２の正解プログラムにおいては、１０個のブロックｂ３の各々による処理が１回実行されることによって、１００歩動かす実行結果を出力する。サンプル２のベクトル表現は、（Ｖｂ１，Ｖｂ２，Ｖｂ３）＝（１，０，１０）となる。
【００３５】
このようにして入力プログラム及び正解プログラムの各々についてベクトルとして表現する。そして、入力プログラムのベクトル及び一の正解プログラムのベクトルの余弦類似度を算出し、それを当該入力プログラム及び当該一の正解プログラムの類似度とする。
【００３６】
この例では、入力プログラム及びサンプル１の正解プログラムの余弦類似度は１である。また、入力プログラム及びサンプル２の正解プログラムの余弦類類似度は０．６３である。
【００３７】
次いで、Ｓ１０５において、判定手段２０８は、複数の正解プログラムの各々に対する
入力プログラムとの類似度に基づいて、入力プログラムの成績を判定する。
【００３８】
この例では、２つの正解プログラムの内、入力プログラムに対する類似度が最も大きいものはサンプル１の正解プログラムである。よって、サンプル１の正解プログラムに対する入力プログラムの類似度「１」を、この課題における最大の類似度として算出する。
【００３９】
ここで、正誤判定における閾値として、例えば＋０．８を用いるならば、この例では最大の類似度が１であるため、成績は正解と判定される。
【００４０】
尚、仮に学習者が、入力プログラムとして上記サンプル２の正解プログラムと同一のプログラムを入力した場合、２つの正解プログラムの内、入力プログラムに対する類似度が最も大きいものはサンプル２の正解プログラムである。よって、サンプル２の正解プログラムに対する入力プログラムの類似度「１」を、この課題における最大の類似度として算出する。この場合にも、最大の類似度が、正誤判定における閾値である＋０．８よりも大きいため、正解と判定される。
【００４１】
また、２つのプログラムの類似度の算出において、各々のプログラムにおいて使用されるブロックの数が多いほど、算出される類似度は高くなる傾向がある。つまり、ある閾値が設定された場合において、複数の正解プログラムの各々において使用されるブロックの数が多いほど、正解と判定される傾向が高くなる。この場合に、正解とみなすべきではない入力プログラムであっても、正解と判定される場合がある。よって、複数の正解プログラムの各々において使用されるブロックの数が多いほど、閾値を高く設定してもよい。
【００４２】
また、１つの閾値を基準にとして成績を正解又は不正解の２段階で判定するのではなく、複数の閾値を基準に複数段階で成績を判定してもよい。または、最大の類似度自体の数値を、成績と判定してもよい。
【００４３】
＝複数のキャラクタが存在する例＝
課題の内容によっては、複数の対象物の動作を規定する必要がある。例えば、複数のキャラクタの動作や背景画像の動作を規定する場合である。このような場合、ビジュアルプログラミング言語においては、複数の対象物の各々に対して、その動作を規定するためのブロックが選択されて配列される。
【００４４】
このような場合、複数の正解プログラムの各々は、複数の対象物の動作を規定する。そして、類似度算出手段２０６は、複数の対象物の各々に対して複数種類のブロックの各々が使用される個数を、入力プログラム及び正解プログラムの双方について算出して両者を比較することによって、類似度を算出する。
【００４５】
このような場合、プログラムに対応するベクトルは、Ｖｏｂのように、２つの添字を有する。ここで、添字ｏは対象物に対応するものとし、添字ｂは当該対象物の動作を規定するために使用されるブロックｂの種類とする。そして、成分Ｖｏｂは、当該対象物ｏの動作を規定するために使用されるブロックｂの個数とする。
【００４６】
＝一のキャラクタに対して複数動作を規定する例＝
課題の内容によっては、一の対象物を規定するための複数のブロックが、複数の塊を形成するように配列される場合がある。図５に示す例では、対象物Ａの動作を規定するブロックは、２個の塊を形成している（対象物Ｏに対する塊Ｃ１及び塊Ｃ２）。これらの２個の塊は、互いに連結されずに離間して配置されている。
【００４７】
このような場合、プログラムに対応するベクトルは、Ｖｏｃｂのように、３つの添字を
有する。ここで、添字ｏは対象物に対応するものとし、添字ｃは当該対象物ｏの動作を規定するブロックの塊に対応するものとし、添字ｂは当該対象物ｏの動作を規定するために、ブロックの塊ｃにおいて使用されるブロックｂの種類とする。そして、成分Ｖｏｃｂは、当該対象物ｏの動作を規定するために、ブロックの塊ｂにおいて使用されるブロックｂの個数とする。
【００４８】
更にこのような場合、一の対象物において、正解プログラムにおける複数のブロックの塊と、入力プログラムにおける複数のブロックの塊との対応関係を特定することが、プログラムをベクトルＶｏｃｂとして表現するために必要である。その方法について、図２Ｂを用いて説明する。図２Ｂは、図２Ａにおいて、入力プログラムと、一の正解プログラムとの類似度を算出するステップＳ１０４を詳細に説明するフローチャートである。
【００４９】
この例では、複数の正解プログラムの内、次のサンプル３の正解プログラムを含むとする。サンプル３の正解プログラムは、対象物Ｏに対して塊Ｃ３１及び塊Ｃ３２の２つの塊を形成しているとする。以下の説明においては、図２ＡのＳ１０４において、入力プログラムと、サンプル３の正解プログラムについての処理の例を用いて説明する。
【００５０】
図２Ｂにおいて、Ｓ１０４−４では、入力プログラムにおける複数のブロックの塊の内１つと、正解プログラムにおける複数のブロックの塊の内１つとの類似度を算出する。この処理を、入力プログラムにおける複数のブロックの塊と、正解プログラムにおける複数のブロックの塊の全ての組み合わせについて類似度を算出する（Ｓ１０４−２及びＳ１０４−３）。
【００５１】
この例では、入力プログラムにおける２つの塊Ｃ１及び塊Ｃ２と、サンプル３の正解プログラムにおける２つのブロックの塊Ｃ３１及びＣ３２の全ての組み合わせについて類似度を算出する（Ｓ１０４−２及びＳ１０４−３）。
【００５２】
そして、正解プログラムにおける複数のブロックの塊の各々に対して、入力プログラムに含まれる複数のブロックの塊の内で最も類似度が高いブロックの塊を特定し、当該ブロックの塊を対応付ける（Ｓ１０４−５）。
【００５３】
この例では、サンプル３の正解プログラムにおける２つの塊Ｃ３１及び塊Ｃ３２の各々に対して、入力プログラムに含まれる２つの塊Ｃ１及び塊Ｃ２の内で最も類似度が高いブロックの塊を特定し、当該ブロックの塊を対応付ける（Ｓ１０４−５）。この処理を、全ての対象物について行う（Ｓ１０４−１）。
【００５４】
以上の手順によって、入力プログラムをベクトルＶｏｃｂとして表現することができ、正解プログラムに対し、学習者が入力した入力プログラムとの類似度を算出する。
【００５５】
尚、上で説明した例では、プログラムをベクトルとして表現する際のベクトルの成分は、ブロックの個数としていたがこれに限られるものではない。例えば、上記の方法で求めたベクトルに対し、対象物ごとに重みを付けてもよい。対象物ごとに重みを付ける場合、課題において重要度の高い対象物に対して比較的大きな重みを付け、重要度の低い対象物に対して比較的小さな重みを付けてもよい。重要度が高い対象物とは、課題において使用方法を学習すべきブロックを含む対象物である。また、使用されるブロックの数が対象物ごとに大きく偏っている場合に、上記の方法で求めたベクトルに対し、対象物ごとに規格化してもよい。
【００５６】
また、上で説明した例では、使用されるブロックの数に応じて類似度を算出する態様を示した。しかし、例えばＳｃｒａｔｃｈにおいて、ブロックに数値や文字列を直接入力す
ることによって所定の動作を規定するブロックを作成することができる。このような場合、ブロックに入力する数値や文字列を区別して、その入力した内容を類似度の算出に反映させてもよい。
【００５７】
以上から明らかなように、本実施形態に係るプログラミング学習プログラムは、コンピュータを、各々が同一の実行結果を出力し、互いに異なる複数の正解プログラムを記憶する記憶手段２００と、入力プログラムの入力を受け付ける受付手段２０４と、複数の正解プログラムの各々に対し、入力プログラムとの類似度を算出する類似度算出手段２０６と、複数の正解プログラムの各々に対する入力プログラムとの類似度に基づいて、入力プログラムの成績を判定する判定手段２０８として機能させる。
【００５８】
一の課題において作成されるプログラムを評価する際、同一の実行結果を出力する複数通りの入力プログラムに対し、それらの入力プログラムの記述や構成の違いによらずに成績を判定することができるため、学習者にとって自由度の高いプログラミング学習プログラムを提供することができる。
【００５９】
更に、正解プログラムは、予め用意された複数種類のブロックから使用するブロックを選択して配列し、使用するブロックに対応する命令を配列に基づいて順次実行するビジュアルプログラミング言語によって記述されており、類似度算出手段２０６は、複数種類のブロックの各々が使用される個数を、入力プログラム及び正解プログラムの双方について算出して両者を比較することによって、類似度を算出する。
【００６０】
つまり、複数種類のブロックの各々が使用される個数を用いて類似度を算出することによって、２つのプログラム間の類似度の算出が容易になる。
【００６１】
更に、複数の正解プログラムの各々は、複数の対象物の動作を規定し、類似度算出手段２０６は、複数の対象物の各々に対して複数種類のブロックの各々が使用される個数を、入力プログラム及び正解プログラムの双方について算出して両者を比較することによって、類似度を算出する。
【００６２】
つまり、複数の対象物ごとの動作を区別して類似度を算出するため、２つのプログラム間の類似度の判定が更に精密になる。
【００６３】
更に、判定手段２０８は、複数の正解プログラムの各々に対する入力プログラムとの類似度の内で最も高い類似度を、予め設定された閾値と比較することによって、入力プログラムの成績を判定する。
【００６４】
つまり、予め用意された複数の正解プログラムの内、入力プログラムに対して類似度が最も大きいものを、成績を判定するために用いる。これによって、同一の実行結果を出力する複数通りの入力プログラムに対し、それらの入力プログラムの記述や構成が異なっていても、成績を過小評価されることを防止することができるため、入力プログラムの成績の判定が更に精密になる。
【００６５】
＜第２実施形態＞
図６は、本実施形態に係る学習者端末１００の構成を説明するブロック図である。本実施形態に係る学習者端末１００の構成は、第１実施形態と同様であるが、記憶部１０４に記憶されるプログラミング学習プログラムが異なっている。本実施形態においては、ＣＰＵがメモリに記憶されるプログラミング学習プログラムを実行することにより、制御部１０２を、記憶手段３００と、回答判定手段３０２と、表示制御手段３０４として機能させる。
【００６６】
記憶手段３００は、正解プログラム、質問データ、及びその解答データを記憶する。正解プログラムは、プログラミング学習において学習者が再現することを目標とするプログラムである。質問データは、プログラミング学習を行う学習者に対して提示する質問に相当するデータである。質問は、それに対する解答が正解プログラムを再現するための示唆となる質問である。質問は、学習の過程で表示画面に表示される（詳細は後述する）。質問は、問題だけでもよいし、解答を含む複数の選択枝から選択させるものであってもよい。解答データは、質問に対する解答を示すデータである。解答データは、対応する質問データに紐づけられて記憶されている。解答は、質問に対する学習者の回答が正解しているかどうかを判断するために用いられる。
【００６７】
回答判定手段３０２は、質問に対する回答の入力を受け付け、回答の正誤を判定する。このとき、回答判定手段３０２は、表示制御手段３０４によって表示された質問に対して学習者が入力した回答が、質問に紐づけられて記憶された解答データが示す解答と同一である場合に、正解と判定し、それ以外の場合に不正解と判定する。
【００６８】
表示制御手段３０４は、回答判定手段３０２が正解と判定した場合に、正解プログラムを再現する入力プログラムを作成するための作成画面３０８を表示させる。
【００６９】
（プログラミング学習プログラムが行う処理）
本実施形態に係るプログラミング学習プログラムが行う処理について、図７〜図１０を参照しながら説明する。図７は、プログラミング学習プログラムが行う処理を説明するフローチャートである。図８Ａ〜図８Ｃは、本実施形態に係る正解プログラムの実行結果を説明する図である。図９は、実施形態に係る表示制御手段３０４が表示する質問画面を説明する図である。図１０は、実施形態に係る入力プログラムを作成するための作成画面３０８を説明する図である。
【００７０】
先ず、学習者は、学習者端末１００にログインし、本実施形態に係るプログラミング学習プログラムを実行させる。プログラミング学習プログラムが実行されると、Ｓ２０１において、表示制御手段３０４は、正解プログラムの実行結果を学習者端末１００の表示手段に表示させる。この例では、図８Ａ〜図８Ｃに示すように、「ランボタンがクリックされたときに、キャラクタＢが一回転し、その後キャラクタＣが『こんにちは！』と言う。」といった動画を表示させる。この実行結果において、学習者は、マウス等を介してランボタンを選択し（図８Ａ）、クリックする。ランボタンがクリックされると、キャラクタＢが回転する（図８Ｂ）。そして、キャラクタＢが一回転すると、キャラクタＣの上側に「こんにちは！」と付された吹き出しが表示され、課題に対して設けられているプログラムの実行が終了する。
【００７１】
図８Ａ等に示したように、プログラムに複数のキャラクタが含まれている場合、それぞれの動作を規定する必要がある。このような場合、質問データ及び解答データは、たとえば、複数の対象物それぞれの動きについて設けられてもよいし、複数の対象物が関連する動きについて設けられてもよい。
【００７２】
Ｓ２０１のプログラムの実行が終了すると、表示制御手段３０４は、当該実行結果を確認した学習者を次の段階へ誘導させるためのボタンを表示する。学習者が当該ボタンをクリックすると、Ｓ２０２において、表示制御手段３０４は、学習者端末１００の表示手段に、図９に示す質問画面３０６を表示させ、本実施形態に係るプログラミング学習における学習者に対する質問を表示させる。
【００７３】
図９に示す質問画面３０６において、左側の領域には、本実施形態に係る正解プログラ
ムに登場する対象物（キャラクタＢ及びキャラクタＣ）が配置されて表示されている。更に、これらの２つの対象物を繋ぐ線が表示されている。この線は、２つの対象物の動作が互いに関連し合うことを意味している。その下の領域には、キャラクタを用いたガイドが表示されている。このガイドは、本実施形態に係るプログラミング学習において、学習を進める上での示唆となるコメントを表示する。質問画面３０６の右側の領域には、質問及びそれに対する入力箇所が表示されている。
【００７４】
前述のように、ここでの質問とは、それに対する解答が正解プログラムを再現するための示唆となる質問であって、質問に対する解答データは記憶手段３００に記憶されている。例えば、質問画面３０６において、学習者がマウス等でキャラクタＣを選択すると、表示制御手段３０４は、キャラクタＣについての質問データを記憶手段３００から読み出し、質問画面３０６の右側の領域に表示させる。ここでのキャラクタＣについての質問として、例えば「Ｑ．キャラクタＡが一回転したときに」といった文字列である。学習者は、これに対する回答を、入力箇所に入力する。このとき、例えば、「１．一回転する、２．『こんにちは！』と言う、３．消える、４．右に移動する」といった選択肢を提示して学習者に選択させる。
【００７５】
尚、質問画面３０６において、学習者がキャラクタＢを選択した場合には、表示制御手段３０４は、キャラクタＢに関する質問を表示する。また、質問画面３０６において、学習者がキャラクタＢ及びキャラクタＣを繋ぐ線を選択した場合には、表示制御手段３０４は、それらの関連性についての質問を表示する。
【００７６】
次いで、Ｓ２０３において、回答判定手段３０２は、質問に対する回答の入力を受け付ける。本実施形態においては、学習者は、Ｓ２０２において表示された質問に対し、複数の選択肢の内から一の選択肢を選んで回答する。
【００７７】
次いで、Ｓ２０４において、回答判定手段３０２は、回答の正誤を判定する。記憶手段３００には、「Ｑ．キャラクタＡが一回転したときに」といった質問に対して、「２．『こんにちは！』と言う」という解答が紐づけられて記憶されている。回答判定手段３０２は、学習者が選択した選択肢と、この質問に対する解答データを比較する。回答判定手段３０２は、これらが一致した場合に正解と判定し、それ以外の場合を不正解と判定する。
【００７８】
次いで、Ｓ２０５において、表示制御手段３０４は、回答判定手段３０２が正解と判定した場合に、正解プログラムを再現する入力プログラムを作成するための作成画面３０８を表示させる。また、回答判定手段３０２が不正解と判定した場合は、表示制御手段３０４は再度質問画面３０６を表示させ、学習者は、質問画面３０６を介して再度質問に対する回答の入力を行う。
【００７９】
図１０に示すように、本実施形態にかかる作成画面３０８には、プレビュー画面３１０、選択画面３１２、入力画面３１４、及びガイド画面３１６が表示されている。この状態で、第１実施形態と同様にして入力プログラムの作成を行う。学習者は、作成画面３０８において入力プログラムを作成する際、Ｓ２０２及びＳ２０３における質問及び回答を参照しながら（つまり、図９に示す画面に戻りながら）作成することができる。この際に例えば、図１０に示す選択画面３１２に表示された複数のブロックの内で、「『○○』と言う」と付されたブロックが存在すれば、学習者は容易にそれを選択し、入力画面３１４にコピーすることができる。図１０は、学習者が選択画面３１２に表示されたブロックから２つのブロックを選択し、それらを入力画面３１４にコピーした状態を示している。そして、学習者は、「『○○』と言う」と付されたブロックブロックの入力箇所である○○には、「こんにちは！」と入力すればよい。この際、Ｓ２０２及びＳ２０３における質問及び回答を参照すれば適切な言葉を入力することができる。
【００８０】
尚、質問データは、正解プログラムに登場する対象物やその動作の全てについて網羅するものであってもよいし、その一部についてであってもよい。対象物やその動作の一部についての質問を表示する場合、例えば、その課題における正解プログラムの中で、使用方法を学習すべきブロックに関して質問し、他の課題において使用方法を既に学習したブロックに関しての質問は省略してもよい。または、学習者がその使用を苦手とするブロックに関して質問してもよい。この場合、例えば、第１実施形態におけるプログラミング学習プログラムと連動させ、プログラミング学習において算出された学習者の成績に基づいて、表示する質問を選択することとしてもよい。具体的には、第１実施形態におけるプログラミング学習において、学習者がある種類のブロックの使用方法を誤ることによって特定の課題について不正解となることが一定回数以上続いた場合、本実施形態に係るプログラミング学習においてそのブロックに関する質問を表示すればよい。更にこのような場合、そのブロックに関する質問の回数や種類を増やしてもよい。例えば、通常表示される質問に加え、それよりも平易な質問を先に幾つか表示してもよい。これらの複数の質問は、並べて表示してもよいし、一問について回答して正解の場合に次の質問を表示することとしてもよい。更にこのような場合、図９に示されたガイドによって、質問に対する回答の示唆を表示するようにしてもよい。ここでの示唆とは、例えば、質問に対して回答するために、実行結果において注意すべき対象物やその動作についての言及である。
【００８１】
また、質問を表示する他の例として、学習者が所望する対象物の動作について質問を表示することもできる。この場合、例えば、学習者が、図９の画面の左の領域に配置された対象物の内、所望の対象物をマウスでクリックして選択すると、表示制御手段３０４は、その対象物に関する質問を表示させることとしてもよい。この場合、図９の画面において、学習者が選択した対象物を強調表示した状態で、その対象物に関する質問を表示させてもよい。また、対象物の動作に限らず、２つの対象物間の関連性に関する質問を表示させることもできる。この場合、学習者が、図９に示す対象物を繋ぐ線をマウスでクリックして選択すると、表示制御手段３０４は、その２つの対象物間の関連性に関する質問を表示させることとしてもよい。更にこの場合、図９の画面において、学習者が選択した２つの対象物を繋ぐ線を強調表示した状態で、その２つの対象物間の関連性に関する質問を表示させてもよい。
【００８２】
以上から明らかなように、本実施形態に係るプログラミング学習プログラムは、コンピュータを、正解プログラム、正解プログラムを再現する入力プログラムを作成するための示唆となる質問データ、及びその解答データを記憶する記憶手段３００と、質問に対する回答の入力を受け付け、回答の正誤を判定する回答判定手段３０２と、回答判定手段３０２が正解と判定した場合に、正解プログラムを再現する入力プログラムを作成するための作成画面３０８を表示させる表示制御手段３０４として機能させる。
【００８３】
これによって、予め用意されたプログラムを再現するプログラミング学習において、目的となるプログラムを再現すること支援することができる。
【００８４】
更に、正解プログラムは、複数の対象物の動作を規定し、質問及びその解答は、複数の対象物の内の一部の対象物ごとについて設けられている。
【００８５】
これによって、正解プログラムを再現するために重要な箇所に絞って示唆を与えることができるため、目的となるプログラムを再現することを更に支援することができる。
【００８６】
＜第３実施形態＞
図１１は本実施形態に係るプログラミング学習システム４００の構成を説明する図である。本実施形態に係るプログラミング学習システム４００は、学習管理サーバ５００と、
複数の学習者端末１００とを備えている。学習管理サーバ５００と、複数の学習者端末１００の各々とは、電気通信回線６００を介して通信可能に接続されている。電気通信回線６００は、例えば公衆電話回線網やインターネット回線等の伝送路である。
【００８７】
本実施形態において、上述したプログラミング学習プログラムは、学習者端末１００に代えて、当該学習者端末１００と通信可能な学習管理サーバに記憶され、学習管理サーバ５００が処理を実行する。
【００８８】
この場合、学習者端末１００は、表示手段に表示するための表示情報を学習管理サーバ５００の表示制御手段５０２から受信し、表示手段に表示する。そして、学習者端末１００は、学習者によって入力手段を介して入力された情報を学習管理サーバへ５００送信する。この態様によっても、学習者は、学習者端末１００を操作することでプログラミング学習を実行することができる。
【００８９】
＜第４実施形態＞
本実施形態のプログラミング学習プログラムについて説明する。本実施形態のプログラミング学習プログラムは、第１実施形態のプログラミング学習プログラムと比べると、類似度算出手段２０６が、類似度を算出する方法が異なっている。
【００９０】
入力プログラムと正解プログラムの配列が異なっていても、双方が同一又は類似の実行結果を出力する場合がある。このような場合に、当該配列が異なることに起因して、類似度が過小評価されるべきではない。
【００９１】
そこで、本実施形態においては、類似度算出手段２０６は、入力プログラムの配列及び正解プログラムの配列を比較し、類似度を算出する。具体的に、類似度算出手段２０６は、入力プログラムが、異なる種類のブロックの対であって、交換可能なブロックの対を含む場合に、当該交換可能なブロックの対を交換したプログラムを入力プログラムと同一とみなして、類似度を算出する。
【００９２】
異なる種類のブロックの対とは、互いに異なる命令を実行するブロックの対である。
【００９３】
交換可能なブロックの対とは、あるプログラムにおいて、それらの配置を交換した場合に、交換する前のプログラムに対して、実行結果大きく変えないブロックの対である。つまり、あるプログラム内に交換可能なブロックの対がある場合、当該交換可能なブロックの対の配置を交換して得られるプログラムは、交換する前のプログラムと同一又は類似の実行結果を出力する。
【００９４】
交換可能なブロックの対は、予め設定されている。記憶手段２００には、交換可能なブロックの対、又は、交換可能なブロックの対を特定するための条件が記憶されている。
【００９５】
本実施形態では、後述する規則に従って、交換可能なブロックの対を設定する。本実施形態における交換可能なブロックの対を設定するための規則は、詳細は後述するが、以下の３通りである。
【００９６】
・規則１
互いに異なるカテゴリに属するブロックの対が隣接して配列されている場合、当該ブロックの対は交換可能なブロックの対として設定する。ただし、規則１には例外が設けられる。
【００９７】
・規則２
対象物の動作の停止させるブロック（詳細は後述する）を含むブロックの対は、原則として交換可能なブロックの対として設定しない。規則２は、規則１の例外を含む。つまり、当該ブロックの対が、互いに異なるカテゴリに属していても、交換可能なブロックの対として設定しない。また、規則２にも例外が設けられる。
【００９８】
・規則３
動作を反復して実行させるブロック（詳細は後述する）の内部に配列されるブロックの内、互いに隣接するブロックの対は、原則として交換可能なブロックの対として設定する。規則３は、規則２の例外の一部を含む。つまり、対象物の動作の停止させるブロックを含むブロックの対であっても、動作を反復して実行させるブロックの内部に配列されるブロックの内、互いに隣接するブロックの対であれば、原則として交換可能なブロックの対として設定する。また、規則３よりも規則２が優先される場合がある。
【００９９】
以下では、具体例（第１の例〜第３の例）を挙げて本実施形態の類似度を算出する方法を説明する。また、第１の例において上記規則１についても詳細に説明し、第２の例において上記規則２についても詳細に説明し、第３の例において上記規則３についても詳細に説明する。
【０１００】
［第１の例］
・正解プログラム
図１２Ａは、図２ＡのＳ１０１での実行結果に対する一の正解プログラムＡ１である。この例の正解プログラムＡ１は、ブロックｂ１１、ブロックｂ１２、ブロックｂ１３を含み、ブロックｂ１１、ブロックｂ１２、ブロックｂ１３の順に連結されて配列されている。ブロックｂ１１には、ランボタンを示す図形と、「をクリックしたとき」という文字列が付されている。ブロックｂ１２には、「１０歩動かす」と付されている。尚、ブロックｂ１２は、数値の引数を入力可能なブロックである。このブロックにおいて、「１０」の部分が数値の引数である。ブロックｂ１３には、「動けと２秒言う」と付されている。ブロックｂ１３は、文字列及び数値の引数を入力可能なブロックである。このブロックにおいて、「動け」の部分が文字列の引数であって、「２」の部分が数値の引数である。
【０１０１】
この例のように、使用するブロックが引数を入力可能なブロックである場合がある。類似度算出手段２０６は、そのような場合に、入力プログラムの配列及び正解プログラムの配列を比較することに加え、入力プログラムに含まれる引数及び正解プログラムに含まれる引数を更に比較し、類似度を算出する。
【０１０２】
・入力プログラム
図１２Ｂは、入力画面２１６上で学習者が作成した入力プログラムＩ１の例である。この図において、図１２Ａと同じ種類のブロックには同じ符号が付されている。この例の入力プログラムＩ１は、ブロックｂ１１、ブロックｂ１３、ブロックｂ１２を含み、ブロックｂ１１、ブロックｂ１３、ブロックｂ１２の順に連結されて配列されている。
【０１０３】
・規則１の詳細
以下、上述した交換可能なブロックの対を設定するための規則１について、第１の例を用いて詳細に説明する。入力プログラムＩ１と正解プログラムＡ１を比べると、ブロックｂ１２及びブロックｂ１３の配置が異なる。正解プログラムＡ１と入力プログラムＩ１のブロックの配列はこの点で異なるが、双方の実行結果は同一である。これは、本実施形態で用いるビジュアルプログラミング言語が、以下のように設定されていることによる。
【０１０４】
本実施形態のプログラミング学習プログラムが用いるビジュアルプログラミング言語では、入力プログラムＩ１を実行する際に、ランボタンがクリックされた後、ブロックｂ１３に対応する命令が実行される。一方、このブロックｂ１３に対応する命令の実行の終了を待たずに、ブロックｂ１２に対応する命令が実行される。つまり、ランボタンがクリックされた後に、ブロックｂ１２及びブロックｂ１３の処理が同時に実行される。正解プログラムＡ１においても、ブロックｂ１２及びブロックｂ１３の処理が同時に実行される。つまり、正解プログラムＡ１と入力プログラムＩ１の実行結果は同一になる。
【０１０５】
次に、本実施形態のプログラミング学習プログラムが用いるビジュアルプログラミング言語の設定について、詳細に説明する。入力プログラムを作成する際に、選択画面２１４から選択することができるブロックは、幾つかのカテゴリに分類される。この例では、８個のカテゴリに分類される。この内の、特にカテゴリ２１４ａ〜２１４ｅを例に挙げて説明する。
【０１０６】
カテゴリ２１４ａは、学習者が、例えばキーボードやマウス等を介して、外部入力をした場合の対象物の動作を司るブロックが属するカテゴリである。
【０１０７】
カテゴリ２１４ｂは、対象物の動作を司るブロックが属するカテゴリである。カテゴリ２１４ｂには、例えば、対象物を平行移動させたり、回転させたりするためのブロックが属する。
【０１０８】
カテゴリ２１４ｃは、視覚的効果を司るブロックが属するカテゴリである。カテゴリ２１４ｃには、例えば、対象物の周辺に、文字列が付された吹き出しを表示させたり、背景画像を変更させたりするためのブロックが属する。
【０１０９】
カテゴリ２１４ｄは、聴覚的効果を司るブロックが属するカテゴリである。カテゴリ２１４ｄには、例えば、音楽等の音声を出力させたり、音量を変化させたりするためのブロックが属する。
【０１１０】
カテゴリ２１４ｅは、他のブロックに対応する命令の制御を司るブロックが属するカテゴリである。カテゴリ２１４ｅには、例えば、あるブロックに対応する命令を反復して実行するよう制御したり、条件分岐をしたりするためのブロックが属する。
【０１１１】
第１の例において、ブロックｂ１１はカテゴリ２１４ａに属し、ブロックｂ１２はカテゴリ２１４ｂに属し、ブロックｂ１３はカテゴリ２１４ｃに属する。本実施形態のプログラミング学習プログラムが用いるビジュアルプログラミング言語では、このように、互いに異なるカテゴリに属し、隣接して配置されたブロックの対を含む場合、当該ブロックの対に対応する命令が、原則として同時に実行される。つまり、互いに異なるカテゴリに属するブロックの対が隣接して配列されている場合、当該ブロックの対を交換しても、交換の前後でプログラムの出力結果は変わらない。
【０１１２】
以上の理由から、互いに異なるカテゴリに属するブロックの対が隣接して配列されている場合、当該ブロックの対は交換可能なブロックの対として設定することが妥当である。
【０１１３】
この例では、入力プログラムＩ１に対し、ブロックｂ１２及びブロックｂ１３を交換したプログラムを、入力プログラムＩ１と同一とみなす。つまり、ブロックｂ１１、ブロックｂ１２、ブロックｂ１３の順に連結されたプログラムを、入力プログラムＩ１と同一とみなす。
【０１１４】
・類似度の算出
以上を踏まえ、類似度を算出する方法について詳細に説明する。類似度算出手段２０６は、入力プログラムＩ１及び正解プログラムＡ１を、隣接行列として表現する。以下、入力プログラムＩ１を隣接行列として表現する方法について詳細に説明する。
【０１１５】
入力プログラムＩ１を隣接行列として表現する方法の説明の便宜上、入力プログラムＩ１をグラフとして表現する。図１２Ｃは、入力プログラムＩ１をグラフＧ１として表現した図である。グラフＧ１は、複数の頂点と、複数の辺から構成されている。複数の頂点の各々には、番号が付されている。複数の頂点の各々に付された番号は、グラフＧ１の始点又は終点、もしくは入力プログラムＩ１におけるブロック又はブロックに入力された引数を識別するための番号である。図１２Ｄは、第１の例において、複数の頂点の各々に付された番号と、グラフＧ１の始点又は終点、もしくは入力プログラムＩ１におけるブロック又はブロックに入力された引数等との対応関係を示している。グラフＧ１は、有向グラフであって、複数の辺の各々は矢印である。以下、グラフを作成する手順について説明する。
【０１１６】
１．頂点の設定
先ず、グラフの始点及び終点を示す頂点を設定する。更に、入力プログラムのブロックを示す頂点及びブロックに入力された引数を示す頂点を設定する。複数の頂点の各々には、グラフＧ１の始点又は終点、もしくは入力プログラムＩ１におけるブロック又はブロックに入力された引数を識別するための番号を付す。頂点に付される番号は、グラフＧ１の始点又は終点、もしくは入力プログラムＩ１におけるブロック又はブロックに入力された引数を識別することができればよく、番号を付す方法に特に制限はない。
【０１１７】
この例では、頂点の数は８である。８個の頂点の各々には、１〜８のいずれかが付されている。この例では、グラフの始点及び終点を示す頂点として、それぞれ頂点１及び頂点８が設定されている。更に、ブロックｂ１１、ブロックｂ１２及びブロックｂ１３を示す頂点として、それぞれ頂点２、頂点５及び頂点３が設定されている。また、ブロックｂ１２の引数を示す頂点として頂点４が、ブロックｂ１３の引数を示す頂点として頂点６及び頂点７が設定されている。
【０１１８】
尚、図１２Ｂの入力プログラムＩ１では、ブロックｂ１３の文字列の引数として「動け！」と付されているが、図１２Ｄでは「（文字列）」とのみ表示されている。これは、本実施形態では文字列の引数は類似度評価に考慮しないことに起因している。勿論、この例に限らず、文字列の引数を類似度評価に考慮してもよい。
【０１１９】
２．頂点の連結１
グラフの始点を示す頂点及び最初に実行されるブロックを示す頂点を矢印で連結する。このとき、矢印は、グラフの始点を示す頂点を始点とする。
【０１２０】
この例では、最初に実行されるブロックは、ブロックｂ１１である。グラフの始点を示す頂点１及びブロックｂ１１を示す頂点２が、頂点１を始点とする矢印で連結されている。
【０１２１】
３．頂点の連結２
ブロックに引数が入力されている場合は、当該ブロックを示す頂点及び当該ブロックに入力された引数を示す頂点を、矢印で連結する。このとき、矢印は、ブロックを示す頂点を始点とし、当該ブロックに入力された引数を示す頂点を終点とする。また、引数が複数ある場合には、当該ブロックに入力された引数を示す頂点は、他の引数を示す頂点を介して、当該ブロックを示す頂点と連結してもよい。
【０１２２】
この例では、頂点３及び頂点４が、頂点３を始点とする矢印で連結されている。更に、頂点５及び頂点６が、頂点５を始点とする矢印で連結されている。また、頂点６及び頂点７が、頂点６を始点とする矢印で連結されている。
【０１２３】
４．頂点の連結３
入力プログラムにおいて隣接する２つのブロックを示す２つの頂点を、矢印で連結する。このとき、矢印は、全てのブロックの内で最初に実行されるブロックに近く配置されている方のブロックを示す頂点を始点とする。
【０１２４】
この例では、頂点２及び頂点３が、頂点２を始点とする矢印で連結されている。更に、頂点３及び頂点５が、頂点３を始点とする矢印を含む双方向の矢印で連結されている。
【０１２５】
５．頂点の連結４
最初に実行されるブロックから最も離れて配置されているブロックを示す頂点及びグラフの終点を示す頂点を、矢印で連結する。このとき、矢印は、グラフの終点を示す頂点を終点とする。
【０１２６】
この例では、頂点５及び頂点８が、頂点８を終点とする矢印で連結されている。
【０１２７】
６．頂点の連結５
上記と同様の手続きで、入力プログラムと同一であるとみなされたプログラムの配列に基づいて、頂点間を連結する矢印を追加する。
【０１２８】
この例では、頂点２及び頂点５が、頂点２を終点とする矢印で連結されている。また、頂点５及び頂点３が、頂点５を始点とする矢印を含んで連結されている。更に、頂点３及び頂点８が、頂点８を終点とする矢印で連結されている。
【０１２９】
以上が、入力プログラムからグラフを作成するための手順である。尚、仮に入力プログラムＩ１と同一とみなされたプログラムから、上記の手順によってグラフを作成した場合、図１２Ｄに示したグラフＧ１と同一のグラフが得られる。つまり、このようにして作成されたグラフは、入力プログラムと、入力プログラムと同一とみなされたプログラムの双方を区別しないものとなっている。これは、上記手順６（頂点の連結５）によって、入力プログラムと同一とみなされたプログラムの配列がグラフに反映されたものとなったことに起因している。以上の手順１〜手順６によって作成したグラフを、以下では「可換性が考慮されたグラフ」と呼ぶことがある。
【０１３０】
一方、上記の手順６を含めず、手順１〜手順５のみによって作成したグラフ（図示せず）を、以下では「可換性が考慮されないグラフ」と呼ぶことがある。可換性が考慮されないグラフは、入力プログラムの配列のみが反映され、入力プログラムと同一とみなされたプログラムの配列は反映されない。従って、可換性が考慮されないグラフでは、入力プログラムと、入力プログラムと同一とみなされたプログラムの双方は区別される。
【０１３１】
次いで、類似度算出手段２０６は、以上の手順で作成した、可換性が考慮されたグラフを、隣接行列として表現する。図１２Ｅは、グラフＧ１を隣接行列として表現した図である。
【０１３２】
隣接行列の行及び列は、グラフの頂点に付された番号に対応する。隣接行列は、次のように作成される。グラフにおいて、頂点ｎを始点とし、頂点ｍを終点とする矢印が存在する場合は、隣接行列において、ｎ行ｍ列の成分を１とする。一方、頂点ｎを始点とし、頂点ｍを終点とする矢印が存在しない場合は、隣接行列において、ｎ行ｍ列の成分を０とする。第１の例では、ｎ及びｍは１以上８以下の整数である。
【０１３３】
入力プログラムと比較すべき正解プログラムについても、同様に隣接行列を導出する。または、正解プログラムの隣接行列は既に記憶手段２００に記憶されており、類似度を算出する際に当該隣接行列を読み出してもよい。
【０１３４】
次いで、類似度算出手段２０６は、入力プログラムの隣接行列及び一の正解プログラムの隣接行列の余弦類似度を算出し、それを当該入力プログラム及び当該一の正解プログラムの類似度とする。この例では、入力プログラムＩ１及び正解プログラムＡ１の余弦類似度は１．０である。
【０１３５】
尚、グラフの作成において上記手順６を含めずに作成されたグラフ（可換性が考慮されないグラフ）を用いて類似度を算出すると、入力プログラムＩ１及び正解プログラムＡ１の余弦類似度は０．６である。
【０１３６】
つまり、可換性が考慮されたグラフを用いて類似度を算出することによって、入力プログラムと一の正解プログラムの双方のプログラムの配列が異なることに起因して、類似度が過小評価されることがない。
【０１３７】
［第２の例］
・正解プログラム
図１３Ａは、図２ＡのＳ１０１での実行結果に対する一の正解プログラムＡ２である。この例の正解プログラムＡ２は、ブロックｂ２１、ブロックｂ２２、ブロックｂ２３、ブロックｂ２４を含み、ブロックｂ２１、ブロックｂ２２、ブロックｂ２３、ブロックｂ２４の順に連結されて配列されている。ブロックｂ２１には、「ランボタンがクリックされたら」と付されている。ブロックｂ２２には、「１０歩動くよ！と２秒言う」と付されている。ブロックｂ２３には、「１０歩動かす」と付されている。ブロックｂ２４には、「２秒まつ」と付されている。
【０１３８】
・入力プログラム
図１３Ｂは、学習者が作成した入力プログラムＩ２の例である。この図において、図１３Ａと同じ種類のブロックには同じ符号が付されている。この例の入力プログラムＩ２は、ブロックｂ２１、ブロックｂ２２、ブロックｂ２３、ブロックｂ２４を含み、ブロックｂ２１、ブロックｂ２２、ブロックｂ２４、ブロックｂ２３の順に連結されて配列されている。入力プログラムＩ２と正解プログラムＡ２を比べると、ブロックｂ２３及びブロックｂ２４の配置のみが異なる。
【０１３９】
・規則２の詳細
以下、上述した交換可能なブロックの対を設定するための規則２について、第２の例を用いて詳細に説明する。先ず、入力プログラムＩ２におけるブロックｂ２３及びブロックｂ２４に着目する。本実施形態において、ブロックｂ２３は、カテゴリ２１４ｂに属する。ブロックｂ２４は、カテゴリ２１４ｅに属する。つまり、ブロックｂ２３及びブロックｂ２４は、互いに異なるカテゴリに属するブロックの対である。この場合、第１の例で説明した原則によれば、ブロックｂ２３及びブロックｂ２４は交換可能なブロックの対として設定される。
【０１４０】
しかし、このブロックｂ２４については例外とする。つまり、本実施形態では、ブロックｂ２４及び他のブロックの対については、交換可能なブロックの対として設定しない。
【０１４１】
前述のように、本実施形態のビジュアルプログラミング言語では、互いに異なるカテゴリに属するブロックの対が隣接して配列されている場合、当該ブロックの対に対応する命令は、原則として同時に実行される。
【０１４２】
しかし、幾つかの種類のブロックについての例外が設定されており、ブロックｂ２４はこの例外に属する。引数として２が入力されたブロックｂ２４に対応する命令は、対象物の動作を２秒間停止させる命令である。対象物の動作を停止させる命令と、対象物に何らかの動作をさせる命令は、同時に両立し得ないため、このような例外が設定されている。従って、ブロックｂ２４が、ブロックｂ２４と異なるカテゴリに属するブロックと隣接して配列されている場合、双方のブロックの対に対応する命令は、同時に実行されるわけではない。従って、正解プログラムＡ２と入力プログラムＩ２の実行結果は同一とは言えない。
【０１４３】
・類似度の算出
第１の例で説明した手順で入力プログラムＩ２及び正解プログラムＡ２の類似度を算出する。この例では、図示はしないが、頂点の数は１０である。この例においても、グラフの始点及び終点を示す頂点が設定される。更に、ブロックｂ２１、ブロックｂ２２、ブロックｂ２３及びブロックｂ２４を示す頂点が設定される。更に、ブロックｂ２２の文字列の引数「１０歩動くよ！」を示す頂点、ブロックｂ２２の数値の引数「２」を示す頂点、ブロックｂ２３の数値の引数「１０」を示す頂点及びブロックｂ２４の数値の引数「２」を示す頂点が設定されている。次いで、上記の手順によって隣接行列として表現し、正解プログラムＡ２についても、隣接行列として表現する。そして、入力プログラムＩ２及び正解プログラムＡ２の余弦類似度を算出すると、０．６となる。
【０１４４】
［第３の例］
・正解プログラム
図１４Ａは、図２ＡのＳ１０１での実行結果に対する一の正解プログラムＡ３である。この例の正解プログラムＡ３は、先ず、ブロックｂ３１、ブロックｂ３２を含み、ブロックｂ３１、ブロックｂ３２の順に連結されて配列されている。そして、ブロックｂ３３、ブロックｂ３４を含み、ブロックｂ３３、ブロックｂ３４の順に連結され、ブロックｂ３２の内部に配列されている。
【０１４５】
正解プログラムＡ３において、ブロックｂ３２には、「ずっと」と付されている。ブロックｂ３２は、その内部に配列された１つ以上のブロックに対応する命令を反復して実行させるブロックである。つまり、この例では、ブロックｂ３３及びブロックｂ３４に対応する命令が、交互に反復して実行される。
・入力プログラム
【０１４６】
図１４Ｂは、入力画面２１６上で学習者が作成した入力プログラムＩ３の例である。この図において、図１４Ａと同じ種類のブロックには同じ符号が付されている。入力プログラムＩ３と正解プログラムＡ３を比べると、ブロックｂ３３、ブロックｂ３４の配置のみが異なる。
【０１４７】
・規則３の詳細
以下、上述した交換可能なブロックの対を設定するための規則３について、第３の例を用いて詳細に説明する。本実施形態では、動作を反復して実行させるブロックの内部に配列されるブロックの内、互いに隣接するブロックの対は、交換可能なブロックの対として設定する。つまり、ブロックｂ３３及びブロックｂ３４は交換可能なブロックの対として設定される。
【０１４８】
これは、以下の理由から妥当である。正解プログラムＡ３及び入力プログラムＩ３の双方において、ブロックｂ３３及びブロックｂ３４に対応する命令が交互に反復して実行される。この反復の最初に実行される命令は、正解プログラムＡ３においてはブロックｂ３３に対応する命令であるが、入力プログラムＩ３においてはブロックｂ３４に対応する命令である。つまり、正解プログラムＡ３及び入力プログラムＩ３において、反復の最初に実行される命令が異なるのみである。このようなプログラム間の差異は、本質的な差異とは言えない。更に、双方の実行結果の差異は微差であるため、双方のプログラムを同一とみなしてもよい。
【０１４９】
尚、第２の例において、「２秒まつ」と付されたブロックｂ２４及び他のブロックの対については、交換可能なブロックの対として設定しないとした（規則２）。しかし、ブロックｂ２４であっても、ブロックに対応する命令を反復して実行させるブロックの内部に１つ配列されている場合は、規則２の例外とする。つまり、規則３においては、ブロックｂ２４のように、対象物の動作の停止を伴うブロックであっても、命令を反復して実行させるブロックの内部に１つ配列されている場合は、他のブロックと交換可能なブロックの対として設定する。一方、対象物の動作の停止を伴うブロックが、命令を反復して実行させるブロックの内部に２つ以上配列されている場合は、規則２が優先される。つまり、このような場合は、規則３の例外として、他のブロックと交換可能なブロックの対として設定しない。ここで、命令を反復して実行させるブロックとは、反復の回数に上限が設けられていないブロック及び上限が設けられているブロックを含む。
【０１５０】
以上を踏まえ、類似度を算出するに際し、類似度算出手段２０６は、入力プログラムにおけるブロックの配列を、グラフとして表現する。図１４Ｃは、入力プログラムＩ３をグラフＧ３として表現した図である。図１４Ｄは、この例において、頂点に付された番号と、ブロック又はブロックに入力された引数等との対応関係を示している。
【０１５１】
尚、１つ以上のブロックに対応する命令を反復して実行させるブロックを含む場合、グラフを作成する際に、当該反復して実行させるブロック及び当該１つ以上のブロックの各々示す頂点を環状に連結する。図１４Ｃにおいて、頂点３、頂点４及び頂点５が環状に連結されている。
【０１５２】
次いで、類似度算出手段２０６は、以上の手順で作成したグラフを、隣接行列として表現する。図１４Ｅは、グラフＧ３を隣接行列として表現した図である。
【０１５３】
入力プログラムＩ３の隣接行列及び一の正解プログラムＡ３の隣接行列の余弦類似度を算出すると、この例では、余弦類似度は１．０である。
【０１５４】
尚、グラフの作成において上記手順６を含めずに作成されたグラフ（可換性が考慮されないグラフ）を用いて類似度を算出すると、入力プログラムＩ３及び正解プログラムＡ３の余弦類似度は０．６である。
【０１５５】
つまり、可換性が考慮されたグラフを用いて類似度を算出することによって、入力プログラムと一の正解プログラムの双方のプログラムの配列が異なることに起因して、類似度が過小評価されることがない。
【０１５６】
以上、具体例を用いて交換可能なブロックの対、又は、交換可能なブロックの対を特定する条件の例を説明した。尚、交換可能なブロックの対、又は、交換可能なブロックの対を特定する条件は、以上の例に限られるものではない。あるプログラム内において、あるブロックの対の配置を交換して得られるプログラムが、交換する前のプログラムと同一又は類似の実行結果を出力すれば、当該ブロックの対を、交換可能なブロックの対として設定すればよい。
【０１５７】
更に、本実施形態のプログラミング学習プログラムは、第１実施形態のように、複数の対象物の動作を規定する場合に拡張することが可能である。このような場合、各正解プログラムは、複数の対象物の動作を規定する。そして、類似度算出手段２０６は、複数の対象物の各々に対して、入力プログラムの配列及び正解プログラムの配列を比較することによって、類似度を算出する。そして、類似度算出手段２０６は、例えば、複数の対象物の各々に対して算出された類似度の平均値を、入力プログラム及び正解プログラムの類似度としてもよい。
【０１５８】
以上から明らかなように、本実施形態に係るプログラミング学習プログラムにおいて、正解プログラムは、予め用意された複数種類のブロックから使用するブロックを選択して配列し、使用するブロックに対応する命令を配列に基づいて順次実行するビジュアルプログラミング言語によって記述されており、類似度算出手段２０６は、入力プログラムの配列及び正解プログラムの配列を比較し、入力プログラムが、異なる種類のブロックの対であって、予め設定された交換可能なブロックの対を含む場合に、交換可能なブロックの対を交換したプログラムを入力プログラムと同一とみなして、類似度を算出する。
【０１５９】
上記のような構成によれば、入力プログラムと一の正解プログラムの配列が異なるが、その差異が本質的ではない場合に、双方のプログラムを同一とみなすことができる。従って、入力プログラムと一の正解プログラムの配列は異なるが、双方のプログラムが同一又は類似の実行結果を出力する場合に、類似度が過小評価されることがない。
【０１６０】
更に、類似度算出手段２０６は、使用するブロックが引数を入力可能なブロックである場合に、入力プログラムに含まれる引数及び正解プログラムに含まれる引数を更に比較し、類似度を算出する。これによって、２つのプログラム間の類似度の判定が更に精密になる。
【０１６１】
更に、各正解プログラムは、複数の対象物の動作を規定し、類似度算出手段２０６は、複数の対象物の各々に対して、入力プログラムの配列及び正解プログラムの配列を比較することによって、類似度を算出する。つまり、複数の対象物ごとの動作を区別して類似度を算出するため、２つのプログラム間の類似度の判定が更に精密になる。
【０１６２】
上記実施形態は、例として提示したものであり、発明の範囲を限定するものではない。上記の構成は、適宜組み合わせて実施することが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。上記実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１６３】
１００：学習者端末  １０２：制御部  １０４：記憶部  ２００：記憶手段  ２０２：表示制御手段  ２０４：受付手段  ２０６：類似度算出手段  ２０８：判定手段  ２１０：作成画面  ２１２：プレビュー画面  ２１４：選択画面  ２１６：入力画面  ２１８：ガイド画面  ３００：記憶手段  ３０２：回答判定手段  ３０４：表示制御手段  ３０６：質問画面  ３０８：作成画面  ３１０：プレビュー画面  ３１２：選択画面  ３１４：入力画面  ３１６：ガイド画面  ４００：プログラミング学習システム  ５００：学習管理サーバ  ５０２：表示制御手段  ６００：電気通信回線
【図１】
2020166292.tif 000003
【図２Ａ】
2020166292.tif 000004
【図２Ｂ】
2020166292.tif 000005
【図３Ａ】
2020166292.tif 000006
【図３Ｂ】
2020166292.tif 000007
【図３Ｃ】
2020166292.tif 000008
【図４】
2020166292.tif 000009
【図５】
2020166292.tif 000010
【図６】
2020166292.tif 000011
【図７】
2020166292.tif 000012
【図８Ａ】
2020166292.tif 000013
【図８Ｂ】
2020166292.tif 000014
【図８Ｃ】
2020166292.tif 000015
【図９】
2020166292.tif 000016
【図１０】
2020166292.tif 000017
【図１１】
2020166292.tif 000018
【図１２Ａ】
2020166292.tif 000019
【図１２Ｂ】
2020166292.tif 000020
【図１２Ｃ】
2020166292.tif 000021
【図１２Ｄ】
2020166292.tif 000022
【図１２Ｅ】
2020166292.tif 000023
【図１３Ａ】
2020166292.tif 000024
【図１３Ｂ】
2020166292.tif 000025
【図１４Ａ】
2020166292.tif 000026
【図１４Ｂ】
2020166292.tif 000027
【図１４Ｃ】
2020166292.tif 000028
【図１４Ｄ】
2020166292.tif 000029
【図１４Ｅ】
2020166292.tif 000030