ソフトウェア工学研究の日々

ソフトウェア工学の学術研究を紹介しています。ソフトウェア開発に関する調査と実験が大好きです。

実際のプログラミングで必要な内容と、授業や教科書の内容を比べた話

授業ではプログラミング言語の全部を教えられるわけではないので、どうしても一部重要だと考えるところをピックアップして教えることになります。それが「実際に世の中で役に立つ」内容なのかどうかを調べようということで、私たちのグループで1つ、比較方法を定義して試してみました。

まず、授業、教科書、そして実際のプログラミングの語彙 (vocabulary) を次のように集合として定義しました。対象は奈良先端大の Python プログラミング演習です。この授業は、大学院生が Python を使ってデータ分析ができるようになることを目標としていたので、「実際に世の中で」というところは、Kaggle におけるデータ分析プログラムが書けるか、と考えました。

  • 授業の語彙:学生に使えるようになってほしいプログラムの言語要素の集合。具体的には、模範解答として教員が作ったプログラムに登場した予約語演算子の集合。
  • 教科書の語彙:授業で使っていた教科書のサンプルプログラムに登場した予約語演算子の集合。
  • 実際に世の中で使われる語彙:KGTorrent というデータセットに収録された Kaggle 向け Python プログラムに登場した予約語演算子の集合。

比較の結果、見えてきたことは以下のようなものです。

  • 教科書はそこそこ広い範囲をカバーしていたが、is や None が登場するサンプルプログラムがなく(文章として説明には登場するが)、授業でも取り扱っていなかった。Kaggle に登場するプログラムでは頻繁に使われているので、授業で取り扱ったほうが良い可能性がある(来年度反映予定)。
  • 教科書では Lambda が登場しておらず、授業では何となく教員が必要そうだと思って追加していた。この判断は、Kaggle での利用頻度からすると、おそらく正しかったと確認できた。
  • Kaggleでは、while文やビット演算子がほとんど使われない。授業としては基礎なので教えたいが、実用性という点では、そこまで重要ではないかもしれない。

この結果を国際会議 CSEE&T 2023 のポスターとして発表しました(採択率 45.5%)。

K. Fukushima, T. Ishio, K. Shimari, K. Matsumoto: Towards Assessment of Practicality of Introductory Programming Course Using Vocabulary of Textbooks, Assignments, and Actual Projects.  Proc. CSEE&T, 2 pages, 2023.

私は都合により現地セッションには参加できませんでしたが、発表では、アイディアはわりと好意的に受け取ってもらえたようです。ドメインごとに必要な知識は違うという点は合意できるものの、特定のドメインに特化することが「授業として」良いのか、たとえば Pythonic な(Pyhthon 固有の)書き方に強く染めることは良くない可能性もあるなど、様々なコメント、有益な情報をいただくとともに、Best Poster Award をいただきました。

個人的には、授業における適切な教科書選びや、授業で教えていない内容を課題で要求してしまうといった授業進行上の問題の防止のような堅実な用途から考えていたのですが、もう少し幅広い展開も今後考えていきたいところです。