同氏が最近Mediumに投稿した記事『AIはプログラマーを代替するのか?』では、コード生成AIがプログラマーを代替する可能性が論じられています。
今年になって、OpenAIが開発する自然言語処理モデルのGPT-3やOpenAI Codexを活用したソース生成AIが発表されています。ソース生成AIとは、自然言語でプログラミングしたい内容を記述すると、その内容を実行するソースコードを出力するAIを指します。
同AIの登場は、プログラマーの主要な仕事の1つであるコーディングが自動化されることを意味しています。こうした自動化は、プログラマーを無用な職業にしてしまうのでしょうか。
Bergdahl氏によれば、コーディングとはプログラマーの仕事の一部に過ぎません。コーディング以外のプログラマーの業務として、同氏は以下のような5つのタスクを挙げています。
|
以上のタスクについてその難易度とAIによる実行可能性を検討した結果、いずれも現在の技術レベルにおけるAIによって自動化されることはない、と同氏は結論づけます。
しかし、いずれはこれらのタスクすべてがAIによって自動化される日が来るだろう、とも考察しています。そして、AIによるプログラマーの完全代替は、ほかの多くの仕事がAIによって代替された後に実現するだろう、とも述べています。
なお、以下の記事本文はJacob Bergdahl氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。また、翻訳記事の内容は同氏の見解であり、特定の国や地域ならびに組織や団体を代表するものではなく、翻訳者およびAINOW編集部の主義主張を表明したものでもありません。
目次
OpenAIのアルゴリズムはコード生成AIに門戸を開いたが、ソフトウェア開発者にどのような影響を与えるのだろうか。
GitHubは先日、新しいコード生成AI「Copilot」を発表した。しかし残念なことに、マイクロソフト社が所有するGitHubが機械学習を利用してソフトウェアの動力源となるデータを収集して利用する方法には疑問が残る。そのため、このAIを使用した人は、訴訟を起こされる可能性があるほどだ(※訳註1)。
しかし、コード生成ソフトウェアを開発しているのはGitHubだけではない。例えば、Enzyme社やDebuild社などのスタートアップが、作りたいものを記述するだけでコードを生成できるソリューションを開発中である。いずれのスタートアップの製品もまだ一般に公開されていないが、これまでに公開されたデモを見る限り期待できそうだ。
“今後、数年のうちに多くの企業がコード生成技術を発表することは間違いないだろう。“
近年、コード生成ソフトウェアが爆発的に普及している背景には、自然言語処理(NLP)の目覚ましい進歩で有名になった組織であるOpenAIがある(※訳註2)。同組織は、上述の3社にソフトウェアの基礎となるアルゴリズムを提供している。
昨年の夏、私は現実世界に実装された人工知能(AI)に関する本を出版した。そのなかで、自律的にコードを書ける機械学習ソフトウェアがさまざまな形で登場し始めていることを簡単に紹介した。
しかし、GitHubのような巨大なテック企業が、そのソリューションを素早く市場に投入することができたのに私は驚いた。他の大手企業もCopilotの成功事例や欠点を観察して学びながら、自社のコード生成AI製品をリリースする準備を進めているに違いない。
今後、数年のうちに多くの企業がコード生成技術を発表することは間違いないだろう。
これまで見てきたコードライティングAIは明らかに完璧なものではないが、これらのツールは真新しいものであり、目覚ましいスピードで改良されていくことを念頭に置く必要がある。これらのツールが5年後、20年後、50年後にはどれほどの力を発揮しているのか、想像してみよう。
自分の仕事が自動化されるかも知れないと心配する若い開発者を見かけたとしても、何ら不思議ではない。プログラマーは仕事を失うことを恐れるべきなのだろうか。学生がソフトウェア開発の学位を取得するのは時間の無駄なのだろうか。
そんな不安を払拭するために、私は次のように言える。
「プログラマーはすぐには代替されない」と。
同AIはPythonのコード生成に優れているほか、JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScriptなどの12の開発言語に対応している。Pythonのコード生成のために14KBのメモリを使うのだが、この仕様は英文を生成するGPT-3のメモリ使用量である4KBの4倍以上となる。
現在、OpenAI CodexのAPIを利用したい企業に対して、Waitlistページが設けられている。同APIの利用を希望する企業は、必要事項を記入してOpenAIの審査を受けることになる。また、YouTubeには以下のような同AIのデモ動画が公開されている。
・・・
プログラマーという存在の複雑さ
最初にはっきりさせておきたいのは、前述の3社はいずれも人間の代わりになるような製品を販売していないことだ。
GitHubは自社製品のCopilotを「AIペアプログラマー」と明確に表現しており、Debuild社のCEOであるSharif Shameem氏は、機械がプログラマーに取って代わるという考えに同意しないことを表明している(※訳註3)。
むしろコード生成AIは、開発者のアシスタントとして機能するだろう。
ソフトウェア開発者というと、その複雑さを過小評価してしまう人がいるのではないだろうか。コードを書くこと自体は、プログラマーの仕事のほんの一部に過ぎない。
“プログラマーはすぐには代替されない”
開発者の仕事は多岐にわたる。コードを書くこと以外にも、以下のような大きな仕事を開発者は実行しなればならない。
|
以上は、開発者に割り当てられたタスクのほんの一部だ。他にもドキュメントの作成、コードのレビュー、チケットの更新などがある。
例えば、人間と同じようにコードを書けるAIが発見されたとしよう。さて、ソフトウェア開発者の仕事が自動化されるためには、機械学習アルゴリズムがコーディング以外のすべての仕事もこなせるようになる必要がある。そうした仕事をAIが代替する可能性について、以下で述べていく。
Here's a sentence describing what Google's home page should look and here's GPT-3 generating the code for it nearly perfectly. pic.twitter.com/m49hoKiEpR
— Sharif Shameem (@sharifshameem) July 15, 2020
以上のソース生成AIに対して、プログラマーを完全代替するのではないか、という懸念が寄せられている。こうした懸念に対して、同CEOは、「AIアプリを開発するためにむしろより多くの人間の開発者が必要になる」と答えている。
ビジネス要件の理解
この作業がいかに複雑であるかは、いくら強調してもし過ぎることはない。エンドユーザのニーズを理解し、それを技術的要件、ユーザインターフェース、そして最終的にはコードに変換することは、ソフトウェア開発において最も困難なステップの1つだ。
プロダクトオーナー、プロジェクトマネージャー、デザイナー、開発者、そしてユーザは、それぞれが求めるシステムに関するさまざまなイメージを持っている。
「ニーズは何か」「予算はどのくらい許されているか」「プロセスはどのように改善できるか」など、それぞれが明確に理解している。
私はソフトウェア開発者としてスウェーデンの大手企業のソリューションを構築するためにさまざまなチームに参加してきたが、一般的にソフトウェア開発における最大の課題はコミュニケーションであると結論づけている。
仕様通りに作られた技術的な傑作であるにもかかわらず、エンドユーザの実際のニーズを解決できないシステムを目にしてきた。
“プロダクトオーナー、プロジェクトマネージャー、デザイナー、開発者、そしてユーザは、それぞれが求めるシステムに関するさまざまなイメージを持っている”
共通したビジネス言語で人間とコミュニケーションをとるのはとても難しく、ましてやアルゴリズムとの意思疎通はもっと難しい。
そうは言っても適切なソフトウェア開発チームであれば、開発者とプロダクトオーナーが相互にコミュニケーションをとれるに違いない。
プロダクトオーナーがある機能を提案すると、経験豊富な開発者がこう答えるかも知れない。「そうすることもできますが、代わりにこれをするのはどうですか」と。
製品を作るうえで最も困難なことの1つは、ビジネス上の要求を理解し、それを技術仕様に、さらにはコードに変換することである。
このプロセスは、複数のステークホルダーを介して行われる。機械学習アルゴリズムに実行すべきことを伝えるだけなら簡単に聞こえるかも知れない。実際には、(機械学習アルゴリズムに指示を出す)人間に何をすべきかを理解してもらうのが十分に難しいのだ。
大規模な技術スタックの接続
新しいソフトウェア開発者を複雑なプロジェクトに参加させるには、何ヶ月もかかることがある。大規模なソフトウェアプロジェクトの複雑さは、想像を絶するものがある。
例えばオンラインブックストアは、管理者が新しいコンテンツを追加できる(WordPressのようなCMSの)コンテンツ管理システムに接続されているかも知れない。
さらに、すべての注文や商品を保存するERP(エンタープライズ・リソース・プランニング・システム)と統合されているかも知れない。
ウェブサイトはフロントエンドのプログラミング言語としてReactを使い、さまざまなライブラリへの依存関係があり、バックエンドの言語としてC#を使用して構築されているかも知れない。
以上のような入り組んだソリューションを理解するアルゴリズムを開発することは、控えめに言っても困難である。
例えば、プロダクトオーナーがEコマースに顧客が自分の本を印刷して出版できるようにする新しい注文フローを追加したいとしよう。
そのためのアルゴリズムはどうすればいいだろうか。前述のビジネス要件の理解という課題が解決されたとしても、今度は技術スタック全体を理解するアルゴリズムが必要となる。
さらにはCMSに新しいセクションを追加したり、ERPに新しい変数を送ったり、Reactで書くべきコードとC#で生成するコードを理解しなければならない。
また、自費出版された本を印刷する独自のシステムを所有する会社が別にあって、そのシステムを現在のソリューションに統合する必要があるため、さらに複雑な別のレイヤーが加わるかも知れない。
そうした他社のシステムに関するドキュメントが何もなかったらどうなるだろうか。そのシステムの開発者とコミュニケーションをとり、API(アプリケーション・プログラミング・インターフェース)がどのように機能するかを理解する必要がある。
ソフトウェアプロジェクトのなかには人間が理解するには困難なものがあり、その困難さはアルゴリズムにとっても容易いものではないだろう。
誤ったコードのデバッグ
開発者は多くの時間をデバッグに費やす。私にも新しいコードを書くよりもコードのデバッグに時間を費やした日が確かにあり、将来的にはAIが生成するコードのデバッグをしなければならないことも断言できる。
先ほどのオンラインブックストアの例に戻ってみよう。ユーザデータは、CMSとERPシステムの間で10分ごとに同期されているとしよう。
突然、この定期的なジョブが動作しなくなり、開発者は「エラーが発生した」と言って呼んでいる。エラーメッセージには「予期せぬエラーが発生しました」というような一般的な内容が書かれている。
“入り組んだソリューションを理解したアルゴリズムを構築することは、控えめに言っても困難である。”
この問題をデバッグするためのアルゴリズムをどうやって手に入れるのか。そのアルゴリズムはどこから始まるのか。問題は、定期的なデータ転送が設定されているCMSに関連しているのだろうか。
それとも、ERPシステムで起きた変更に関連しているのだろうか。あるいは、適切に処理されていない破損したデータをユーザが扱っているのだろうか。
(エラーを特定する)アルゴリズムは非常に汎用性の高いものでなければならない。
大規模なアプリケーションのデバッグは、信じられないほど複雑である。そして、アルゴリズムにコードを書かせたり、AIが生成したコードを人間にデバッグさせたりすると、デバッグのセッションはさらに長くなるだろう。
ソフトウェアのアップデート
ソフトウェアのライブラリを最新版にアップデートする作業は、開発者でない人には想像もつかないほど複雑なものだ。
スマートフォンをアップデートする時は、ボタンを押すだけでスマートフォンがアップデートしてくれる。スマホの場合は、とても些細なことで済む。
ソフトウェア開発では、アップデートは技術スタックに応じてもっと複雑になることもある。
またオンラインブックストアの例えに話を戻そう。便利な新機能や重要なセキュリティパッチを提供するCMSの新バージョンが出たとする。
それをアップデートしなければならない。もちろん、アップデートした途端に、バックエンドの機能の多くが非推奨になっていることに気づき、それらのアップデートも必要になる。CMSを使って注文確認メールを送信するためのセットアップも、一から作り直さなければならない。
ソフトウェアの依存関係は厄介なものだ。ライブラリAのバージョン2.0.3は、ライブラリBのバージョン4以上のバージョンに依存しているが、ライブラリBの最新バージョンにはまだ対応していないということもある。
新しい機能を追加したり、セキュリティ上の欠陥を修正したりするソフトウェアのアップデートは些細なことのように思えるが、かなり複雑な作業になることもあるのだ。あるライブラリのアップデートが他のライブラリにどのような影響を与えるのか、(開発者を代替するような)アルゴリズムは理解しなければならない。
ステークホルダーとのコミュニケーション
この点についてはすでに部分的に説明しているが、重要なことなのでもう少し言葉を割きたいと思う。コミュニケーションは、複雑であると同時に不可欠なものだ。
開発者でもある私は、さまざまなステークホルダーとさまざまな語彙や技術を用いてコミュニケーションをとる必要があった。チーム内の他の開発者と話すときは技術的で複雑な用語を使ったが、プロダクトオーナーには技術的でない具体的な方法で機能を説明する必要があった。
また、顧客と接するときは、自信と謙虚さを兼ね備え、話すよりも聞くことに時間を割くようにしてきた。顧客の悩みを聞き、理解する必要があるのだ。
“共通したビジネス言語で人間とコミュニケーションをとるのはとても難しく、ましてやアルゴリズムとの意思疎通はもっと難しい”
私は定期的に進捗状況を伝える必要があった。もし問題が発生したら、それを共有しなければならなかった。
ある機能を構築するのにどれくらいの時間がかかるかの見積もりを求められたら、その見積もりを提示しなければならなかった。
(プログラマーを代替するような)アルゴリズムには、以上のようなコミュニケーションのすべてを実行できる必要がある。
・・・
要約すると
機械学習アルゴリズムがプログラマーを代替するには、以下のことができる必要がある。
|
ソフトウェア開発者の仕事は、単にコードを書くだけではない。それは複雑なのだ。多様なスキルセットを必要とする。
しかし、いつの日か、以上で言及した仕事を人間と同じようにこなすAIが登場する可能性は十分にある。実際、私は以前、あらゆる仕事が実際に自動化された日に何が起こるかについて書いたことがある(※訳註4)。
しかし、上記のようなことができるAIが登場する頃には、他のほぼすべての仕事も自動化されていることを念頭に置かなければならない。
ソフトウェア開発は、自動化される最後の仕事の1つになるだろう。
とはいえ、コードを書くAIソフトウェアは今後も増えていくと予測されるが、これは開発者を代替するのではなく、彼らを強化するために使われ続けるだろう。
機械学習アルゴリズムは、小さな独立した機能を作り出すのに適している。開発者がTwitterからツイートを取得する関数を必要としている場合、彼らはアルゴリズムにその個別の関数を作成するよう依頼できるようになる。
開発者にとって、コード生成AIはStackOverflowの閲覧を代替する素晴らしい役割を果たすことになると予想されるが、より良いコードを書くための素晴らしい提案もしてくれるかも知れない。正直なところ、私はコード生成AIの活躍をとても楽しみにしている。
開発者ではない人にとっては、コード生成AIが自律的に簡単なWebサイトを構築してくれるかも知れないが、すでにWordPressやJimdo、SquarespaceなどのサービスでWebサイトを生成することができるため、基本的なWebサイトのあり方を大きく変えるものにはならないと思われる。
しかし、これらのツールがシステム自体に組み込まれ、多少のカスタマイズが可能になるかも知れない。
いずれにしても、「プログラマーは近いうちに代替されるのではないかという心配はおそらく必要ない」と結論づけられる。
同氏は、汎用人工知能が発明されなくても、個別のタスクを解決する「弱いAI」が遅かれ早かれすべての仕事を自動化すると考えている。
すべての仕事がAIによって自動化された場合、人間が労働していた時よりはるかに安価にタスクを完了できるようになるので、あらゆる仕事の利益率が上がる。こうした労働市場の変化の後に生じる社会体制には、ユートピア的なものとディストピア的なものが想定される。
ユートピア的な社会体制は、MIT出身でスタンフォード大学シニアフェローであるErik Brynjolfsson氏が唱えている。同氏によれば、AIによって全労働の利益率が劇的に改善した結果、企業は大きな利益を上げることになる。すると、各国政府は企業に大きな法人税を課税できるようになって、国庫が大いに潤う。
この国庫をもはや働く必要がなくなった国民にベーシック・インカムとして供与する。ベーシック・インカムを手にした国民は、労働する代わりに創造的活動に人生を捧げるようになる。こうした状況は、奴隷に働かせることで労働から解放された古代アテネの市民が、演劇鑑賞や哲学的論議に没頭していた社会の再来と言える。
この社会は「デジタル・アテネ」と命名され、デジタル・アテネの住民は働くためではなく創作するために教育を受ける。
ディストピア的な社会体制は、MIT所属のMax Tegmark(マックス・テグマーク)教授が著書『LIFE 3.0―人工知能時代に人間であるということ』で論じている。
AIによる全労働の利益率改善が達成された場合、資本とAIを独占する富裕層は膨大な富を手にする一方で、労働者層の人間を不要な存在と見なすようになる。その結果、富裕層は自分たちの富を税の支払いを介してベーシック・インカムとして社会に還元する代わりに、労働者層の抹殺を企てる。
この企てを実行したあかつきには気候変動や人口問題を一挙に解決する可能性もあり、富裕層のためだけのユートピアが実現する。もっとも、このユートピアは行き過ぎた格差社会から生まれるディストピアと言える。
Bergdahl氏は以上のふたつの社会体制に関して、その実現確率を論じていない。しかし、両方のシナリオの前提条件となっているAIによる全労働の自動化は、その実現時期は予測不可能であるものも、ほぼ確実に実現すると信じている。
・・・
この記事を読んでくださった方は、以下に示す現実世界の人工知能に関する私の非技術的な本も楽しんで頂けるでしょう。
また、GitHubのコードライティングAI「Copilot」についての以下の記事もご覧ください。
原文
『Will AI Replace Programmers?』
著者
Jacob Bergdahl
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん