生成系AIを利用したプログラミング学習
伊藤 篤(いとう あつし)/中央大学経済学部教授
専門分野 情報通信
1. コンピュータはより身近に
私達の身の回りにあるもの、パソコン、スマートフォンはいうに及ばず、車、テレビ、エアコン、炊飯器、電子レンジ、コーヒーメーカー、冷蔵庫、さまざまなところにソフトウエアが使われています。
また、近年、多くの職業でプログラミングのスキル(例えばPythonの利用)が求められるようになってきています。
今から25年くらい前、2000年くらいのことを思い出すと、PCが普及し、オフィスでも一人一台が使えるようになってきて、Word、Excel、PowerPointが使えることがICTスキルとして重宝された時代でした。その後は、Word、Excel、PowerPointは広く普及し、できてあたりまえとなってきています。
この1,2年は、AIが普及してきており、それと歩調を合わせて、Pythonも広く使われるようになってきています。Pythonは、もちろんAIの利活用もありますが、エクセルでは扱えない大きなデータを処理するためにも有用ですので、覚えておくと役に立ちます。
しかし、多くのひとにとって、プログラミング言語は少々とっつきにくいものであるのは確かです。
学生に、自然言語とプログラミング言語の違いを聞くと、プログラミング言語は曖昧さや間違いが許されない、文法エラーが多発する、これに対して、自然言語は、多少の間違いが許されるが、例外が多い、という答えが返ってくることが多くあります。確かに、プログラムの中で、コンマ、ピリオドが一つ抜けたばかりに大きな事故につながった例はいくつも報告されています。しかし、実際に「言語」として大きな違いはなく、数学的なモデルとしてはどちらも同じ文脈自由形文法(Context Free Grammer)であることが知られています。ですから、この印象の違いは、情報を受け取る側の柔軟性にあると言えます。コンピュータは、もっとも効率が良いコードを生成するために、厳格な処理を行いますが、人間は、いくつかの可能性の中で、一番もっともらしい解釈を選びます。しかしこのような違いを埋めるような技術革新が脚光を浴びています
2. AIの台頭
この1,2年、生成AI、その代表としてChatGPTがあります。ニューラルネットワークの有効性が認識されたのは2012年に、Geoffery Hibton(2024年ノーベル物理学賞受賞)らが発表したAlexNetですが、その後、2015年にGoogle DeepmindがAlphaGoを開発し、それまで不可能と言われた囲碁のAI化に成功、2018年には現在の生成AIの基礎となるAttention機構を組み込んだBERTがやはりGoogleによって開発されました。その後は、ChatGPT、Llama、Geminiなど、様々な生成AIが使われるようになってきました。直近では、Deepseekもあります。
このような状況において、大学における講義も影響を受けつつあります。実際に、レポートを見ると、どうみても人間が書いたとは思えない不自然さがある文章が散見されるようになり、学生が宿題をAIに丸投げする状況も生まれているのは事実です。このような悪影響もありますが、うまく利用すれば、大きな効果をもたらすこともできます。
3. ChatGPTを使ったプログラミング学習の試み
ChatGPTは、その中に、世の中のデジタル化されたデータのほとんど全てと行っても良い、巨大な情報を格納していますが、そのなかに、プログラムに関するものもあります。つまり、ChatGPTはプログラムを作ることができるのです。これをうまく使うと、ひとことで言えば、プログラムを書かなくても、プログラムを作成し、実行することができます。つまり、学生がプログラミング言語に対して感じている使いにくさを、誤りに対する不寛容さの部分をとばして、あるていど動くものはすぐに入手できることになります。
ただ、これをうまく使うには、どんなプログラムを作るのか、ChatGPTが提案してくれたプログラムは正しく動いていることをどのように確認すべきか、ということを十分に理解する必要があります。これができないと、意味不明な、一見もっともらしいが間違ったレポートと同じことになります。
これをコンピュータサイエンスの用語で言うと、仕様記述(要件分析、要件定義)という、いわゆる「上流工程」と言われる部分がしっかりしていれば、AIが設計やコーディングはしてくれるので、かなりの労力を削減できるということを意味します。つまり、図1から図2へのパラダイムシフトが起きることを示しています。
図1 ソフトウエア開発モデル
図2 AIが支援するソフトウエア開発モデル
もちろん、商用のソフトでこれを全面的に取り入れるためには、まだ、検証すべきことも多々ありますが、プログラミング学習においては、このアプローチが機能することが期待できます。つまり、学習者は、課題を受取り、それをChatGPTと相談しながら、動くようにしていくというものです(図3)。
図3 学習者とAIの関係
4. 今後の展望
2024年度の経済学部1年生向けの講義「入門ICT演習」において、ChatGPTを使ったPythonのプログラミング学習を取り入れてみました。ChatGPTを使った簡単なゲーム作成を軸に、Pythonの文法だけでなく、アプリが動作する仕組み、UNIXの操作方法、ファイル構造などのコンピューターサイエンスの基礎知識の講義を織り交ぜた構成となっています。
最初に、ざっと基礎的なことを学習し、それをプログラムを作成しながら応用する、という、これまでのプログラミング学習流れも含みつつも大きな違いがあります。それは、なにはともあれ、ChatGPTが教えてくれたコードを動かしてゲームが起動するのを確認し、それを改修したりしながら、学習内容を応用するという流れで学習を進めるというところです。
以下は、講義で使った内容の一例です。
- 最初に使用するプロンプト「pythonでキャッチゲームを作りたい」
- 動いたら、カスタマイズする。色を変える、画像を入れる、速度を変える、落ちてくるオブジェクトの数を変える、回転させる、得点を表示する、など。
図4 キャッチゲーム初期画面
そうすると、多くの場合、図4のような画面となります。これは、私がサンプルで作ってみせたものです。しかし、これは朱と白の四角が表示され、赤が上から落ちてくるだけですから、これだけでは、ゲームらしいことは何もできません。例えば、図の中で、赤と白が重なっていますが、本来のゲームであれば、そこで、得点になるとか、逆に負けになるとか、何かが必要です。そこで、
- 白い四角を左右に動かす(避ける、または当てる)
- 赤い四角をキャッチしたらそれが消える
- 白い画像を籠に、赤い画像をりんごにする
など、自分の流儀でゲームの仕様を決めていき、コードはChatGPTで生成する、という作業を重ねていくと、だんだん、ゲームらしくなっていきます。
もちろん、初めてのプログラミングの世界なのでわからなくて困ることは多いわけです。そこで、多くのひとがわかっていないところをピックアップして、次の時間の最初に復習し、さらに新しい知識を加えて次のゲームを作成するという流れで授業を進めたところ、従来なら脱落する学生が少なからずいるところですが、より多くの学生が興味を持ったまま最後まで取り組んでくれました。このことから、少なくとも「情報」に関する教育手法が、生成AIによって今後大きく変化するとも考えています。
2023年度に、ChatGPTを使ったプログラミング学習の研究を一緒にやってもらった大塚さんが、その経緯を詳細にまとめた本があるので、興味がある方は、是非、ご一読ください。
#100日チャレンジ 毎日連続100本アプリを作ったら人生が変わった (大塚あみ (著))
https://bookplus.nikkei.com/atcl/catalog/24/12/05/01757/
また、以下のリンクには、大塚さんの学習状況を私の目から見た感想がありますので、参考までに載せておきます。
https://bookplus.nikkei.com/atcl/column/041500053/012700377/
伊藤 篤(いとう あつし)/中央大学経済学部教授
専門分野 情報通信名古屋市出身、1959年生まれ。1981年名古屋大学工学部電子工学科卒業。1983年同大大学院情報工学専攻修了。2007年博士(情報工学)(広島市立大学)。
1983年国際電信電話株式会社(現KDDI)入社。1985年~研究所にて仕様記述言語SDL, IN, インターネット, アドホックネットワーク, Android応用等の研究に従事。1991~1992年スタンフォード大学CSLI客員研究員。2014年宇都宮大学大学院工学研究科教授。2020年中央大学経済学部准教授。2021年〜現職
最近の研究テーマ:最近の研究テーマ:ウエアラブル脳波センサを利用した森林浴の効果測定・ドライバーの感情推定、生成系AIを利用したソフトウエア学習支援・ナラティブの生成、農業支援・打音検査へのAI応用など。
専門分野:情報通信
情報処理学会, 電子情報通信学会, 日本認知科学会、ACM, IEEE、日本山岳会各会員