• 検索結果がありません。

Python によるプログラミング導入教育の実践とその学習効果

N/A
N/A
Protected

Academic year: 2022

シェア "Python によるプログラミング導入教育の実践とその学習効果"

Copied!
15
0
0

読み込み中.... (全文を見る)

全文

(1)

Python によるプログラミング導入教育の実践とその 学習効果

辻, 康孝

九州大学大学院工学研究院

https://doi.org/10.15017/2228568

出版情報:基幹教育紀要. 5, pp.43-55, 2019-03-05. 九州大学基幹教育院 バージョン:

権利関係:

(2)

Python によるプログラミング導入教育の実践とその学習効果

辻 康孝

九州大学大学院工学研究院, 〒819-0395 福岡市西区元岡744

Practice of introductory programming education with Python and its learning effect

Yasutaka TSUJI

Faculty of Engineering, Kyushu University, 744, Motooka, Nishi-ku, Fukuoka 819-0395, Japan E-mail: [email protected]

Received Oct. 31, 2018; Revised Dec. 4, 2018; Accepted Dec. 4, 2018 As a large data is easily generated and available with advance of information technology and its measuring device, university educations are required to grow students with data analysis skill and education and research in each department often address data analysis. Programming skill is becoming essential even for non-computer science(CS) major. In Kikan-Education, the author teaches introductory programming education to students in department of Economic Engineering in Kyushu University, who are non-CS major but need programming skill in the future. However, a student output was limited through the introductory programming because it was taught in C-language. Recently Python is increasingly employed as an introductory programming language. Some introductory programming course for Non-CS majors were able to address data analysis project, which were related their major, because they were taught in Python. Then several studies compared with Python and conventional languages. In Kikan-Education, introductory programming language switched Python from C-language from current year (2018). Combination of a suitable project topic and Python’s advantages possibly provides students with positive experiences. For this purpose, a student’s learning effect in introductory programming education with Python needs to be estimated. This paper evaluates the Python’s learning effect by comparing a student’s output (assignment and final project) in the introductory programming education with Python and one with C-language, both of which were taught by the author. In addition, questionnaires to the students, who were taught in Python, are also analyzed.

1. はじめに

企業の様々な経済活動、人々の消費やインターネット上での活動等、あらゆるものが記録・デー タとして蓄積され、また計測デバイスの発展と普及により我々も様々なデータ計測を容易に行える ようになった。このような技術の進展の中、大学教育においても、データ分析に関連した人材の育 成が求められ、また各専攻の授業や研究においてもデータ分析を扱うことも多くなっている。デー タ分析は、統計学とプログラミングが基礎となっており、非情報系の専攻学科でも、プログラミン グの知識が必要不可欠となりつつある。

(3)

本学経済工学科もそのような専攻の一つであり、いわゆる「文理融合型」の専攻になる。著者は、

基幹教育において、経済工学科に対するプログラミング導入教育(「プログラミング演習」)を担当 し、併せて、C 言語によるプログラミング導入教育に対する授業改善も実践してきた 1。しかし C 言語によるプログラミング導入教育では、受講学生に対する学習効果は限定的であった。

近年、大学でのプログラミング導入教育において、従来の C/C++、JAVA 等にかわって Python を採用する大学が増えている2, 3。スクリプト言語であるPythonは構文が簡素なため、一般的には、

初学者が習得しやすいプログラミング言語と言われている。加えて、様々な用途向けのライブラリ 群が充実しているため、その適用範囲も広い。非情報系専攻に対するプログラミング導入教育であ っても、具体的な課題テーマ(Final project)、例えば専攻分野に関するデータ分析、を扱った授業設 計とその実践が行われている4, 5。このような授業実践にPythonが用いられている。

一方、プログラミング導入教育における学習言語として、C/C++、JAVA 等の言語と Python と の学習効果の比較に関する研究報告も行われている6-10。Wainerら7は、 C言語とPythonに関する 対照実験(工学系学生)において、Pythonで学習した学生の方が良い成績を残したと報告している。

一方、Alzahraniら8は、クラウドベースのプログラミング演習でのC++学習者とPython学習者のロ グ分析を行い、同じ問題を解いた場合、Python学習者の方が解くのに時間がかかっている、すなわ ちstruggleしていると報告している。Enbodyら9, 10はPythonでプログラミング導入教育を行った場 合とC++で行った場合とでは、より専門的な授業(C++)での学生の成績に差はないと報告してい る。

