京都大学は全学共通科目でプログラミング演習の教材に使用している、Pythonの教科書を無償公開している。教科書は京都大学学術情報リポジトリ「KURENAI(紅)」で公開しており、累計ダウンロード数は100万件を超えるという。

教科書は2018年に授業で使用し始めたもので、学生の反響を取り入れながら毎年のようにアップデートを繰り返してきた。本稿執筆時点で最新版となる2023年度版では、前年度版の誤植の修正や読みにくい文章を改訂したほか、前年の授業で補足した説明などを追記している。その他、章立ての改訂や新たな演習を追加するなど、公開から約5年が経過した現在でも改良が続けられている。

教科書を執筆したのは、京都大学 国際高等教育院 教授の喜多一氏ら。なぜ、大学教授がPythonの教科書を書くことになったのだろうか? Pythonユーザーが集まる開発者向けのカンファレンス「PyCon APAC 2023」に参加し、大学教授が一般的に販売されているプログラミング教本や参考書ではなく、あえてゼロから教科書を執筆し始めた、その背景を取材した。

  • 京都大学 国際高等教育院 教授 喜多一氏

    京都大学 国際高等教育院 教授 喜多一氏

教科書は教師である

多くの場合大学のカリキュラムでは、単位を取得するために学生は90時間の学修が必要とされる。これは90時間分の授業を受けるというわけではなく、30時間の演習に参加した残りの60時間は自己学習で補う計算だ。このとき、学生にいかに自己学習を進めてもらうかは教員として大きな課題となる。

「だからこそ私は自分で学習を進めてもらえるような教科書を作りたかった」と喜多氏は振り返る。学生と顔を合わせる時間は、一方的に知識を伝えるのではなく、インタラクティブな学習の場にしたかったそうだ。同氏は毎週の提出された課題に対しフィードバックのコメントを返すといった点でも、学生とのコミュニケーションを図っている。

  • 大学授業のカリキュラム

    授業のカリキュラム

教科書を作る際に参考にしたのは、一橋大学の野中郁次郎氏と竹内弘高氏らが提唱しているSECI(セキ)モデルだ。Socialization(共同化)、Externalization(表出化)、Combination(連結化)、Internalization(内面化)の各頭文字を取ったこのモデルは、組織の中で個人の知識を共有しながら新たな知を創造するモデルとして知られる。自己学習の結果をクラスの中で講師や他の学生と相互に話すことで得られる暗黙知を教科書に取り込んでゆく狙いがあったとのことだ。

  • SECIモデルの概要図

    SECIモデルの概要図

読者の皆様もご存知だろうが、書店のコンピュータサイエンスの棚を見ればPythonに関する参考書は所狭しと並んでいる。そうした中で、なぜ京都大学の教授がゼロから教科書を書き始めたのだろうか。

それは、"大学生向け"の教科書を授業に使うという目的が大きいようだ。授業の目的はPythonというプログラミング言語を学ぶことではなく、実際にプログラムを設計し、実装・テストできるようになることにある。また、上述のような大学ならではのカリキュラムへの対応はもちろん、受講する学生の特徴や授業への反応を最もよく知るのは大学の先生であるはずだ。だからこそ、喜多氏は市販の参考書ではなく大学生向けの教科書を執筆した。

  • なぜ、大学教授が教科書を執筆したのか

    なぜ、大学教授が教科書を執筆したのか

また、紙で参考書を出版する際には分厚く、高価なものになりがちである。一方、喜多氏が作った教科書はWeb上で無料で公開されている。「学生がなるべくお金を使わなくて済むようにしたかった。そして、Pythonを学んだ自分自身の体験を友人たちとシェアしてほしかった」と喜多氏は語っていた。

  • 京都大学 国際高等教育院 教授 喜多一氏

エラーは問題である

喜多氏の授業を受講するのは、主に京都大学の1回生。全員が理系学部なのではなく、人文学系や社会科学系の学生も参加するという。もちろんその多くが初心者で、プログラミングは未経験者が大半を占めるそうだ。コマンドプロンプトなどを知らない状態から始まる。

