1.コーディングをAIに任せる時代が来た
よく知っている大手IT企業のエンジニアが「最近は、ほぼAIに書かせている」と言っていました。また、今年の春、ソフトバンクの孫氏も "一人ひとりに、1,000個のAIエージェントを作らせている。これからはAIエージェントを使うので人は書かない"という趣旨のことを言われています。さらに、Qiitaにある投稿でも、たくさんの事例を確認できます。もはや、「脱コーディング」は常識となりました。
わたしはどうかというと、ここ1、2年、自分が作ったシステムの改修やツールの作成などをしていますが、コードをゼロから手書きしたことは一度もありません。JavaやPythonのコードを書いていますが、IntelliJやVS CodeでAIアシスタントをフル活用しています。Eclipseでも、Copilot4Eclipseプラグインを入れてGitHub Copilotを使います。
そうなんです!
わずか数年で、こんな時代になってしまったのです。
それなのに、講義(Java入門)では手書きが当然のように教えているので、さすがに「これはどうなのか」と疑問に思うようになりました。
では、なぜAIを使わせなかったのかというと、「最初からAIを使うとコードを書けなくなる」と思ったからでした。でも、足元で「コードを書かなくなる」時代に突入しているので、これはなんだか矛盾しています。ちょっとマズイのでは、と思うのです。
2.どうするかではなく、何ができるかを教える
文法を知っていれば、一度くらいは、手書きで試してみてもいいでしょうが、初めての人は、自分で書くとコンパイルエラーになりがちです。わたしは、エラーの説明や修正方法を教えることが必要でしょうか?
いえ、それはAIの仕事です。わたしは、AIに正しく質問する方法を教えるでしょう。ですから、文法を理解したら、若干のコーディング練習の後で、多くはコードをAIに書いてもらって結果を確認するという学習方法がいいと思います。
「それだと規則(文法)を忘れてしまうのでは?」と思いますか。確かに、そうです。ですから、覚えて欲しい度合が高ければ、手書きを通して記憶を定着させなくてはいけません。それでも、より重要なことは、「どうするかよりも、どういうことができるか」を理解して記憶することです。もはや、文法の詳細を覚えるのは最優先事項ではありません。
例えば、「コンソールに計算結果を表示するプログラムの書き方」よりも、「コンソールに計算結果を表示できる」という事実を、理解して覚えることが重要です。その事実を確認したい時は、適切に指示すればAIがコードを書き、実行して見せてくれます。
つまり、文法の詳細よりも、何ができるかを理解して記憶していることが重要なのです。そして、それはとても簡単なことです。この原則に従うと、プログラミング学習のコストは、大幅に低減するはずです。
3.プログラミング=手順を考えること
プログラムでどういうことができるか理解させたら、それらを組み合わせて何かの処理を作らせます。例を示します。
学習した内容:
・必要なデータをキーボードから入力できる
・データは変数に入れて利用できる
・変数(データ)と演算子を使っていろいろな演算ができる
・演算結果をコンソールに表示できる
作りたい処理:
・キーボードからxに値を代入し、y=2x^3-7x^2+3x-10 を計算して、結果を表示する
(注:べき乗を^で記述しています)
「学習した内容」はすでに学んだ事柄で、「作りたい処理」はプログラムで実現させたい内容です。そして「処理の手順」は、実行する手順を日常のことばで書いたものです。これは言葉による疑似コードで SPD(Structured Programming Diagram)といいます。
SPDを読むと、何をしようとしているのか誰でもわかります。処理のアルゴリズムがわかりやすい言葉で、明瞭に書かれています。
ただ、この例は簡単なのでSPDのように手順を書かなくても、「作りたい処理」をAIに教えるだけで、プログラムを生成してくれるでしょう。しかし、複雑になるとそうはいきません。例のように手順を言葉で考えて、順序立てて書き並べることが必要です。学習の初期では、訓練のために、細かくひとつずつ手順として記述するのがいいでしょう。
SPDはワードでも作成できますが、ノートに手書きすることを勧めています。書いたり消したりしながら、具体的な手順を考えることができるので、アルゴリズム作成の訓練になり、とても効果的です。また、繰り返しや分岐の表現では小さな図形を描いたりするので、ワードよりも手書きの方が書きやすいのです(「(参考)SPDのパターン」を参照)。
4.SPDからプログラムコードを生成する
最後はコーディングと実行です。AIにコードを生成させ、実行して試させます。
具体的には、エディタにコメントで、SPDに書いてある項目を指示として書きます。そして、Enterキーを押すとコードが生成されるので、タブを押してコードを承認します。
あとはこの繰り返しでSPD全体をコードに変換させます。
AIが生成したコード
# キーボードから変数xに値を入力する
x = float(input("xの値を入力してください: "))
# y=2x^3-7x^2+3x-10 を計算する
y = 2 * x**3 - 7 * x**2 + 3 * x - 10
# yをコンソールに表示する
print("yの値は:", y)
完成したら、正しく実行できることを確認します。
5.SPDの役割
SPDは、学習段階の基礎編において、コーディングではなく、日本語で処理手順を考える力を養うためのものです。ことばで手順を考える力は、AIとの対話のために必要な能力だからです。コード生成のために、AIへの指示文としても使いますが、それはこの時期のひとつの学習手段にすぎません。
そして、自分のことばでアルゴリズムを考えることができるようになれば、やがて、SPDを書かなくても、より抽象度の高いことばでAIに指示を出すことができるようになります。それは、Vibeコーディングと呼ばれています。Vibeコーディングの練習のために、ミニアプリの作成などを演習として実施するとよいでしょう。
6.次世代のプログラマー
機械語は、0と1からなるパターンで、コンピュータが理解できる唯一の言語です。コンピュータの黎明期には誰もが機械語でプログラムを作っていました。しかし、FORTRAN、COBOL、Pascal、Cなどの高級言語が開発されると、誰も機械語を気にしなくなりました。高級言語のコードは、コンパイラにより、正しく機械語に変換されるので詳細を知る必要はないと考えたからです。
今日では、AIによって、日常のことばをプログラミング言語へ変換できます。現在は、時々間違った変換を行うこともありますが、精度が増していくと、やがて誰もプログラミング言語への変換結果を気にしなくなるでしょう。AIは極めて急速に発達しているので、そう遠くない将来、どのプログラミング言語を使うかは意識しつつも、自然言語(日常のことば)だけでシステムを開発する時代が来ると思われます。
現在のような分業によるシステム開発は古いものになります。AIの支援を受けて、1人または少数のプログラマーが、設計から、開発、テスト、運用までを通して行うようになるでしょう。そのような時代になると、プログラマーに求められる能力は、単なるコーディング技術ではなく、高次の分析力、構成力、そして発想力のような力です。
今後、VibeコーディングやAIエージェントの利用が当たりまえになるのですから、学習の初期段階から積極的にAIを利用する姿勢が重要です。本稿で提案した教授法は、そのような時代に向かう人たちへ向けたものです。時代に合わせて学びの手法も変革していく必要があると思うのです。