本年度より、本学基幹教育においても、プログラミング導入教育の学習言語がC言語からPython へ変更になった。著者による本学経済工学科を対象とした C言語によるプログラミング演習では、

学生にポジティブな経験を持たせるのは困難であったが、適切な課題テーマと Python の利点を上 手く組み合わせれば、次につながるようなポジティブな経験を学生に提供できる可能性がある。そ のためには、Pythonを用いたプログラミング導入教育により、学生の学習成果がどの程度向上した か評価する必要があると考える。そこで本研究では、学習言語がC言語から Pythonへ変更になっ たのを利用して、C言語を用いたプログラミング導入教育1とPythonによるものとでの学生の学習 成果の比較を行う。比較は、C言語の場合とPythonの場合とでの演習課題(Assignment)と最終課題

(Final project)への取り組み状況とその評価で行う。なおPythonへの変更にあわせて、授業設計と教

材開発も行い、学生への理解度アンケートも行っている。これらについても本論文で説明する。

2. 対象クラス

2.1.

経済学部経済工学科の特徴

著者は2014-2018年の5年間、経済工学科を対象とする「プログラミング演習」の授業を担当し てきた。本学経済工学科15は、社会、経済の諸問題を工学・数理的手法に基づいて多方面から検討・

評価することにより、望ましい政策・戦略の立案、現実問題へ還元する方法の習得にその教育の重 点を置いている。理論分析、数量分析、政策分析を体系的に学ぶことができる「文理融合型」の学 科である。 3年時以降の専門科目では、経済システム解析の分野(経済理論や数量的分析)、政策

(4)

分析の分野(金融、財政、社会保障など多様な経済問題に関する政策分析・評価及び政策提言)、

数理情報の分野(経済問題に対する統計学及び情報工学の応用)の三つに分かれ、より専門性の高 い教育が行われる。文系学科に属するが、数理的知識・思考を必要とする授業のウエイトが高いた め、入学試験では理科系学部と同じ数学科目が課せられており、入学学生には一定レベルの数学力 が期待されている。なお入学者数は例年85名前後である。

2.2. C

言語プログラミング演習の実施状況(

2014

2017

年)

経済工学科での「プログラミング演習」は選択必修科目aとして1年生前期に開講されている。人 工知能、IoT、データサイエンスに関連した技術革新への社会的関心の高まりは、新入生のプログ ラミングに対する関心にも影響を与えており、受講者数は増加傾向にあり、開講前の関心度も高か った(2015年度:61名、2016年度:57名、2017年度:73名、本年度:83名)。授業は、対象言語:

C言語、CUIによる古典的な演習作業環境下で行われてきた。2017年度には、増加する受講生数へ の対応と授業改善を図るために、学生の学習負荷を考慮した指導内容の見直しと授業設計を行い、

またできるだけ多くの学生の学習意欲を持続させるために、実システムを意識できかつ達成感を感 じられる演習課題(Assignment)と最終課題(Final project)の構成を行った。教材開発などの著者の授業 改善の取り組みの詳細については既報1を参照されたい。

経済工学科は情報系に近い学科であるため、高いプログラミング能力を習得できた学生もいたが、

その一方で、数理的思考やそもそもPC操作を苦手とする学生も少なくはないように見受けられる。

「プログラミング演習」は選択(必修)かつ1単位科目である。そのため学習の負担が大きいと感 じた学生は容易に受講を中断するか、最終課題を未提出のまま単位取得を諦める傾向が見られた。

2017年度の授業改善では、学生の学習の継続には一定の効果が見られた。しかしながら、授業後半 での演習課題の提出履歴を調査したところ、1/4 の学生が簡単な問題のみ取り組むか、あるいは未 提出であり、授業後半での学習意欲は低調であった。また、応用力を問う最終課題では、6 割の学 生が難易度の一番低い問題を選択し、不完全あるいは明らかな盗用プログラムソースも多かった。

たとえ C 言語の個々の項目は理解できても、独力で一定水準のプログラムを組むまで C 言語の知 識を活用できるまでの学生は非常に少ない結果となった。

基幹教育が目指すアクティブラーナー育成の観点からすると、C言語によるプログラミング教育 は、学生にポジティブな経験を持たせるのは難しいと思われる。次章でも示すように、ほとんどの 初学者にとって C 言語の学習は難しい。また、たとえ C 言語で一定水準のプログラムを組めたと しても、その後の「主体的な学び」の場面(例えば学生がプログラミングの知識を活用して数量分 析、統計を主体的に学習する等)、での活用が難しく、教員側もそれを提示しにくい。同様のこと は、C++あるいはJAVAでも言える。スクリプト言語であるPythonは、構文の簡素さ、習得の容易 さだけでなく、様々な用途向けのライブラリ群が充実しているため、プログラミング学習後の次の ステップへの敷居が低い点も、プログラミング導入教育において Python が採用される理由と思わ れる。

