パパ教員の戯れ言日記

このブログの発信は個人としての発信です。こんな教員もいるのかと思っていただければ幸いです。

もしも人間が読めないプログラミング言語がAIによって作られたら、コードの質は誰が担保するのか

ちょっと前の話。

中央教育審議会の情報・技術ワーキンググループ第9回資料2「プログラミング教育について」を読んでいて、かなり大きな変化だと感じたことがある。

「プログラミング的思考」の射程が広がろうとしているのだ。

これまでの小学校段階でいう「プログラミング的思考」というのは、自分の意図した動きを、コンピュータが実行できる手順や命令の組合せに置き換え、改善していく考え方だった。要するに、「どう命令を組み合わせれば意図した動きに近づくか」が中心にある。

そして、教科の中で教科の狙いを実現する手段としてプログラミングが用いられるというのが大前提であった。

ただ、第9回資料2では、AI技術の進展を踏まえ、考え方が一段拡張されている。
自然言語でAIに指示し、簡易なプログラムやアプリケーションを生成できる環境が広がっている、という整理だ。

いわゆるバイブコーディングっでやつですね。

ちょっとしたデータ整理、GAS、簡単なWebアプリ程度であれば、今や専門家でなくても「動くもの」にたどり着ける。わたし自身もその恩恵を受けている。

じゃあ、プログラミング教育は不要になるのか?

と思っていたら、プログラミング的思考がかなり拡張されるようなのだ。

AIによって生成されたコードには、誤りや不適切な処理が含まれる場合がある。だからこそ人間が目的や状況に応じて適切に判断することが必要で、AIに指示する力、そして生成物を批判的に評価・改善していく力が一層重要になる、と整理されている。
これは当然そうなるよな、と思う。

第11回資料2でもこの方向性がさらに整理されていて、「目的や課題を構想し、AIへの指示やプログラミングを通じて解決策を実現するとともに、生成・作成したものを論理的・批判的に評価・改善し、責任を持って活用するまでを含む一連の考え方」として捉え直すと明記されている。
今後のプログラミング的思考で問われるのは、こういうことだ。

「何を実現したいのか」を構想する力
「AIにどう指示するのか」を考える力
「生成されたものは妥当なのか」を検証する力
「最終的に誰が責任をもって使うのか」を問う力

ここまでは、非常に重要な整理だと思う。
ただ、一つ気になることが。

「AIが出力したものを、人間はどこまで検証できるのか」

例えば、AIが作ったプログラムがある。画面は表示される。ボタンも動く。課題は一見達成できている。
ところが、その内部で何が行われているのかを、学習者や教師が十分に理解できていなかったら、どうなるのか。入力された情報をどこかに送信していないか、特定の条件でだけ誤った結果を返さないか、著作権や個人情報の扱いに問題はないか、意図しない偏りや判断が組み込まれていないか。

「動いたから正しい」とは言えない。
そして、これが大事なんだけれど、検証するには相応の知識がいる。仕様を読む力、コードを読む力、テストケースを設計する力、想定外の動作を疑う力、そもそも何を確かめるべきかを判断する力。それが無ければ「検証した」とは言えない。
AIが生成するものが複雑になればなるほど、人間による検証は難しくなっていく。これは確かなことだ。

安直に、AIによる出力を検証するみたいなことを書いているけれども、どの粒度でそれを行うのか。他人が書いたコードを検証するというのは、実はかなり難しく、AIが書いたそれっぽいコードを、初心者が検証するというのは無理に近い。

よって、この拡張はなかなか危ういのでは無いかと思ってしまう。

更に思考実験をしてみよう。

もしも人間が読めないプログラミング言語が生まれたら
ちょっと極端な話をしてみる。
AIが人間には読めないプログラミング言語を作り出したとする。

AIは今、人間が開発した言語でプログラミングを行ってくれる。それは学習データが豊富であることもあるだろう。

ところが、AIが知見を貯めるにつれ、人間には読めないけど、AIに取っては読みやすいプログラミング言語が出てくる可能性は普通にあるだろう。

AI同士の間では自然言語よりもはるかに効率的にやりとりできる。でも人間にはその意味が追えない。

