🔥

AIによって9割のエンジニアは職を失うのか?

2022/08/11に公開

なんの話?

これ。
https://twitter.com/h_masuoka/status/1557215773344825344

思うところをまとめようとしたがTwitterの文字数をはるかに超えそうだったのでこっちで。
筆者の立場としては過言と思う。
まぁTwitterの発言を真面目に捉えるなと言われたらそこまで

9割のエンジニアが職を失う理由(引用)とその私的解釈

・大抵のソフトウェアは既存技術AとBの結合が本質でありボトムアップ的に全く新規技術を実装するケースはレア
・ソースコードは自然界のデータに比べて秩序立っている
・エンジニアは自分の作業を効率化する目的でまず自分の仕事を積極的に自動化する
早ければ10年以内にAlphaCodeとかが人間のコーダー超えていくと予想。
要件定義したり上流で設計考えるエンジニア、あとは少数のデバッグ保守部隊だけが生き残って、他は駆逐される。
大半の人が「自分は大丈夫」と思ってそう。でも、例えば我々は画像処理のコードを書く時に当たり前のようにOpenCVを使って手間を省く。例えそれが局所解であっても。
しかし、自動生成は工数無視で用途に最適化されたフルスクラッチのコードを書く事も出来る。
人間に勝ち目があるだろうか?
ソフトウェアエンジニアリングの大半は産業革命以前の手工業に似ている。
熱機関の発明によって手工業における職人技の9割が無用になったように、コーダーの9割は事実上無用になる。
コーディングも手芸も楽しいんだけどね。。。

らしいよ。↑の個人的な解釈は以下

・ソフトウェアは学習データ内の内挿で作れる部分が多いので、AIに向いているし、学習データの質もよい。また、エンジニア自体が自動化が好きなので受け入れも早いと思われる。
・(職を失う文脈なので)10年以内に多くのコーダーよりAIの方が経済的に有利になる(コストとアウトプットの関係で)。上流や保守だけが残る。
・自動生成だとコーディングコストが低いので、ライブラリなどの制限を受けずにフルスクラッチで開発することができる。
・ソフトウェアエンジニアリングの大半は、例えば木工でいえば材料を切ったりするような(単純?)作業と同じようなものが多く、産業革命のように職人から機械の置き換えが進む。

お気持ち表明するにあたっての個人的なソフトウェア開発の理解

上のお気持ち表明するにあたっての私の頭の中の前提を置いておきます。
興味ない人は読み飛ばしてください。
ソフトウェア開発は、入力データが与えられたときに、望んだ出力データを出力する関数?を作成する工程だととらえています。

↑のモデルで、いわゆるウォータフォール型での工程は以下のことをやっていると思っています。

要件定義

入力と期待した出力をヒアリングなどを通して定義していく作業。

基本設計・詳細設計

要件定義で作成した、大枠の作成するべきソフトウェアをさらに小さな単位に分割したり整理したりする。小さな単位で分割したものについて、より具体的に(プログラミング言語で扱えるようにデータ型を決めたりして)inputとoutputを定義する。

(コーディング規約とかは今回はいったんおいておきます)

構築

inputとoutputの条件をみたすようにコードを作成する。

試験

inputとoutputの条件をみたしているか?を確認する。

運用・保守

ソフトウェアが正しく動くように定期的な作業を行ったり、想定外のバグやセキュリティの問題が起きたときは修正対応をする。

突っ込みいれていく。

突っ込み内容のまとめ:保守と試験の大変さの見積もりがかなり甘く感じます。

その1

引用(再掲)

・大抵のソフトウェアは既存技術AとBの結合が本質でありボトムアップ的に全く新規技術を実装するケースはレア
・ソースコードは自然界のデータに比べて秩序立っている
・エンジニアは自分の作業を効率化する目的でまず自分の仕事を積極的に自動化する

私の解釈
ソフトウェアは学習データ内の内挿で作れる部分が多いので、AIに向いているし、学習データの質もよい。また、エンジニア自体が自動化が好きなので受け入れも早いと思われる。

大抵のソフトウェアは既存技術AとBの結合が本質でありボトムアップ的に全く新規技術を実装するケースはレア