a 科目群の中から選択して指定された単位数を取得しなければならない科目

(5)

3. プログラミング学習でのつまずき

3.1.

プログラミング言語の基本要素

プログラミング導入教育では、プログラミング言語の基本要素を一つずつ理解し、サンプルコー ドのコンパイル・実行のステップによって実際に動作を確認しながら、その学習を進めていく。ま た学習の進展とともに、複数の要素を組み合わせたプログラムコードの作成問題(演習課題)に取 り組むことで徐々に応用力を高めていく。

しかし初学者にとっては、基本要素を理解することさえも難しいと感じることも多い。初学者が プログラミング学習のどの段階でつまずいたか、どの基本要素が理解しづらいと感じたかの知見は、

その学習内容や教材の改善において重要な情報となる。一方、変数や制御構造等の基本要素は、多 くのプログラミング言語にも共通したものであり、他の言語の学習内容の選定や教材の作成におい ても参考になる。 そこで、 Pythonによるプログラミング導入教育の学習内容の選定や教材の作成 に利用するため、基幹教育「プログラミング演習」における学生のC言語の理解度の調査を行った。

その調査は、著者が行った工学系の学生(3年生)を対象としたアンケート結果を利用する。

3.2

C

言語の基本要素の理解度

著者は、「プログラミング演習」の他に、工学系学科の専門課程(3年生)において「数値解析関 連」の演習を担当し、C言語の基礎(復習)と応用、数値解析アルゴリズムの実装について教えて いる。授業のための基礎データとして、受講学生に対して、1年時基幹教育での「プログラミング 演習」の学習理解度のアンケート調査を行っている。アンケートは「数値解析関連」の授業終了後 に、1 年時の「プログラミング演習」を振り返ってもらい、C 言語の基本要素(q1~q8)に対する自 身の理解度(自信)を以下の三段階で自己評価してもらった。

・理解度H:その要素に関連した“簡単な”プログラムを組める。

・理解度M:その要素の内容は理解できたが、“簡単な”プログラムを組めるまでの自信はない。

・理解度L:理解できなかった。

1年時のクラス別に集計を行った結果(2年分)を図1に示す。クラスごとのばらつきが大きく、

また時間が経過しているため正確さにも欠けるが、図1から以下のような傾向が見られる。

(1) 順次構造の学習の段階で、関連したプログラムを組む自信があると答えた学生が大きく減少 しており、早い段階でプログラミングの学習につまずく学生が増えている。岡村ら11も、「初 学者にとっては順次構造は理解するのが難しい場合もある」と指摘している。なお、順次構 造の理解でつまずいた原因としては、数学的記述との混同が一因と考えられる1

(2) 定回反復を理解できた学生(理解度がM、H)は多いにもかかわらず、ほとんどの学生が配 列・配列操作を理解できなかったと感じている。1次元配列でさえも、簡単なプログラムを 組めると答えた学生は各クラスで1-2割程度であった(理解できなかったものは半数を超え ていた)。

(3) 配列・配列操作の理解状況から、それ以降の授業では、学生の学習意欲は低下しているもの

(6)

と推察される。

当然、各教育機関・各専攻の学生の質や授業方法により学生の理解度状況は異なるため、このよ うなアンケートに基づいた知見は一般性に欠けるかもしれない。しかし複数のクラスで共通してみ られた傾向なので、指導上の留意点として、本授業の授業設計・教材作成に反映させるものとする。

4. Python による「プログラミング演習」の授業設計

4.1.

授業内容の選定

Pythonはコンパイルが不要で構文も簡素なため、初学習にとって扱いやすい言語であると言われ

ている。Pythonはソースコードを簡潔に記述できるので、特に授業初期段階では、サンプルプログ

ラムの理解も容易で、演習での作業負担も小さいという利点がある。また、さまざまなシーケンス 型が便利なメソッドとともに提供され、さらにライブラリやモジュールを組み込めば、特定の用途

(a) N=45 (b) N=53 (c) N=53

(d) N=47 (e) N=53 (f) N=44

図1 工学系学科を対象とした「プログラミング演習」におけるC言語理解度アンケート