そのとき、コードの質は誰がどのように担保するのだろうか。

「別のAIが検証すればよい」は確かに一つの答えだ。AIがコードを書いて、別のAIがレビューして、さらに別のAIがテストを作る。開発現場はそちらに向かっているし、部分的にはもうそうなっているのかも知れない。

でも、それは本当に「人間が検証した」と言えるのだろうか。
人間が理解できないものをAIが「問題ありません」と判定する。人間はその判定を信じて使う。不具合が起きた時に、AIは責任を取らない。最終的に責任を問われるのは、採用した人間や組織だ。

学校で使うシステムなら、子どもの個人情報を扱う。行政で使うシステムなら、公平性や説明責任が問われる。教育で使うシステムなら、子どもの学びや評価に影響する。
「AIが大丈夫と言ったから大丈夫です」では通らなくなってしまう。

もちろん、すべてのコードを完全に理解しながら使うなんて現実的ではない。わたしたちはすでに、OSも、クラウドサービスも、AIモデルも、その仕組みを完全には理解しないまま使っている。「理解できないものは一切使うな」という話ではない。
問題はここだ。どの程度理解していれば使ってよいのか。どの範囲まで検証すれば責任を持ったと言えるのか。どこから先は専門家や第三者評価に委ねるべきなのか。そして委ねたとしても、最終的な判断を誰が引き受けるのか。
これが、AI時代のプログラミング的思考が、社会全体に投げかける問いなのだ。

「順序」「分岐」「反復」を考えるだけでは足りない。これからのプログラミング的思考に必要なのは、目的を構想する力、AIに適切に指示する力、生成物を批判的に検討する力、そして検証の限界を自覚した上で責任をもって判断する力まで含んだものだ。
第9回・第11回資料2が示している方向性は、その意味でとても重要だと思う。ただし、その先には「AIが作ったものを、人間は本当に検証できるのか」という重い問いが待っている。

例えば、これが航空や医療、銀行に関係するプログラムだったらどうだろう。

人間が読めるコードであるべきなのか。
それとも、反応速度に優れ、非常時の危機回避や素早い診断、安定したトランザクション処理を可能にするのであれば、人間には読みにくくてもAIに最適化された形式を認めるべきなのか。

一方で、自分が趣味で使う簡単なツールならどうか。

ログを出して動作を確認する。
想定される入力をいくつか試す。
エラーが起きたらGitHubのIssueのように一つずつ記録し、解消していく。
別のAIにレビューさせ、その結果を人間が読める形に翻訳してもらう。

たしかに、そうした方法で一定の検証はできるかもしれない。

しかし、それで「十分に検証した」と言えるのはどこまでなのだろうか。
趣味のツールならよいのか。
学校で子どもの個人情報を扱うならどうか。
成績や評価に関わるならどうか。
行政や医療、金融のように、人の生活や命に関わる領域ではどうか。

おそらく、求められる検証の水準はリスクによって変わる。
そして、その水準を誰が決めるのかという問題は、教育現場だけで完結する話ではない。社会全体としても、まだ十分な合意ができているとは言いがたい。

だからこそ、プログラミング的思考に「AIへの指示」や「生成物の評価・改善」を含めるのであれば、同時に「検証には限界がある」ということも扱わなければならない。

動いたから正しいわけではない。
AIが大丈夫と言ったから安全なわけでもない。
自分で確かめられる範囲を知り、確かめられないものを無批判に使わず、必要に応じて専門家や第三者評価に委ねる。

そこまで含めて、AI時代のプログラミング的思考なのではないか。

第9回・第11回資料2が示している方向性は、とても重要だと思う。
ただし、その先にはまだ答えの定まっていない問いがある。

AIが作ったものを、人間は本当にどこまで検証できるのか。
そして、検証しきれないものを使うとき、誰がどのように責任を引き受けるのか。

この問いに向き合わないまま、「AIの出力を評価・改善する力が大事です」とだけ言ってしまうのは違和感が残る。

プログラミング教育は、AIによって不要になるのではない。
むしろ、AIによって「何を作るか」よりも、「どう確かめ、どこまで責任を持つか」を問われる段階に入っているのだと思う。