生成AIがコードを書いてくれる時代になりました。
「Pythonでこういう処理を書いて」と頼めば、かなりそれらしいコードが返ってきます。エラーを貼り付ければ原因を説明してくれるし、別の言語への書き換えもしてくれます。
そんな時代に、学校でプログラミングを学ぶ意味はあるのでしょうか。
私はIT系の専門学校で「プログラミング基礎」という授業を担当しています。
なぜ私がプログラミングを教えているのか。
身も蓋もない答えをすれば、そこに授業が設定されていて、私が担当しているからです。
でも、授業を担当する以上、それだけではいけないと思っています。
なぜ、この授業がカリキュラムにあるのか。
AIがコードを書いてくれる時代にも、プログラミングを学ぶ必要があるのか。
そして、学生たちがこれから進んでいく世界において、私たちは何を身につけてもらいたいのか。
改めて考えてみることにしました。
コードを書くことだけがプログラミングではない
生成AIの登場によって、「コードを書く」という作業の意味は大きく変わりつつあります。
以前なら、作りたいものがあれば、自分でプログラミング言語を覚え、自分でコードを書く必要がありました。
今はAIに頼めば、かなりのところまでコードを書いてくれます。
では、コードを書く作業がAIに置き換われば、プログラミングを学ぶ必要もなくなるのでしょうか。
私はそうは考えていません。
なぜなら、何かを作ろうとするときに必要なのは、コードを書くことだけではないからです。
「何を作りたいのか」を考える。
必要な処理を分ける。
どんな技術が必要なのかを調べる。
AIが生成したコードを読む。
実際に動かしてみる。
思ったように動かなければ原因を探す。
修正して、もう一度試す。
さらに別の技術と組み合わせる。