アンケートは、工学系学科3年生の「数値解析演習」の授業の終了後に、1年時の「プログラミング演習」を 振り返える形で実施した。1年時のクラス別に集計を行い、 (a) ~ (f) は1年時のクラス識別(上段が2018年ア ンケート調査実施分、下段が2017年実施分)を表し、Nは各クラスの集計人数である。

q1 :variable(変数) q2 : standard input/output(標準入出力) q3 : sequential structure(順次構造)

q4 :if statement (条件分岐) q5 : for loop(定回反復) q6 : do while/while(不定回反復)

q7 :1-D array (1 次元配列) q8 : 2-D array (2 次元配列)

(7)

向けのプログラミングも可能となり、その拡張性も高い。

前章のC言語の理解度調査から、順次構造と配列・配列操作が初学者に対して留意すべき点とし て挙げられた。Pythonではリスト型が配列に相当する。また実用面では、コードのシンプルさと実 行速度から、リスト内包表記の使用頻度が非常に高い。内包表記で記述すれば、あるリスト(ある

いはrange関数)から別のリストを生成する場合に、簡潔なコード記述が可能となる。一方、初学

者にとっては、複数の処理を簡潔な記法で表現しているため、逆に難しく感じる可能性がある。加 えて、初学者にとっては、リストでの標準関数とメソッドの区別とその使用法に戸惑うものも多い と考えられる。

本授業では、以上の点を考慮に入れて授業設計を行い、図 2 に示す授業内容を選定した。以下、

要点をまとめる。

(a-1)各項目の説明に加えて、順次構造のイメージを学生に定着させる。(3、4回目)

(b-1)forループの説明に併せて、in演算子と「リスト型の定義」のみ説明する。(6回目)

(b-2)リスト型の標準関数とメソッドを説明。併せてメソッドの概念を定着させる。(7回目)

(b-3)リスト内包表記とその使用例を説明する。(8回目)

(c-1)「文字型の定義」とinput関数、あわせて型変換の必要性を説明する。(4回目)

(c-2)リスト型と同様の理由で、文字列処理メソッドを別途説明する。(12回目)

(c-3)文字列処理メソッドはファイル入力でも利用するので、ファイル入出力は文字列処理メ

ソッドの次回に説明する(13回目)。シーケンス型で扱うのは文字列とリストのみとする。

(d-1)mutableデータ型とimmutableデータ型の違い、多次元リストは上級者向けとして説明する。

(14、15回目)

(d-2)模擬データを使った演習課題に取り組むため、乱数モジュールを説明する。(6回目)

4.2.

演習課題(

Assignment

)の構成

各授業の理解度を確認するため、各授業では演習課題を課す。2 章で述べたとおり、受講学生の 理解度と学習意欲の幅が広いため、難易度の異なる3段階(レベルL/M/H)の演習課題を準備する。

図2 Python版「プログラミング演習」の授業内容

(8)

学生には自分のレベルに合った問題を選択してもらい、他の学生と自由に相談しながら取り組むこ とを許している。

問題は、著者の既報告 1と同一あるいは同程度の難しさのものを取り上げる。問題数も増やし、

あわせてMatplotlibによるグラフ作成も追加している。基本的に、レベルLの問題では、サンプル

プログラムを参考もしくは改良することで解けるような難易度とし、理解度が不十分な学生を対象 としている。レベル Mは、ある程度自信がある学生を対象とし、レベルHは、学習意欲が高く情 報分野にも関心がある学生を対象とした問題とする。特にレベル M 以上の問題では、大量のデー タを扱い達成感を感じられる問題を構成した。表1に各授業での演習課題(5回目以降)を示す。

プログラミング導入教育においてデータ処理を取り扱った研究は多い。例えば、Sullivan5は、非情 報系学生を対象に、Pythonとデータ処理を中心とした導入教育を実施し、最終課題において、デー タベース読み込みと簡単なデータマイニングを課している。データベースの読み込みでは、ファイ ル入力及び一連の文字列処理手続きが必要であるが、これらは初学者には難しい内容である。既報 告では、乱数を使って直接コード内で模擬データを生成する方法を採用している。これにより早い 段階でデータ処理問題を扱うことができ、また簡単な科学技術計算も体験させることができる。

表1 各授業での演習課題の内容

授業内容 演習問題 授業内容 演習問題

5.条件分岐 (L1)平方根の計算(虚数表示)

(L2)2次方程式の解計算(実数解のみ表示)

(L3)2次方程式の解計算(虚数解表示)

