(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-06
(45)【発行日】2023-10-17
(54)【発明の名称】プログラミング学習プログラム
(51)【国際特許分類】
G09B 19/00 20060101AFI20231010BHJP
G09B 7/02 20060101ALI20231010BHJP
G06Q 50/20 20120101ALI20231010BHJP
【FI】
G09B19/00 Z
G09B7/02
G06Q50/20
(21)【出願番号】P 2020108049
(22)【出願日】2020-06-23
(62)【分割の表示】P 2019026335の分割
【原出願日】2019-02-18
【審査請求日】2022-01-20
(31)【優先権主張番号】P 2018026592
(32)【優先日】2018-02-19
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】519174067
【氏名又は名称】株式会社キュレオ
(74)【代理人】
【識別番号】110000176
【氏名又は名称】弁理士法人一色国際特許事務所
(72)【発明者】
【氏名】高橋 悠介
(72)【発明者】
【氏名】鈴木 康弘
(72)【発明者】
【氏名】明間 陸
【審査官】安田 明央
(56)【参考文献】
【文献】特開2018-077342(JP,A)
【文献】小谷野 健太他,インタフェース コンピュータと人間社会,第74回(平成24年)全国大会講演論文集(4) ,一般社団法人情報処理学会,2012年03月06日,4-757~4-758
【文献】水谷 晃三他,プログラミング初学者のための学習モデルRPRaSの提案,FIT2007 第6回情報科学技術フォーラム 情報科学技術レターズ ,社団法人情報処理学会 社団法人電子情報通信学会,2007年08月22日,第6巻,343~346
(58)【調査した分野】(Int.Cl.,DB名)
G09B 19/00-19/26
G09B 5/00-5/14
G09B 7/00-7/12
G06Q 50/20
(57)【特許請求の範囲】
【請求項1】
コンピュータを、
正解プログラム、前記正解プログラムを再現する入力プログラムを作成するための示唆となる
質問に相当する質問データ、及び
前記質問に対する解答を示す解答データを記憶する記憶手段と、
前記質問データに対する回答の入力を受け付け、前記解答データに基づいて、前記回答の正誤を判定する回答判定手段と、
前記回答判定手段が正解と判定した場合に、前記入力プログラムを作成するための作成画面を表示させ、回答判定手段が不正解と判定した場合に、前記質問データに対する回答の入力を再度受け付けるための質問画面を表示させる表示制御手段として機能させるためのプログラミング学習プログラム。
【請求項2】
前記正解プログラムは、複数の対象物の動作を規定し、
前記質問及びその解答は、前記複数の対象物ごとに記憶されていることを特徴とする請求項
1に記載のプログラミング学習プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はプログラミング学習のためのプログラムに関する。
【背景技術】
【0002】
プログラミング学習を支援するプログラミング学習装置やプログラムが知られている。
例えば、特許文献1には、正解用プログラムを記憶する記憶手段と、前記正解用プログラムに基づく見本を表示手段に表示させる表示制御手段と、入力手段によるプログラムの入力を受け付ける受付手段と、前記受付手段が受け付けたプログラムの正誤判定を行う正誤判定手段と、を有するプログラミング学習装置が開示されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
一の実行結果を得るためのプログラムは、必ずしも一意的に決定されるものではない。上記の従来技術においては、正解用プログラムを実行することで見本が表示され、学習者によって入力されたプログラムは、当該正解用プログラムを基にその正誤が判定される。そのため、入力されたプログラムが当該正解用プログラムと同一の実行結果を出力するとしても、入力されたプログラムの構成が当該正解用プログラムの構成と異なる場合には正解とは判定されない。
【0005】
また、上記の従来技術においては、学習者は、表示された見本を視認した後に、これを頼りに当該見本と同じ実行結果を出力するプログラムの作成を開始する。しかし、この段階でそのようなプログラムを作成することは、特にプログラミング言語に習熟していない初学者にとってはどのようにプログラムを記述すべきかを検討する段階から困難であると考えられる。更に当該見本が複雑であるほど学習者にとってプログラムの作成が困難になり、学習意欲が低下することも考えられる。
【0006】
本発明の目的は、一の課題に対して作成されるプログラムを評価するプログラミング学習において、学習者にとって自由度の高いプログラミング学習プログラムを提供することにある。また、予め用意されたプログラムを再現するプログラミング学習において、目的となる当該プログラムを再現することを支援するプログラミング学習プログラムを提供することにある。
【課題を解決するための手段】
【0007】
上記目的を達成するための主たる発明の一は、コンピュータを、各々が同一の実行結果を出力し、プログラムの記述が互いに異なる複数の正解プログラムを記憶する記憶手段と、入力プログラムの入力を受け付ける受付手段と、前記複数の正解プログラムの各々に対し、前記入力プログラムとの類似度を算出する類似度算出手段と、算出された前記類似度に基づいて、前記入力プログラムの成績を判定する判定手段として機能させるためのプログラミング学習プログラムである。
【0008】
また、上記目的を達成するための主たる発明の一は、コンピュータを、正解プログラム並びに前記正解プログラムを再現する入力プログラムを作成するための示唆となる質問データ及びその解答データを記憶する記憶手段と、前記質問データに対する回答の入力を受
け付け、前記解答データに基づいて、前記回答の正誤を判定する回答判定手段と、前記回答判定手段が正解と判定した場合に、前記正解プログラムを再現する入力プログラムを作成するための作成画面を表示させる表示制御手段として機能させるためのプログラミング学習プログラムである。本発明の他の特徴については、後述する明細書及び図面の記載により明らかにする。
【発明の効果】
【0009】
本発明によれば、一の課題に対して作成されるプログラムを評価するプログラミング学習において、学習者が自由度の高いプログラミングを行うことを可能とする。また、本発明によれば、予め用意されたプログラムを再現するプログラミング学習において、学習者が、目的となる当該プログラムを再現することを支援することができる。
【図面の簡単な説明】
【0010】
【
図1】実施形態に係る学習者端末を説明する図である。
【
図2A】実施形態に係るプログラミング学習プログラムが行う処理を説明するフローチャートである。
【
図2B】実施形態に係るプログラミング学習プログラムが行う処理を説明するフローチャートである。
【
図3A】実施形態に係る正解プログラムの実行結果を説明する図である。
【
図3B】実施形態に係る正解プログラムの実行結果を説明する図である。
【
図3C】実施形態に係る正解プログラムの実行結果を説明する図である。
【
図4】実施形態に係る入力プログラムを作成するための作成画面を説明する図である。
【
図5】実施形態に係る入力プログラムのブロックの配置を説明する図である。
【
図6】実施形態に係る学習者端末を説明する図である。
【
図7】実施形態に係るプログラミング学習プログラムが行う処理を説明するフローチャートである。
【
図8A】実施形態に係る正解プログラムの実行結果を説明する図である。
【
図8B】実施形態に係る正解プログラムの実行結果を説明する図である。
【
図8C】実施形態に係る正解プログラムの実行結果を説明する図である。
【
図9】実施形態に係る表示制御手段が表示する質問を説明する図である。
【
図10】実施形態に係る入力プログラムを作成するための作成画面を説明する図である。
【
図11】実施形態に係るプログラミング学習システムを説明する図である。
【
図12A】実施形態に係る正解プログラムを説明する図である。
【
図12B】実施形態に係る入力プログラムを説明する図である。
【
図12C】実施形態に係るグラフを説明する図である。
【
図12D】実施形態に係るグラフの頂点に付された番号と、ブロック又はブロックに入力された引数等との対応関係を説明する図である。
【
図12E】実施形態に係る隣接行列を説明する図である。
【
図13A】実施形態に係る正解プログラムを説明する図である。
【
図13B】実施形態に係る入力プログラムを説明する図である。
【
図14A】実施形態に係る正解プログラムを説明する図である。
【
図14B】実施形態に係る入力プログラムを説明する図である。
【
図14C】実施形態に係るグラフを説明する図である。
【
図14D】実施形態に係るグラフの頂点に付された番号と、ブロック又はブロックに入力された引数等との対応関係を説明する図である。
【
図14E】実施形態に係る隣接行列を説明する図である。
【発明を実施するための形態】
【0011】
<第1実施形態>
図1は、本実施形態に係る学習者端末100の構成を説明するブロック図である。学習者端末100は、学習者が所有するコンピュータ機器であり、例えばパーソナルコンピュータ、タブレット端末、スマートフォン又は携帯電話機等である。学習者端末100には、表示手段及び入力手段が付属されている。表示手段としては、例えばディスプレイである。入力手段としては、例えばキーボード、マウス又はタッチパネルである。学習者端末100は、制御部102及び記憶部104を有する。
【0012】
制御部102は、CPU等の演算処理回路、メモリ等を有する。制御部102は、記憶部104に記憶された後述するプログラミング学習プログラムを実行して、各種機能を学習者端末100において実行させる。プログラミング学習プログラムは、電気通信回線を経由して学習者端末100にダウンロードされて記憶部104に記憶される。尚、磁気記録媒体、光記録媒体、光磁気記録媒体、半導体メモリなどのコンピュータ読み取り可能な記録媒体に記憶した状態で提供されてもよい。この場合には、学習者端末100は、記録
媒体を読み取る装置を備えていればよい。また、プログラミング学習プログラムは、予め記憶部104に記憶されていてもよい。
【0013】
記憶部104は、不揮発性メモリ、ハードディスク等の記憶装置である。記憶部104には、上述したプログラミング学習プログラムが記憶される。
【0014】
本実施形態においては、CPUがメモリに記憶されるプログラミング学習プログラムを実行することにより、制御部102を、記憶手段200と、表示制御手段202と、受付手段204と、類似度算出手段206と、判定手段208として機能させる。
【0015】
記憶手段200は、一の課題に対して設けられた複数の正解プログラムを記憶する。本実施形態における課題とは、予め用意されたプログラムの実行結果と同一又は類似の実行結果を出力するプログラムを作成することを目的とするプログラミング学習である。
【0016】
複数の正解プログラムの各々は、同一の実行結果を出力する。一方、複数の正解プログラムの各々は、プログラムの記述が互いに異なる。ここで、プログラムの記述が異なる場合とは、例えば用いられる変数名等が異なるためにプログラムの記述が視覚的に異なる場合や、当該同一の実行結果を導き出すための制御構造が異なる場合等を含む。
【0017】
本実施形態において、正解プログラムは、所謂ビジュアルプログラミング言語によって記述されている。ビジュアルプログラミング言語は、対象物に対し予め用意された複数種類のブロックの中から、使用するブロックを選択して配列する。そして、選択したブロックに対応する命令をその配列に従って順次実行することによって、当該対象物の動作を規定するプログラミング言語である。ビジュアルプログラミング言語としては、例えば、Scratchを挙げることができる。つまり、本実施形態において、複数の正解プログラムの各々は、使用されるブロックの個数、種類、配列等が互いに異なるが、同一の実行結果を出力する。
【0018】
表示制御手段202は、学習者に与える課題に対して設けられたプログラムの実行結果を学習者端末100の表示手段に表示させたり、学習者が入力プログラムを作成するための作成画面を表示手段に表示させる等の制御を行う。入力プログラムは、学習者が与えられた課題に対して作成するプログラムである。入力プログラムは、作成画面において作成され、完成した入力プログラムは、後述する受付手段204によって受け付けられる。
【0019】
受付手段204は、入力プログラムの入力を受け付ける。入力プログラムの入力は、表示制御手段202が表示させた作成画面を介して行う。
【0020】
類似度算出手段206は、記憶手段200が記憶している複数の正解プログラムの各々と、学習者が入力した入力プログラムとの類似度を算出する。ここで類似度とは、2つのプログラムの記述が類似する度合いを示す指標である。類似度及びそれを算出する方法の詳細については、後のフローチャート及び具体例を用いた説明で詳述するが、入力プログラム及び正解プログラムの各々についてベクトルとして表現し、この一対のベクトルの余弦類似度を算出することによって、それを入力プログラム及び一の正解プログラムの類似度とする。
【0021】
判定手段208は、入力プログラムの成績を判定する。成績とは、例えば課題に対する入力プログラムについて、その正誤や、それを点数化したものとすることができる。成績は、複数の正解プログラムの各々に対する入力プログラムとの類似度に基づいて判定される。具体的には、成績は、複数の正解プログラムの各々に対する入力プログラムとの類似度の内で最も高い類似度(最大の類似度)に基づいて判定される。
【0022】
本実施形態において、成績は、課題に対する入力プログラムの正誤とする。入力プログラムの正誤は、予め設定された閾値と比較することによって判定する。例えば、最大の類似度が当該閾値よりも大きい場合に正解と判定し、それ以外を不正解と判定してもよい。ここで予め設定された閾値とは、余弦類似度の性質から、+1よりも小さい値を適宜選択すればよい。
【0023】
(プログラミング学習プログラムが行う処理)
本実施形態に係るプログラミング学習プログラムが行う処理について、
図2A及び
図2Bを参照しながら詳細に説明する。
図2A及び
図2Bは、プログラミング学習プログラムが行う処理を説明するフローチャートである。
【0024】
=単純な例(1つの対象物の動作について)=
先ず、学習者は、学習者端末100にログインし、本実施形態に係るプログラミング学習プログラムを実行させる。プログラミング学習プログラムが実行されると、S101において、表示制御手段202は、学習者に与える課題に対して設けられたプログラムの実行結果を、学習者端末100の表示手段に表示させる。課題において作成すべきプログラムは、ここで表示された実行結果と同一又は類似の実行結果を得るためのプログラムである。学習者は、S101で表示された実行結果を視認し、作成すべきプログラムを検討する。
【0025】
この例では、課題に対して設けられているプログラムとは、
図3A~
図3Cに示すように、「ランボタンがクリックされたときに、キャラクタAが右へ100歩移動する。」といった実行結果を出力するものである。この実行結果において、学習者は、マウス等を介してランボタンを選択し(
図3A)、クリックする。ランボタンがクリックされると、キャラクタAが初期位置から右へ移動していく(
図3B)。そして、キャラクタAが初期位置から100歩進んだ時点で移動を止めて(
図3C)、課題に対して設けられているプログラムの実行が終了する。
【0026】
S101のプログラムの実行が終了すると、表示制御手段202は、当該実行結果を確認した学習者を次の段階へ誘導させるためのボタンを表示する。学習者が当該ボタンをクリックすると、表示制御手段202は、
図4に示すように、学習者が入力プログラムを作成するための作成画面210を表示手段に表示させる。
図4に示す画面には、プレビュー画面212、選択画面214、入力画面216及びガイド画面218が表示されている。プレビュー画面212は、入力プログラムの実行結果を表示する。選択画面214には、入力プログラムの作成に使用することができる複数のブロックが表示されている。入力画面216は、学習者が入力プログラムを入力する画面である。学習者は、入力画面216において入力プログラムの作成を行う。ガイド画面218は、本実施形態に係るプログラミング学習において、学習を進める上での示唆となるコメント等を表示する。学習者は、選択画面214に表示された複数種類のブロックを、入力画面216へマウス等でコピーすることができる。そして、学習者は、入力画面216にコピーされたブロックを配列することによって入力プログラムの作成を行うことができる。
【0027】
次いで、S102において、受付手段204は、学習者が作成した入力プログラムの入力を受け付ける。
【0028】
次いで、S103及びS104において、類似度算出手段206は、記憶手段200が記憶している複数の正解プログラムの各々と、S102において学習者が入力した入力プログラムとの類似度を算出する。つまり、入力プログラム及び一の正解プログラムの類似度を算出する処理(S104)を行う。ここで算出手段は、記憶手段200に予め記憶されている当該一の正解プログラムに関するデータを読み出して、両者の類似度を算出する。ここで、一の正解プログラムに関するデータとは、正解プログラムそのもののデータであってもよいし、後述するベクトルとして表現されたデータであってもよい。このS104の処理を、全ての正解プログラムについて繰り返す(S103)。
【0029】
ここで、入力プログラムと、一の正解プログラムとの類似度を算出する方法について説明する。ここでは、ビジュアルプログラミング言語の例で説明する。本実施形態において、類似度算出手段206は、複数種類のブロックの各々が使用される個数を、入力プログラム及び正解プログラムの双方について算出して両者を比較することによって、類似度を算出する。
【0030】
類似度を算出する方法について更に詳細に説明する。先ず、入力プログラムを、1つのベクトルVbとして表現する。この場合、添字bをブロックの種類とし、その成分Vbをブロックbがそのプログラムにおいて使用される個数とする。
【0031】
図4に示す例では、3種類のブロックが配列されている。具体的には、「ランボタンがクリックされたら」と付されたブロックb1が1個、「10回繰り返す」と付されたブロックb2が1個、「10歩動かす」と付されたブロックb3が1個、互いに連結されて配置されている。このような場合、この入力プログラムについて表現されたベクトルは、(Vb1,Vb2,Vb3)=(1,1,1)となる。
【0032】
一方、複数の正解プログラムの一例として、次に示す2通り(サンプル1及びサンプル2)が予め記憶手段200に記憶されているとする。
【0033】
(サンプル1)
サンプル1の正解プログラムは、「ランボタンがクリックされたら」と付されたブロックb1が1個、「10回繰り返す」と付されたブロックb2が1個、「10歩動かす」と付されたブロックb3が1個、互いに連結されて配置されている正解プログラムである。サンプル1の正解プログラムにおいては、1個のブロックb3による処理が10回実行されることによって、100歩動かす実行結果を出力する。サンプル1は、上述した入力プログラムと同一の正解プログラムである。サンプル1のベクトル表現は、入力プログラムと同一であり、(Vb1,Vb2,Vb3)=(1,1,1)となる。
【0034】
(サンプル2)
サンプル2の正解プログラムは、「ランボタンがクリックされたら」と付されたブロックb1が1個、「10歩動かす」と付されたブロックb3が10個、互いに連結されて配置されている正解プログラムである。サンプル2の正解プログラムにおいては、10個のブロックb3の各々による処理が1回実行されることによって、100歩動かす実行結果を出力する。サンプル2のベクトル表現は、(Vb1,Vb2,Vb3)=(1,0,10)となる。
【0035】
このようにして入力プログラム及び正解プログラムの各々についてベクトルとして表現する。そして、入力プログラムのベクトル及び一の正解プログラムのベクトルの余弦類似度を算出し、それを当該入力プログラム及び当該一の正解プログラムの類似度とする。
【0036】
この例では、入力プログラム及びサンプル1の正解プログラムの余弦類似度は1である。また、入力プログラム及びサンプル2の正解プログラムの余弦類類似度は0.63である。
【0037】
次いで、S105において、判定手段208は、複数の正解プログラムの各々に対する
入力プログラムとの類似度に基づいて、入力プログラムの成績を判定する。
【0038】
この例では、2つの正解プログラムの内、入力プログラムに対する類似度が最も大きいものはサンプル1の正解プログラムである。よって、サンプル1の正解プログラムに対する入力プログラムの類似度「1」を、この課題における最大の類似度として算出する。
【0039】
ここで、正誤判定における閾値として、例えば+0.8を用いるならば、この例では最大の類似度が1であるため、成績は正解と判定される。
【0040】
尚、仮に学習者が、入力プログラムとして上記サンプル2の正解プログラムと同一のプログラムを入力した場合、2つの正解プログラムの内、入力プログラムに対する類似度が最も大きいものはサンプル2の正解プログラムである。よって、サンプル2の正解プログラムに対する入力プログラムの類似度「1」を、この課題における最大の類似度として算出する。この場合にも、最大の類似度が、正誤判定における閾値である+0.8よりも大きいため、正解と判定される。
【0041】
また、2つのプログラムの類似度の算出において、各々のプログラムにおいて使用されるブロックの数が多いほど、算出される類似度は高くなる傾向がある。つまり、ある閾値が設定された場合において、複数の正解プログラムの各々において使用されるブロックの数が多いほど、正解と判定される傾向が高くなる。この場合に、正解とみなすべきではない入力プログラムであっても、正解と判定される場合がある。よって、複数の正解プログラムの各々において使用されるブロックの数が多いほど、閾値を高く設定してもよい。
【0042】
また、1つの閾値を基準にとして成績を正解又は不正解の2段階で判定するのではなく、複数の閾値を基準に複数段階で成績を判定してもよい。または、最大の類似度自体の数値を、成績と判定してもよい。
【0043】
=複数のキャラクタが存在する例=
課題の内容によっては、複数の対象物の動作を規定する必要がある。例えば、複数のキャラクタの動作や背景画像の動作を規定する場合である。このような場合、ビジュアルプログラミング言語においては、複数の対象物の各々に対して、その動作を規定するためのブロックが選択されて配列される。
【0044】
このような場合、複数の正解プログラムの各々は、複数の対象物の動作を規定する。そして、類似度算出手段206は、複数の対象物の各々に対して複数種類のブロックの各々が使用される個数を、入力プログラム及び正解プログラムの双方について算出して両者を比較することによって、類似度を算出する。
【0045】
このような場合、プログラムに対応するベクトルは、Vobのように、2つの添字を有する。ここで、添字oは対象物に対応するものとし、添字bは当該対象物の動作を規定するために使用されるブロックbの種類とする。そして、成分Vobは、当該対象物oの動作を規定するために使用されるブロックbの個数とする。
【0046】
=一のキャラクタに対して複数動作を規定する例=
課題の内容によっては、一の対象物を規定するための複数のブロックが、複数の塊を形成するように配列される場合がある。
図5に示す例では、対象物Aの動作を規定するブロックは、2個の塊を形成している(対象物Oに対する塊C1及び塊C2)。これらの2個の塊は、互いに連結されずに離間して配置されている。
【0047】
このような場合、プログラムに対応するベクトルは、Vocbのように、3つの添字を
有する。ここで、添字oは対象物に対応するものとし、添字cは当該対象物oの動作を規定するブロックの塊に対応するものとし、添字bは当該対象物oの動作を規定するために、ブロックの塊cにおいて使用されるブロックbの種類とする。そして、成分Vocbは、当該対象物oの動作を規定するために、ブロックの塊bにおいて使用されるブロックbの個数とする。
【0048】
更にこのような場合、一の対象物において、正解プログラムにおける複数のブロックの塊と、入力プログラムにおける複数のブロックの塊との対応関係を特定することが、プログラムをベクトルVocbとして表現するために必要である。その方法について、
図2Bを用いて説明する。
図2Bは、
図2Aにおいて、入力プログラムと、一の正解プログラムとの類似度を算出するステップS104を詳細に説明するフローチャートである。
【0049】
この例では、複数の正解プログラムの内、次のサンプル3の正解プログラムを含むとする。サンプル3の正解プログラムは、対象物Oに対して塊C31及び塊C32の2つの塊を形成しているとする。以下の説明においては、
図2AのS104において、入力プログラムと、サンプル3の正解プログラムについての処理の例を用いて説明する。
【0050】
図2Bにおいて、S104-4では、入力プログラムにおける複数のブロックの塊の内1つと、正解プログラムにおける複数のブロックの塊の内1つとの類似度を算出する。この処理を、入力プログラムにおける複数のブロックの塊と、正解プログラムにおける複数のブロックの塊の全ての組み合わせについて類似度を算出する(S104-2及びS104-3)。
【0051】
この例では、入力プログラムにおける2つの塊C1及び塊C2と、サンプル3の正解プログラムにおける2つのブロックの塊C31及びC32の全ての組み合わせについて類似度を算出する(S104-2及びS104-3)。
【0052】
そして、正解プログラムにおける複数のブロックの塊の各々に対して、入力プログラムに含まれる複数のブロックの塊の内で最も類似度が高いブロックの塊を特定し、当該ブロックの塊を対応付ける(S104-5)。
【0053】
この例では、サンプル3の正解プログラムにおける2つの塊C31及び塊C32の各々に対して、入力プログラムに含まれる2つの塊C1及び塊C2の内で最も類似度が高いブロックの塊を特定し、当該ブロックの塊を対応付ける(S104-5)。この処理を、全ての対象物について行う(S104-1)。
【0054】
以上の手順によって、入力プログラムをベクトルVocbとして表現することができ、正解プログラムに対し、学習者が入力した入力プログラムとの類似度を算出する。
【0055】
尚、上で説明した例では、プログラムをベクトルとして表現する際のベクトルの成分は、ブロックの個数としていたがこれに限られるものではない。例えば、上記の方法で求めたベクトルに対し、対象物ごとに重みを付けてもよい。対象物ごとに重みを付ける場合、課題において重要度の高い対象物に対して比較的大きな重みを付け、重要度の低い対象物に対して比較的小さな重みを付けてもよい。重要度が高い対象物とは、課題において使用方法を学習すべきブロックを含む対象物である。また、使用されるブロックの数が対象物ごとに大きく偏っている場合に、上記の方法で求めたベクトルに対し、対象物ごとに規格化してもよい。
【0056】
また、上で説明した例では、使用されるブロックの数に応じて類似度を算出する態様を示した。しかし、例えばScratchにおいて、ブロックに数値や文字列を直接入力す
ることによって所定の動作を規定するブロックを作成することができる。このような場合、ブロックに入力する数値や文字列を区別して、その入力した内容を類似度の算出に反映させてもよい。
【0057】
以上から明らかなように、本実施形態に係るプログラミング学習プログラムは、コンピュータを、各々が同一の実行結果を出力し、互いに異なる複数の正解プログラムを記憶する記憶手段200と、入力プログラムの入力を受け付ける受付手段204と、複数の正解プログラムの各々に対し、入力プログラムとの類似度を算出する類似度算出手段206と、複数の正解プログラムの各々に対する入力プログラムとの類似度に基づいて、入力プログラムの成績を判定する判定手段208として機能させる。
【0058】
一の課題において作成されるプログラムを評価する際、同一の実行結果を出力する複数通りの入力プログラムに対し、それらの入力プログラムの記述や構成の違いによらずに成績を判定することができるため、学習者にとって自由度の高いプログラミング学習プログラムを提供することができる。
【0059】
更に、正解プログラムは、予め用意された複数種類のブロックから使用するブロックを選択して配列し、使用するブロックに対応する命令を配列に基づいて順次実行するビジュアルプログラミング言語によって記述されており、類似度算出手段206は、複数種類のブロックの各々が使用される個数を、入力プログラム及び正解プログラムの双方について算出して両者を比較することによって、類似度を算出する。
【0060】
つまり、複数種類のブロックの各々が使用される個数を用いて類似度を算出することによって、2つのプログラム間の類似度の算出が容易になる。
【0061】
更に、複数の正解プログラムの各々は、複数の対象物の動作を規定し、類似度算出手段206は、複数の対象物の各々に対して複数種類のブロックの各々が使用される個数を、入力プログラム及び正解プログラムの双方について算出して両者を比較することによって、類似度を算出する。
【0062】
つまり、複数の対象物ごとの動作を区別して類似度を算出するため、2つのプログラム間の類似度の判定が更に精密になる。
【0063】
更に、判定手段208は、複数の正解プログラムの各々に対する入力プログラムとの類似度の内で最も高い類似度を、予め設定された閾値と比較することによって、入力プログラムの成績を判定する。
【0064】
つまり、予め用意された複数の正解プログラムの内、入力プログラムに対して類似度が最も大きいものを、成績を判定するために用いる。これによって、同一の実行結果を出力する複数通りの入力プログラムに対し、それらの入力プログラムの記述や構成が異なっていても、成績を過小評価されることを防止することができるため、入力プログラムの成績の判定が更に精密になる。
【0065】
<第2実施形態>
図6は、本実施形態に係る学習者端末100の構成を説明するブロック図である。本実施形態に係る学習者端末100の構成は、第1実施形態と同様であるが、記憶部104に記憶されるプログラミング学習プログラムが異なっている。本実施形態においては、CPUがメモリに記憶されるプログラミング学習プログラムを実行することにより、制御部102を、記憶手段300と、回答判定手段302と、表示制御手段304として機能させる。
【0066】
記憶手段300は、正解プログラム、質問データ、及びその解答データを記憶する。正解プログラムは、プログラミング学習において学習者が再現することを目標とするプログラムである。質問データは、プログラミング学習を行う学習者に対して提示する質問に相当するデータである。質問は、それに対する解答が正解プログラムを再現するための示唆となる質問である。質問は、学習の過程で表示画面に表示される(詳細は後述する)。質問は、問題だけでもよいし、解答を含む複数の選択枝から選択させるものであってもよい。解答データは、質問に対する解答を示すデータである。解答データは、対応する質問データに紐づけられて記憶されている。解答は、質問に対する学習者の回答が正解しているかどうかを判断するために用いられる。
【0067】
回答判定手段302は、質問に対する回答の入力を受け付け、回答の正誤を判定する。このとき、回答判定手段302は、表示制御手段304によって表示された質問に対して学習者が入力した回答が、質問に紐づけられて記憶された解答データが示す解答と同一である場合に、正解と判定し、それ以外の場合に不正解と判定する。
【0068】
表示制御手段304は、回答判定手段302が正解と判定した場合に、正解プログラムを再現する入力プログラムを作成するための作成画面308を表示させる。
【0069】
(プログラミング学習プログラムが行う処理)
本実施形態に係るプログラミング学習プログラムが行う処理について、
図7~
図10を参照しながら説明する。
図7は、プログラミング学習プログラムが行う処理を説明するフローチャートである。
図8A~
図8Cは、本実施形態に係る正解プログラムの実行結果を説明する図である。
図9は、実施形態に係る表示制御手段304が表示する質問画面を説明する図である。
図10は、実施形態に係る入力プログラムを作成するための作成画面308を説明する図である。
【0070】
先ず、学習者は、学習者端末100にログインし、本実施形態に係るプログラミング学習プログラムを実行させる。プログラミング学習プログラムが実行されると、S201において、表示制御手段304は、正解プログラムの実行結果を学習者端末100の表示手段に表示させる。この例では、
図8A~
図8Cに示すように、「ランボタンがクリックされたときに、キャラクタBが一回転し、その後キャラクタCが『こんにちは!』と言う。」といった動画を表示させる。この実行結果において、学習者は、マウス等を介してランボタンを選択し(
図8A)、クリックする。ランボタンがクリックされると、キャラクタBが回転する(
図8B)。そして、キャラクタBが一回転すると、キャラクタCの上側に「こんにちは!」と付された吹き出しが表示され、課題に対して設けられているプログラムの実行が終了する。
【0071】
図8A等に示したように、プログラムに複数のキャラクタが含まれている場合、それぞれの動作を規定する必要がある。このような場合、質問データ及び解答データは、たとえば、複数の対象物それぞれの動きについて設けられてもよいし、複数の対象物が関連する動きについて設けられてもよい。
【0072】
S201のプログラムの実行が終了すると、表示制御手段304は、当該実行結果を確認した学習者を次の段階へ誘導させるためのボタンを表示する。学習者が当該ボタンをクリックすると、S202において、表示制御手段304は、学習者端末100の表示手段に、
図9に示す質問画面306を表示させ、本実施形態に係るプログラミング学習における学習者に対する質問を表示させる。
【0073】
図9に示す質問画面306において、左側の領域には、本実施形態に係る正解プログラ
ムに登場する対象物(キャラクタB及びキャラクタC)が配置されて表示されている。更に、これらの2つの対象物を繋ぐ線が表示されている。この線は、2つの対象物の動作が互いに関連し合うことを意味している。その下の領域には、キャラクタを用いたガイドが表示されている。このガイドは、本実施形態に係るプログラミング学習において、学習を進める上での示唆となるコメントを表示する。質問画面306の右側の領域には、質問及びそれに対する入力箇所が表示されている。
【0074】
前述のように、ここでの質問とは、それに対する解答が正解プログラムを再現するための示唆となる質問であって、質問に対する解答データは記憶手段300に記憶されている。例えば、質問画面306において、学習者がマウス等でキャラクタCを選択すると、表示制御手段304は、キャラクタCについての質問データを記憶手段300から読み出し、質問画面306の右側の領域に表示させる。ここでのキャラクタCについての質問として、例えば「Q.キャラクタAが一回転したときに」といった文字列である。学習者は、これに対する回答を、入力箇所に入力する。このとき、例えば、「1.一回転する、2.『こんにちは!』と言う、3.消える、4.右に移動する」といった選択肢を提示して学習者に選択させる。
【0075】
尚、質問画面306において、学習者がキャラクタBを選択した場合には、表示制御手段304は、キャラクタBに関する質問を表示する。また、質問画面306において、学習者がキャラクタB及びキャラクタCを繋ぐ線を選択した場合には、表示制御手段304は、それらの関連性についての質問を表示する。
【0076】
次いで、S203において、回答判定手段302は、質問に対する回答の入力を受け付ける。本実施形態においては、学習者は、S202において表示された質問に対し、複数の選択肢の内から一の選択肢を選んで回答する。
【0077】
次いで、S204において、回答判定手段302は、回答の正誤を判定する。記憶手段300には、「Q.キャラクタAが一回転したときに」といった質問に対して、「2.『こんにちは!』と言う」という解答が紐づけられて記憶されている。回答判定手段302は、学習者が選択した選択肢と、この質問に対する解答データを比較する。回答判定手段302は、これらが一致した場合に正解と判定し、それ以外の場合を不正解と判定する。
【0078】
次いで、S205において、表示制御手段304は、回答判定手段302が正解と判定した場合に、正解プログラムを再現する入力プログラムを作成するための作成画面308を表示させる。また、回答判定手段302が不正解と判定した場合は、表示制御手段304は再度質問画面306を表示させ、学習者は、質問画面306を介して再度質問に対する回答の入力を行う。
【0079】
図10に示すように、本実施形態にかかる作成画面308には、プレビュー画面310、選択画面312、入力画面314、及びガイド画面316が表示されている。この状態で、第1実施形態と同様にして入力プログラムの作成を行う。学習者は、作成画面308において入力プログラムを作成する際、S202及びS203における質問及び回答を参照しながら(つまり、
図9に示す画面に戻りながら)作成することができる。この際に例えば、
図10に示す選択画面312に表示された複数のブロックの内で、「『○○』と言う」と付されたブロックが存在すれば、学習者は容易にそれを選択し、入力画面314にコピーすることができる。
図10は、学習者が選択画面312に表示されたブロックから2つのブロックを選択し、それらを入力画面314にコピーした状態を示している。そして、学習者は、「『○○』と言う」と付されたブロックブロックの入力箇所である○○には、「こんにちは!」と入力すればよい。この際、S202及びS203における質問及び回答を参照すれば適切な言葉を入力することができる。
【0080】
尚、質問データは、正解プログラムに登場する対象物やその動作の全てについて網羅するものであってもよいし、その一部についてであってもよい。対象物やその動作の一部についての質問を表示する場合、例えば、その課題における正解プログラムの中で、使用方法を学習すべきブロックに関して質問し、他の課題において使用方法を既に学習したブロックに関しての質問は省略してもよい。または、学習者がその使用を苦手とするブロックに関して質問してもよい。この場合、例えば、第1実施形態におけるプログラミング学習プログラムと連動させ、プログラミング学習において算出された学習者の成績に基づいて、表示する質問を選択することとしてもよい。具体的には、第1実施形態におけるプログラミング学習において、学習者がある種類のブロックの使用方法を誤ることによって特定の課題について不正解となることが一定回数以上続いた場合、本実施形態に係るプログラミング学習においてそのブロックに関する質問を表示すればよい。更にこのような場合、そのブロックに関する質問の回数や種類を増やしてもよい。例えば、通常表示される質問に加え、それよりも平易な質問を先に幾つか表示してもよい。これらの複数の質問は、並べて表示してもよいし、一問について回答して正解の場合に次の質問を表示することとしてもよい。更にこのような場合、
図9に示されたガイドによって、質問に対する回答の示唆を表示するようにしてもよい。ここでの示唆とは、例えば、質問に対して回答するために、実行結果において注意すべき対象物やその動作についての言及である。
【0081】
また、質問を表示する他の例として、学習者が所望する対象物の動作について質問を表示することもできる。この場合、例えば、学習者が、
図9の画面の左の領域に配置された対象物の内、所望の対象物をマウスでクリックして選択すると、表示制御手段304は、その対象物に関する質問を表示させることとしてもよい。この場合、
図9の画面において、学習者が選択した対象物を強調表示した状態で、その対象物に関する質問を表示させてもよい。また、対象物の動作に限らず、2つの対象物間の関連性に関する質問を表示させることもできる。この場合、学習者が、
図9に示す対象物を繋ぐ線をマウスでクリックして選択すると、表示制御手段304は、その2つの対象物間の関連性に関する質問を表示させることとしてもよい。更にこの場合、
図9の画面において、学習者が選択した2つの対象物を繋ぐ線を強調表示した状態で、その2つの対象物間の関連性に関する質問を表示させてもよい。
【0082】
以上から明らかなように、本実施形態に係るプログラミング学習プログラムは、コンピュータを、正解プログラム、正解プログラムを再現する入力プログラムを作成するための示唆となる質問データ、及びその解答データを記憶する記憶手段300と、質問に対する回答の入力を受け付け、回答の正誤を判定する回答判定手段302と、回答判定手段302が正解と判定した場合に、正解プログラムを再現する入力プログラムを作成するための作成画面308を表示させる表示制御手段304として機能させる。
【0083】
これによって、予め用意されたプログラムを再現するプログラミング学習において、目的となるプログラムを再現すること支援することができる。
【0084】
更に、正解プログラムは、複数の対象物の動作を規定し、質問及びその解答は、複数の対象物の内の一部の対象物ごとについて設けられている。
【0085】
これによって、正解プログラムを再現するために重要な箇所に絞って示唆を与えることができるため、目的となるプログラムを再現することを更に支援することができる。
【0086】
<第3実施形態>
図11は本実施形態に係るプログラミング学習システム400の構成を説明する図である。本実施形態に係るプログラミング学習システム400は、学習管理サーバ500と、
複数の学習者端末100とを備えている。学習管理サーバ500と、複数の学習者端末100の各々とは、電気通信回線600を介して通信可能に接続されている。電気通信回線600は、例えば公衆電話回線網やインターネット回線等の伝送路である。
【0087】
本実施形態において、上述したプログラミング学習プログラムは、学習者端末100に代えて、当該学習者端末100と通信可能な学習管理サーバに記憶され、学習管理サーバ500が処理を実行する。
【0088】
この場合、学習者端末100は、表示手段に表示するための表示情報を学習管理サーバ500の表示制御手段502から受信し、表示手段に表示する。そして、学習者端末100は、学習者によって入力手段を介して入力された情報を学習管理サーバへ500送信する。この態様によっても、学習者は、学習者端末100を操作することでプログラミング学習を実行することができる。
【0089】
<第4実施形態>
本実施形態のプログラミング学習プログラムについて説明する。本実施形態のプログラミング学習プログラムは、第1実施形態のプログラミング学習プログラムと比べると、類似度算出手段206が、類似度を算出する方法が異なっている。
【0090】
入力プログラムと正解プログラムの配列が異なっていても、双方が同一又は類似の実行結果を出力する場合がある。このような場合に、当該配列が異なることに起因して、類似度が過小評価されるべきではない。
【0091】
そこで、本実施形態においては、類似度算出手段206は、入力プログラムの配列及び正解プログラムの配列を比較し、類似度を算出する。具体的に、類似度算出手段206は、入力プログラムが、異なる種類のブロックの対であって、交換可能なブロックの対を含む場合に、当該交換可能なブロックの対を交換したプログラムを入力プログラムと同一とみなして、類似度を算出する。
【0092】
異なる種類のブロックの対とは、互いに異なる命令を実行するブロックの対である。
【0093】
交換可能なブロックの対とは、あるプログラムにおいて、それらの配置を交換した場合に、交換する前のプログラムに対して、実行結果大きく変えないブロックの対である。つまり、あるプログラム内に交換可能なブロックの対がある場合、当該交換可能なブロックの対の配置を交換して得られるプログラムは、交換する前のプログラムと同一又は類似の実行結果を出力する。
【0094】
交換可能なブロックの対は、予め設定されている。記憶手段200には、交換可能なブロックの対、又は、交換可能なブロックの対を特定するための条件が記憶されている。
【0095】
本実施形態では、後述する規則に従って、交換可能なブロックの対を設定する。本実施形態における交換可能なブロックの対を設定するための規則は、詳細は後述するが、以下の3通りである。
【0096】
・規則1
互いに異なるカテゴリに属するブロックの対が隣接して配列されている場合、当該ブロックの対は交換可能なブロックの対として設定する。ただし、規則1には例外が設けられる。
【0097】
・規則2
対象物の動作の停止させるブロック(詳細は後述する)を含むブロックの対は、原則として交換可能なブロックの対として設定しない。規則2は、規則1の例外を含む。つまり、当該ブロックの対が、互いに異なるカテゴリに属していても、交換可能なブロックの対として設定しない。また、規則2にも例外が設けられる。
【0098】
・規則3
動作を反復して実行させるブロック(詳細は後述する)の内部に配列されるブロックの内、互いに隣接するブロックの対は、原則として交換可能なブロックの対として設定する。規則3は、規則2の例外の一部を含む。つまり、対象物の動作の停止させるブロックを含むブロックの対であっても、動作を反復して実行させるブロックの内部に配列されるブロックの内、互いに隣接するブロックの対であれば、原則として交換可能なブロックの対として設定する。また、規則3よりも規則2が優先される場合がある。
【0099】
以下では、具体例(第1の例~第3の例)を挙げて本実施形態の類似度を算出する方法を説明する。また、第1の例において上記規則1についても詳細に説明し、第2の例において上記規則2についても詳細に説明し、第3の例において上記規則3についても詳細に説明する。
【0100】
[第1の例]
・正解プログラム
図12Aは、
図2AのS101での実行結果に対する一の正解プログラムA1である。この例の正解プログラムA1は、ブロックb
11、ブロックb
12、ブロックb
13を含み、ブロックb
11、ブロックb
12、ブロックb
13の順に連結されて配列されている。ブロックb
11には、ランボタンを示す図形と、「をクリックしたとき」という文字列が付されている。ブロックb
12には、「10歩動かす」と付されている。尚、ブロックb
12は、数値の引数を入力可能なブロックである。このブロックにおいて、「10」の部分が数値の引数である。ブロックb
13には、「動けと2秒言う」と付されている。ブロックb
13は、文字列及び数値の引数を入力可能なブロックである。このブロックにおいて、「動け」の部分が文字列の引数であって、「2」の部分が数値の引数である。
【0101】
この例のように、使用するブロックが引数を入力可能なブロックである場合がある。類似度算出手段206は、そのような場合に、入力プログラムの配列及び正解プログラムの配列を比較することに加え、入力プログラムに含まれる引数及び正解プログラムに含まれる引数を更に比較し、類似度を算出する。
【0102】
・入力プログラム
図12Bは、入力画面216上で学習者が作成した入力プログラムI1の例である。この図において、
図12Aと同じ種類のブロックには同じ符号が付されている。この例の入力プログラムI1は、ブロックb
11、ブロックb
13、ブロックb
12を含み、ブロックb
11、ブロックb
13、ブロックb
12の順に連結されて配列されている。
【0103】
・規則1の詳細
以下、上述した交換可能なブロックの対を設定するための規則1について、第1の例を用いて詳細に説明する。入力プログラムI1と正解プログラムA1を比べると、ブロックb12及びブロックb13の配置が異なる。正解プログラムA1と入力プログラムI1のブロックの配列はこの点で異なるが、双方の実行結果は同一である。これは、本実施形態で用いるビジュアルプログラミング言語が、以下のように設定されていることによる。
【0104】
本実施形態のプログラミング学習プログラムが用いるビジュアルプログラミング言語では、入力プログラムI1を実行する際に、ランボタンがクリックされた後、ブロックb13に対応する命令が実行される。一方、このブロックb13に対応する命令の実行の終了を待たずに、ブロックb12に対応する命令が実行される。つまり、ランボタンがクリックされた後に、ブロックb12及びブロックb13の処理が同時に実行される。正解プログラムA1においても、ブロックb12及びブロックb13の処理が同時に実行される。つまり、正解プログラムA1と入力プログラムI1の実行結果は同一になる。
【0105】
次に、本実施形態のプログラミング学習プログラムが用いるビジュアルプログラミング言語の設定について、詳細に説明する。入力プログラムを作成する際に、選択画面214から選択することができるブロックは、幾つかのカテゴリに分類される。この例では、8個のカテゴリに分類される。この内の、特にカテゴリ214a~214eを例に挙げて説明する。
【0106】
カテゴリ214aは、学習者が、例えばキーボードやマウス等を介して、外部入力をした場合の対象物の動作を司るブロックが属するカテゴリである。
【0107】
カテゴリ214bは、対象物の動作を司るブロックが属するカテゴリである。カテゴリ214bには、例えば、対象物を平行移動させたり、回転させたりするためのブロックが属する。
【0108】
カテゴリ214cは、視覚的効果を司るブロックが属するカテゴリである。カテゴリ214cには、例えば、対象物の周辺に、文字列が付された吹き出しを表示させたり、背景画像を変更させたりするためのブロックが属する。
【0109】
カテゴリ214dは、聴覚的効果を司るブロックが属するカテゴリである。カテゴリ214dには、例えば、音楽等の音声を出力させたり、音量を変化させたりするためのブロックが属する。
【0110】
カテゴリ214eは、他のブロックに対応する命令の制御を司るブロックが属するカテゴリである。カテゴリ214eには、例えば、あるブロックに対応する命令を反復して実行するよう制御したり、条件分岐をしたりするためのブロックが属する。
【0111】
第1の例において、ブロックb11はカテゴリ214aに属し、ブロックb12はカテゴリ214bに属し、ブロックb13はカテゴリ214cに属する。本実施形態のプログラミング学習プログラムが用いるビジュアルプログラミング言語では、このように、互いに異なるカテゴリに属し、隣接して配置されたブロックの対を含む場合、当該ブロックの対に対応する命令が、原則として同時に実行される。つまり、互いに異なるカテゴリに属するブロックの対が隣接して配列されている場合、当該ブロックの対を交換しても、交換の前後でプログラムの出力結果は変わらない。
【0112】
以上の理由から、互いに異なるカテゴリに属するブロックの対が隣接して配列されている場合、当該ブロックの対は交換可能なブロックの対として設定することが妥当である。
【0113】
この例では、入力プログラムI1に対し、ブロックb12及びブロックb13を交換したプログラムを、入力プログラムI1と同一とみなす。つまり、ブロックb11、ブロックb12、ブロックb13の順に連結されたプログラムを、入力プログラムI1と同一とみなす。
【0114】
・類似度の算出
以上を踏まえ、類似度を算出する方法について詳細に説明する。類似度算出手段206は、入力プログラムI1及び正解プログラムA1を、隣接行列として表現する。以下、入力プログラムI1を隣接行列として表現する方法について詳細に説明する。
【0115】
入力プログラムI1を隣接行列として表現する方法の説明の便宜上、入力プログラムI1をグラフとして表現する。
図12Cは、入力プログラムI1をグラフG1として表現した図である。グラフG1は、複数の頂点と、複数の辺から構成されている。複数の頂点の各々には、番号が付されている。複数の頂点の各々に付された番号は、グラフG1の始点又は終点、もしくは入力プログラムI1におけるブロック又はブロックに入力された引数を識別するための番号である。
図12Dは、第1の例において、複数の頂点の各々に付された番号と、グラフG1の始点又は終点、もしくは入力プログラムI1におけるブロック又はブロックに入力された引数等との対応関係を示している。グラフG1は、有向グラフであって、複数の辺の各々は矢印である。以下、グラフを作成する手順について説明する。
【0116】
1.頂点の設定
先ず、グラフの始点及び終点を示す頂点を設定する。更に、入力プログラムのブロックを示す頂点及びブロックに入力された引数を示す頂点を設定する。複数の頂点の各々には、グラフG1の始点又は終点、もしくは入力プログラムI1におけるブロック又はブロックに入力された引数を識別するための番号を付す。頂点に付される番号は、グラフG1の始点又は終点、もしくは入力プログラムI1におけるブロック又はブロックに入力された引数を識別することができればよく、番号を付す方法に特に制限はない。
【0117】
この例では、頂点の数は8である。8個の頂点の各々には、1~8のいずれかが付されている。この例では、グラフの始点及び終点を示す頂点として、それぞれ頂点1及び頂点8が設定されている。更に、ブロックb11、ブロックb12及びブロックb13を示す頂点として、それぞれ頂点2、頂点5及び頂点3が設定されている。また、ブロックb12の引数を示す頂点として頂点4が、ブロックb13の引数を示す頂点として頂点6及び頂点7が設定されている。
【0118】
尚、
図12Bの入力プログラムI1では、ブロックb
13の文字列の引数として「動け!」と付されているが、
図12Dでは「(文字列)」とのみ表示されている。これは、本実施形態では文字列の引数は類似度評価に考慮しないことに起因している。勿論、この例に限らず、文字列の引数を類似度評価に考慮してもよい。
【0119】
2.頂点の連結1
グラフの始点を示す頂点及び最初に実行されるブロックを示す頂点を矢印で連結する。このとき、矢印は、グラフの始点を示す頂点を始点とする。
【0120】
この例では、最初に実行されるブロックは、ブロックb11である。グラフの始点を示す頂点1及びブロックb11を示す頂点2が、頂点1を始点とする矢印で連結されている。
【0121】
3.頂点の連結2
ブロックに引数が入力されている場合は、当該ブロックを示す頂点及び当該ブロックに入力された引数を示す頂点を、矢印で連結する。このとき、矢印は、ブロックを示す頂点を始点とし、当該ブロックに入力された引数を示す頂点を終点とする。また、引数が複数ある場合には、当該ブロックに入力された引数を示す頂点は、他の引数を示す頂点を介して、当該ブロックを示す頂点と連結してもよい。
【0122】
この例では、頂点3及び頂点4が、頂点3を始点とする矢印で連結されている。更に、頂点5及び頂点6が、頂点5を始点とする矢印で連結されている。また、頂点6及び頂点7が、頂点6を始点とする矢印で連結されている。
【0123】
4.頂点の連結3
入力プログラムにおいて隣接する2つのブロックを示す2つの頂点を、矢印で連結する。このとき、矢印は、全てのブロックの内で最初に実行されるブロックに近く配置されている方のブロックを示す頂点を始点とする。
【0124】
この例では、頂点2及び頂点3が、頂点2を始点とする矢印で連結されている。更に、頂点3及び頂点5が、頂点3を始点とする矢印を含む双方向の矢印で連結されている。
【0125】
5.頂点の連結4
最初に実行されるブロックから最も離れて配置されているブロックを示す頂点及びグラフの終点を示す頂点を、矢印で連結する。このとき、矢印は、グラフの終点を示す頂点を終点とする。
【0126】
この例では、頂点5及び頂点8が、頂点8を終点とする矢印で連結されている。
【0127】
6.頂点の連結5
上記と同様の手続きで、入力プログラムと同一であるとみなされたプログラムの配列に基づいて、頂点間を連結する矢印を追加する。
【0128】
この例では、頂点2及び頂点5が、頂点2を終点とする矢印で連結されている。また、頂点5及び頂点3が、頂点5を始点とする矢印を含んで連結されている。更に、頂点3及び頂点8が、頂点8を終点とする矢印で連結されている。
【0129】
以上が、入力プログラムからグラフを作成するための手順である。尚、仮に入力プログラムI1と同一とみなされたプログラムから、上記の手順によってグラフを作成した場合、
図12Dに示したグラフG1と同一のグラフが得られる。つまり、このようにして作成されたグラフは、入力プログラムと、入力プログラムと同一とみなされたプログラムの双方を区別しないものとなっている。これは、上記手順6(頂点の連結5)によって、入力プログラムと同一とみなされたプログラムの配列がグラフに反映されたものとなったことに起因している。以上の手順1~手順6によって作成したグラフを、以下では「可換性が考慮されたグラフ」と呼ぶことがある。
【0130】
一方、上記の手順6を含めず、手順1~手順5のみによって作成したグラフ(図示せず)を、以下では「可換性が考慮されないグラフ」と呼ぶことがある。可換性が考慮されないグラフは、入力プログラムの配列のみが反映され、入力プログラムと同一とみなされたプログラムの配列は反映されない。従って、可換性が考慮されないグラフでは、入力プログラムと、入力プログラムと同一とみなされたプログラムの双方は区別される。
【0131】
次いで、類似度算出手段206は、以上の手順で作成した、可換性が考慮されたグラフを、隣接行列として表現する。
図12Eは、グラフG1を隣接行列として表現した図である。
【0132】
隣接行列の行及び列は、グラフの頂点に付された番号に対応する。隣接行列は、次のように作成される。グラフにおいて、頂点nを始点とし、頂点mを終点とする矢印が存在する場合は、隣接行列において、n行m列の成分を1とする。一方、頂点nを始点とし、頂点mを終点とする矢印が存在しない場合は、隣接行列において、n行m列の成分を0とする。第1の例では、n及びmは1以上8以下の整数である。
【0133】
入力プログラムと比較すべき正解プログラムについても、同様に隣接行列を導出する。または、正解プログラムの隣接行列は既に記憶手段200に記憶されており、類似度を算出する際に当該隣接行列を読み出してもよい。
【0134】
次いで、類似度算出手段206は、入力プログラムの隣接行列及び一の正解プログラムの隣接行列の余弦類似度を算出し、それを当該入力プログラム及び当該一の正解プログラムの類似度とする。この例では、入力プログラムI1及び正解プログラムA1の余弦類似度は1.0である。
【0135】
尚、グラフの作成において上記手順6を含めずに作成されたグラフ(可換性が考慮されないグラフ)を用いて類似度を算出すると、入力プログラムI1及び正解プログラムA1の余弦類似度は0.6である。
【0136】
つまり、可換性が考慮されたグラフを用いて類似度を算出することによって、入力プログラムと一の正解プログラムの双方のプログラムの配列が異なることに起因して、類似度が過小評価されることがない。
【0137】
[第2の例]
・正解プログラム
図13Aは、
図2AのS101での実行結果に対する一の正解プログラムA2である。この例の正解プログラムA2は、ブロックb
21、ブロックb
22、ブロックb
23、ブロックb
24を含み、ブロックb
21、ブロックb
22、ブロックb
23、ブロックb
24の順に連結されて配列されている。ブロックb
21には、「ランボタンがクリックされたら」と付されている。ブロックb
22には、「10歩動くよ!と2秒言う」と付されている。ブロックb
23には、「10歩動かす」と付されている。ブロックb
24には、「2秒まつ」と付されている。
【0138】
・入力プログラム
図13Bは、学習者が作成した入力プログラムI2の例である。この図において、
図13Aと同じ種類のブロックには同じ符号が付されている。この例の入力プログラムI2は、ブロックb
21、ブロックb
22、ブロックb
23、ブロックb
24を含み、ブロックb
21、ブロックb
22、ブロックb
24、ブロックb
23の順に連結されて配列されている。入力プログラムI2と正解プログラムA2を比べると、ブロックb
23及びブロックb
24の配置のみが異なる。
【0139】
・規則2の詳細
以下、上述した交換可能なブロックの対を設定するための規則2について、第2の例を用いて詳細に説明する。先ず、入力プログラムI2におけるブロックb23及びブロックb24に着目する。本実施形態において、ブロックb23は、カテゴリ214bに属する。ブロックb24は、カテゴリ214eに属する。つまり、ブロックb23及びブロックb24は、互いに異なるカテゴリに属するブロックの対である。この場合、第1の例で説明した原則によれば、ブロックb23及びブロックb24は交換可能なブロックの対として設定される。
【0140】
しかし、このブロックb24については例外とする。つまり、本実施形態では、ブロックb24及び他のブロックの対については、交換可能なブロックの対として設定しない。
【0141】
前述のように、本実施形態のビジュアルプログラミング言語では、互いに異なるカテゴリに属するブロックの対が隣接して配列されている場合、当該ブロックの対に対応する命令は、原則として同時に実行される。
【0142】
しかし、幾つかの種類のブロックについての例外が設定されており、ブロックb24はこの例外に属する。引数として2が入力されたブロックb24に対応する命令は、対象物の動作を2秒間停止させる命令である。対象物の動作を停止させる命令と、対象物に何らかの動作をさせる命令は、同時に両立し得ないため、このような例外が設定されている。従って、ブロックb24が、ブロックb24と異なるカテゴリに属するブロックと隣接して配列されている場合、双方のブロックの対に対応する命令は、同時に実行されるわけではない。従って、正解プログラムA2と入力プログラムI2の実行結果は同一とは言えない。
【0143】
・類似度の算出
第1の例で説明した手順で入力プログラムI2及び正解プログラムA2の類似度を算出する。この例では、図示はしないが、頂点の数は10である。この例においても、グラフの始点及び終点を示す頂点が設定される。更に、ブロックb21、ブロックb22、ブロックb23及びブロックb24を示す頂点が設定される。更に、ブロックb22の文字列の引数「10歩動くよ!」を示す頂点、ブロックb22の数値の引数「2」を示す頂点、ブロックb23の数値の引数「10」を示す頂点及びブロックb24の数値の引数「2」を示す頂点が設定されている。次いで、上記の手順によって隣接行列として表現し、正解プログラムA2についても、隣接行列として表現する。そして、入力プログラムI2及び正解プログラムA2の余弦類似度を算出すると、0.6となる。
【0144】
[第3の例]
・正解プログラム
図14Aは、
図2AのS101での実行結果に対する一の正解プログラムA3である。この例の正解プログラムA3は、先ず、ブロックb
31、ブロックb
32を含み、ブロックb
31、ブロックb
32の順に連結されて配列されている。そして、ブロックb
33、ブロックb
34を含み、ブロックb
33、ブロックb
34の順に連結され、ブロックb
32の内部に配列されている。
【0145】
正解プログラムA3において、ブロックb32には、「ずっと」と付されている。ブロックb32は、その内部に配列された1つ以上のブロックに対応する命令を反復して実行させるブロックである。つまり、この例では、ブロックb33及びブロックb34に対応する命令が、交互に反復して実行される。
・入力プログラム
【0146】
図14Bは、入力画面216上で学習者が作成した入力プログラムI3の例である。この図において、
図14Aと同じ種類のブロックには同じ符号が付されている。入力プログラムI3と正解プログラムA3を比べると、ブロックb
33、ブロックb
34の配置のみが異なる。
【0147】
・規則3の詳細
以下、上述した交換可能なブロックの対を設定するための規則3について、第3の例を用いて詳細に説明する。本実施形態では、動作を反復して実行させるブロックの内部に配列されるブロックの内、互いに隣接するブロックの対は、交換可能なブロックの対として設定する。つまり、ブロックb33及びブロックb34は交換可能なブロックの対として設定される。
【0148】
これは、以下の理由から妥当である。正解プログラムA3及び入力プログラムI3の双方において、ブロックb33及びブロックb34に対応する命令が交互に反復して実行される。この反復の最初に実行される命令は、正解プログラムA3においてはブロックb33に対応する命令であるが、入力プログラムI3においてはブロックb34に対応する命令である。つまり、正解プログラムA3及び入力プログラムI3において、反復の最初に実行される命令が異なるのみである。このようなプログラム間の差異は、本質的な差異とは言えない。更に、双方の実行結果の差異は微差であるため、双方のプログラムを同一とみなしてもよい。
【0149】
尚、第2の例において、「2秒まつ」と付されたブロックb24及び他のブロックの対については、交換可能なブロックの対として設定しないとした(規則2)。しかし、ブロックb24であっても、ブロックに対応する命令を反復して実行させるブロックの内部に1つ配列されている場合は、規則2の例外とする。つまり、規則3においては、ブロックb24のように、対象物の動作の停止を伴うブロックであっても、命令を反復して実行させるブロックの内部に1つ配列されている場合は、他のブロックと交換可能なブロックの対として設定する。一方、対象物の動作の停止を伴うブロックが、命令を反復して実行させるブロックの内部に2つ以上配列されている場合は、規則2が優先される。つまり、このような場合は、規則3の例外として、他のブロックと交換可能なブロックの対として設定しない。ここで、命令を反復して実行させるブロックとは、反復の回数に上限が設けられていないブロック及び上限が設けられているブロックを含む。
【0150】
以上を踏まえ、類似度を算出するに際し、類似度算出手段206は、入力プログラムにおけるブロックの配列を、グラフとして表現する。
図14Cは、入力プログラムI3をグラフG3として表現した図である。
図14Dは、この例において、頂点に付された番号と、ブロック又はブロックに入力された引数等との対応関係を示している。
【0151】
尚、1つ以上のブロックに対応する命令を反復して実行させるブロックを含む場合、グラフを作成する際に、当該反復して実行させるブロック及び当該1つ以上のブロックの各々示す頂点を環状に連結する。
図14Cにおいて、頂点3、頂点4及び頂点5が環状に連結されている。
【0152】
次いで、類似度算出手段206は、以上の手順で作成したグラフを、隣接行列として表現する。
図14Eは、グラフG3を隣接行列として表現した図である。
【0153】
入力プログラムI3の隣接行列及び一の正解プログラムA3の隣接行列の余弦類似度を算出すると、この例では、余弦類似度は1.0である。
【0154】
尚、グラフの作成において上記手順6を含めずに作成されたグラフ(可換性が考慮されないグラフ)を用いて類似度を算出すると、入力プログラムI3及び正解プログラムA3の余弦類似度は0.6である。
【0155】
つまり、可換性が考慮されたグラフを用いて類似度を算出することによって、入力プログラムと一の正解プログラムの双方のプログラムの配列が異なることに起因して、類似度が過小評価されることがない。
【0156】
以上、具体例を用いて交換可能なブロックの対、又は、交換可能なブロックの対を特定する条件の例を説明した。尚、交換可能なブロックの対、又は、交換可能なブロックの対を特定する条件は、以上の例に限られるものではない。あるプログラム内において、あるブロックの対の配置を交換して得られるプログラムが、交換する前のプログラムと同一又は類似の実行結果を出力すれば、当該ブロックの対を、交換可能なブロックの対として設定すればよい。
【0157】
更に、本実施形態のプログラミング学習プログラムは、第1実施形態のように、複数の対象物の動作を規定する場合に拡張することが可能である。このような場合、各正解プログラムは、複数の対象物の動作を規定する。そして、類似度算出手段206は、複数の対象物の各々に対して、入力プログラムの配列及び正解プログラムの配列を比較することによって、類似度を算出する。そして、類似度算出手段206は、例えば、複数の対象物の各々に対して算出された類似度の平均値を、入力プログラム及び正解プログラムの類似度としてもよい。
【0158】
以上から明らかなように、本実施形態に係るプログラミング学習プログラムにおいて、正解プログラムは、予め用意された複数種類のブロックから使用するブロックを選択して配列し、使用するブロックに対応する命令を配列に基づいて順次実行するビジュアルプログラミング言語によって記述されており、類似度算出手段206は、入力プログラムの配列及び正解プログラムの配列を比較し、入力プログラムが、異なる種類のブロックの対であって、予め設定された交換可能なブロックの対を含む場合に、交換可能なブロックの対を交換したプログラムを入力プログラムと同一とみなして、類似度を算出する。
【0159】
上記のような構成によれば、入力プログラムと一の正解プログラムの配列が異なるが、その差異が本質的ではない場合に、双方のプログラムを同一とみなすことができる。従って、入力プログラムと一の正解プログラムの配列は異なるが、双方のプログラムが同一又は類似の実行結果を出力する場合に、類似度が過小評価されることがない。
【0160】
更に、類似度算出手段206は、使用するブロックが引数を入力可能なブロックである場合に、入力プログラムに含まれる引数及び正解プログラムに含まれる引数を更に比較し、類似度を算出する。これによって、2つのプログラム間の類似度の判定が更に精密になる。
【0161】
更に、各正解プログラムは、複数の対象物の動作を規定し、類似度算出手段206は、複数の対象物の各々に対して、入力プログラムの配列及び正解プログラムの配列を比較することによって、類似度を算出する。つまり、複数の対象物ごとの動作を区別して類似度を算出するため、2つのプログラム間の類似度の判定が更に精密になる。
【0162】
上記実施形態は、例として提示したものであり、発明の範囲を限定するものではない。上記の構成は、適宜組み合わせて実施することが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。上記実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0163】
100:学習者端末 102:制御部 104:記憶部 200:記憶手段 202:表示制御手段 204:受付手段 206:類似度算出手段 208:判定手段 210:作成画面 212:プレビュー画面 214:選択画面 216:入力画面 218:ガイド画面 300:記憶手段 302:回答判定手段 304:表示制御手段 306:質問画面 308:作成画面 310:プレビュー画面 312:選択画面 314:入力画面 316:ガイド画面 400:プログラミング学習システム 500:学習管理サーバ 502:表示制御手段 600:電気通信回線