それはほぼこの世のすべてでは?椅子も普通に作ったら足が4本+背もたれとかなんかそういうコテコテものが殆どじゃなかろうか。万能論と大して変わらない気がする。
研究だって構成要素の9割くらいは過去の研究の踏襲やサーベイ、理論の組み合わせで残りの1割くらいが新規くらいのバランスなはずなので研究者も9割くらい消えるんじゃないですかね。知らんけど。

ソースコードは自然界のデータに比べて秩序立っている

確かに秩序だっているので学習対象として、比較的質はよいとは思う。ここはある程度同意(学習データにバグが無いか問題はある)

エンジニア自体が自動化が好きなので受け入れも早いと思われる:

微妙なライン。個人的には自動化しようという手を動かせるエンジニア(意外と少ない)で、実際にそれを推し進められるほど組織内で力を持っている人はあまり多くないと思っているので懐疑寄り。

その2

引用(再掲)

早ければ10年以内にAlphaCodeとかが人間のコーダー超えていくと予想。
要件定義したり上流で設計考えるエンジニア、あとは少数のデバッグ保守部隊だけが生き残って、他は駆逐される。

私の解釈
・(職を失う文脈なので)10年以内に多くのコーダーよりAIの方が経済的に有利になる(コストとアウトプットの関係で)。上流や保守だけが残る。

ここは結構違和感がある。
総論としては試験と保守を軽く見過ぎている感覚がある。

  • 違和感1:上流の時点で多分1割超えている。いろんな人が言っていると思うが仕様からinputとoutputを決めていくのは結構パワーがいる。
  • 違和感2ー1:少数のデバッグ保守部隊というが、デバッグ(というかテスト)は正直コーディングと同じか、なんならコーディングより重いため少数にはならないと思う。動けばヨシwのアプリとかは確かに少数で回るかもしれないが。
  • 違和感2-2:少数のデバッグ保守部隊というが、AI様が作成したコードを保守・運用するのは尋常じゃなくつらく、これも少数にはならないと思う。
    半分ブラックボックスなものを99.9%で運用しろとかかなり無理だろう。
    保守で言えば、midjourneyですでに言われているが、連続的な生成がおそらく難しく、この脆弱性を避けてくれというような保守らしいオーダーはほぼ不可能と思う。保守を放棄して毎回フルスクラッチ作り直しならどうにかなるかもしれない。

その3

引用(再掲)

大半の人が「自分は大丈夫」と思ってそう。でも、例えば我々は画像処理のコードを書く時に当たり前のようにOpenCVを使って手間を省く。例えそれが局所解であっても。
しかし、自動生成は工数無視で用途に最適化されたフルスクラッチのコードを書く事も出来る。
人間に勝ち目があるだろうか?

私の解釈
・自動生成だとコーディングコストが低いので、ライブラリなどの制限を受けずにフルスクラッチで開発することができる。

正直フルスクラッチで書いてほしくない(その2の突っ込みの通り、品質と動作の保証が難しい、脆弱性混入リスクが高いなど)ので、別に強みにならないと思う。
規格とかライブラリにはのっかった方が工学的にはよいことが多いと思う(物理世界で言えばねじの規格だったり、ファストファッションが結局優勢だったりそんなもんかなと)

その4

引用(再掲)

ソフトウェアエンジニアリングの大半は産業革命以前の手工業に似ている。
熱機関の発明によって手工業における職人技の9割が無用になったように、コーダーの9割は事実上無用になる。

私の解釈
・ソフトウェアエンジニアリングの大半は、例えば木工でいえば材料を切ったりするような(単純?)作業と同じようなものが多く、産業革命のように職人から機械の置き換えが進む。

同じような話になってしまうかもしれないが、ソフトウェアと手工芸の間の大きな差として、品質の判定の問題があると思う。

工芸品の品質は、多くの場合物理的性質を測れば得ることができると思う。
この品質の大部分は現代では汎用的にサッと測定できるものが多いはず。
例えば長さが正しいかだったり、しっかりはまっているか(締め付けトルクとか?)など。

一方、ソフトウェアの品質は論理的正しさを保証する必要があるため、こんなに簡単ではない感覚がある。論理的正しさの保証は難しい。テストコードを生成してもよいが、そのテストコード自体の正しさはどうするのか?となるし、そもそもテストケースを手で入力するなら今とほとんど手間は変わらない。

最後に

こういう不確かな言説なのに"断言"する人、あまり科学的な態度とは思えず怪しいイメージしかないので最初から否定的にみるバイアスがかかっている節はあると思います。

Discussion