「主体的プログラミング学習段階」を対象としたプログラミング演習における学習困難性の考察
岡本 雅子 1)
1) 京都大学 高等教育研究開発推進センター
okamoto.masako.8v@kyoto-u.ac.jp

Analysis of Learning Diﬃculty for ”Independently Learning
Phase of Computer Programming”
Masako Okamoto1)
1) Center for the Promotion of Excellence in Higher Education, Kyoto University

概要
プログラミングの応用段階に向けた学習段階、すなわち自立的なプログラミング能力の涵養を目的とした学習段階において、演習形式のプログラミングの授業が提供できる学習内容について考察し、その内容を前提に構成した演習の実践例から、同段階の学習における困難性の具体的事例を抽出してその要因を考察する。

1 はじめにプログラミング教育の必修化を前にして、プログラ

あり方を主な課題として議論されてきたが、一方、学習者側からの視点でどのような困難性がみられるかについて議論がなされてこなかった。

ミング入門課程に係る研究が数多く試みられるように

こうしたことから、本稿では、まず、模倣でなく自なった。こうした取り組みでは、基礎的な概念やコーらプログラムを構想して記述するプログラミング演習

ディングを学ぶ際の問題点を学習者側からの視点でにおいて、学習者が具体的に作業する内容を階層化お「つまずき箇所の類型」を調査したり [1]、教授者側のよび明確化し、それらの作業のうち授業内においてど授業設計を課題として、その改善点やよりよい教授法のようなトレーニングが実現できるかについて議論すなどについて実践的に検証している [2]。ただし、例える。そして次に、この議論を踏まえて設計し、実施しば、小学校では、プログラミング的思考の習得を目的たプログラミング実践において、学習者にとってどのとするなど、これらの入門課程における授業はプログ

ような困難性がみられたかについて抽出し、その問題

ラミング能力の習得それ自体を直接の目的にしておら点について考察することとしたい。

ず、当然だが、この入門課程だけを学んだところで自力でプログラミングできるようになるわけではない。
「アルゴリズムや文法だけを教えるのであれば、個々

2 自立的なプログラミングに必要なプロ
セスのテーマごとに最適の例題や演習課題を用意するだけ

学習の目的が、自らが望むプログラムを作成できるで、十分に対応することができる」「このような細切れ能力を身につけるということであるならば、まず、プの課題対応型に期待できるのは『コードの書き方』のログラミング学習の段階について明確にし、プログラ修得までであろう」[3] というように、入門課程の授業

ム作成のプロセスがどのようなものであるかについてで到達できる段階は凡そ、個々のサンプルを読み解く

明示してから議論を進めていく必要があると著者は考基礎が身につく程度である。

える。こうしたことから、本節では、最初に学習段階

そして、入門課程の学習の後、自ら目的とするプロについて述べ、次にプログラム作成のプロセスについグラムを設計するには、より実用的なプログラミングて論じ、そのプロセスごとに必要とされる能力とそれ能力のトレーニングが必要となる。こうした「応用段を涵養する学習内容について、プログラミング演習に階」のプログラミング教育については、授業あるいはおいて実現できる範囲がどこまでであるかといった視演習をどのように実施したらよいかという授業設計の点から議論したい。

2.1 「依存的プログラミング学習段階」と「主体的プログラミング学習段階」にかかわらず同様に必要とされるプロセスである。
続いて、このモデルをコンピュータの処理の形式に

これまで、プログラミング教育に係る研究では、著合わせてアルゴリズムを作成してからコーディングす者も含め、明確に定義しないままに、一般教育、専門教る。これは、個人が趣味でプログラムを作成する際に育、基礎、応用などの概念を用いてきた。例えば、専は行わない作業ではあるが、目的を明確化する作業が門教育という文言であれば、専門課程に在籍する学生必要であるという点については同様である。

が学ぶ内容という学習者の属性を意味するだけで、学最後に、実務レベルでは、必ず、仕様書にそってテ

習内容や学習段階そのものを示した概念ではない。そストケースを作成して入念に動作を確認し、エラーがの原因としては、研究者間においてこれらの概念が一あった場合はプログラムを修正する。

