この分野の声が大きい人たちと同じように、私も生成AIシステムがソフトウェア開発にどのような役割を果たすのかについて大きな関心を持っています。LLM(大規模言語モデル)の登場は、アセンブラから最初の高水準プログラミング言語への移行と同じくらい、ソフトウェア開発を大きく変えると思います。その後に開発された言語やフレームワークは、抽象化のレベルや生産性を向上させましたが、プログラミングの本質に同じレベルのインパクトを与えるものではありませんでした。しかし、LLMには最初の移行と同程度のインパクトがあると思います。しかも、単に抽象化のレベルを上げるだけでなく、「非決定的なツールでプログラミングするとはどういうことか」という問いを私たちに投げかけています。

高水準言語は、新しいレベルの抽象化をもたらしました。アセンブラを使うときには、特定のマシンの命令セットを考える必要がありました。単純な操作でさえ、それを実行するためにどのデータをどのレジスタに移すかを自分で考える必要がありました。高水準言語が登場したことで、ステートメントの連続、いくつかの選択肢から選ぶ条件分岐、データのコレクションにステートメントを適用する反復処理などの観点で考えられるようになりました。コードのさまざまな部分に名前を付けることもでき、何の値を表しているかを明確にできるようになりました。もちろん初期の言語には制限がありました。私がはじめて仕事でプログラミングしたのはFortran IVでしたが、「IF」文には「ELSE」句がなく、整数型の変数の名前は「I」から「N」で始めることを覚えておく必要がありました。

こうした制限が緩和され、ブロック構造が使えるようになったことで(「IFのあとに複数のステートメントを書ける」)、私のプログラミングは簡単になり、楽しくなりましたが、どれも本質的には同じことでした。今ではループを書くことはほとんどなくなり、関数を直感的にデータとして渡せるようになりましたが、それでも私は、イギリスの田舎町(ドーセット)でFortranを書いていた頃と同じような方法で、マシンと対話しているのです。RubyはFortranよりもずっと洗練された言語ですが、Fortranと同じ雰囲気を持っています。一方、FortranとPDP-11の機械語命令には同じ雰囲気がありません。

私はまだ最高の生成AIツールを本格的に使ったことはありませんが、友人や同僚たちの体験談を聞くたびに、非常に興味をそそられています。これは抜本的な変化であると確信しています。プロンプトで機械と対話するのは、Rubyでプログラミングするのとはまったく別物であり、その違いはFortranとアセンブラの違いと同じくらいです。これは抽象化のレベルが飛躍しただけではありません。Fortranで関数を書いたときには、100回コンパイルしてもまったく同じバグが必ず現れました。しかし、LLMは非決定的な抽象化を導入しているため、プロンプトをgitに保存しても、毎回同じ振る舞いが返ってくるとは限りません。同僚のBirgittaが言うように、私たちは抽象化のレベルを上げているだけでなく、同時に非決定性という横方向にも進んでいるのです。

これまでの改善では抽象化のレベルが上がるが、LLMSは横方向にも移動する illustration: Birgitta Böckeler

私たちは仕事でLLMの使い方を学びながら、こうした非決定性とうまく付き合う方法を見つけなければなりません。この変化は劇的なものです。私はワクワクしています。残念ながら失うものもあるでしょうが、私たちがまだ理解できていない新たな価値も得られるでしょう。こうした非決定性の進化は、私たちの職業の歴史において前例のないものです。