コードを書く作業の一部をAIに任せられるようになっても、この過程そのものがなくなるわけではありません。
むしろAIがコードを書いてくれるからこそ、出てきたものを理解し、試し、判断し、自分の目的に合わせて使う力が重要になるのではないでしょうか。
プログラミングは「アイデアを形にする」ための基礎
ここまで考えて、私はプログラミングを次のように捉えるようになりました。
プログラミングは、デジタル技術を理解し、組み合わせ、アイデアを形にするための基礎である。
この「アイデアを形にする」というところが大切だと思っています。
必ずしも大きな社会課題を解決する必要はありません。
「こんなものがあったら便利だな」でもいい。
「これを自動化したい」でもいい。
「こんなゲームを作りたい」でもいい。
「たくさんのLEDを同時に光らせたら面白そう」でもいい。
そこから、どうすれば実現できるのかを考える。
Webが必要かもしれない。
データベースが必要かもしれない。
Linuxを使うかもしれない。
ネットワークを組む必要があるかもしれない。
クラウドを使うかもしれない。
IoTデバイスを使うかもしれない。
そして当然、AIを使うこともあるでしょう。
一つひとつは異なる技術です。
しかし、それらをつないで「こう動かしたい」を実現するとき、プログラミングの考え方が基礎になります。
だから私は、プログラミングを特定の職種になるためだけの専門技術ではなく、さまざまなデジタル技術へ広がっていくためのハブとして捉えています。
Pythonを覚えることがゴールではない
現在の授業ではPythonを中心に扱っています。
だからといって、Pythonの構文をたくさん暗記することを最終目標にはしたくありません。
Pythonで学んだ考え方を使って、別の世界を見てほしいと思っています。
たとえば、別のプログラミング言語のコードを読んでみる。
「これはPythonだったらどう書くだろう」と考えてみる。
Shellスクリプトを見てみる。
Linux上でプログラムを動かしてみる。
データベースと接続してみる。
ネットワークの向こうにある別のコンピュータと通信してみる。
クラウド上で動かしてみる。
AIにコードを書いてもらい、それを読んで修正してみる。
Pythonは、そのための入口です。
一つの言語だけを深く掘ることにも価値はあります。
しかし学校教育としては、そこからさまざまなデジタル技術へ興味を広げていくことにも大きな意味があると考えています。
AIを使うことと、基礎を学ぶことは矛盾しない
「AIを使わせたら、学生は考えなくなるのではないか」
これは簡単には答えの出ない問題です。
基礎的なトレーニングでは、AIを使わず、自分の頭で考える経験も必要でしょう。
一方で、実際に何かを作ろうとするときには、AIを使わない理由もありません。
重要なのは「AIを使ったか、使わなかったか」ではなく、その学習で何を経験してほしいのかだと思います。
自分で考える経験をしてほしいなら、AIを使わない時間を作る。
AIを使って開発を加速する経験をしてほしいなら、積極的に使う。
AIが生成したコードを検証する力を身につけてほしいなら、あえてAIにコードを書かせて、それを読ませてもいい。
目的によって使い分ければいい。
AIを禁止することも、何でもAIに任せることも、それ自体を教育方針にする必要はないと思っています。
教員がすべての答えを知っている必要もない
ここには、私自身の立場も関係しています。
私は長年ITエンジニアとして働いてきた人間ではありません。
当然、知らない技術はたくさんあります。
授業を準備していて、自分自身が初めて知ることもあります。
分からなければ調べます。
公式ドキュメントを読みます。
AIにも聞きます。
実際に動かします。
エラーが出ます。
また調べます。
そして少しずつ理解していきます。
もちろん、教員として技術を学び続ける必要はあります。
基礎的な知識がなければ、学生がどこで困っているのかも、AIが出した答えがおかしいことにも気づけません。
しかし、あらゆる技術について学生より詳しくなければ授業ができない、とも考えていません。
教員に必要なのは、すべての答えを知っていることだけではなく、知らないものに出会ったとき、どうやって先へ進めばいいのかを示せることでもあると思っています。
「教える」だけではなく「経験できる場をつくる」
これは、私が関わっているボーイスカウト活動から影響を受けているのかもしれません。
野外活動では、指導者が何でも代わりにやってしまえば、きれいに活動を終わらせることができます。
でも、それでは子どもたちの経験になりません。
自分たちで考える。
やってみる。
うまくいかない。
原因を考える。
次はやり方を変えてみる。
もちろん、本当に危険なことは指導者が止めます。
しかし、回復できる失敗まで全部取り除いてしまえば、学べることも少なくなります。
学校でも同じなのではないかと思っています。
完成されたコードを見せて、その通り入力して終わる。
それだけではなく、
「やってみたけど動かない」
「なぜだろう」
「ここを変えたらどうだろう」
「今度は動いた」
という経験をしてほしい。
そのために教員がすることは、すべての答えを先に教えることではなく、安全に試し、失敗し、もう一度挑戦できる環境をつくることなのかもしれません。
デジタル技術だけでアイデアが形になるわけではない
もちろん、プログラミングだけですべてが完成するわけではありません。
複数人で何かを作るなら、コミュニケーションが必要です。
目的を決める必要があります。
役割を分担する必要があります。
期限を考え、進捗を確認し、必要なら計画を修正する必要もあります。
そこにはプロジェクトマネジメントの力も必要になります。
だから、私が考えている教育は、
プログラミングだけを学べばいい
というものではありません。
プログラミングを基礎としてデジタル技術を理解する。
さまざまな技術を経験する。
人と協力する。
計画する。
失敗する。
改善する。
そして、それらを組み合わせて自分たちのアイデアを形にする。
プログラミングは、そのための重要な土台の一つです。
AI時代だからこそ、プログラミングを学ぶ
AIによって、プログラミング教育は変わっていくと思います。
何年も先まで、今と同じ内容を同じ方法で教え続けることが正しいとも思っていません。
それでも今の私は、プログラミングを学校の学びの重要な基礎に置くことには意味があると考えています。
目指すのは、AIより速くコードを書ける人ではありません。
プログラミングを基礎としてデジタル技術を理解し、必要な技術を選び、AIも活用しながら組み合わせ、自分のアイデアを形にできる人。
そして、まだ知らない技術に出会ったときにも、
「知らないからできない」
で終わるのではなく、
「どうすればできるだろう」
と考え、調べ、試してみる人。
そんな人を育てるためのプログラミング教育なら、AI時代にも十分に意味がある。
むしろ、技術がものすごい速度で変わっていく時代だからこそ、その基礎を学校で経験しておく意味は大きくなっているのではないか。
今のところ、私はそう考えています。


コメント