定の幅をもって受け入れられていて、統一し、定義しようという試みがなされなかったからだと著者は考えるが、そうした結果、同じ文言を用いていても、対象とする学習内容がまちまちであったり、異なる文言を用いていても同じ学習内容を示す場合もあり、議論が成立しにくい状況であったことは否めない。こうしたことから、著者は、学習者の属性ではなく、学習の際の作業内容を軸に、学習段階を明確に定義してから議論を進めたいと思う。
初学者は、まず、最初にプログラミングの基本的な

このように考えると、プログラムの作成は、大きく分けて次の 4 つの段階があると表現できる。

• 第一に、具体的事象の抽象化の過程（モデル構築）• 第二に、モデルをコンピュータ処理に適合させる
アルゴリズム化の過程（アルゴリズム化）• 第三に、アルゴリズムをプログラミング言語に変換するコーディングの過程（コーディング）• 第四に、動作テストと修正の過程（テスト）
2.2.1

モデル構築

要素である変数と制御構造などを学習し、サンプルプ

モデル構築については、具体的事象を抽象化し、論

ログラムを模倣する「写経型学習」[4] 過程やサンプル

理化する能力が必要とされる。これらの能力は、コンプログラムの一部改変などに取り組む。これらは教員

ピュータプログラムの作成にかかわらず、学問領域にから与えられた知識を覚え、また、提示されたプログ

おいて広範に必要とされ、そしてそれらの学習を介しラムをタイピングして実行し、動作を確認する極めてても涵養される汎用性の高い能力である。そのため、依存的な学習過程である。この段階を経た学習者は、これらの能力の涵養について、プログラミング学習が教授者から使用するコードや目的とするプログラムの単独で担わなければならない、あるいは、単独で担うイメージやモデルについて参考となる情報を与えられことができるような学習範囲であるとまでは言えないながらも、自らアルゴリズムを考え、それをコーディ

が、演習内での作業がその能力の涵養に寄与することングするという主体的なプログラミング学習段階へとまでは否定できないことから、プログラミング演習内進む。本稿では、前者を「依存的プログラミング学習

で試みる価値がある学習内容であると著者は考える。

段階」、後者を「主体的プログラミング学習段階」と規2.2.2

定し、以降の論を進めたい。

2.2

アルゴリズム化

アルゴリズムとは、「問題を解くための手順や特定

コンピュータプログラムが完成するまでのプロの処理の手順を明確に定義したもの」であり、コンセスと必要とされる能力

ピュータが処理する一連の流れを示したものである。

プログラムの作成は、まず、その目的を明確化する

コンピュータに意図する処理を正しく実行させるためことから始まる。例えば、企業であれば、クライアンに適切な指示が必要なため、この適切な指示を定式化

トからその目的を聞き出して（ヒアリング）、「要求定させたものがアルゴリズムであるが、プロセスとして義」を明確にする。さらに、要求定義をさらに個別化見るならば、アルゴリズム構築は、構築したモデルをした詳細仕様書を作成することで全体をモデル構築すコンピュータ特有の処理形態に合わせる作業とも言える。ヒアリングから始まるこの過程は、小規模な設計る。なお、モデル構築とアルゴリズム化を弁別せずにであれば、ひとりのプログラム作成者がその頭の中で同一の過程として取り扱い、「アルゴリズムの作成」と進めている場合もあるわけだから、傍から見て顕在化見做すケースも散見されるが、本稿では、これらの作していない作業の場合もあるだろうが、目的を明確化

業に必要とされる能力が異なることから、それぞれをし、目的とする動作を総体として抽象化するというモ分けて個別に扱っている。

デル構築の作業については、プログラムの規模の大小

アルゴリズム化の作業は、基礎的なあるいは根源的表 1 対象授業の履修者数

な思考力を必要とするというよりは、コンピュータ特有の処理形態について理解してさえいれば、構築したモデルに当てはめるだけで対応が可能である場合も少2018 年後期

木2

金1

金2

合計

75

60

61

196

なくない。
こうしたことから、アルゴリズムは、プログラミン
グ学習の中で学ばなければ他に機会を得られない学習

