今のプログラミングを取り巻く環境
Codex や Claude Code、Antigravity など昨今は普通の言葉でAIに指示することで、プログラムを作成してくれる環境が整ってきています。例えば「クイックソートのプログラム作って」ぐらいでもソートのプログラムを作ってくれます。素晴らしい、……と同時にちょっとおもちゃを取り上げられた子どもの気分にもなっちゃいます。さて、こんな状況で今の学生たちは果たして「プログラミング言語」を勉強する必要があるんでしょうか? はたまた、勉強するとしたら何を勉強したらいいんでしょうかね。
そんなことについて考えていて、最近1つの答えが出たので書いて見ようと思いました。
よく見かけること
数年前に生成系AIがコードを吐いてくれるようになり、プログラミング言語の知識がなくてもプログラムを作成して実行できるようになりました。(まあ実行するには本当に多少知識は必要でしたが) これについてQitaで面白い記事を見かけたことがあります。
僕はプログラミングが嫌いだったんだけど、おかげで嫌いなプログラミングをせずにプログラムが書ける
これは本当に素晴らしいことだと思う。プログラミング言語の知識やアルゴリズムの知識がなくても、それを形にできる。……僥倖……まさに僥倖! といってもいい。プログラムが苦手、嫌い、そもそもできない、そんな人達がプログラムを作成することに関われるまたは利用することができる。単純に裾野が拡大し、利用者が増えて、コンピューターがもっと一般的に本当の「利用できるもの」になる。いや、ほんといい時代になったもんです。この事自体は僕は全肯定です。
しかしそんなプログラミングを「教える側」や「教わる側」は色々と思うところがあるようです。特に教える側。言ってみればこの現状は教える側にとっては今までやってきたことの全否定にもなりかねません。そうしたことをふまえ、次のような意見が多かったように思います。
- AIが生成したコードのコードレビュー (本当に目的のコードになっているか読む) ができるぐらいはスキルが必要
- どういう構造でソフトを構成するかのアーキテクトの知識は必要
確かに最終的にはその成果物の責任を人間が負うわけなので、コードレビューは必要かもしれません。しかし昨今は16年近く見過ごされたバグをAIが発見したり、LinuxのコードのバグをAIで探して報告してくる人たちに、その件数が多すぎるがゆえにLinus Torvaldsが「バグを送りつけてくるならパッチも一緒に送ってこい」とブチギレする事態にもなってます。つまり人間のコードレビューが信用できるのかというとすでに疑問符が付く状態です。
またアーキテクトレベルの設計の話ですが、これは多少は理解できる点はあります。データベースを使ったシステムにするのかどうか、SQliteでいいのかMySQLレベルのものが必要なのかどうか。そんな実際の実装を選定する能力や、比較対象としてどんな物があるのかを知っておく必要はあると思います。AIはいわゆる「よく使用されるシステム構成」を提案するわけなので、実情に合わせた実装選定というのは必要かもしれません。ただしかし、これらのいわゆる「設計前提」もMarkdownファイルに書いておけば、AIはそれを考慮して提案してくれる状況になりつつあります。きちんと前提を記述して「そのうえで考えられる適切なシステム構成をMarkdownで書いて」と投げれば、上流工程でさえ人間は手を出す必要はないのかもしれません。
じゃあプロンプトやMDファイルを作れたらいい!!
タイトルの通り、これまでのことを考えると - AI に必要な情報を整理して与える - AI にやってもらいたいことを明確に与える これさえできればもうプログラミング知識やスキルは必要ないように思います。そう多分必要ないんです。きちんと必要な基礎情報と守るべき条件などを与えれば、それに応じてコーディング、デバッグ、テスト、場合によってはデプロイまでAIエージェントはやってくれる状況になっています。また上記の2つの項目に必要な能力はプログラミングスキルではなく、情報収集能力だったり、情報整理能力だったりします。
「いやその情報を取ってきて整理するためには情報処理のスキルが必要だ」
まあそういう意見もあるかもしれません。ただ現実として、「どのような情報を取ってくればいいか」と聞いたり、「要件定義のために必要な項目を提示」などとAIに言えばそれもやってくれる現実があります。 つまり、情報処理に関わってきた人間が今まで培ってきたさまざまなノウハウやスキル、そういったものは本当に「代替できる」時代になってしまったわけです。これを認めなければならないと思います。まさに、自動車が発売されたときに馬車を作ってた人みたいなもんです。悲しいけどね。
なんか勉強することあるの?
こういう時代、プログラミングについて人間はそれについてなにか勉強する必要があるんでしょうか。おそらくもう1,2年もしたらないんだと思います。AIに指示し、実行環境を構築してもらい、実行する手順を作ってもらって、デバッグ、テストもやってもらう。こういうことになるんだろうと思います。これに似た状況として言えそうなのは、コンパイラができたときのマシン語職人のようなものかと思います。現代のプログラマーというのはマシン語でプログラムを書くことは特殊な状況でない限りはほぼやりません。おまけにコンパイラが何やってるかをすべて把握している人はほぼいません。(コンパイラを作ってる人は別ですが) このおかげで僕らはマシン語を特に理解することなくコンピューターをプログラムで動かすことができていました。そう、マシン語を勉強することなくです。
現代はこのマシン語が高級プログラム言語になり、そのときのプログラムコードが自然言語になったわけです。つまり今のAIは自然言語コンパイラという事かもしれません。 (たしかに決定論的な出力ではないというのはわかりますが、現実こうなっちゃってるってことで)
しかしここにヒントがあると思っています。きちんと情報について勉強してきた人たちは、この「マシン語がなにか」も理解しています。そしてそこから勉強に時間をかければ「マシン語で」プログラムを書くこともできるはずです。これが勉強するべきことではと。
つまりなに勉強するの?
現代のプログラムに係る人たちが勉強すべきまたは身につけるべきスキル水準はなにかというと、「今から勉強すれば多少時間はかかってもそれを再現できるためのスキル」だと思います。例えばずっとAIだよりでプログラミングとはなに? 条件分岐?まったくわかりません、という人に「時間をあげるからこのAIが生成したプログラムと同じものを作成して」といわれると、AIの助けを借りたとしてもかなりの時間がかかるでしょう。まず何から勉強したらいいのか、どうしてそれを勉強するべきなのか、そういったものの検討がつかないと思います。当然そこから勉強したらいいということも言えますが、そこで向き不向きが出てきたり、AIに何からどう勉強したらいいかどう聞いたらいいかわからない、提案された勉強の方針の意味がわからない、など「とっかかり」が 0 というのは再現性という意味では問題です。なぜならその試行錯誤を廃するのがスキルだからです。
僕の結論としては、基本的にプログラミングスキルを現代で習得する必要はない、これが結論です。 しかし何をどこまで勉強するべきか、は現代のシステムがどのように動いているのか、は理解する必要があると思います。つまり「いざとなったとき勉強さえすればそれを再現できる」程度のスキルということです。まだ現時点ではCodexをどう使えばいいか、などのスキルは必要ですが、徐々になくなっていくでしょう。それが進んだとき、「さあAIの作ったコードを理解してみよう」としたときに「え?どうやってですか?」は技術の再現性が失われていてこれは回避する必要があります。なんだか伝統工芸の伝承方法みたいですね。
懸念
おそらく今後AI生成のコードがメインになっていくでしょう。その場合、以前まであった新しい言語がたくさん生まれたり、プログラミングの新しい概念が生まれたりということは減っていくと思います。確かに初期は言語をAIといっしょに作成するなんかのことが起きて増える事があるかもしれません。しかし、徐々にそれはなくなっていくんだと思ってます。AIは現在あるデータから学習し、生成するものなので、概念レベルの新しいものを作り出すのはなかなかに難しい気はします (できるようになるかも)。そうするとAIの性能そのものがIT技術の上限を決めてしまうのでは?という懸念はあります。人間は定理の外の公理を作るようにしないといけないのかもですね。
