2020 PC Conferece

教えないプログラミング―C 言語の学習を支援するウェブサイトの構築―
寺尾敦*1
Email: atsushi@si.aoyama.ac.jp*1: 青山学院大学社会情報学部◎Key Words

1.

プログラミング，e ラーニング，C 言語，オンライン学習

はじめに１人あるいは少数の教員およびティーチングアシスタントが担当する大学でのプログラミングの授業で，教員が苦心する問題のひとつは個人差への対応である(1) (2)。プログラミング経験や理解の速さといった知識や能力が異なる，多くの受講者に対応しなければならない。授業の内容や進行の速さは，ある学生には容易すぎて（遅すぎて），別の学生には難しすぎる（速すぎる）かもしれない。プロ
グラミングはたいてい実習を含むため，（個人の能力に関係なく）偶発的に生じるエラーへの対処も難しさとなる。
例題の実行を学生に求めたとき，特に問題なく実行できてしまう学生がいる一方で，エラーが生じて自力では解決できない学生もいる。そのまま授業を進めると，エラーを解決できない学生は授業についていくことができなくなる。エラーが生じた学生に教員が対応しようとすると，他の学生は何もすることなく待つことになる。
こうした個人差に対応するには，学習が順調に進んでいる学生を待たせることなく，一方で学習に躓いている学生を支援する必要がある。現実的ではないが，大勢のティーチングアシスタントを雇用できれば，個人差にはかなり対応できるだろう。学生数と同じだけの教員とティーチングアシスタントがいれば，マンツーマンの授業が可能なのだから，個人差の問題は対処可能となる。
学習者個人が自分のペースで取り組む e ラーニングは，マンツーマンの授業をテクノロジーで実現していると考えられる。プログラミング教育では，LISP のプログラミングを教える知的チューターシステム（ITS: IntelligentTutoring System）である LISP tutor (3) が，1980 年代から知られている。近年では，オープンコースウェア（OCW）
や MOOC でプログラミングのコースが提供されている。
しかし，大学でのプログラミングの授業を担当する教員は，授業の設計者であるから，既存の e ラーニング教材を利用できないかもしれない。自分が教えたい内容と完全にマッチした e ラーニング教材はおそらく存在しない。
それに，既存の e ラーニング教材に授業を丸投げすることは，大学においておそらく許されないだろう。
そうすると，授業を担当する教員が，自分ができることの範囲で，自分の授業にあわせた「ボトムアップな」(4)e ラーニング（あるいは自習可能な）教材の開発を行うことが必要になるだろう。
「自分ができる範囲で」と書いたのは，教材開発に従事できるのは，教員自身と，せいぜい研究室のメンバーに限られるからで，大規模な教材開発をすることは難しいからである。

2.

目的

このような教材開発の考えに基づき，筆者は「教えないプログラミング」という授業を実践してきた(5)。この授業
では，教科書を使い，教科書の補足説明を書いたウェブページを作成する。教科書を使うのは，教材を作成する労力をかなり軽減できるからである。教科書を使ったプログ
ラミングの授業で教員が説明していたことは，すべてウェブの補足教材に書く。これにより，教員は授業で「教える」必要はなくなり，学生は教科書とウェブ教材を使って自分のペースで学習を行うことになる。授業で教員が行うことは，最小限の教示と，学生からの質問への対応だけである。教員が通常の授業で行う説明は，学生がすぐに理解できるとは限らないのに，その場限りの音声情報である。説明がすべてウェブに書かれていれば，いつでもこの情報にアクセスできる。
本論文では，心理学を専攻する学部３，４年生を対象にした，C 言語の「教えないプログラミング」の実効性を検討する。この方法で C 言語を教育することが可能なのかを，学期末に行われたテストと，授業ウェブの有用性についての調査票への回答から検討する。
本研究は「教えないプログラミング」と他の教育方法を比較する実験研究ではなく，授業の改善と評価を繰り返すデザイン研究である。デザイン研究では統制実験を行わない（行えない）ことが多く，本研究でも統制群は設置されていない。

3. 方法
3.1 参加者
東京大学文学部で，2019 年度の「電算機応用(2)」を受講した 30 名のうち，学期末のテストを受験した 13 名に研究への参加を依頼した。12 名からの協力を得た。

3.2 材料
参加者は，半期の授業において，授業ウェブ (6) を参照しながら，指定されたテキスト (7) を学習した。
授業ウェブは，プログラミング初心者を想定して，テキストの補足説明を行っていた。補足説明は，教室でのプログラミングの方法，個人所有のパソコンでのプログラミ
ング環境のセットアップ方法，テキストの記述の補足，テキストにない記述，プログラミングの学習方略，から構成されていた。テキストの記述の補足とは，テキスト本文で説明されていることについてもう少していねいに説明す-150-