ログラミング演習が担う範囲であるが、テストを全体範囲であり、また、プログラミングに係る授業の中で的に学習しようと考えるならば、数千行におよぶようこそ学習が可能なプロセスであると著者は考える。

な大規模なプログラムを作成することが条件となるた

2.2.3 コーディング

め、とくに長期にわたって実施することを前提とした依存的プログラミング学習段階の演習では、学習者がサンプルプログラムを模倣して入力、実行し、結果

教育課程や OJT がその場として適当であると著者は考える。

を確認することを重視する場合が多いが、和田 [3] が指摘しているように、実践的なプログラミング能力を身3 授業としてのプログラミング演習で実現可能な学習の範囲に付けるにはこうした学習だけでは十分でないとされている。入門課程を経た学習者は、数十行から 100 行

前節では、プログラミング学習の段階を「依存的プ程度のまとまったプログラムを作成することにより、ログラミング学習段階」と「主体的プログラミング学

複雑な処理の記述方法を学習していくわけであるが、習段階」に分けるとともに、プログラムが完成するま

コーディングについて十分な知識を獲得するには、単での作業を流れに沿って類型化し、とくに大学などでにプログラムを書かせるだけでなく、その論理的な理授業として実施されるプログラミング演習において、解ができているかをこまめにチェックしながら、プロ

学習者が自立的なプログラミング能力を修得すること

グラム全体を俯瞰して確認するという作業も有効であを目的とした場合にはどのような学習内容が提供でき

り、こうした内容は、授業としての演習内で十分に実るか、あるいはどのような学習内容を提供すべきかと現可能であると著者は考える。

いった観点から検討した。

2.2.4 テスト

こうした結果、著者は、

テストケースを適切に設計してプログラムの誤りを発見することや仕様を満たしているかを確認するな• 具体的事象を提示した状況下におけるモデルの構築

ど、テスト技法を学ぶことも重要ではある。ここでは、アルゴリズムに沿ってコーディングを終えた段階で• モデルに沿ったアルゴリズムの作成想定していた動作を確認するだけではなく、様々な入• 使用する複数のコードを予め提示した上で実施するコーディング

力内容を試すことで想定しなかった動作の有無も確認することになる。従来の初学者を対象とした導入教育• デバッグを主な目的としたテストのようにプログラムの入力と出力が記述された実行例の 4 点については、「主体的プログラミング学習段

が学習者に提示するケースでは、実行例と同じ入出力階」における授業あるいは演習において提供可能であだけを確認する場合がほとんどであるが、テストをす

り、提供すべき内容であると考え、それらの能力向上

る能力の涵養を目的とするならば、まず、入力のケーを目的とした授業設計を試みることとした。

スを想定することから学ぶ必要があるし、それ自体が本来的な学習の対象であるともいえる。ただし、授業

4 授業実践

時間内で作成できるような短いプログラムを作成した

4.1

対象とした授業

場合ならば、想定される入力のケースの範囲は限定さ

本研究の対象とした授業は、2018 年度の後期に京れており、コーディングを終えた段階で想定していた

都大学で実施された全学共通科目（農学部が独自に提動作を確認するという初学者が学ぶ内容とほとんど変供するクラス指定の科目で 1 回生から 4 回生まで受講

わりない作業を実施するだけになってしまう。もちろ可）「情報基礎演習」である。表 1 に示す 3 クラスをん、デバッグなどについて慣れていくこと、経験を積対象とした。

むことは演習を介しても十分に可能であるし、こうし

本科目は、教養教育におけるコンピュータリテラシた部分についてはプログラミングの授業、あるいはプ教育という位置付けで週 1 回 90 分の選択科目として実施したもので、「アカデミックな活動に必要な ICT

表2

スキルを獲得すること」、「自立した ICT ユーザとな

授業内容

ること」
、
「ICT スキルを自主的・継続的に獲得する自1 回目• 開発環境の基本操作

2 回目• Python の基礎• 条件を判断して処理を実行する

3 回目• 例外処理など• 同じ処理を指定した回数だけ繰り学自習能力を身につけること」の 3 点を目的としている。コンピュータやネットワークといった教育・学習における ICT 利用に関する基礎知識を獲得するとともに、学術情報の探索、学術文書の作成、表計算ソフト

