338 Views
July 23, 19
スライド概要
小学校から高校においてプログラミング教育が必修化されるなどプログラミングを学ぶ機会が増えつつある.プログラミングの学習は,課題を解決できるようなプログラムを作成させることが一般的であるが,作成できずに挫折する初学者も多くいる.これは,初学者がプログラムの構造に関連する抽象的思考を意識できず,その内容を初学者と教育者の間で共有できていないことが原因であると考えられる.そこで本研究では,プログラムのソースコードとそれに対するコメントを同時に記述し,コメントの配置を入れ替えるだけで直感的にプログラムの構造を試行錯誤可能にする手法を提案する.これにより,初学者は整理しながら手軽に試行錯誤を繰り返せるようになり,教育者は初学者の理解度や意図の把握が容易になることが期待される.実験により,提案手法を用いることで初学者の構造理解を深めることと,教育者の指導への活かすことが可能だと示唆された.
明治大学 総合数理学部 先端メディアサイエンス学科 中村聡史研究室
プログラミング教育円滑化のための 抽象的思考記述システム 明治大学大学院 又吉康綱 中村聡史 HCI184 @北海道大学 百年記念会館
背景 • プログラミング教育の必修化で ,学ぶ機会が増えると予想される • 「A I 時代」などで情報系学部の人気 大学のプログラミング授業 • 関数の使い方 • サンプルソースコード解説 • 課題や小テスト等で定着
背景 学生数が100人単位の授業で 教師が個別の理解度に応じて指導は不可能 ❌ 教師の代わりに学生の指導サポートを行う学生 Teaching Assistant (TA)
背景:TAへ多くの質問 1 人のT Aが複数人の学生を指導する 質問に追われ,指導が追いつかない 状況 コ ードに隠された学生の 予 想外なつまずきや 間 違いを探す 即 座に理解し指導すること は 困難 TAの負担がとても 大きい
背景:学生のプログラミング挫折 つまずきを解消しないと応用問題が解けなくなる あとさきを考えずにいきなり,ソースコードから書き始める事で 的外れなプログラム を記述する • T A に具体的な質問ができない • TA が理解できない( 困る) プログラミングに対して苦手意識を感じてしまい挫折してしまう
目的:教育課題の解決 プログラミング教育におけるTAと学生との指導 コミュニケーションを円滑化する手法の提案 TA ソースコードを読解する時間と労力の削減 ソースコードを読解する時間と労力の削減 学生 つまずきの解決と減少 / TAから適切な指導
プログラミングの思考 学習の最初 単純な計算 / 単純なお絵かき ソースコードは上から下へと 流れるだけで単純
プログラミングの思考 条件分岐・配列・繰り返し・関数・クラス 変数の流れ, クラス構造, 分解, 記述の効率化を考えて記述の必要あり
プログラミングの思考 条件分岐・配列・繰り返し・関数・クラス 変数の流れ, クラス構造, 分解, 記述の効率化を考えて記述の必要あり プログラミングを行う時に必要な思考 抽象的思考
抽象的思考 煩雑なプログラム処理を分解し抽象化,一般化すること どのプログラミング言語にも共通して必要なスキル 抽象的思考力:低い 抽象的思考力:高い 実行例 丸を書いて コピペ 丸を書いて コピペ… 2重ループ内で変数で座標指定 して100個の丸を書く
抽象的思考 オセロのコマを管理するプログラムを作成しろ 抽象的思考力:高い • コマの状態を管理する2重配列を作成 • ひ っ く り 返 す タ イ ミ ング で 2 重 配 列 を 更 新す る 抽象的思考力:低い • コ マ の 状 態 を 変 数 で 保持 せ ず に 直 接描 画 命 令 の み で 実 現 し よ う と する
手法:教育課題の解決には TA が容易に学生のコードを理解したい • TA は抽象的思考が養われており,優れている • 学生の抽象的思考を直接共有することで指導が楽になる! 学生が挫折しないようにしたい • 抽象的思考を意識しながら書ければ確認でき ,つまずきも減る • TA がどこまで理解しているか把握し易く指導しやすい
提案手法:抽象的思考の可視化 頭の中で考えているプログラムを可視化できる手法が必要 2重ループ内で変数で座標指定 して100個の丸を書く ? プログラムの入れ子・ネストに注目して抽象的思考を可視化 →木構造・ツリーを採用
提案手法:コードツリー • 日本語コメント1つ1 つをノードとする ツリーで表現 • 親子関係を入れ子{ } と捉える • ノードの編集,追加,入れ替えができる 抽象的思考の可視化に近づく
提案手法:ツリーを同時に記述 コードツリーの日本語を ソースコード内のコメントに コードツリー⇔ソースコード 双方からの編集や並び替えが 容易に可能な手法を提案 コードツリー ソースコード
実装:プロトタイプシステム 実装:プロトタイプシステム Webで実装(Processingを採用)
実験概要 • 評価実験 • 学 生 と T A そ れ ぞ れ か ら の 評価 • 追加実験 • 学 生 と T A と の コ ミ ュ ニ ケー シ ョ ン に 着目 し た 評 価 • 初心者へのユーザースタディ • よ り 初 学 者 を 対 象 と した ユ ー ザ ー スタ デ ィ
評価実験 目的 学生がプロトタイプシステムを使ってコーディングすることで どのような学習支援になるのかを明らかにするため
評価実験:概要 プログラミング初学者である大学1年を対象とした 大学1 年 9 名,TA 3 名 グループ1(4名),2(5名)に分け問題を解く順番の入れ替えをした 普段どおりに解く:30分 チュートリアルを行う:20分 システムで解く:30分
評価実験:問題選定 ランダムな場所に10 個の円が表示される . すべての円を囲む最小 の正方形の1辺の長さを求め 描画しなさい. 縦横5 0px の白と黒の四角形を奇数列ではそのまま, 偶数列では50px 下にずらして表示しなさい. また,クリックするたびに偶数列を「 25px 」⇔ 「5 0 px 」ずらしなさい.( カフェウォール錯視)
評価実験:アンケート学生 実験終了後に5段階評価式( -2~2) アンケートに回答 質問事項 既存手法と提案手法の比較に関するアンケート Q1 提案システムが使いやすい Q2 提案システムの方が課題を解きやすい Q3 提案システムで課題に集中してスムーズに取り組めた Q4 提案システムの方が課題の理解が深められた Q5 提案システムの方が課題を早く解けた Q6 提案システムを今後も使いたい Q7 提案システムを継続利用することでプログラミング力を向上できると思う
評価実験:アンケート学生結果 コードツリー使用頻度グループ ( 主観) ごとのアンケート平均値 Q1 Q2 Q3 Q4 Q5 Q6 Q7 使用頻度高 1.50 0.50 0.75 0.75 0.50 0.50 1.25 使用頻度低 -0.80 -1.00 -0.60 0.20 -1.20 -0.60 0.60 Q1 Q2 Q3 Q4 Q5 Q6 Q7 使いやすい 課題を解きやすい 集中してスムーズに取り組めた 理解が深められた 早く解けた 今後も使いたい 継続利用でプログラミング力向上可能か コードツリー使用頻度が 高いグループでは平均値が高い コードツリーを使うと支援に繋がる
評価実験:アンケートTA結果 TA( 3 名) へのアンケートの結果 質問項目 Q11 学生の間違っている箇所を発見しやすい Q12 学生の質問の意図を汲み取りやすい Q13 実際の講義で利用したい 平均値 -0.30 0.70 1.00 「間違っている箇所の発見しやすさ」において 負になった 「質問の意図の汲み取りやすさ」において 正となった つまずき箇所の発見はしづらいが,質問意図は理解しやすい
評価実験:アンケートTA考察 つまずき箇所の発見がしづらい エラー理由を吐かない間違いの原因を解決できずに悩まされた 質問意図は理解しやすい 提案手法の抽象的思考の可視化が有意に働いたと示唆される 学生からの質問が少なく判断しづらい ( 自由記述より) 質問回数が少なく,どのように影響を与えたかが不明
追加実験 目的 プロトタイプシステムが TAと学生のコミュニケーション ( 質問) に 及ぼす影響を調べる 変更点 • 問題を難しく • 制限時間を厳しく TA とのコミュニケーションが生じるようにした
追加実験:概要 大学1 年 4 名,TA 2 名 2 日間に分け全4問行った システムに関する質問が出ないようにシステムに慣れるため チュートリアルを行う:20分 システムで解く:40分/問
追加実験:問題選定 スワイプ テトリス ラングトンのアリ マクローリン展開(コサイン)
追加実験:質問の分類結果 学生からTAにされた質問を主観で 5つに分類分けした • 解法に関する質問 11件 • プログラムエラーに関する質問 7件 • システムの仕様に関する質問 4 件 • 問題の仕様に関する質問 3件 • 問題の趣旨を理解していない質問 0件
追加実験:質問の分類結果 学生からTAにされた質問を主観で 5つに分類分けした • 解法に関する質問 11件 • プログラムエラーに関する質問 7件 抽象的思考を伴わない質問 • システムの仕様に関する質問 4 件 • 問題の仕様に関する質問 (本研究の対象外の質問) 3件 • 問題の趣旨を理解していない質問 0件
質問分類 解法 • 「図形が思うように動かないがどうしたら良いか?」 • 「コサインの描画がうまくいかない」 など 課題のレギュレーションを満たすための質問 1 1 件の中に 質問・指導時にコードツリーを用いた例はなかった →コメント( ツリー) では表現できない箇所に質問原因があったため
コメントだけで は分からない
質問分類 趣旨を理解してない 問題やソースコードの内容に全く理解が及ばず プログラムの方針が立たない状態での質問 0 件だった 習いたての初心者がする質問しがちである 1 年の1月に実験を行ったため,全員がプログラミング知識を 身につけているため 質問されなかった
追加実験:まとめ 解法に関する質問 コメントでは表現しきれない箇所の質問が多い →ツリーでの記述の推薦,限界を明らかにする必要がある 趣旨を理解していない質問 質問がされなかった →もっと習いたての初学者で実験する必要
初学者へのユーザスタディ 大学1 年 1 2 名 6 月に実施 • プ ロ グ ラ ミ ン グ 歴 3 ヶ 月 の 初学 者 TA 2 名 追加実験と同様なアンケート TA: コードツリーを用いて説明する 条件分岐までの内容で実施 • 変 数 と i f な ど ( f o r は 含 まな い )
初学者へのユーザスタディ 評価実験、追加実験と同様な結果 内容に関する質問 学生からプログラムの流れ( 順番) に関する質問 T A はコードツリーで質問の説明をし,学生は理解していた TA 「普段よりも伝わりやすい」 コードツリーを使うことで説明しやすくなった ⇔抽象的思考を共有することで円滑な指導が可能と示唆
実験考察 • 評価実験 • 学 生 : コ ー ド ツ リ ー を使 う こ と で 支援 が 可 能 • T A : 質 問が 少 な い た め 判断 し づ ら い • 追加実験 • コ メ ン ト の 粒 度 で は , T A が 分 か ら な いこ と が あ る • よ り 初 学 者 を 対 象 と しな い と 期 待 する 質 問 が T A に され な い • 初学者へのユーザースタディ • コ ー ド ツ リ ー が T A と 学 生の コ ミ ュ ニ ケー シ ョ ン 支 援が 示 唆
まとめ プログラムの抽象的思考を日本語のツリーで可視化することで学生 とT A の支援に繋がる手法の提案と評価を行った TA :ツリーを見ることで質問意図の 理解がしやすい 学生:ツリーを使うことで思考や記述の支援が可能 今後 • システム制約を減少させる • システムの効率的な使い方 • TA から学生への指導方法の調査