2020 PC Confereceるなど，補足説明を行ったものであった。テキストにない記述とは，テキストの本文では述べられておらず，テキストからは得られない情報を提供するものであった。たとえば，プリプロセッサによるマクロの処理を確認する方法や，プログラムの別解が提示された。プログラミングの学習方法として，長いプログラムは部分的に書いてテストを繰り返すことや，printf 関数を使って中間結果を表示することなどが教示された。
学期末のテストでは基本情報処理技術者試験で出題された C 言語の問題が２問用いられた。最初の問題（平成19 年度・秋期・問６）は２次元配列に格納された文字パターンを回転・反転するプログラムであった。この問題は３つの小問から構成されていた。もう１問（平成 19 年度・春期・問 10）はリーグ戦の勝敗を出力するプログラムで，主にポインタと構造体の知識を問うものであった。この問題は５つの小問から構成されていた。
調査票では，これまでのプログラミング経験についての質問に続き，授業ウェブが学習に役立ったかどうかがたずねられた。調査票の項目を付録に示す。調査票には，質問を理解する助けとして，授業ウェブのスクリーンショットが含まれていた。

3.3 手続き
初回ガイダンスにおいて，受講者は，学期末のテストまでにテキストの内容を自分のペースで学習するように指示された。授業では最初の 10 分から 15 分でその週の学習事項の要点が簡単に解説され，その後各自のペースで学習を進めるので，授業に出席するかどうかは自由に決めてよいと説明がされた。成績は学期末に行われるテストに基づいて決められること，テストでは基本情報処理技術者試験の過去問あるいは類題が出題されることが予告された。
学期末テストのときに，テスト問題とともに，授業ウェブでの学習についての調査票が配布された。調査への回答の有無および回答の内容は成績と無関係であることが説明された。調査への協力に同意した受講者は，調査票の末尾にある同意書を記入した。

4. 結果
4.1 授業への出席
ガイダンス翌週からの 12 回の授業では，翌週に 10 名の出席者がいた他は，出席者はいつも５名以下であった。
調査協力者 12 名のうち，ほぼ毎回出席していたのは２名のみ（10 回と 11 回）であり，それ以外の 10 名の受講者は基本的に授業に出席しないで学習を進めていた（出席３回が３名，０回が７名）。

4.2
プログラミング経験
調査票への回答から，研究に参加した 12 名の学生は，プログラミングの初心者あるいは初級者であることが確認された。大学入学までにプログラミングの経験があるのは１名のみであった。入学後にプログラミング経験があったのは７名で，主に大学の授業において，半年から１年の経験があった。

4.3 テスト成績
８つの小問から構成される学期末のテストは，小問ひとつにつき１点の，８点満点で採点された。平均は 5.0 点，標準偏差は 2.3 点であった。１点と２点の学生がそれぞれ１人ずついる一方で，７点と８点の学生がそれぞれ２人ずつおり，点数にかなりばらつきがあった。
授業に比較的よく出席していた２名の点数は２点（出席 11 回）と８点（出席 10 回）であった。
4.4 授業ウェブの評価
調査票への回答から，教室でのプログラミングの方法と，個人のパソコンでのプログラミング環境のセットアップについては，授業ウェブがかなり役立ったことが明らかになった。大学の演習室のパソコンでの，プログラミングの実習方法の説明については，６名が「非常に役立った」，４名が「かなり役立った」と回答した（他の２名は「どちらとも言えない」）。個人が所有するパソコンにプログラミング環境を構築する方法については，６名が「非常に役立った」，２名が「かなり役立った」と回答した（他の４名は「どちらとも言えない」）。
授業ウェブの使用頻度はあまり高くなかった。
「まった
く利用しなかった」が３名，「あまり利用しなかった」が６名，「半分ぐらい利用した」が２名，「かなり利用した」が１名であった。
授業ウェブを少しでも利用したことのあった９名は，テキストの記述の補足，テキストにない記述，プログラミングの学習方略それぞれについて，学習にどれほど役立ったかを回答した。テキストの記述の補足は比較的よく利用されており，役立ったと評価された。テキストにない記述と，プログラミングの学習方略については，あまり利用されていなかったが，利用した学習者には役立ったようであった。テキストの記述の補足（テキスト本文で説明されていることの補足説明）は，「かなり役に立った」が５名，「どちらともいえない」が４名であった。テキストにない記述（テキストの本文では述べられておらず，テキストからは得られない情報）は，「こうした箇所は利用しなかった」が４名であった。利用した学習者では，「とても役に立った」が２名，「かなり役になった」が１名，「どちらともいえない」が１名，「あまり役に立たなかった」が１名であった。プログラミングの学習方略は，「こうした箇所は利用しなかった」が４名であった。利用した学習者では，「とても役に立った」が１名，「かなり役になった」が２名，「どちらともいえない」が２名であった。
4.5 授業ウェブの利用とテスト得点
授業ウェブの利用とテスト得点との間には負の相関が認められた。
「ウェブページでの「教科書の補足説明」をどれぐらい利用しましたか」という質問への回答を，「まったく利用しなかった」を１点，以下１点刻みで，「ほとんどすべてを利用した」を５点として，テストの得点との相関係数を求めたところ，−.47 であった。授業ウェブを「まったく利用しなかった」３名のテストの得点は，６点が２名，７点が１名で比較的高かった。一方で，利用頻度が比較的高かった３名の得点は，２点から４点がそれぞれ１名ずつであった。