プログラミングの授業内容

返すを用いた分析やシミュレーション、プレゼンテーショ
ン、プログラミングについては演習形式で実施してい• 条件が満たされている間に処理をる。プログラミングの授業は、後半 4 回の授業を割り繰り返すなど• 数当てゲームの作成

当てた。このような科目構成からプログラミングのみ

4 回目を学ぶ授業に比べ、相対的に時間的制約は大きい状況
であった。

4.2

を提示し、それを元にしたアルゴリズム化

授業デザインと授業形態対象とした科目の中でプログラミングを学ぶ機会(4) Python のプログラムを作成する際に必要となるコードなどの要素の確認は、先述のように 1 授業 90 分で計 4 回しかなく、学習する時間が限られていることから、学習内容は、前半 3(5)（アルゴリズム化に失敗した受講生らを対象に）ランダムな値の生成方法や入力された値のチェック

回の授業でプログラミングの基本的な要素である変数など数当てゲームのアルゴリズムの確認と制御構造などを学習し、最終の 4 回目である程度まとまったプログラムを作成した（表 2 参照）。1 回目から 4 回目までを「依存的プログラミング学習段階」に(6) プログラムの作成(7) プログラムの動作確認と修正

充て、4 回目を「主体的プログラミング学習段階」に充(2) の「アルゴリズム」に関しては、授業の開始時

てる構成である。なお、本研究では、受講生自らプロに A4 の用紙を配布した。受講生には手書きでアルゴグラムを作成する第 4 回目の授業を分析対象とした。

リズムを記入するように指示し、授業の最後にその用また、本授業では、講義とテキスト教材による個別紙を回収した。なお、受講生には、(3) の解説後に追学習を取り入れた授業形態を採用し、講義では短時間記しないようにアナウンスしている。

にポイントを絞って解説を行った。受講生がつまずい

また、第 4 回目の「数当てゲーム」は、4 桁の数字をた場合は、教員やティーチングアシスタント（1 人）当てるゲームで、2 人のプレーヤーが「出題者」と「回がサポートに入り、直接対応した。なお、演習には、答者」にわかれてプレイするものである。本実践で採京都大学の教育用コンピュータ端末を用い、Python

用した「数当てゲーム」のルールは以下の通りである。

の環境には Web ブラウザ上にエディタと Python の実行環境が搭載されている「Jupyter Notebook」を用

1. 出題者は、「0」から「9」の数字を使って、4 桁の数字を考える（同じ数字を 2 個以上使用可能）いた。
本研究の対象とした第 4 回目の授業は、「数当てゲー
ムの作成」を題材とした。90 分の授業構成は以下の通

2. 回答者はその数字を予想して、出題者に提示する
3. 出題者は提示された数字を判定し、ヒットとブローの数を回答者に提示するりである。

4. 2〜3 を繰り返し、（ヒットとブローの結果を参考(1) 数当てゲームの exe ファイルを配布し、各自が動に）回答者は、出題者が考えた 4 桁の数字を当作を確認するてる→提示された具体的事象をモデル化(2) 作確認後、アルゴリズム（プログラムの動く手順）を考えて、アルゴリズムは、フローチャートの図

4.3

受講生の構成本実践での対象とした受講生は、プログラミングのや文章、矢印などで可視化する

第 4 回目の授業に出席し、課題を提出した 133 人であ→アルゴリズム化る（表 3 参照）
。なお、この授業はプログラミング初学(3)（モデル構築に失敗した受講生らを対象に）モデル

者を想定したものであるが、経験者の履修も可能であり、本実践では、Java など他のプログラミング言語の表3

2018 年後期

本実践の対象者したが、モデル構築の時点でつまずいている学習者と

木2

金1

金2

合計

54 (10)39 (3)

40 (8)133 (21)

モデル構築はできてもアルゴリズム化に失敗したものとに分かれ、双方は別個のつまずき箇所として表出している。

※括弧内はプログラミング経験者

5.2

コーディングについて

次に、モデル化に失敗したためにアルゴリズム化に
表4

