(57)【要約】【課題】プログラミングの自由度を制限することなく、正しく効率的にソースコードを作成できるように生徒を導き得るプログラミング教育支援装置及びプログラミング教育支援プログラムを提供する。【解決手段】プログラミング教育支援装置を構成する分析サーバ100は、タブレット端末30から分析対象となるソースコードを複数取得し、取得したソースコードの分類結果をPC50に提示する。さらに、分析サーバ100は、専門プログラマが入力したアドバイスを取得し、取得したアドバイスとソースコードとの対応付けを生成する。プログラミング教育支援装置を構成する指示サーバ200は、生徒がタブレット端末40を用いて入力したソースコードを取得し、取得したソースコードと対応付けられているアドバイスの出力をタブレット端末40に指示する。【選択図】図４Ａ
2019039971.tif 000002
【特許請求の範囲】
【請求項１】
プログラミング教育を支援するプログラミング教育支援装置であって、
プログラミングの学習者によって作成され、分析対象となるソースコードを複数取得する分析用コード取得部と、
前記分析用コード取得部によって取得された前記ソースコードを分類するコード分類部と、
前記ソースコードの分類結果に対してアドバイス入力者が入力したアドバイスを取得し、取得した前記アドバイスと前記ソースコードとの対応付けを生成するアドバイス生成部と、
プログラミングの学習者が第２所定端末を用いて入力したソースコードを取得する作成コード取得部と、
前記作成コード取得部によって取得された前記ソースコードと対応付けられている前記アドバイスの出力を前記第２所定端末に指示するアドバイス指示部と
を備えるプログラミング教育支援装置。
【請求項２】
前記コード分類部によって分類された前記ソースコードを第１所定端末に出力させることによって、前記分類結果をアドバイス入力者に提示する分類結果提示部を備え、
前記アドバイス生成部は、前記第１所定端末に提示された前記分類結果に対して前記アドバイス入力者が入力した前記アドバイスを取得する請求項１に記載のプログラミング教育支援装置。
【請求項３】
前記分析用コード取得部によって取得された前記ソースコードを所定単位で分割するコード分割部を備え、
前記コード分類部は、前記コード分割部によって前記所定単位に分割された前記ソースコードを分類する請求項１に記載のプログラミング教育支援装置。
【請求項４】
前記作成コード取得部は、前記学習者が前記第２所定端末に入力中の前記ソースコードを取得し、
前記作成コード取得部によって取得された前記第２所定端末に入力中のソースコードに基づいて、次に入力されるソースコードを予測する入力コード予測部を備え、
前記アドバイス指示部は、前記入力コード予測部によって予測された前記ソースコードと対応付けられている前記アドバイスの出力を前記第２所定端末に指示する請求項１に記載のプログラミング教育支援装置。
【請求項５】
前記第２所定端末に出力された前記アドバイスの理解度に対する前記学習者の評価を取得し、取得した前記評価に基づいて、前記第２所定端末に出力される前記アドバイスの難易度を決定するアドバイス評価処理部を備える請求項１に記載のプログラミング教育支援装置。
【請求項６】
前記学習者が前記第２所定端末に対して入力した前記アドバイスの難易度のレベルに基づいて、前記第２所定端末に出力される前記アドバイスの難易度を調整するアドバイスレベル調整部を備える請求項１に記載のプログラミング教育支援装置。
【請求項７】
前記アドバイス生成部は、前記分類結果に対して前記アドバイス入力者が入力した学習者補助情報を取得し、取得した前記学習者補助情報と前記ソースコードとの対応付けを生成し、
前記作成コード取得部によって取得された前記ソースコードと対応付けられている前記学習者補助情報の出力を第３所定端末に指示する補助情報指示部を備える請求項１に記載のプログラミング教育支援装置。
【請求項８】
プログラミング教育を支援するプログラミング教育支援プログラムであって、
プログラミングの学習者によって作成され、分析対象となるソースコードを複数取得する分析用コード取得処理と、
取得された前記ソースコードを分類するコード分類処理と、
前記ソースコードの分類結果に対してアドバイス入力者が入力したアドバイスを取得し、取得した前記アドバイスと前記ソースコードとの対応付けを生成するアドバイス生成処理と、
プログラミングの学習者が第２所定端末を用いて入力したソースコードを取得する作成コード取得処理と、
前記作成コード取得処理によって取得された前記ソースコードと対応付けられている前記アドバイスの出力を前記第２所定端末に指示するアドバイス指示処理と
をコンピュータに実行させるプログラミング教育支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラミング教育を支援するプログラミング教育支援装置及びプログラミング教育支援プログラムに関する。
【背景技術】
【０００２】
昨今、初等中等教育段階におけるプログラミング教育の推進について検討が進められている。従来、このようなプログラミング教育に関して、コンピュータソフトウェアのプログラミング教育を支援する教育支援システムが知られている（特許文献１参照）。
【０００３】
具体的には、当該教育支援システムは、生徒が作成したソースコードを分析し、エラー（バグ）を検出する。さらに、教育支援システムは、検出したエラーの内容を音声信号などによって生徒に通知できる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2010-231580号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
初等中等教育段階におけるプログラミング教育の場合、小学生などの児童生徒が対象となり、初めてプログラミングに接する機会となる場合も多いと想定される。このような場合、生徒がソースコードを作成する際に、どのようなエラーを引き起こすのかを予測することは難しい。
【０００６】
このため、プログラミング言語自体を簡略化し、許容されるソースコードの範囲を狭めることによって、このような問題に対応してきた。しかしながら、このような方法は、プログラミングの自由度を制限することになり、児童生徒の自由な発想や多彩な表現を阻害してしまう問題がある。
【０００７】
また、プログラミングに精通していない教師が、プログラミングの授業を担当することも想定され、教師のプログラミング教育に関する負担増大が懸念される。
【０００８】
そこで、本発明は、このような状況に鑑みてなされたものであり、プログラミングの自由度を制限することなく、正しく効率的にソースコードを作成できるように生徒を導き得るプログラミング教育支援装置及びプログラミング教育支援プログラムの提供を目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様は、プログラミング教育を支援するプログラミング教育支援装置（分析サーバ100及び指示サーバ200）であって、プログラミングの学習者によって作成され、分析対象となるソースコードを複数取得する分析用コード取得部（分析用コード取得部110）と、前記分析用コード取得部によって取得された前記ソースコードを分類するコード分類部（コード分類部140）と、前前記ソースコードの分類結果に対してアドバイス入力者が入力したアドバイスを取得し、取得した前記アドバイスと前記ソースコードとの対応付けを生成するアドバイス生成部（アドバイス生成部160）と、プログラミングの学習者が前記第２所定端末（タブレット端末40）を用いて入力したソースコードを取得する作成コード取得部（作成コード取得部220）と、前記作成コード取得部によって取得された前記ソースコードと対応付けられている前記アドバイスの出力を前記第２所定端末に指示するアドバイス指示部（アドバイス指示部240）とを備える。
【００１０】
本発明の一態様は、プログラミング教育を支援するプログラミング教育支援プログラムであって、プログラミングの学習者によって作成され、分析対象となるソースコードを複数取得する分析用コード取得処理と、取得された前記ソースコードを分類するコード分類処理と、前記ソースコードの分類結果に対してアドバイス入力者が入力したアドバイスを取得し、取得した前記アドバイスと前記ソースコードとの対応付けを生成するアドバイス生成処理と、プログラミングの学習者が第２所定端末を用いて入力したソースコードを取得する作成コード取得処理と、前記作成コード取得処理によって取得された前記ソースコードと対応付けられている前記アドバイスの出力を前記第２所定端末に指示するアドバイス指示処理とをコンピュータに実行させる。
【発明の効果】
【００１１】
上述したプログラミング教育支援装置及びプログラミング教育支援プログラムによれば、プログラミングの自由度を制限することなく、正しく効率的にソースコードを作成できるように生徒を導き得る。
【図面の簡単な説明】
【００１２】
【図１】図１は、プログラミング教育支援システム10の全体概略構成図である。
【図２】図２は、分析サーバ100の機能ブロック構成図である。
【図３】図３は、指示サーバ200の機能ブロック構成図である。
【図４Ａ】図４Ａは、ソースコードと対応付けられたアドバイス提示に関する全体動作シーケンスを示す図である。
【図４Ｂ】図４Ｂは、ソースコードと対応付けられたアドバイス提示に関する全体動作シーケンスを示す図である。
【図５】図５は、分析サーバ100の動作フローを示す図である。
【図６】図６は、指示サーバ200の動作フロー（その１）を示す図である。
【図７】図７は、指示サーバ200の動作フロー（その２）を示す図である。
【図８】図８は、Abstract Syntax Tree (AST)の生成例（C++の場合）を示す図である。
【図９】図９は、構造体単位で分割されたソースコードを類似コードに分類する動作イメージを示す図である。
【図１０Ａ】図１０Ａは、PC50に出力される分類結果の例を示す図である。
【図１０Ｂ】図１０Ｂは、PC50から入力されたアドバイスの例を示す図である。
【図１０Ｃ】図１０Ｃは、PC50から入力されたアドバイスの例を示す図である。
【図１１】図１１は、タブレット端末40に表示されるアドバイスのイメージ例を示す図である。
【図１２】図１２は、タブレット端末40に表示されるアドバイスの例（その１）を示す図である。
【図１３】図１３は、タブレット端末40に表示されるアドバイスの例（その２）を示す図である。
【図１４】図１４は、PC60に表示される生徒の傾向分析結果の例（その１）を示す図である。
【図１５】図１５は、PC60に表示される生徒の傾向分析結果の例（その２）を示す図である。
【図１６】図１６は、分析サーバ100及び指示サーバ200のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、実施形態を図面に基づいて説明する。なお、同一の機能や構成には、同一または類似の符号を付して、その説明を適宜省略する。
【００１４】
（１）プログラミング教育支援システムの全体概略構成
図１は、本実施形態に係るプログラミング教育支援システム10の全体概略構成図である。図１に示すように、プログラミング教育支援システム10は、分析サーバ100及び指示サーバ200を含む。本実施形態において、分析サーバ100及び指示サーバ200は、プログラミング教育支援装置を構成する。
【００１５】
分析サーバ100及び指示サーバ200は、通信ネットワーク20を介して接続されている。通信ネットワーク20の種別は、特に限定されないが、典型的には、Internet Protocol（IP）に従ったパケットネットワークである。通信ネットワーク20には、移動通信ネットワークまたはインターネットが含まれてもよい。
【００１６】
通信ネットワーク20には、タブレット端末30、タブレット端末40、パーソナルコンピュータ50（以下、PC50）及びパーソナルコンピュータ60（以下、PC60）が接続される。
【００１７】
タブレット端末30は、プログラミングを学習する複数の学生群によって利用される。タブレット端末40も、プログラミングを学習する学生によって利用されるが、PC60を利用する教師の生徒によって利用される。
【００１８】
タブレット端末30及びタブレット端末40は、同様の機能を有する。タブレット端末30及びタブレット端末40は、分析サーバ100及び指示サーバ200と通信を実行し、学生群によるプログラミング教育を支援する処理を実行する。タブレット端末30及びタブレット端末40には、分析サーバ100及び指示サーバ200と連携して動作するために必要となる専用のアプケーションがインストールされてもよい。
【００１９】
学生群（教師の生徒を含む）は、タブレット端末30またはタブレット端末40を用いてプログラミング教育を受ける。具体的には、学生群は、課題に従って作成したソースコードをタブレット端末30またはタブレット端末40に入力する。
【００２０】
PC50は、プログラミングに精通した専門プログラマによって利用される。専門プログラマは、PC50を利用して、学生群によるプログラミング、具体的には、課題に従ったソースコードの作成に関するアドバイスを入力する。つまり、専門プログラマは、本実施形態においてアドバイス入力者に該当する。
【００２１】
PC60は、タブレット端末40を利用する生徒の教師によって利用される。PC60は、教師の生徒が作成したソースコードに基づいて、当該生徒の傾向分析結果などを表示する。
【００２２】
分析サーバ100及び指示サーバ200を含むプログラミング教育支援システム10は、学生群のプログラミング教育を支援する。分析サーバ100は、学生群が作成したソースコードを分析する。指示サーバ200は、学生群が作成したソースコードに対するアドバイスの出力をタブレット端末30またはタブレット端末40に指示する。
【００２３】
（２）プログラミング教育支援システムの機能ブロック構成
次に、プログラミング教育支援システム10の機能ブロック構成について説明する。具体的には、分析サーバ100及び指示サーバ200の機能ブロック構成について説明する。
【００２４】
（２．１）分析サーバ100
図２は、分析サーバ100の機能ブロック構成図である。図２に示すように、分析サーバ100は、分析用コード取得部110、分析用コード記憶部120、コード分割部130、コード分類部140、分類結果提示部150、アドバイス生成部160及びアドバイスデータ記憶部170を備える。
【００２５】
分析用コード取得部110は、プログラミングの学習者によって作成されたソースコードを取得する。具体的には、分析用コード取得部110は、学生群（図１参照）がタブレット端末30を用いて入力したソースコードを複数取得する。当該ソースコードは、学生群、つまり、プログラミングの学習者が、与えられた課題に基づいて作成したソースコードである。
【００２６】
分析用コード取得部110がタブレット端末30を介して取得した当該ソースコードは、分析サーバ100による分析対象となるソースコードである。すなわち、分析用コード取得部110は、学生群（プログラミングの学習者）によって作成され、分析対象となるソースコードを複数取得する。
【００２７】
分析用コード記憶部120は、分析用コード取得部110によって取得されたソースコード、つまり、分析用のソースコード（分析用コード）を記憶する。分析用コード記憶部120は、多数の分析用コードを記憶できる。分析精度を高める観点から、分析用コード取得部110によって取得され、分析用コード記憶部120に記憶される分析用コードの数は、一定値（例えば、100）以上であることが好ましい。
【００２８】
コード分割部130は、分析用コード取得部110によって取得されたソースコードを所定単位で分割する。具体的には、コード分割部130は、プログラムパーサーによって生成される抽象構文木（Abstract Syntax Tree (AST)）を用いて、当該ソースコード（つまり、プログラム）を分割する。
【００２９】
また、コード分割部130は、所定単位、つまり、分割の粒度として、翻訳単位、スコープ単位、クラス単位、関数単位、行単位などで当該ソースコードを分割できる。例えば、C++を例にとれば、コード分割部130は、libClangを用いてASTを生成できる。
【００３０】
ここで、図８は、Abstract Syntax Tree (AST)の生成例（C++の場合）を示す。図８に示すように、C++の場合、libClangを用いて左側のソースコード（プログラム）をパースし、右側に示すようなASTを生成できる。コード分割部130は、ASTによって示される文法情報を用いてソースコードを分割する。
【００３１】
なお、コード分割部130は、必ずしも必須ではなく、ソースコードの内容によっては、コード分割部130の処理はバイパスされてもよい。
【００３２】
コード分類部140は、分析用コード取得部110によって取得されたソースコードを分類する。或いは、コード分類部140は、コード分割部130によって所定単位（翻訳単位など）に分割されたソースコードを分類する。
【００３３】
具体的には、コード分類部140は、分割された単位毎に、k-means法などによって当該ソースコードをクラスタリングする。例えば、コード分類部140は、特徴ベクトルとして、出現単語の頻度情報を用いたり、各言語の予約語、または標準関数の出現頻度などを用いたりすることができる。
【００３４】
ここで、図９は、構造体単位で分割されたソースコードを類似コードに分類する動作イメージを示す。図９に示すように、構造体単位で分割されたソースコードの部分（図９の上段）は、特徴ベクトル化される。具体的には、各ワードの出現回数が抽出される（図９の中段）。
【００３５】
次いで、特徴ベクトル化されたソースコードは、k-means法などによってクラスタリングされ、類似のコードが纏められる（図９の下段）。
【００３６】
分類結果提示部150は、コード分類部140によるソースコードの分類結果を提示する。具体的には、分類結果提示部150は、コード分類部140によって分類されたソースコードをPC50（第１所定端末）に出力させる。上述したように、PC50は、専門プログラマが利用する。
【００３７】
分類結果提示部150は、分類されたソースコードをPC50に出力させることによって、ソースコードの分類結果を専門プログラマ（アドバイス入力者）に提示する。
【００３８】
ここで、図１０Ａ〜図１０Ｃは、PC50に出力、具体的には、PC50の画面に表示される分類結果の例と、PC50から入力されたアドバイスの例とを示す。
【００３９】
図１０Ａは、PC50の画面に表示される分類結果の例を示す。図１０Ａに示すように、ソースコードの分類（図１０Ａの［0001］〜［0011］）毎に、大量の分割されたソースコードが表示される。当該ソースコードの領域をクリックすると、分割前のソースコードを確認することも可能である。
【００４０】
図１０Ａの例では、分類［0003］が選択されており、当該分類に対するアドバイスの入力エリア（図中の「分類アドバイス」のエリア）、及び個別のソースコードに対するアドバイスの入力エリア（図中の「個別アドバイス」のエリア）が設けられている。つまり、専門プログラマは、当該分類全体に対するアドバイス、及び当該分類に属する個別のソースコードに対するアドバイスを別個に入力できる。
【００４１】
図１０Ｂは、分類に属する個別のソースコードに対するアドバイスの入力例を示す。図１０Ｂに示すように、分類［0003］に属する個別のソースコード（開始及び終了文字の位置で指定）に対するアドバイス（「角度に注意」、「第一引数を3.14倍する必要がある」）が対応付けられている。
【００４２】
図１０Ｃは、ソースコードの分類に対するアドバイスの入力例を示す。図１０Ｃに示すように、分類［1294］及び［4412］に対するアドバイス（「Printの書式は%d整数、%f少数…」、「多重継承に注意」）が対応付けられている。
【００４３】
アドバイス生成部160は、アドバイスとソースコードとの対応付けを生成する。具体的には、アドバイス生成部160は、PC50に提示されたソースコードの分類結果に対して専門プログラマがPC50を用いて入力したアドバイスを取得する。具体的には、アドバイス生成部160は、図１０Ｂ及び図１０Ｃに示したようなアドバイスを取得する。
【００４４】
アドバイス生成部160は、取得したアドバイスとソースコードとの対応付けを生成する。具体的には、アドバイス生成部160は、図１０Ｂに示したように、分類に属する個別のソースコードに対するアドバイスと、当該ソースコードとを対応付ける。また、アドバイス生成部160は、図１０Ｃに示したように、ソースコードの分類に対するアドバイスと、当該分類とを対応付ける。
【００４５】
また、アドバイス生成部160は、ソースコードの分類結果に基づいて、当該分類（または個別のソースコード）に対応付けられるアドバイスを自動生成してもよい。例えば、アドバイス生成部160は、特定の類似コードの後に、高い頻度で作成されるプログラム（ソースコード）を提示したり、特定のプログラムがよく修正される場合には、修正後のコード例を提示したりすることができる。
【００４６】
さらに、アドバイス生成部160は、当該分類結果に対して専門プログラマ（アドバイス入力者）が入力した学習者補助情報を取得し、取得した学習者補助情報とソースコードとの対応付けを生成できる。
【００４７】
学習者補助情報とは、抽出されたソースコードに関連する秘訣、小技、コツなどのTips、及びプログラミングに関する次回課題案などである。
【００４８】
アドバイスデータ記憶部170は、アドバイス生成部160によって生成されたアドバイスと、ソースコード（またはソースコードの分類）との対応付けを、アドバイスデータとして記憶する。
【００４９】
具体的には、アドバイスデータ記憶部170は、ソースコードの分類、当該分類に属するソースコード、及びアドバイスの内容を階層化し、当該階層化されたデータ（アドバイスデータ）をデータベースとして蓄積する。
【００５０】
また、当該アドバイスデータには、学年または年代を示す情報がさらに対応付けられてもよいし、ソースコードの分類間の関連性、つまり、所定のソースコードの分類の次に記述されるソースコードの分類を示すソースコードの構成情報がさらに対応付けられてもよい。
【００５１】
（２．２）指示サーバ200
図３は、指示サーバ200の機能ブロック構成図である。図２に示すように、指示サーバ200は、アドバイスデータ取得部210、作成コード取得部220、アドバイス抽出部230、アドバイス指示部240、入力コード予測部250、アドバイス評価処理部260、アドバイスレベル調整部270及び生徒傾向分析部280を備える。
【００５２】
アドバイスデータ取得部210は、分析サーバ100に蓄積されているアドバイスデータを取得する。具体的には、アドバイスデータ取得部210は、分析サーバ100に対してクエリを送信すること、或いはバッチ処理要求を送信することによって、アドバイスデータを取得する。
【００５３】
作成コード取得部220は、プログラミングの学習者が作成したソースコードを取得する。具体的には、作成コード取得部220によって取得されるソースコードは、分析サーバ100の分析用コード取得部110によって取得されるソースコードと同様に、学生群によって作成されるが、特に、PC60を利用する教師（図１参照）の生徒がタブレット端末40を用いて作成したソースコードを意味する。
【００５４】
つまり、作成コード取得部220は、当該生徒（プログラミングの学習者）が、タブレット端末40（第２所定端末）を用いて入力したソースコードを取得する。この際、作成コード取得部220は、生徒IDなどの識別情報を合わせて取得できる。
【００５５】
また、作成コード取得部220は、当該生徒がタブレット端末40に入力し終えたソースコード全体を一遍に取得してもよいし、当該生徒がタブレット端末40に入力中のソースコード、つまり、作成途中のソースコード一部を取得してもよい。
【００５６】
アドバイス抽出部230は、作成コード取得部220によって取得されたソースコードと対応付けられているアドバイスを抽出する。具体的には、アドバイス抽出部230は、作成コード取得部220によって取得されたソースコード、或いは当該ソースコードの分類と対応付けられているアドバイスを抽出する。アドバイス抽出部230は、アドバイスデータ取得部210によって取得されたアドバイスデータを用いて当該アドバイスを抽出する。
【００５７】
なお、アドバイス抽出部230は、作成コード取得部220によって取得されたソースコードを作成した当該生徒の学年（年代）に応じたアドバイスを抽出してもよい。この場合、上述したように、アドバイスデータには、学年または年代を示す情報が対応付けられている必要がある。
【００５８】
アドバイス指示部240は、アドバイス抽出部230によって抽出されたアドバイスの出力をタブレット端末40（第２所定端末）に指示する。つまり、アドバイス指示部240は、作成コード取得部220によって取得されたソースコードと対応付けられているアドバイスの出力をタブレット端末40に指示する。
【００５９】
ここで、図１１は、タブレット端末40に表示されるアドバイスのイメージ例を示す。図１１に示すように、生徒がタブレット端末40に入力したソースコードの右側に、ソースコードの分類毎のアドバイスが表示される。図１１の例では、分類［0001］,［0003］及び［0011］と、当該分類と対応付けられたアドバイスとが表示されている。
【００６０】
図１１に示すように、アドバイス指示部240は、入力したソースコードの近傍にアドバイスを表示するようにタブレット端末40に指示することが好ましい。なお、より具体的なアドバイスの表示例については、さらに後述する。
【００６１】
また、アドバイス指示部240は、入力コード予測部250によって予測されたソースコードと対応付けられているアドバイスの出力をタブレット端末40に指示することもできる。さらに、アドバイス指示部240は、アドバイスレベル調整部270によって取得されたアドバイスの難易度のレベルに基づいて、該当するアドバイスの出力をタブレット端末40に指示することもできる。
【００６２】
入力コード予測部250は、作成コード取得部220によって取得されたタブレット端末40（第２所定端末）に入力中のソースコードに基づいて、次に入力されるソースコードを予測する。
【００６３】
具体的には、入力コード予測部250は、アドバイスデータ取得部210によって取得されたアドバイスデータ、特に、ソースコードの構成情報に基づいて、入力中のソースコードの分類の次に入力される確率が高く、アドバイスが対応付けられているソースコードの分類を抽出する。
【００６４】
入力コード予測部250は、抽出したソースコードの分類をアドバイス指示部240に通知する。つまり、入力コード予測部250は、入力中のソースコードの分類の次に入力される確率が高く、かつ間違え易いソースコードに対するアドバイスを速やかにアドバイス指示部240に指示させることができる。
【００６５】
アドバイス評価処理部260は、タブレット端末40（第２所定端末）に出力されたアドバイスの理解度に対する当該生徒（プログラミングの学習者）の評価を取得する。また、アドバイス評価処理部260は、取得した当該評価に基づいて、タブレット端末40に出力されるアドバイスの難易度を決定する。
【００６６】
アドバイスの理解度に対する当該生徒の評価とは、単純に「OKまたはNG」を示すもの、或いは「いいね」の付与などであってもよい。アドバイス評価処理部260は、当該評価の内容と、当該生徒の属性（学年など）とに基づいて、タブレット端末40に出力されるアドバイスの一部（例えば、難し過ぎると考えられるアドバイス、或いは簡単過ぎるアドバイス）をフィルタリングできる。
【００６７】
また、アドバイス評価処理部260は、当該評価の結果を、アドバイスを入力した専門プログラマが利用するPC50に送信することもできる。
【００６８】
アドバイスレベル調整部270は、当該生徒（プログラミングの学習者）がタブレット端末40（第２所定端末）に対して入力したアドバイスの難易度のレベルを取得する。アドバイスレベル調整部270は、取得した当該難易度のレベルに基づいて、タブレット端末40に出力されるアドバイスの難易度を調整する。
【００６９】
具体的には、アドバイスレベル調整部270は、アドバイス評価処理部260によるアドバイスのフィルタリングとは異なり、ユーザ（生徒）が自由にアドバイスの難易度のレベルを調整することを実現する。アドバイスレベル調整部270は、例えば、タブレット端末40の画面に当該難易度を調整するためのスライダなどを表示させ、ユーザが希望する難易度をアドバイス指示部240に通知する。
【００７０】
生徒傾向分析部280は、作成コード取得部220によって取得されたソースコードに基づいて、当該生徒のプログラミングに関する傾向を分析する。具体的には、生徒傾向分析部280は、生徒IDなどの識別情報を教師が利用するPC60を介して取得する。
【００７１】
生徒傾向分析部280は、作成コード取得部220によって取得され、当該生徒IDと対応付けられているソースコードの内容に基づいて、複数の生徒が共通して間違い易いソースコードを抽出できる。
【００７２】
また、生徒傾向分析部280は、抽出されたソースコードに関連する秘訣、小技、コツなどのTips、及びプログラミングに関する次回課題案などを示したりすることができる。本実施形態において、生徒傾向分析部280は作成コード取得部220によって取得されたソースコードと対応付けられている学習者補助情報（上述したTips及び次回課題案など）の出力をPC60（第３所定端末）に指示する補助情報指示部を構成する。
【００７３】
なお、上述したように、当該Tips及び次回課題案も、専門プログラマによってアドバイスと同様に入力される。
【００７４】
（３）プログラミング教育支援システムの動作
次に、プログラミング教育支援システム10の動作について説明する。具体的には、ソースコードと対応付けられたアドバイス提示に関する全体動作シーケンス、分析サーバ100の動作フロー及び指示サーバ200の動作フローについて説明する。
【００７５】
（３．１）全体動作シーケンス
図４Ａ及び図４Ｂは、ソースコードと対応付けられたアドバイス提示に関する全体動作シーケンスを示す。
【００７６】
（３．１．１）分析用コード取得フェーズ
図４Ａに示すように、タブレット端末30は、学生群によって作成された多数のソースコードを取得する（S10）。なお、当該多数のソースコードは、与えられた同様の課題に基づいて当該学生群が作成したものである。なお、同様の課題とは、完全に同一の課題であってもよいし、同様のソースコードを作成し得るような類似の課題であってもよい（以下同）。
【００７７】
具体的には、タブレット端末30は、学生群によって入力されたソースコードを取得する。タブレット端末30は、取得した多数のソースコードを分析サーバ100に送信する（S20）。
【００７８】
分析サーバ100は、タブレット端末30から受信したソースコードを分析する（S30）。具体的には、分析サーバ100は、タブレット端末30から受信したソースコードを分割及び分類し、当該ソースコードの分類結果を生成する。分析サーバ100は、生成した分類結果を専門プログラマが利用するPC50に送信する（S40）。
【００７９】
PC50は、分析サーバ100から受信した当該分類結果を表示し、専門プログラマがPC50を用いて入力したアドバイスを分析サーバ100に送信する（S50）。
【００８０】
分析サーバ100は、取得したアドバイスとソースコードの分類（または個別のソースコード）との対応付けを生成し、生成した対応付けを指示サーバ200に送信する（S60）。
【００８１】
（３．１．２）アドバイス提示フェーズ
生徒が利用するタブレット端末40は、生徒によって入力されたソースコードを取得する（S70）。なお、当該ソースコードは、与えられた同様の課題に基づいて当該生徒が作成したものである。タブレット端末40は、取得したソースコードを指示サーバ200に送信する（S80）。
【００８２】
指示サーバ200は、タブレット端末40から受信したソースコードと対応付けられているアドバイスを抽出する（S90）。指示サーバ200は、抽出したアドバイスをタブレット端末40に送信する（S100）。
【００８３】
タブレット端末40は、指示サーバ200から受信したアドバイスを表示し、表示したアドバイスに対する当該生徒の評価（「OKまたはNG」、「いいね」の付与など）を取得する（S110）。タブレット端末40は、取得した評価を指示サーバ200に送信する（S120）。
【００８４】
なお、タブレット端末40は、生徒がタブレット端末40に対して入力したアドバイスの難易度のレベルを当該評価と合わせて指示サーバ200に送信してもよい。
【００８５】
指示サーバ200は、タブレット端末40から受信した評価に基づいて、タブレット端末40に出力されるアドバイスの難易度を決定する（S130）。具体的には、上述したように、指示サーバ200は、タブレット端末40に出力されるアドバイスの一部（例えば、難し過ぎると考えられるアドバイス、或いは簡単過ぎるアドバイス）をフィルタリングできる。
【００８６】
また、指示サーバ200は、タブレット端末40から受信したアドバイスの難易度のレベルに応じて、タブレット端末40に出力されるアドバイスの難易度を調整してもよい。
【００８７】
指示サーバ200は、タブレット端末40から受信したアドバイスに対する生徒の評価結果をPC50に送信する（S140）。これにより、専門プログラマが作成し、入力したアドバイスに対するフィードバックを図る。
【００８８】
（３．１．３）生徒傾向分析フェーズ
図４Ｂに示すように、PC60は、教師によって入力された生徒ID（生徒番号、氏名などの識別情報）を指示サーバ200に送信する（S150）。つまり、教師は、分析対象としたい生徒の識別情報をPC60に入力する。なお、生徒IDは、複数入力されてもよい。
【００８９】
指示サーバ200は、PC60から受信した生徒IDに基づいて、当該生徒のプログラミングに関する傾向を分析する（S160）。具体的には、指示サーバ200は、当該生徒IDと対応付けられているソースコードの内容を分析し、複数の生徒が共通して間違い易いソースコードを抽出する。
【００９０】
指示サーバ200は、抽出されたソースコード、当該ソースコードに対応付けられているTips、及びプログラミングに関する次回課題案をPC60に送信する（S170）。
【００９１】
PC60は、複数の生徒が共通して間違い易いソースコード、当該ソースコードに関連付けられているTips、及びプログラミングに関する次回課題案を生徒傾向分析結果として表示する（S180）。
【００９２】
（３．２）分析サーバ100の動作フロー
図５は、分析サーバ100の動作フローを示す。図５に示すように、分析サーバ100は、学生群が作成したソースコードを複数取得する（S210）。なお、取得するソースコードの数は、適切なアドバイスの入力を実現するために、一定値（例えば、100）以上であることが好ましい。
【００９３】
分析サーバ100は、取得したソースコードを分割する（S220）。具体的には、分析サーバ100は、プログラムパーサーによって生成される抽象構文木（Abstract Syntax Tree (AST)）を用いて、当該ソースコード（つまり、プログラム）を分割する。
【００９４】
分析サーバ100は、構造体単位で分割したソースコードを特徴ベクトル化する（S230）。具体的には、分析サーバ100は、ソースコードに含まれる各ワードの出現回数などを抽出する。なお、特徴ベクトルとしては、上述したように、出現単語の頻度情報を用いたり、各言語の予約語、または標準関数の出現頻度などを用いたりすることができる。
【００９５】
分析サーバ100は、特徴ベクトル化されたソースコードを分割された単位として、当該単位毎に、k-means法などによってクラスタリングする（S240）。これにより、類似のコードが纏められ、ソースコードの分類が完了する。
【００９６】
分析サーバ100は、専門プログラマが利用するPC50に対して、分類したソースコード、つまり、分類結果を提示する（S250）。この結果、専門プログラマは、学生群が作成したソースコードを分類毎に確認することができ、学生群がどのようなプログラミング技術を用いているか、どのような間違いをし易いのかなどを容易に認識できる。
【００９７】
分析サーバ100は、専門プログラマがPC50を用いて入力した当該ソースコードに対するアドバイスを取得する（S260）。当該アドバイスとしては、次のような例が挙げられる（C++の場合）。なお、より具体的なアドバイスの例については、さらに後述する。
【００９８】
・  クラスを多重継承した場合、基底クラスへのアクセスに問題がある可能性がある
・  printfの関数の書式に関するTips
・  三角関数の使用時における角度計算に関するTips
（例）角度の平均化の注意点
・  角度を足して、足した数で割っても平均にはならない
・  60°と-300°の平均は-120°だが、実際は60°になる
・  0°と180°の平均は90°と270°になる可能性がある
・  角度を全て単位ベクトルに直して、ベクトル和の角度を平均とする手法などがある
・  3DCGの計算に関する処理での注意点
（例）行列の掛ける順序によって意味が変わるので注意
また、分析サーバ100は、当該ソースコードに対するアドバイスの自動生成が可能か否かを判定する（S270）。
【００９９】
アドバイスの自動生成が可能な場合、分析サーバ100は、アドバイスを自動生成する（S280）。例えば、分析サーバ100は、当該ソースコードに明らかな構文上の誤りが含まれており、当該誤りを訂正した正しい記述内容を特定できる場合には、アドバイスを自動生成可能と判定する。また、分析サーバ100は、構文エラーが存在する場合、またはワーニングなどによる修正を促せる場合、アドバイスを自動生成可能と判定してもよい。
【０１００】
分析サーバ100は、ソースコードの分類（または個別のソースコード）と、アドバイスとを対応付ける（S290）。具体的には、分析サーバ100は、図１０Ｂ及び図１０Ｃに示したように、個別のソースコードに対するアドバイスと、当該ソースコードとを対応付けたり、ソースコードの分類に対するアドバイスと、当該分類とを対応付けたりする。
【０１０１】
分析サーバ100は、ソースコードの分類（または個別のソースコード）と、アドバイスとを対応付けを、アドバイスデータとして記憶する（S300）。
【０１０２】
（３．３）指示サーバ200の動作フロー
図６は、指示サーバ200の動作フロー（その１）を示す。具体的には、図６は、生徒が作成したソースコードに対するアドバイスの提示、及び当該アドバイスの評価に関する動作フローを示す。
【０１０３】
図６に示すように、指示サーバ200は、生徒がタブレット端末40を用いて入力したソースコードを取得する（S410）。なお、指示サーバ200は、この際、生徒IDなどの識別情報を合わせて取得する。また、指示サーバ200は、上述したように、当該生徒がタブレット端末40に入力し終えたソースコード全体を一遍に取得してもよいし、当該生徒がタブレット端末40に入力中のソースコード、つまり、作成途中のソースコードの一部を取得してもよい。或いは、指示サーバ200は、基準となるソースコードと、生徒が入力した当該ソースコードとの差分のみを取得してもよい。
【０１０４】
指示サーバ200は、取得したソースコードが属する分類を判定する（S420）。具体的には、指示サーバ200は、取得したソースコードの内容に基づいて、アドバイスデータを検索し、当該ソースコードが属する分類を判定する。
【０１０５】
指示サーバ200は、判定された分類（または個別のソースコード）と対応付けられているアドバイスを取得する（S430）。指示サーバ200は、生徒が利用するタブレット端末40に対して、取得したアドバイスを提示する（S440）。この結果、生徒は、作成した（或いは作成中の）ソースコードに対するアドバイスの内容を確認できる。
【０１０６】
ここで、図１２は、タブレット端末40に表示されるアドバイスの例（その１）を示す。図１２の例では、タブレット端末40には、生徒が入力した三角関数に関するプログラムのソースコードが表示されるとともに、該当するソースコードの近傍において、吹き出し形のアドバイスが表示されている。
【０１０７】
当該アドバイスは、模範的なソースコードの記述例が示されており、このようなアドバイスが表示されることによって、間違い易いソースコードの修正を促すことができる。特に、三角関数に関するプログラミングに不慣れな年代（学年）の生徒は、当該アドバイスを見ながらソースコードを作成していくこともできる。
【０１０８】
図１３は、タブレット端末40に表示されるアドバイスの例（その２）を示す。図１３の例では、図１２と同様に、タブレット端末40には、生徒が入力した三角関数に関するプログラムのソースコードが表示されるとともに、該当するソースコードの近傍において、吹き出し形のアドバイスが表示されている。
【０１０９】
当該アドバイスは、入力されたソースコードが構文的には正しくコンパイルされるものの、意味的にはatan2f（y,x）が正しいことを生徒に促すことができる。このようなアドバイスが表示されることによって、コンパイル可能なものの、意味的に誤っているソースコードの修正を促すことができる。
【０１１０】
なお、図１２及び図１３では、三角関数のプログラミングに関するアドバイスの例を示したが、指示サーバ200は、分析サーバ100の動作フローの説明（S260）で示したようなアドバイスをタブレット端末40に表示させることもできる。
【０１１１】
指示サーバ200は、タブレット端末40に表示されたアドバイスを参照した生徒による当該アドバイスに対する評価（「OKまたはNG」、「いいね」の付与など）を取得する（S450）。指示サーバ200は、分析サーバ100によって取得された各種のアドバイス（分析サーバ100の動作フローに関する説明を参照）を提示できる。
【０１１２】
指示サーバ200は、取得した当該評価に基づいて、タブレット端末40に出力されるアドバイスの難易度を決定する（S460）。
【０１１３】
具体的には、指示サーバ200は、当該評価の内容と、当該生徒の属性（学年など）とに基づいて、タブレット端末40に出力されるアドバイスの一部（例えば、難し過ぎると考えられるアドバイス、或いは簡単過ぎるアドバイス）をフィルタリングできる。
【０１１４】
また、指示サーバ200は、当該生徒が入力したアドバイスの難易度のレベルを取得し、取得した当該難易度のレベルに基づいて、タブレット端末40に出力されるアドバイスの難易度を調整することもできる。
【０１１５】
指示サーバ200は、アドバイスを入力した専門プログラマが利用するPC50に対して、当該評価の結果を送信する（S470）。
【０１１６】
図７は、指示サーバ200の動作フロー（その２）を示す。具体的には、図７は、生徒傾向の分析に関する動作フローを示す。
【０１１７】
図７に示すように、指示サーバ200は、教師が利用するPC60に入力された生徒IDを取得する（S610）。
【０１１８】
指示サーバ200は、取得した生徒IDに基づいて、当該生徒IDと対応付けられているソースコードの分類結果をサーチする（S620）。具体的には、指示サーバ200は、当該生徒IDと対応付けられているソースコードの内容を分析し、複数の生徒が共通して間違い易いソースコードを抽出する。
【０１１９】
指示サーバ200は、サーチした分類結果と対応付けられているTipsを取得する（S630）。さらに、指示サーバ200は、分類結果（ソースコード）に基づいて、プログラミングに関する次回課題案を決定する（S640）。上述したように、本実施形態では、当該Tips及び次回課題案も、専門プログラマによってアドバイスと同様に入力されることを想定している。このため、分類結果に基づいて、当該生徒の傾向、つまり、プログラミングの習熟度に応じた次回課題案を提示し得る。
【０１２０】
指示サーバ200は、PC60に対して、当該生徒の傾向分析結果、具体的には、上述したTips、及びプログラミングに関する次回課題案を提示する（S650）。この結果、教師は、当該生徒に対するプログラミング教育の指導方針、及び与える課題などの具体的な内容を容易に決定し得る。
【０１２１】
ここで、図１４は、PC60に表示される生徒の傾向分析結果の例（その１）を示す。図１４の例では、ソースコードの分類（000x, 000y, 000z）毎に、「分類単位」、「アドバイス種別」、「頻出呼び出し関数」及び「平均修正頻度」を含むテーブルTB1が表示されている。
【０１２２】
また、生徒によって作成されたソースコードが、ソースコード表示領域A1に表示されている。さらに、「平均修正頻度」と対応したバー形状のヒートマップが、ヒートマップ表示領域A2に表示されている。、ヒートマップ表示領域A2に表示されているバー形状のヒートマップは、「平均修正頻度」の各学年（小学１年生〜中学３年生）と対応している。
【０１２３】
図１４において、黒塗りのバー形状は、ヒートマップにおける「赤色」相当を意味する。「赤色」は、当該学年における難易度が高いことを意味する。ドットパターンのバー形状は、ヒートマップにおける「青色」相当を意味する。「青色」は、当該学年における難易度が低い、つまり、容易であることを意味する。白塗りのバー形状は、ヒートマップにおける「黄色」相当を意味する。「黄色」は、当該学年における難易度が高い訳でないが、注意が必要なことを意味する。
【０１２４】
また、ヒートマップ表示領域A2に表示されているバー形状のヒートマップは、ソースコード表示領域A1に表示されているソースコードの行とも対応している。つまり、各行に記述されているソースコードの学年別の難易度が、バー形状のヒートマップによって示されている。
【０１２５】
図１４の例は、三角関数に関するクラスに関しては、特に小学３年生以下において難易度が高いことが示されている。なお、小学３年生以下において当該クラスに対応付けられているソースコードの「平均修正頻度」が低い理由は、小学校低学年では、三角関数を扱うことが難しいためである。
また、小学４年生〜中学３年生においても、注意が必要なことを示されている。
【０１２６】
一方、Print文に関しては、中学１年生以上では難易度が低く、殆どソースコードの修正もしていないことが示されている。
【０１２７】
図１５は、PC60に表示される生徒の傾向分析結果の例（その２）を示す。図１５の例では、ソースコードの分類（000x, 000y, 000z）毎の「利用数」、「修正回数」及び「アドバイス」を含むテーブルTB2が表示されている。
【０１２８】
図１５の例に示されるように、分類000yのように、利用数が多いソースコードは、大抵正しく、間違いも少ないことを示唆している。一方、分類000zのように、修正回数が多く、利用されていないソースコードは間違える可能性が高いことを示唆している。
【０１２９】
PC60を利用する教師は、図１４及び図１５に示したような生徒の傾向分析結果に基づいて、プログラミング教育の指導方針、及び今後のカリキュラムを決定できる。
【０１３０】
（４）作用・効果
上述した実施形態によれば、以下の作用効果が得られる。具体的には、プログラミング教育支援システム10（分析サーバ100）は、学生群が作成した分析用のソースコードを複数取得し、取得したソースコードの分類結果を専門プログラマ（アドバイス入力者）に提示する。さらに、プログラミング教育支援システム10は、専門プログラマが入力したアドバイスを取得し、取得したアドバイスとソースコードとの対応付けを生成する。
【０１３１】
また、プログラミング教育支援システム10（指示サーバ200）は、生徒がプログラミング教育の一環として、与えられた課題に基づいて作成したソースコードを取得し、取得したソースコードと対応付けられているアドバイスを生徒が利用するタブレット端末40に出力する。
【０１３２】
このため、生徒が間違い易いソースコードに対する適切なアドバイスを生徒に対してタイムリーに提示できる。また、アドバイスの提示に際しては、プログラミング教育支援システム10に記憶されているアドバイスデータが用いられるため、専門プログラマ及び教師の関与も不要である。
【０１３３】
さらに、生徒が間違い易いソースコードに対する適切なアドバイスを提示できるため、許容されるソースコードの範囲を狭めることなどによって、プログラミングの自由度を制限する必要もない。
【０１３４】
すなわち、プログラミング教育支援システム10によれば、プログラミングの自由度を制限することなく、正しく効率的にソースコードを作成できるように生徒を導き得る。また、これにより、生徒が非効率なプログラミングを行うこと、及び非効率なプログラミング技術を習得することを防止し得る。
【０１３５】
特に、プログラミング教育支援システム10は、初等中等教育段階におけるプログラミング教育など、小学生などの児童生徒が対象となり、初めてプログラミングに接する機会となる場合も多いと想定される場合、及びプログラミングに精通していない教師が、プログラミングの授業を担当する場合に好適に用い得る。
【０１３６】
本実施形態では、プログラミング教育支援システム10（分析サーバ100）は、学生群が作成した分析用のソースコードを所定単位（翻訳単位など）で分割できる。このため、さらに効率的な当該ソースコードの分類が可能となる。
【０１３７】
本実施形態では、プログラミング教育支援システム10（指示サーバ200）は、生徒が入力中のソースコードに基づいて、次に入力されるソースコードを予測し、予測したソースコードと対応付けられているアドバイスを生徒に対して提示できる。このため、生徒が間違い易いソースコードを予め指摘できるとともに、生徒によるソースコードの作成ミスを未然に防止し得る。
【０１３８】
本実施形態では、プログラミング教育支援システム10（指示サーバ200）は、タブレット端末40に提示されたアドバイスの理解度に対する生徒（プログラミングの学習者）の評価を取得し、タブレット端末40に出力されるアドバイスの難易度を決定できる。このため、生徒のプログラミングの習熟度に応じた適切な難易度のアドバイスを提示できる。
【０１３９】
本実施形態では、プログラミング教育支援システム10（指示サーバ200）は、生徒がタブレット端末40に対して入力したアドバイスの難易度のレベルに基づいて、タブレット端末40に出力されるアドバイスの難易度を調整できる。このため、生徒が主体的にタブレット端末40に出力されるアドバイスの難易度を選択できる。
【０１４０】
本実施形態では、プログラミング教育支援システム10（分析サーバ100）は、専門プログラマが入力したTips及び次回課題案などの学習者補助情報を取得し、指示サーバ200は、生徒が作成したソースコードと対応付けられている学習者補助情報の主力を、教師が利用するPC60に指示できる。
【０１４１】
このため、教師は、当該学習者補助情報を活用して、生徒に対するプログラミング教育の指導方針、及び今後のカリキュラム（授業内容）などを検討できる。これにより、プログラミングに精通していない教師が、プログラミングの授業を担当する場合でも、授業の均質化を図り得るとともに、教師のプログラミング教育に関する負担も軽減し得る。
【０１４２】
（５）その他の実施形態
以上、実施形態に沿って本発明の内容を説明したが、本発明はこれらの記載に限定されるものではなく、種々の変形及び改良が可能であることは、当業者には自明である。
【０１４３】
例えば、上述した実施形態では、プログラミング教育支援システム10は、分析サーバ100と指示サーバ200とに分割されていたが、両サーバの機能は、一体して提供されても構わない。つまり、両サーバの機能は、単一の装置（サーバコンピュータ）によって提供されても構わない。
【０１４４】
上述した実施形態では、PC50（第１所定端末）、タブレット端末40（第２所定端末）及びPC60（第３所定端末）における出力方法として、当該情報（分類結果、アドバイス及び学習者補助情報）の画面表示を例として説明したが、当該情報の出力は、画面表示に限らず、所定形式のファイルの送信、或いはプリンタによる印刷などでもよい。
【０１４５】
上述した実施形態では、学生（生徒）は、比較的安価なタブレット端末を利用する例について説明したが、学生は、デスクトップ型またはラップトップ型のパーソナルコンピュータを利用してもよい。
【０１４６】
上述した実施形態では、専門プログラマがアドバイスを入力していたが、アドバイス入力者は、プログラミングに対する相応の知識を有していれば、専門プログラマに限定されない。例えば、教師の中に該当者が存在する場合には、当該教師が代表してアドバイスを入力してもよい。
【０１４７】
また、上述した実施形態の説明に用いたブロック構成図（図２，３）は、機能ブロックを示している。これらの機能ブロック（構成部）は、ハードウェア及び／またはソフトウェアの任意の組み合わせによって実現される。さらに、当該ブロック構成図によって示される機能は、コンピュータプログラムとして提供されてもよい。
【０１４８】
また、各機能ブロックの実現手段は特に限定されない。すなわち、各機能ブロックは、物理的及び／または論理的に結合した１つの装置により実現されてもよいし、物理的及び／または論理的に分離した２つ以上の装置を直接的及び／または間接的に（例えば、有線及び／または無線）で接続し、これら複数の装置により実現されてもよい。
【０１４９】
さらに、上述した分析サーバ100及び指示サーバ200（当該装置）は、本発明の処理を行うコンピュータとして機能してもよい。図１６は、当該装置のハードウェア構成の一例を示す図である。図１６に示すように、当該装置は、プロセッサ1001、メモリ1002、ストレージ1003、通信装置1004、入力装置1005、出力装置1006及びバス1007などを含むコンピュータ装置として構成されてもよい。
【０１５０】
当該装置の各機能ブロック（図２，３参照）は、当該コンピュータ装置の何れかのハードウェア要素、または当該ハードウェア要素の組み合わせによって実現される。
【０１５１】
プロセッサ1001は、例えば、オペレーティングシステムを動作させてコンピュータ全体を制御する。プロセッサ1001は、周辺装置とのインタフェース、制御装置、演算装置、レジスタなどを含む中央処理装置（CPU）で構成されてもよい。
【０１５２】
メモリ1002は、コンピュータ読み取り可能な記録媒体であり、例えば、ROM（Read
Only Memory）、EPROM（Erasable Programmable ROM）、EEPROM（Electrically Erasable Programmable ROM）、RAM（Random Access Memory）などの少なくとも１つで構成されてもよい。メモリ1002は、レジスタ、キャッシュ、メインメモリ（主記憶装置）などと呼ばれてもよい。メモリ1002は、上述した実施形態に係る方法を実行可能なプログラム（プログラムコード）、ソフトウェアモジュールなどを保存することができる。
【０１５３】
ストレージ1003は、コンピュータ読み取り可能な記録媒体であり、例えば、CD-ROM（Compact Disc ROM）などの光ディスク、ハードディスクドライブ、フレキシブルディスク、光磁気ディスク（例えば、コンパクトディスク、デジタル多用途ディスク、Blu-ray（登録商標）ディスク）、スマートカード、フラッシュメモリ（例えば、カード、スティック、キードライブ）、フロッピー（登録商標）ディスク、磁気ストリップなどの少なくとも１つで構成されてもよい。ストレージ1003は、補助記憶装置と呼ばれてもよい。上述の記録媒体は、例えば、メモリ1002及び／またはストレージ1003を含むデータベース、サーバその他の適切な媒体であってもよい。
【０１５４】
通信装置1004は、有線及び／または無線ネットワークを介してコンピュータ間の通信を行うためのハードウェア（送受信デバイス）であり、例えばネットワークデバイス、ネットワークコントローラ、ネットワークカード、通信モジュールなどともいう。
【０１５５】
入力装置1005は、外部からの入力を受け付ける入力デバイス（例えば、キーボード、マウス、マイクロフォン、スイッチ、ボタン、センサなど）である。出力装置1006は、外部への出力を実施する出力デバイス（例えば、ディスプレイ、スピーカー、LEDランプなど）である。なお、入力装置1005及び出力装置1006は、一体となった構成（例えば、タッチパネル）であってもよい。
【０１５６】
また、プロセッサ1001及びメモリ1002などの各装置は、情報を通信するためのバス1007で接続される。バス1007は、単一のバスで構成されてもよいし、装置間で異なるバスで構成されてもよい。
【０１５７】
また、本明細書で説明した各態様／実施形態は、LTE（Long Term Evolution）、LTE-A（LTE-Advanced）、SUPER 3G、IMT-Advance、4G、5G、FRA（Future Radio Access）、W-CDMA（登録商標）、GSM（登録商標）、CDMA2000、UMB（Ultra Mobile Broadband）、IEEE 802.11（Wi-Fi、登録商標）、IEEE 802.16（WiMAX）、IEEE 802.20、UWB（Ultra-WideBand）、Bluetooth（登録商標）、その他の適切なシステムを利用するシステム及び／又はこれらに基づいて拡張された次世代システムに適用されてもよい。
【０１５８】
本明細書で説明した各態様／実施形態の処理手順、シーケンス、フローチャートなどは、矛盾の無い限り、順序を入れ替えてもよい。例えば、本明細書で説明した方法については、例示的な順序で様々なステップの要素を提示しており、提示した特定の順序に限定されない。
【０１５９】
入出力された情報等は特定の場所（例えば、メモリ）に保存されてもよいし、管理テーブルで管理してもよい。入出力される情報等は、上書き、更新、または追記され得る。出力された情報等は削除されてもよい。入力された情報等は他の装置へ送信されてもよい。
【０１６０】
判定は、１ビットで表される値（０か１か）によって行われてもよいし、真偽値（Boolean：trueまたはfalse）によって行われてもよいし、数値の比較（例えば、所定の値との比較）によって行われてもよい。
【０１６１】
本明細書で説明した各態様／実施形態は単独で用いてもよいし、組み合わせて用いてもよいし、実行に伴って切り替えて用いてもよい。また、所定の情報の通知（例えば、「Ｘであること」の通知）は、明示的に行うものに限られず、暗黙的（例えば、当該所定の情報の通知を行わない）ことによって行われてもよい。
【０１６２】
本明細書で使用する「判断(determining)」、「決定(determining)」という用語は、多種多様な動作を包含する場合がある。「判断」、「決定」は、例えば、判定(judging)、計算(calculating)、算出(computing)、処理(processing)、導出(deriving)、調査(investigating)、探索(looking up)（例えば、テーブル、データベースまたは別のデータ構造での探索）、確認(ascertaining)したことを「判断」「決定」したとみなすことなどを含み得る。また、「判断」、「決定」は、受信(receiving)（例えば、情報を受信すること）、送信(transmitting)(例えば、情報を送信すること)、入力(input)、出力(output)、アクセス(accessing)（例えば、メモリ中のデータにアクセスすること）したことを「判断」「決定」したとみなすことなどを含み得る。また、「判断」、「決定」は、解決(resolving)、選択(selecting)、選定(choosing)、確立(establishing)、比較(comparing)などしたことを「判断」「決定」したとみなすことを含み得る。つまり、「判断」「決定」は、何らかの動作を「判断」「決定」したとみなすことを含み得る。
【０１６３】
「接続された(connected)」、「結合された(coupled)」という用語、又はこれらのあらゆる変形は、２又はそれ以上の要素間の直接的又は間接的なあらゆる接続又は結合を意味し、互いに「接続」又は「結合」された２つの要素間に１又はそれ以上の中間要素が存在することを含むことができる。要素間の結合又は接続は、物理的なものであっても、論理的なものであっても、或いはこれらの組み合わせであってもよい。本明細書で使用する場合、２つの要素は、１又はそれ以上の電線、ケーブル及び／又はプリント電気接続を使用することにより、並びにいくつかの非限定的かつ非包括的な例として、無線周波数領域、マイクロ波領域及び光（可視及び不可視の両方）領域の波長を有する電磁エネルギーなどの電磁エネルギーを使用することにより、互いに「接続」又は「結合」されると考えることができる。
【０１６４】
本明細書で使用する「に基づいて」という記載は、別段に明記されていない限り、「のみに基づいて」を意味しない。言い換えれば、「に基づいて」という記載は、「のみに基づいて」と「に少なくとも基づいて」の両方を意味する。
【０１６５】
また、「含む（including）」、「含んでいる（comprising）」、及びそれらの変形の用語は、「備える」と同様に、包括的であることが意図される。さらに、本明細書或いは特許請求の範囲において使用されている用語「または（or）」は、排他的論理和ではないことが意図される。
【０１６６】
以上、本発明について詳細に説明したが、当業者にとっては、本発明が本明細書中に説明した実施形態に限定されるものではないということは明らかである。本発明は、特許請求の範囲の記載により定まる本発明の趣旨及び範囲を逸脱することなく修正及び変更態様として実施することができる。したがって、本明細書の記載は、例示説明を目的とするものであり、本発明に対して何ら制限的な意味を有するものではない。
【符号の説明】
【０１６７】
10  プログラミング教育支援システム
20  通信ネットワーク
30  タブレット端末
40  タブレット端末
50  PC
60  PC
100  分析サーバ
110  分析用コード取得部
120  分析用コード記憶部
130  コード分割部
140  コード分類部
150  分類結果提示部
160  アドバイス生成部
170  アドバイスデータ記憶部
200  指示サーバ
210  アドバイスデータ取得部
220  作成コード取得部
230  アドバイス抽出部
240  アドバイス指示部
250  入力コード予測部
260  アドバイス評価処理部
270  アドバイスレベル調整部
280  生徒傾向分析部
1001  プロセッサ
1002  メモリ
1003  ストレージ
1004  通信装置
1005  入力装置
1006  出力装置
1007  バス
【図１】
2019039971.tif 000003
【図２】
2019039971.tif 000004
【図３】
2019039971.tif 000005
【図４Ａ】
2019039971.tif 000006
【図４Ｂ】
2019039971.tif 000007
【図５】
2019039971.tif 000008
【図６】
2019039971.tif 000009
【図７】
2019039971.tif 000010
【図８】
2019039971.tif 000011
【図９】
2019039971.tif 000012
【図１０Ａ】
2019039971.tif 000013
【図１０Ｂ】
2019039971.tif 000014
【図１０Ｃ】
2019039971.tif 000015
【図１１】
2019039971.tif 000016
【図１２】
2019039971.tif 000017
【図１３】
2019039971.tif 000018
【図１４】
2019039971.tif 000019
【図１５】
2019039971.tif 000020
【図１６】
2019039971.tif 000021