-151-

2020 PC Conferece
グラミングの学習をしたことがありますか？

5.

考察

教員が授業を実施することなく，教科書とウェブ教材で学習が成立していることから，C 言語の「教えないプログラミング」には実効性があったと考えられる。ただし，
授業ウェブが特に役立ったのは教室および個人のパソコンでのプログラミング方法の説明であり，C 言語についての解説はそれほど有用性が高くはなかった。テキストに書いてあることについての補足説明は比較的役立っていたが，テキストにない情報の提供と，プログラミングの学習方略についての教示は，有用性の評価が相対的に低かった。
授業ウェブの利用テスト得点との間の相関が負となったのは，ほぼ教科書だけで学習内容が理解できる学生がテストで高い得点を取り，学習に苦労した学生はあまり高い得点をとることができなかったためではないかと考えられる。
本研究はまだ参加者数が少なく，明確な知見を得るにはより多くの学習者からのデータが必要である。今後行われる授業で研究を継続したい。東京大学の学部生は，学習者としては非常に優秀で，プログラミング初心者の標本としてはかなり偏っている。標準的な大学生での研究も必要であると考えられる。
謝辞：本研究は科研費（課題番号：16K01125，20K03160，研究代表者：寺尾敦）の補助を受けて実施された。

参考文献
(1)

(2)

(3)
(4)

(5)
(6)
(7)

三河佳紀：“プログラミング教育の改善に関する研究―
Visual Basic を導入時に適応する効果―”，コンピュータ＆エデュケーション，14，pp.71-78（2003）．
生田目康子：“ピア・レビューをともなうグループ学習の評
価－斉型プログラミング授業への適用”，情報処理学会論文誌，45，pp.2226-2235（2004）．
Anderson, J. R., Conrad, F. G., Corbett, A. T.：“Skill acquisition
and the LISP tutor”，Cognitive Science，13，pp.467-505（1989）．
曽我聡起, 中原敬広, 川名典人, 布施泉, 中村泰之：“ボトムアップから始めるデジタル教科書を用いた授業の実践と提案”，コンピュータ＆エデュケーション，41，pp.14-21（2016）．
寺 尾 敦 ：“ 教 え な い プ ロ グ ラ ミ ン グ ”， 2019 PC
CONFERENCE 発表論文 (2019)．
授業ウェブ：
http://terao.akiba.coocan.jp/lecture/senshu/info.html
http://www.cc.aoyama.ac.jp/~t41338/lecture/senshu/info.html
上坂吉則：“MATLAB プログラミング入門 [改訂版]”牧野書店（2011）．

付録
調査票の主要部分を以下に示す。

はい いいえ以下では，この授業のために作成したウェブページ（下図）の利用について質問します。

３．ウェブページでは，大学の演習室のパソコンでの，プログラミングの実習方法を説明しました。授業用ディレ
クトリの作成，Emacs でのプログラムの書き方，コンパイル方法などを説明しました（下図）。これら実習方法の説
明はどれほど役立ちましたか？
・まったく役立たなかった・あまり役立たなかった・どちらともいえない・かなり役立った・非常に役立った

４．ウェブページでは，個人所有の PC あるいは Mac での，C プログラミング環境の構築方法を説明しました。これはどれほど役立ちましたか？

・まったく役立たなかった・あまり役立たなかった・どちらともいえない・かなり役立った・非常に役立った

１．大学入学までに，何かプログラミングの学習をしたことがありますか？
はい いいえ２．大学入学後，この授業を受講する前までに，何かプロ-152-

2020 PC Conferece
５．ウェブページでの「教科書の補足説明」をどれぐらい利用しましたか？

・とても役に立った・まったく利用しなかった（１割前後）
・あまり利用しなかった（３割前後）
・半分ぐらい利用した・かなり利用した（７割前後）
・ほとんどすべてを利用した（９割前後）

８．ウェブページでのテキストの補足解説で，プログラムを部分的に書いてテストを繰り返すことや，printf 関数を使って途中の状態を表示するといった，プログラムを理解するための学習方法を教示しました．これはどれほど役立ちましたか？

この設問に「まったく利用しなかった」と回答した人は，これで質問は終わりです。
６．ウェブページでのテキストの補足解説で，テキストの本文で説明されていることについて，もう少していねいに説明したり，補足説明を行ったりしたところは，どれほど役立ちましたか？

・こうした箇所は利用しなかった・まったく役に立たなかった・あまり役に立たなかった・どちらともいえない・かなり役に立った・とても役に立った・こうした箇所は利用しなかった・まったく役に立たなかった・あまり役に立たなかった・どちらともいえない・かなり役に立った・とても役に立った

７．ウェブページでのテキストの補足解説で，プリプロセッサによるマクロの処理を確認したり，プログラムの別解を提示したりするなど，テキストの本文では述べられていないこと（テキストだけからは，考えても得られないこと）を説明したところは，どれほど役立ちましたか？
・こうした箇所は利用しなかった・まったく役に立たなかった・あまり役に立たなかった・どちらともいえない・かなり役に立った-153-