アルゴリズムの学習状況

進めなかった受講生に対する救済処置として、「数あ

木2

金1

金2

合計

てゲーム」のゲームモデルを説明し、アルゴリズムを

100 点

30 (9)

21 (3)

22 (3)

73 (15)

解説した。これを踏まえてコーディングの段階に進め

100 点未満24 (1)

18 (0)

18 (4)

60 (5)ている。

※括弧内はプログラミング経験者

数当てゲームに関するプログラムはアルゴリズムと同様に 133 人から提出された。表 6 に示すように、正しく動作するものを提出できた受講生は 86 人であっ既習者が 21 人であった。

4.4

検証方法

た。残りの 47 人は、文法エラーや変数の初期化がされていない、繰り返し処理が入っていないなどの誤り

自立的なプログラミング段階の学習における困難性が見られた（表 9 参照）。具体的な誤りは表 9 に示すの具体的事例を抽出するため、第 4 回目の授業で実通り、「変数名の重複」が 2 人、「変数の初期化がされ施した数当てゲームについて、受講生から提出されたていない」が 11 人、「文法エラー」が 8 人、「繰り返し

「アルゴリズム」と「プログラム」に関し、つまずき処理がない」が 25 人、「各パーツのプログラムのみ作

箇所とその件数、内容について調べた。さらに、プロ成（統合されていない）」した人が 2 人、「ファイルがグラミング学習に対する受講生の率直な意見を集める

壊れていた」が 8 人であった。

ために、第 4 回目の授業終了後に自由記述アンケート（授業の感想）を実施した。

次に、アルゴリズムの得点が 100 点未満であった受講生 60 人のプログラムの得点を表 7 に示す。60 人のうち 30 人が 100 点であったが、残りの 30 人（プログ

5 結果と考察5.1

モデル構築とアルゴリズム化について

ラミング経験者 1 人を含む）が 100 点未満であった。
アルゴリズム化でつまずいた受講生は、数当てゲー

本授業では、第 4 回目の数当てゲームのアルゴリズ

ムのアルゴリズムの解説を聞くことにより、30 人がプムについて 133 人から提出があった（表 4 参照）。こ

ログラムを完成させた（表 7 参照）。一方、アルゴリズのうち、プログラミング経験者 15 人を含む 73 人は正ム化でつまずいた受講生のうち、30 人がプログラムをしく記述できていた。一方、残りの 60 人は、表 5 に完成させることができなかった。

示すように「白紙で提出している」「繰り返し処理が抜

アルゴリズムの得点が 100 点未満で、さらにプログけている」「繰り返し処理の位置に誤りがある」「一部ラムの得点が 100 点未満であった受講生のつまずきのの処理が抜けている」などのつまずきが見られた。

事例を表 11 に示す。

具体的には、アルゴリズムの用紙に「開始」と「終加えて、アルゴリズム化でつまずいた内容とプログ了」のみ記載して、中身の処理が全く記載されていな

ラムの点数を表 10 に示す。アルゴリズムを「白紙」でいものが 16 人いた。次に、「4 桁の乱数を発生させる」

提出し、プログラムの点数が 100 点未満であった 10「ヒットの場合は加算する」などの処理のみパーツと人のうち、「繰り返し処理がない」ものが 8 名、「ファして表現しているものが 18 人いた。この 18 名に関イルが壊れていた」ものが 2 名であった。「一部の処

しては、数当てゲームをモデル化して表現することが理のみ記載していた」6 名のうち、「文法エラー」が 3できなかったと推察される。また、数当てゲームのモ

名、「繰り返し処理がない」ものが 2 名、「ファイルがデル化ができ、全体の処理を可視化できているが、繰壊れていた」ものが 1 名であった。次に、「全体の処理り返し処理が抜けているものが 38 名であった。これに誤りはないが、ゲームを続けるための繰り返し処理

は、モデル化した数当てゲームを適切にアルゴリズムが抜けていた」14 名のうち、「変数名の重複」が 2 名、に落とすことができていないものと考えられる。本実「変数の初期化がされていない」が 4 名、「文法エラー」