授業計画はPython標準の統合開発環境であるIDLEの使い方を学んだあとに、単純なプログラムを実行することから始まる。その後にリストや関数を学び、徐々にGUIなど高度な内容へと移る。最終的にはプログラムを自ら設計し、実装してテストもできるようになるそうだ。途中に力試しのテストなども設けている。

ちなみに、カリキュラムの中ではあくまでPythonのみを扱う。これは、他の言語と混在すると学生が混乱する恐れがあるためで、HTMLを扱うようなWebの内容は扱っていないという。

  • 演習のスケジュール

    演習のスケジュール

演習に参加したばかりの学生の中には、*(アスタリスク)を読めない人もいるという。喜多氏の授業では、こうした記号の読み方も教えている。「x = x + 1」と記述すると、プログラムやソースコードに見慣れている人であれば変数xの値を1増やすことだと理解できるが、プログラミング初学者の学生はこれを方程式として解く問題だと思い、悩む人もいるそうだ。

他方で、数学的にはxを変数として扱い慣れているので、最初は1文字の変数から始めてプログラミングで多用する複数文字の変数に広げ、次第にプログラミングで重視されるコード化の習慣につなげる。

  • 「x = x + 1」は方程式ではないことも授業では伝えるという

    「x = x + 1」は方程式ではないことも授業では伝えるという

他にも、「for i range (10)」のような記述も、慣れていれば繰り返し処理のfor文であることを理解できるが、慣れていないとfor you という英文から「for I(私のために~)」のような訳を連想してしまい、プログラミングの用語として納得しにくいようだ。こうした初歩的な点も授業では扱う。

  • for文の授業の例

    for文の授業の例

教科書では、まずはプログラムを使ってみることを重視している。特に、演習でデバッグを扱う特徴がある。喜多氏によると、エラー発生時の学生の反応は大きく2つに分かれるという。それは、エラーメッセージを読まない人と、バグを探す前に学習をやめてしまう人。

これに対し、喜多氏の教科書ではわざとエラーを発生させて、エラーを解決するまでの一連のプロセスを体験する。「未知のエラーはいざ知らず、既知のエラーであれば対応が簡単。エラー発生時に取るべき処理を体験して、デバッグはプログラミングを行う上で普通の行為であることを学んでほしい」という、喜多氏の願いが込められている。

  • バグの要因を探すのは比較的難しい

    バグの要因を探すのは比較的難しい

入れ子構造を学ぶ単元では、京都大学ならではの工夫が見られる。それは、ループを使って京都市内の交差点を作成する課題だ。京都では交差する通りの名前をとって河原町三条や四条烏丸、四条河原町、五条千本など地点を表すため、ここにループ処理を応用している。これは他の大学の教科書や市販の参考書には見られない、ユニークな課題だろう。

  • 京都ならではの課題も出されるようだ

    京都ならではの課題も出されるようだ

教科書は喜多氏らからのプレゼント

プログラミングを体験する初学者は、プログラミング言語について一通り学んでも、100行ほどのプログラムを書くことに行き詰まる場合もある。喜多氏はこのことについて「のこぎりと金づちを使えるからといって、家を建てられるわけではない」と表現していた。

そこで授業では、三目並べを例にプログラムを設計して実装し、テストしていく一連のプロセスを体験する。授業の後半には学生が自由にプログラミングに取り組む課題が出されるようだが、その際の手本にしてもらう狙いもあるという。

  • 三目並べの体験を通じてプログラミングの過程を学ぶという

    三目並べの体験を通じてプログラミングの過程を学ぶという

喜多氏は教科書の執筆に当たった際の気持ちについて、以下のように語っていた。

「どんな商品やどんな製品であっても、それは提供者が、必要だけど作れないという人に向けた贈り物。私は授業を受けてくれる学生たちにプレゼントを贈る気持ちで教科書を書き、プログラミングを教えている」

  • 京都大学 国際高等教育院 教授 喜多一氏