(M)BMIによるメタボリック判定

10.複数方向 分岐

(L)乱数を使った占い

(M)データベース問題2(単条件による検索)

(H1) M+該当数カウント、文字色変更

(H2)データベース問題3(複数条件での 検索、カウント、文字色変更)

6.定回反復

+乱数

(L)数列の和の計算1 (M1)公倍数の計算 (M2)複利計算1

(H)モンテカルロ法によるπの算出

11.多重反復 (L)九九の二乗値の表作成

(M1)L+行方向の合計算出

(M2)四角記号( )を使った三角波表示 (H1) M2+平行移動

(H2)データベース問題3(ソーティング)

7.リスト

+メソッド

(L)定回数の数値入力の総和等の算出 (M)定回数の乱数の生成、総和等の算出 (H1)データベース問題

(各レコードの総和等算出)

(H2)H1+条件抽出

12.文字列処 メソッド

(L1)パスワード照合(1回のみ)

(L2)標準入力から、空白区切り数値データの 一括入力(総和算出)

(M1)パスワード照合(ループ)

(M2)標準入力から、空白区切り数値の一括

入力&Matplotlibによりグラフ化

(H)長文英文データからキーワード抽出

8.内包表記

Matplotlib

(L)複利計算1とグラフ生成

(M)L+複数グラフ生成or三角関数グラフ (H)2次元データ群の線形分離(表示のみ)

13.ファイル 入出力

(L)ファイル読み込み(表示のみ)

(M1)L+計算 (M2) L+グラフ化 (H)ファイルの内容コピー

9.不定回反復 (L)不定回数の数値入力の総和等の算出

or数列の和の計算 (M)複利計算2 (H)Newtonor二分法

14.ユーザ 定義関数

(L)内積計算