践では、モデル構築とアルゴリズム化を同時に課題とが 4 人、「繰り返し処理がない」ものが 3 人、「ファイ表 5 アルゴリズム化でのつまずき状況

つまずきの件数
つまずきの事例

木2

金1

金2

合計

白紙で提出した

1

10

5

16

一部の処理のみ記載していた

7

4

7

18

17 (1)

11

10 (4)

38 (5)

全体の処理に誤りはないが、ゲームを続けるための繰り返し処理が抜けていた※括弧内はプログラミング経験者

表6

プログラムの学習状況「ファイルが壊れていた」人が 3 人であった。

木2

金1

金2

合計

100 点

35 (10)21 (2)

30 (5)

86 (17)

100 点未満

19 (0)

18 (1)

10 (2)

47 (3)「変数の初期化がされていない」については、変数を初期化することを理解していないことが考えられるため、プログラミングの知識が不足していたと推察される。次に、「文法エラー」については、デバッグのスキ※括弧内はプログラミング経験者

ルが不足していたために、文法の誤りを見つけられな
かった、あるいは誤りを見つけてもプログラミングの

表7

アルゴリズム 100 点未満の受講生のプログラ

ムの点数

知識が不足しているために修正することができなかったと考えられる。また、「繰り返し処理がない」ものが

木2

金1

金2

合計

8 名もいた。この 8 名は、アルゴリズム化する際は、

100 点

10 (1)

7 (0)

13 (3)

30 (4)

繰り返し処理を記述できていたにも関わらず、実際の100 点未満

14 (0)

11 (0)5 (1)

30 (1)

プログラムで記述することができなかった。これについては、アルゴリズムをコーディングする過程につま※括弧内はプログラミング経験者

ずく要因があるかコードに関する理解が不足している
表8

アルゴリズム 100 点の受講生のプログラムの点数

かのどちらかであると考えられるが、本実践の結果からは判別する手がかりが得られなかった。加えて、各

木2

金1

金2

合計

100 点

25 (9)

15 (2)

17 (2)

57 (13)のが 1 名おり、同様にアルゴリズム化はできているに100 点未満

5 (0)

6 (1)

5 (1)

16 (2)

も関わらず、コーディングできていないことから、繰

※括弧内はプログラミング経験者

パーツのプログラムのみ作成（統合されていない）」もり返し処理と同様に 2 種類の可能性が考えられるが、どちらの要素に起因するかについては手がかりがない
ため判別できない。

ルが壊れていた」ものが 1 名であった。
とりわけ、「繰り返し処理」の不備に関してはプログ

6 まとめと今後の課題

ラミング経験者 2 名も含まれており、加えて、自由記

本研究では、教授者の補助を得ながらであっても自述アンケートに「繰り返し処理が難しく感じた」など

らプログラムを作成する学習段階を「主体的プログラの意見が見られるなど、繰り返し処理を実際に活用すミング学習段階」と規定し、その段階の学習内容をモることは難易度が高かったことが推察される。

デル構築、アルゴリズム化、コーディング、テストとさらに、アルゴリズムが 100 点であった受講生 73

4 段階に階層化して、それぞれの段階におけるつまず

人のプログラムの得点を表 8 に示す。73 人のうち 57

き箇所を抽出した。その結果、自らプログラムを構想

人がプログラムの作成に関しても 100 点であったが、して記述していくことができないという事象であって16 人（プログラミング経験者 2 人を含む）は 100 点未も、その要因はまちまちであり、各学習階層において満であった。具体的な誤りは表 12 に示す通り、「変数別個の困難性として表出していることがわかった。との初期化がされていない」が 4 人、
「文法エラー」が 2

くにアルゴリズムをチャートとして記述できているに人、「繰り返し処理がない」が 8 人、「各パーツのプロもかかわらずコーディングの際に抜け落ちていた学習

グラムのみ作成（統合されていない）」した人が 1 人、

表9

コーディングでのつまずき状況

つまずきの件数（重複あり）
つまずきの事例

木2

金1

金2

合計

変数名の重複2002変数の初期化がされていない

4

4

3

11

文法エラー

5

3

0

8

繰り返し処理がない

