親子で楽しむプログラミング

第31回AIがコードを生成できる時代の「プログラミング教育」意味とは
―プログラミングすることの自由-

生成AIの台頭と疑問

小学校のプログラミング教育は2020年からはじまりました。その時は多くの人が現在のように生成AIがめざましく発達することが予想されていませんでした。本原稿を書いている2026年現在では、簡単なプログラムコードは生成AIがまたたく間に作成してくれます。さらに生成AIは、人間が何年ものあいだ気が付かなかったシステムのセキュリティーホールを指摘するまでになりました。一方で、名だたるIT企業がプログラマーをリストラするようにもなってきています。こういったニュースを見聞きしていると小学校でプログラムを学ぶ必要はあるのだろうかといった疑問が一部の教員や保護者の間で話されるようになってきています。

プログラミング教育の効用

大学でプログラミング教育に携わっている我々の雑感を述べさせていただくと、「プログラミングを学ぶ意味は、むしろ以前より増してきている」と感じています。その理由を以下の3つのポイントで説明したいと思います。

①プロンプト思考力の土台と責任をもつこと

生成AIに優れたプログラムコードを出力させるには、人間が「何を、どのような条件で、どういったゴールで作成するか」などを指示(プロンプト)が必要です。プログラミングの基礎を知らない人は、AIの指示の出し方も、出力された結果のコードが正しいことも判断できないからです。

プログラミング教育を早期に導入していたイギリスやエストニアおよび香港では、AI時代を見据えたカリキュラムのアップデートが進んでいます。たとえばScratchを用いた国際的な研究[1]では、小学生段階からコードの仕組み(順次、分岐、反復など)を学んだ児童は物事を論理的に分解してAIに的確な命令を出す能力(プロンプト・エンジニアリングの素養)が高い可能性が分かっています。

ご存じのかたもいらっしゃるとは思いますが、最新のAIエージェントは、自ら考えて条件設定や成果物のゴール設計まで自律的に実行されます。人間の指示は最小限または無くても仕事をこなしてくれます。しかし、その成果物を採用するかどうかは人間が判断するしかありません。その仕事の成果やプログラムのコードの使用についての責任は常に人間にあるからです。つまり、今後の人間の役割は課題意識と最終責任を持つことにフォーカスされていきます。

②成果を生むための「創造性と問題解決力」が身につく

生成AIの台頭以前では、⁠こんなことができたらいいな」といったアイディアをプログラミングができないことで実現できませんでした。しかし適切な命令を出すことによって、生成AIは実行可能なプログラムを出力します。つまり、技術的な壁を超えて自分のアイディアを形にできるのです。これは語学と同じ構図です。海外のひととコミュニケーションをとりたくても語学が壁となっていましたが、現在ではスマートフォンがあれば翻訳アプリが解決してくれます。

アメリカのマサチューセッツ工科大学の研究[2]では、AIツールを併用することで、子どもたちが「より複雑なアプリ」「社会課題を解決するシステム」を驚くべきスピードで開発する事例が急増しています。またインドネシアの研究[3]では、プログラミング教育を受けた子どもは、⁠失敗を恐れずに試行錯誤する力(レジリエンス⁠⁠」と「課題を発見して解決する創造力」が、一般の生徒よりも有意に高いという成果が報告されています。つまりプログラミング教育の目的は、人間の創造性から始まり、AIを手段として利用し、問題解決することです。

③AIのブラックボックスを見抜く力

生成AIの出力は完全な回答ではなく、場合によっては平気な顔をしてウソ(ハルシネーション)の情報を出力することがあります。例えばバグがあるプログラミングコードを出力します。したがって、プログラミングの構造を理解していないと、そのプログラミングコードを鵜吞みにしてしまうしかなくトラブルに対応できなくなります。

さらに小学生から大学でのプログラム教育では、⁠なぜこうなるのか?」と批判的に検証する視点(クリティカル・シンキング)を持つように指導をしています。この視点は生成AIで作られるフェイクニュースや動画が氾濫する社会に生きていく子どもたちにとって必須です。生成AIの出力までの過程はブラックボックスと言われていますが、その前提条件やその結論に対する想像力を持って見抜くことがプログラミング教育で育成することが必須となってきています。

生成AIの言いなりとならないために

大学1年生のプログラミングの授業では、最大公約数を求めるプログラムを作成する課題があります。ユークリッドの互除法を利用することで最大公約数を求めることができます。

ちなみに最大公約数とは整数Aと整数Bを共通する約数(割り切れる数)の中で最も大きい数のことです。ユークリッドの互除法はA>BとするとABでわった余りをRとすると、ABの最大公約数はBRの最大公約数と等しくなる」という性質を利用します。これを余りが0になるまで繰り返して求めます。具体例としてA=24B=18とすると、24÷18=1余り6です。次に18÷6=3余り0(終了)となります。したがって最大公約数は6となります。

「図1」のスクラッチのコードは、ある大学生が提出した最大公約数を求めるコードの例です。一見すると悪くなさそうですが・

図1 最大公約数を求めるプログラム
図2 出力結果

このプログラムは残念ながら、考慮すべきことが複数抜けています。プログラミングの授業では単に課題を達成するコードを作成することが授業の目的ではありません。将来システムを作成する人材となるように、システムとしての完成度についても同時に学びます。例えば、この例では以下の懸念点があります。

  1. マイナスの数を入力したときにはどうなるか?
  2. 実数(小数など)を入力したときはどうなるか?
  3. 入力が0だったらどうなるか?逆に最大値はどこまでか?

そんな入力をしないのは当り前じゃないかと思いますが、意図しない入力に対する対策はシステムでは必須の仕様です。これが実社会では、コードの一部のミスで電車が止まったり停電になったりするのです。

多くの大学生は生成AIを利用して課題を作成して提出していますが、考慮すべきことが抜けているため、安易なプロンプトとその出力結果が正解だと信じてしまいます。とりあえずは動きますから・。最近の生成AIはコードの出力とともに、⁠もし必要なら最小公倍数や素因子分解も実装できますよ」「より詳細にコードの説明をしますよ」と提案もしてきます。これは生成AIから、自分が何を考えつぎに何をするかまで指示されているようです。これでは生成AIに言われるままになっています。いまこそ「自らに由(よし⁠⁠」をしっかり持ってプログラミングに向かっていきたいと思います。それが本来の「自由」という意味だからです。

おすすめ記事

記事・ニュース一覧