(M)データベース問題(10回目H1 (H)データベース問題(10回目H1拡張)

(9)

4.3.

最終課題(

Final project

学習した内容を現実の問題へ応用する力があるか確認するため、最終課題を課す。最終課題も三 段階とし、既報告と同一の問題とした。レベルLは、Pythonの基本要素を一通り理解し、それらを 複数組み合わせたプログラムを作成できるかを評価する問題とする。レベル M では、学習した

Python を現実の問題(金融分野)に適用できるか、問題解決への応用を評価する問題とする。最

後にレベルHでは、レベルMの問題をより複雑にした問題と、情報工学の分野でプログラミング がどのように利用されているかを体験できる問題、の二つを準備した。ここでは各問題について簡 単に説明する。

・レベルL:標準入力で入力した8桁の数字を、全ての桁の数字を足し合わせ、この操作を、1 桁 の数字になるまで繰り返す。この操作にルールを設けることで、難易度をさらに2段階 に分けている。単純な問題であるが複数の基本要素を組合せる必要がある。

・レベルM:元金定額リボルビング ローン返済シミュレーション問題

・レベルH1:元利均等・ボーナス併用 ローン返済シミュレーション問題

返済条件の入力に対して、ローン残高等の情報を算出(概算値)する。

・レベルH2:多変数関数に対する最適化アルゴリズムの実装

ベンチマーク問題(多峰性、10変数関数)に対して、教員が提示するランダム多点探 索を実装する。実数値関数の最適化問題は、情報工学分野では基本的なトピックであ り、同問題に対する確率的探索手法も数多く開発されている(例えば Kennedy and Eberhart12、Storn and Price13を参照)。

なお最終課題については、自身の力で課題に取り組むように指導し、独自性の高いプログラムは 加点、プログラムソースの盗用は減点対象、場合によっては無効になると周知している。提出期限 は、最後の授業終了後、2週間程度である。

5. Python によるプログラミング導入教育の評価

表2に直近3年間での履修及び単位取得者数の推移を示す。本年度は受講者数が急増した分、学 習意欲が低調なものも多く含まれており、途中で学習を諦めるものも多い結果となった。

5.1. Python

の基本要素に対する学生の理解度

本授業の実践により学生が Python の基本要素をどの程度理解できたか、図 1 と同様のアンケー ト調査を実施した。アンケートは授業終了時(15回目)に行ったので、質問項目及び回答選択肢は 図1よりも詳細なものとし、自己評価は以下の4段階とした。なお結果には最終課題未提出者も5 名含まれている。

・理解度H2:(教材を見ながら)その要素に関連した“簡単な”プログラムを一から組む ことができる。

・理解度H1:(教材を見ながら)その要素に関連したサンプルコードを改良して解ける

(10)

レベルの問題ならプログラムを組むことができる。

・理解度M :その要素の内容は理解できたが、プログラムを組めるまでの自信はない

・理解度L :理解できなかった。

集計結果を図 3 に示す。特に特徴的な結果は、各項目で、「内容は理解できたがプログラムを組 む自信がない」と回答した学生が非常に多い点にある。その数は全体の3割前後にもなる。最も基 本的な「変数と型」でさえも、自信がないと回答した学生が、「リスト型変数」以降の項目と同程 度となっている。内容は理解できてもプログラムを組めないという学生に対して、いかにして自信 を持たせるか今後の大きな課題と言える。例えば、文献8, 14で利用されているような、自動的な問 題生成と採点が可能なオンライン演習システムを授業に取り入れ、できるだけ多くの小問題を学生 に解かせることで、自信を付けさせることが考えられる。また、初期に学習する「数学関数」を上 手く使いこなせない学生が比較的多い結果となっている。「数学関数」の理解度がLまたはMだっ た学生は、他の項目でも高い割合で Lまたは Mと答えている。このことから、学生の数学的基礎 能力の差が、プログラミング学習での理解度にある程度影響しているものと推察される。

次に学習につまずいた学生について調べた。「変数と型」~「ファイル入出力」の項目で、理解 できなかった項目があったものは、3項目以上:10名、2項目:3名、1項目:10名、なし:48名 であった。特に 3 項目以上あったものは、「リスト型変数」以降の項目を理解できていないものが 多かった。リスト型変数に関しては、C言語での1次元配列の結果(図1)のように大多数の学生 が理解できない状況は避けることができた。 C 言語の配列よりも、リストは様々な面で柔軟であ る特徴が、学生に受け入れられたものと考えられる。また、その内容を細かく分けた授業設計も、

ある程度有効だったと言える。一方で、標準関数とメソッドの違いが理解できなかった学生が非常 に多い結果となった。これらの学生は、「リスト型変数」あるいは「ファイル入出力b」を理解でき なかった、あるいはプログラムを組む自信がないとも答えている。二つの項目の説明では、標準関 数に加えて多数のメソッドを用いた実用的用例を学ぶため、学習負荷量が高いと感じた学生は、両 者の違い、特に使い方の違いを十分に理解できなかったと思われる。初学者が、応用力を高めるた めには、標準関数とメソッドの違いの理解が学習上の重要なポイントと言える。

表2 直近3年間での履修登録者数と単位取得者数の推移(ドロップアウトは学習継続を断念あるいは最終 課題未提出のもの)

b 「ファイル入出力」にはメソッドを介した文字列操作の実用的用法もその内容に含まれる

2016 2017 2018

履修登録者数 57 73 83

単位未取得者数(内 ドロップアウト) 15(6) 13(1) 13(13) 単位取得者数(取得率%) 42 (73.7%) 60 (82.2%) 70(84.3%)

(11)

5.2.

演習課題(

C

言語と

Python

の比較)

演習課題の取り組み状況を見れば、おおよその学生の理解度や学習意欲の状況を知ることができ る。内容をよく理解し学習意欲も高ければ、学生は難易度の高い演習問題に取り組むと考えられる。

ここでは学生がどのレベルの問題を選択したかについて調べたc。図4に、本年度の学生が取り組ん だ演習課題の推移と、2017年度(C言語)の学生の推移を併せて示す。ただし、学生が提出したソ ースコードの評価は図には反映されておらず、また一部の項目についても省略してある。

図からは、「不定回反復」を除いて、Python を学習した学生の方がより難易度の高い問題に取り 組んでいることが分かる。特に、「定回反復」までの内容はPythonの構文が簡素なため、内容も理 解しプログラム作成も自信がある学生の割合が、C言語の場合よりも高くなっている。また、Python での「定回反復」から「リスト型変数」の推移が、C 言語での推移(この場合は「配列」)と逆と なっている。これは、Python でのリスト型変数の基本メソッド(特に append メソッド)と関数の 使い方を理解できれば、難しい問題も取り組む自信がついていることを意味している。逆に理解が 不十分なものは、レベルMの問題に取り組むのを諦めてしまう傾向にある。同様に、Pythonの「文 字列処理」でもメソッドの使用が必要な問題(表1、12-H、12-M2)を避ける傾向にあった。一方、

「不定回反復」では、レベルHに取り組んだ学生数が、C言語の場合に比べ、Pythonの方が大きく その数を減らしている。この問題では、非線形方程式の数値解法Newton法や二分法を扱っている。

図3を見ると、数学関数を上手く使いこなせない学生も比較的多いことから、本年度は数学を苦手 とする学生が比較的多かったものと考えられる。また Pythonでの数学関数は、mathモジュールを 利用することから、モジュールの利用法を十分理解できなかった可能性も考えられる。

C 言語では、「ファイル入出力」と「ユーザ定義関数」はポインタの概念の理解が必要なため、

特に理解するのが困難な内容である。図4には記載していないがPythonにおいても、「ファイル入 出力」と「ユーザ定義関数」は学生にとって難解だったようであり、未提出だったものは、それぞ れ29、22名であった。

5.3.

最終課題(

C

言語と

Python

の比較)

最後に最終課題の取り組み状況について述べる。本年度と2017年度の最終課題の提出状況を表3

c 複数のレベルの問題に取り組んだ場合は,最も難易度の高い問題を選択したものとする

図3 「プログラミング演習(経済工学科1年生)」Pythonの理解度アンケート結果(回答数N=71,87.6%)

(12)

に示す。C 言語と Python で各レベル問題の提出者数にそれほど大きな違いはない。Python でも、

やはり簡単な問題Lに取り組んだ学生の割合が高かった。しかし提出されたソースコードを詳細に 評価したところ、C言語の場合では、実行できない不完全なソースコードや類似した(ほとんど同 じ)ソースコードが多数含まれていた。一方、Pythonでは、ドロップアウトしたものは多かったが、

自身の力で課題に取り組んだ学生が多いようであった。Pythonによる導入教育の方が、より多くの 学生に対して最低限のプログラミングの知識の習得させることができ、その知識を一定レベルのプ ログラム作成に活用できる力を育てることができたものと考えられる。なお、この最終課題の評価 については、より正確なソースコードの類似性チェックを行うため、ソースコード類似性測定ソフ トによる再評価を今後予定している。

表3 最終課題の提出状況とレビュー(NA:未提出、不完全:コンパイル不可能あるいは不備が大きいソース コード、類似:類似度が極めて高いあるいは同一のソースコード)

2017年度 C言語

提出数(不完全 / 類似)

2018年度 Python

提出数(不完全 / 類似)

レベルH(最適化アルゴリズムの実装)

レベルH(簡易ローン返済Simulation)

9(0 / 2) 4(0 / 0)

7(0 / 0) 10(0 / 3)

レベルM 12(2 / 2) 17(0 / 4)

レベルL+

レベルL

20(2 / 9) 27(3 / 3)

12(0 / 0) 24(2 / 0)

NA 1 13

図4 演習問題の取り組み状況の違い C言語 vs Python(2017年度C言語 73名,2018年度 Python 83名)

NA:未提出,条件分岐:レベルHなし

(13)

レベルHの最適化アルゴリズムの実装問題は、導入教育での総合的な課題としては難易度が高いに もかかわらず、両年度とも1割程度の学生がこの問題に挑戦している。このことは、経済工学科の 学生の中に、プログラミングの素養を持つ学生が存在し、彼らが、著者の授業を通してプログラミ ング能力を伸ばすことができたことを意味している。

6. おわりに

本学経済工学科は、数理的素養やプログラミングに対する関心度における学生の差が大きく、C 言語によるプログラミング導入教育では、次につながるようなポジティブな経験を持ち得た学生が 限られていた。本研究では、プログラミング導入教育の学習言語が C言語からPython へ変更にな ったのをきっかけに学習言語の変更による学習成果の改善について調べ、「主体的な学び」の場面 で活用できるような授業へ繋げて行くことを目的として実施した。

まずC言語での授業の知見をフィードバックしたPythonによるプログラミング導入教育のため の授業設計および教材開発を行った。そして、その授業の実践結果を、C言語の場合とPythonの場 合とでの演習課題への取り組み状況の違いによって評価を行った。Pythonの構文の簡素さの利点が 大きな学習項目では、Pythonで学習した学生の方がより難易度の高い問題に取り組む傾向にあった。

最終課題においては、基本的なプログラミングの学習内容を理解し、学習した知識を用いて一定レ ベルのプログラムを作成できる学生が増加した。

一方、アンケート調査からは、授業の内容は理解できても、実際にプログラムを作成する場面で は、戸惑ってしまう学生が多いことが分かった。このような学生に対しては、自動的な問題生成と 採点が可能なオンライン演習システムの授業での利用8, 14が効果的と考えられる。このシステムを 用いて、特にリスト型変数と文字列型の基本メッソドの使用法が習得できれば、学生の理解度は大 きく向上するものと考えられる。

謝辞

本演習授業のティーチング・アシスタントとして、本学システム情報科学府修士課程1年上本悠 貴君及び北川大喬君には、演習課題の採点でご協力頂きました。ここに感謝の意を表します。

参考文献

1辻康孝: 大人数クラスにおけるプログラミング演習の実施と学習者の学習意欲の維持, 基幹教育紀要, vol.4, 77 - 88, 2018.

2Simon, Mason, R., Crick, T., Davenport, J. H. and Murphy, E.: Language Choice in Introductory Programming Courses at Australasian and UK Universities, Proc. of the 49th ACM Technical Symposium on Computer Science Education (SIGCSE '18), 852-857, 2018.

3Guao, P.: Python is now the most popular introductory teaching language at top U.S. universities, Blog@CACM (http://cacm.acm.org/blogs/blog-cacm/176450-python-isnow-the-most-popular-introductory-teaching-language-at-top-u s-universities), 2014.

(14)

4Dawson, J. Q., Allen, M., Campbell, A. and Valair, A.: Designing an Introductory Programming Course to Improve Non-Majors' Experiences, Proc. of the 49th ACM Technical Symposium on Computer Science Education (SIGCSE '18), 26-31, 2018.

5Sullivan, D. G.: A Data-centric Introduction to Computer Science for Non-majors, Proc. of the 44th ACM Technical Symposium on Computer Science Education (SIGCSE '13), 71-76, 2013.

6Patterson-McNeill, H.: Experience: From C++ to Python in 3 Easy Steps, J. of Computing Sciences in Colleges, vol.22, no.2, 92-96, 2006.

7Wainer, J. and Xavier, E. C.: A Controlled Experiment on Python vs C for an Introductory Programming Course:

Students’ Outcomes, ACM Trans. Comput. Educ., vol.18, no.3, Article No. 12, 2018.

8Alzahrani, N., Vahid, F., Edgcomb, A., Nguyen, K. and Lysecky, R.: Python Versus C++: An Analysis of Student Struggle on Small Coding Exercises in Introductory Programming Courses, Proc. of the 49th ACM Technical Symposium on Computer Science Education (SIGCSE '18), 86-91, 2018.

9Enbody, R. J., William F. P. and McCullen, M.: Python CS1 As Preparation for C++ CS2, Proc. of the 40th ACM Technical Symposium on Computer Science Education (SIGCSE '09), 116-120, 2009.

10Enbody, R. J. and Punch, W. F.: Performance of Python CS1 Students in Mid-level Non-python CS Courses, Proc. of the 41th ACM Technical Symposium on Computer Science Education (SIGCSE '10), 520-523, 2010.

11 岡本 雅子, 村上 正行, 喜多 一, 吉川直人: 初学者を対象とした自習中心のプログラミング教育の教材開 発と評価, 情報教育シンポジウム2010論文集 2010(6), 87-94, 2010.

12Kennedy, J. and Eberhart, R.: Particle Swarm Optimization, Proc. of IEEE International Conference on Neural Networks, vol. 4, 1942-1948, 1995.

13Storn, R. and Price, K.: Differential Evolution – A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces, J. of Global Optimization, vol. 11, issue.4 341-359, 1997.

14Edgcomb, A. D., Vahid, F., Lysecky, R. and Lysecky, S.: An analysis of incorporating small coding exercises as homework in introductory programming courses, ASEE Annual Conference and Exposition, Conf. Proc., 2017.

15http://www.econ.kyushu-u.ac.jp/gaiyou/undergraduate/

(15)

参照

関連したドキュメント

To that end, here we report a heterogeneous catalyst that directly transforms lignocellulosic biomass-derived α-hydroxyl acids into α-amino acids, including alanine, leucine,

7.スポーツの歴史の検証 ※スポーツ振興くじ助成事業 (予算:14,353千円

ソフト ウェア開発計画をアローダイアグラムで図示 した時, ソフトウェア開発期間は, アローダ イアグラム上の始点から終点までの最大長路 (クリティカル・パス) で示すことができる.. 1000

[r]

2 フレキシブルシール

3.6 3.1 47.2 35.8 13.5 17.1 5.0 47.9 32.5 0.3 12.4 4.3 46.9 33.3 5.8 0 10 20 30 40 50 60

コンソールは、"ENTER WEIGHT - LBS" ("体重をポンドで入力してください"(また