10

10

5 (2)

25 (2)

各パーツのプログラムのみ作成されている（統合されていない）

2

0

0

2

ファイルが壊れていた

2

3 (1)

3

8 (1)

※括弧内はプログラミング経験者

表 10 アルゴリズム化でのつまずき状況とプログラムの点数プログラムの点数
つまずきの事例

100 点

100 点未満

合計

白紙で提出した

6

10

16

一部の処理のみ記載していた

12

6

18

12 (2)

14 (3)

26 (5)

全体の処理に誤りはないが、ゲームを続けるための繰り返し処理が抜けていた※括弧内はプログラミング経験者

表 11

アルゴリズム 100 点未満の受講生のコーディングでのつまずき状況

つまずきの件数（重複あり）
つまずきの事例

木2

金1

金2

合計

変数名の重複2002変数の初期化がされていない

4

3

0

7

文法エラー

4

2

0

6

繰り返し処理がない

6

7

4 (1)

17 (1)

各パーツのプログラムのみ作成されている（統合されていない）

1

0

0

1

ファイルが壊れていた

1

2

2

5

※括弧内はプログラミング経験者者が見られたことは興味深い。こうしたコーディング

も自立的にプログラミングする際には必要とされる能段階の誤りの原因が、単に当該コードの理解不足であ力であるが、その能力を涵養しようとする授業あるいるならば、当該コードを知識として、再度、記憶すれは演習において、その一つが欠けるからといって、以ばよいのであるが、アルゴリズムをもとにをコーディ

降の学習に手を付けられないようでは学習者の不利ングする際に本実践において明らかにできなかった想益が大きいし、授業として成立しない。本実践でも明定外の要因があるとも考えられ、これについては今後らかになったように、上流から下流までの各階層につの研究課題としたい。

まずき箇所があるのだから、続く階層に移行する際に自らプログラムを構想し、それをプログラミング言

は、前階層の成功が次階層の成功の前提にならないよ

語に落としていく作業は、上流から下流へとつながる

うに、つまり、どの階層からでも作業が可能であるよ

一連の作業であるため、上流のどこでつまずいたとしうに適切にフォローしながら授業を進めていく必要がても、それに続く下流の作業に進むことはできない。

あるものと著者は考える。

上流から下流までのそれぞれの作業は、どれをとって表 12

アルゴリズム 100 点の受講生のコーディングでのつまずき状況

つまずきの件数（重複あり）
つまずきの事例

木2

金1

金2

合計

変数名の重複0000

変数の初期化がされていない

0

1

3

4

文法エラー

1

1

3

4

繰り返し処理がない

4

3

1 (1)

8 (1)

各パーツのプログラムのみ作成されている（統合されていない）

1

0

0

1

ファイルが壊れていた

1

1 (1)

1

3 (1)

※括弧内はプログラミング経験者

謝辞
研究のためのフィールドをご提供いただいた京都大学高等教育研究開発推進センター酒井博之准教授に深く感謝申し上げます。
また、本研究は、科研費・若手研究 (B)（研究代表者：岡本雅子）「プログラミング演習の学習科学的分析と初学者向け学習教材の開発（17K17824）」の助成を受けたものである。

参考文献[1] 岡本 雅子・喜多 一、プログラミングの「写経型学習」における初学者のつまずきの類型化とその考察、パイデイア、滋賀大学教育学部附属教育実践総合センター紀要、22、49-53、2014．

[2] 岡本雅子・村上正行・吉川直人・喜多一、「視覚的顕在化」に着目したプログラミング学習教材の開発と評価、日本教育工学会論文誌、37、1、35–45、2013．
[3] 和田 浩、スパイラル・アプローチによる C 言語
プログラミング教育の実践と評価−受講生中心の学習を目指した試み、UNISYS TECHNOLOGYREVIEW、19、2、322-337、1999．
[4] 岡本雅子・村上正行・吉川直人・喜多一、プログ
ラミングの写経型学習過程を対象としたつまずきの分析とテキスト教材の改善−作業の自立的遂行と作業を介した理解のための支援と工夫−、京都大学高等教育研究、19、47–57、2013．