生成AI時代のITキャリア

こんにちは、シバタアキラです。表題のタイトルで講演をしてほしいというお話をいただき、特にこれからデータサイエンティストや機械学習エンジニアを目指す学生を対象に、先日SIGNATEのイベントの基調講演でお話ししました。また、「生成AIが出てきて私たちの仕事やキャリアはどうなるの?」なんていうご相談もちょくちょくいただきます。ChatGPTのショックが大きすぎて、未来に対して過度に悲観的な反応も多く聞かれる今日この頃ですが、現在の変化を歴史の中に位置づけ、過去から学ぶこととで見えてくる未来があるのではないでしょうか?

大規模言語モデル(LLM)の活用方法の中でも現時点で最も有益な応用方法に挙げられるのが、コンピュータープログラミングの支援です。Weights & Biases Japanで月次で開催しているミートアップでは、Kaggle Grand Masterなどの凄腕のMLエンジニアやデータサイエンティストをお呼びしてイベントを開催していますが、そのようなトップレベルのプログラマーでさえ、ChatGPTやGitHub Copilotなどがもう手放せなくなっているという話を聞き、意外にさえ感じました。またトッププログラマーの効率化だけでなく、これまではコーディングができなかった人たちや、私のように長くコーディングから離れているような人たちも、生成AIの力でプログラムを書くことができるようになり、これからのソフトウェアエンジニアリング業界にも大きなインパクトがあると考えられます。

今回の目次

1950年代の「プログラミングの自動化」

これを見てなんだかわかる方はいるでしょうか?私は素粒子物理学の博士課程で、Fortranという言語でプログラミングしたことがあるのですが、左側に6つのスペースを開けるという謎のフォーマットに戸惑ったのを覚えています。これは当初Fortranがパンチカードを使ってプログラミングされていたことの名残で、そのパンチカードというのが上のイメージです。上のパンチカードでは、いわゆる Hello World 的なものが記述されています。一枚のカードがプログラムの1行を表し、役にたつプログラムを書くにはこれを何枚も作る必要があります。

世界で初めての高水準プログラミング言語と言われるFortranが生まれたのは1954年。まだ集積回路が生まれる前の、真空管を使った回路が部屋をいっぱいにするほどの大きさだった頃の出来事で、IBMの704というコンピューターが「かなり複雑な数学を扱える唯一のコンピュータ」と見なされていた頃です。当時コンピューターは科学者が計算を高速に行うための道具でした。それまでこのコンピューターを操作するには、抽象度の低いアセンブリ言語という手法でコーディングを行う必要がありました。アセンブリ言語ではコンピューターのメモリーに入っている情報を直接的に操作するような命令文を記述するのですが、機械語と強く結びついているため、プロセッサーごとにに仕様の異なるさまざまなバージョンが存在します。例えば、前述の704を使ってパンチカードに文字列を出力するにはこのようなプログラムを書く(そうです)。右側の文字列はコメントで、左側の意味不明のコードがプログラムです。

機械を操作するためのコマンドでしかなかったコンピュータープログラムを、人間が理解できる言語に近い構造で書けるようにするという発想を推し進めたのがIBMのジョン・バッカスでした。当時コンピューター・プログラミングに非常に長い時間がかかっていたことを課題に感じ、プログラミング効率を大幅に向上としようとしたのでした。その結果、アセンブラ言語と比べ同じ用途のプログラムをコーディングするスピードが20倍になった、などの大きな成果を挙げました。「ソフトウェア」という言葉が生まれたのが1958年で、プログラミング言語の出現がその後のソフトウェア・エンジニアリングの礎を築いたといえます。私が注目したのは、そのFortranが発表された時の論文です。

そのタイトルは “The Fortran Automatic Coding System” 。アセンブラ言語と比べると効率良くなったとはいえ、Fortranでプログラムを書くというのは「コーディングの自動化」というには程遠いようにも感じます。一方で、当時感じられたプログラミング言語(特に重要なのはそれを機械語に翻訳するコンパイラーというプログラム)のインパクトというのは現在LLMが人間の言葉から自動的にプログラムを生成してくれることにも匹敵するくらいのもの、もしくはそれ以上だったのかもしれません。

前述のようにコンピューターはまだ一部の研究者のための装置でしたから、その出現によって自分の仕事やキャリアへの影響を案ずる人は多くなかったようです。一部のコアなアセンブリ言語の利用者は、コンパイラーが自動的に最適なコードを生成してくれるとは信じず、プログラミング言語の導入に懐疑的だったそうですが、一部の非常に特化した用途を除けば、そのような考え方は今や完全に淘汰されています。

アプリケーション開発、インターネット、モバイル、そしてデータ

それ以降コンピューターはIBMやDECなどの努力によってその物理的なサイズがどんどん小さくなって行きます。集積回路の技術が発達し、チップ型のマイクロプロセッサーが開発されると、その勢いはますます速くなります。当初研究者のための計算機だったコンピューターは、ビジネス分野での応用が進み、汎用的に課題を解決するアプリケーション開発エンジニア、それらのアプリケーションを管理するOSを開発するOSエンジニア、これらのコンポーネントを組み合わせてより複雑な課題を解決するシステム・エンジニアなど、さまざまな仕事が生まれ、巨大なソフトウェアプロジェクトをまとめ上げるエンジニア・マネージャーの役割も大きくなっていきます。

1979年にApple IIを世に送り出したスティーブ・ジョブスは、(まだ毛がフサフサしてた頃に)誰もが自分のコンピューターを所有する、というビジョンを提唱しました。当初は信じられないような考え方として注目を浴びましたが、次第にパーソナルコンピューターが普及し現実味を帯びてくると、同時に社会的な問題として懸念する声が大きくなります。1981年のスティーブ・ジョブスのインタビューと現在生成AIの周りで起こっている議論は驚くほど似ています:

インタビュアー:「スティーブ、あなたはコンピューターの普及が危険な結果を生み出す可能性があると思いますか?私たちはコンピューターにコントロールされてしまうのではないでしょうか?」
Steve:「そんなあなたに見て欲しいのは、子供達がコンピューターを使っている時です。彼らは自分たちのクリエイティビティーを直ちに形にすることができます。コンピューターを使うことで、人間は人間しかできないことにフォーカスできるのです。」
インタビュアー:「しかし政府はコンピューターの普及によりデータが思わぬ使われ方をすることにプライバシー上の懸念を示しています」
Steve:「現在コンピューターは1000家族に1つが使っています。さらに多くの人が使うことになるでしょう、そうすればコンピューターへの理解(「コンピューター・リテラシー」)が進み、それこそが問題を解決するのです」
インタビュアー:「しかしコンピューターはすでに国民の監視に使われるなど、深刻な懸念を産んでいます。現在一般市民が自覚しているよりもはるかにたくさんの危険があるでしょう」

皆さんもご存じの通り、スティーブのビジョンは急速に現実のものとなります。グラフィカルなUIが開発され、誰もがパソコンを操作できるようになると、その普及率は爆発的に上がり、コンピューターは新しいコミュニケーションの手段となって、インターネットが生まれます。ブラウザでコンテンツを表示させるためのフロントエンドエンジニアとサーバー側からデータを供給するバックエンドエンジニアの開発手法が確立され、ネットワーク技術者ITサポートなどの仕事の需要も高まります。そしてサービス提供を遠隔から行うためにクラウドエンジニアが、リモートインフラを構築してサービス提供を行う時代になります。

さらに、iPhoneの出現とともにモバイルとソーシャルの時代が訪れます。モバイルアプリ開発エンジニアは引く手数多となり、UI/UXデザイナーの役割に注目が集まります。さまざまなチャンネルでのサービス提供を開発・管理するためにプロダクト・マネージャープロジェクト・マネージャーの役割が大きくなり、そのようにして提供されたサービスから大量のデータが収集されるようになると、それらのデータに基づくサービス改善や予測モデルの開発を行うデータサイエンティストが21世紀で最もセクシーな仕事だともてはやされます。

リプレイスされるどころかますます必要とされる

このように、「コーディングの自動化」を行う仕組みは次々に新しい経済を生み出し、新しい仕事を作り出して来ました。ここで注目したいのは、計算のコストは下がり続けているのに、その消費量は上がり続けて来たということです。これはジェボンズのパラドックスと言われる現象で、産業革命期にエネルギーを動力に変える効率がどんどん高くなっていったにも関わらず、エネルギーの使用量は増加の一途を辿ったことが知られています。なぜそのような変化が起こるかというと

  • 効率性の改善で資源利用コストが下がると、より幅広い用途で活用されるようになる
  • さらにそれによって経済成長が促進されるため、さらなる資源需要が生まれる

ことが理由だとされています。産業革命においてはこの資源は「動力」を指し、情報革命においてはこれは「計算量」や「データ量」を指します。そして今AIの時代では、その資源はきっと「知能」を指すことになるのでしょう。

これらの歴史を振り返ると、AIはおそらく、これから私たちの仕事を奪う以上に沢山の仕事とキャリアを生み出していくのだろうという予想ができます。既にさまざまな企業が独自のAI開発を開始し、MLリサーチサイエンティストMLエンジニアには白羽の矢が立っています。また、開発されたAIモデルを運用・管理するMLOpsエンジニアなどの職種も生まれています。

同時に、ソフトウェアキャリアの歴史は変化の歴史です。総量としてはこれからさらに必要とされるソフトウェアエンジニアリング(ないしこれからは「AIエンジニアリング」?)の仕事も、特定の職種やスキルが淘汰されていくのは当然のことです。今やFortranをどれだけかけたところで仕事にはなりませんし、コンピューターの使い方を教える仕事もほとんど必要がなくなってきました。生成AIの登場で、ITキャリアはさらに著しい変化の時を迎えることになるでしょう。

生成AIすごいと言えど現時点ではまだ30%

どんな技術革新も、ハイプサイクルがあって、初めのインパクトが大きい新技術ほど、誇大な印象を生んでしまいます。生成AIに関してもそのショックが大きすぎて、あまりにも非連続的な変化だと捉える向きが大きく、これまでの文脈にうまく繋げられなくなってしまうとが誤解の始まりです。

ChatGPTは質の高いコードを生成できることが知られていますが、さらにプログラミングに特化した生成AIとしてGitHub Copilotがあります。このサービスの内部で使われているモデルはOpenAI社のGPTモデルをベースにGitHub上にある大量のコードで学習させています。JetBrainsやVSCodeなどの開発環境でプラグインとして使うことができ、普通の言葉で書いた説明文からコードを生成したり、途中まで書いたコードに基づいて、続きを生成してくれるなどの機能が特徴で、幅広いコンピュータ言語での生成が可能です。

私が注目したのは、先日サイバーエージェントのエンジニアの黒崎さんがCopilotに関して公開したブログです。サイバーエージェントでは今年の4月からGitHub Copilotを使っていて、その生成結果がどれだけ採用されたのかデータを公開しています。それによると、言語によって採用率には幅がありますが、多くの言語では25%~40%の採用率で、全体の平均としては32%だったといいうことです。考察の中で黒崎さんはこの機能を使ってエンジニアの生産性を上げるには、生成されたコードが良いのか悪いのかを判断できるだけのスキルが必要で、使う人に依存する、としています。

Fortranコンパイラーが出た時に、アセンブリ言語を使っている開発者はコンパイラーに最適化された機械語が生成できるのかということを心配していましたが、少なくともコンパイラーは間違った機械語を生成するということは多くはありませんでしたし、その生産性の向上は20倍と言われていました。それに比べると、現在の生成AIの生成するコードの正確性はかなりお粗末なレベルと言えるでしょう。

だからと言って、生成AIのソフトウェアエンジニアリングに対するインパクトが小さいと言っているのではありません。私はむしろその逆だと考えていますが、現時点ではこの程度だ、ということです。この文脈で考えると、OpenAIが7月にリリースしたコードインタープリターが興味深いのは、データ分析に関連するタスクを処理するためにPythonを生成し、そのまま実行するという特化した機能を提供していて、自然言語を使ったデータ分析環境を提供していることです。このように特化した用途に向けて学習したモデルは、パラメーターの数が少なくても特化の対象となっているタスクに対しては汎用的なモデルよりも質の高い結果を出力することが他の例でも報告されています。

これから生まれる新たな職種

私が繰り返しChatGPTに聞いているプロンプトに、「GPTの発展に伴い、これから新たに必要とされる仕事を教えてください」というプロンプトがあります。この結果は聞くたびに少しずつ変わるのですが、どの答えもなかなか参考になります。直近聞いた時の結果はこのような内容でした:

このプロンプトを複数回やって見えてきた未来の仕事を整理すると、下記のようなカテゴリーと職種が見えてきます

AIモデル自体の開発・カスタマイズの仕事

  • ML開発エンジニア:より効率的で高性能なAIモデルの開発を行う仕事
  • 学習データの専門家:クリーンで多様性のあるデータセットの作成と維持を行う仕事
  • モデルカスタマイズエンジニア:特定の業界・ニーズに合わせたモデルの調整をする仕事
  • モデル評価の専門家:モデルのパフォーマンスを評価する仕事
  • 学習戦略設計者:最適な学習方法やハイパーパラメーターの選定をする仕事

AIの使い方に関する戦略立案や、コンサルティング

  • 法規制専門家:NLP技術に関する法律や規制のアドバイスを行う仕事
  • AI倫理コンサルタント:AIが与えうる倫理・社会的な影響について助言を行う仕事
  • GPT教育コンサルタント:GPTの教育分野での活用に関して助言を行う仕事
  • GPT導入コンサルタント:企業や組織がGPTを効果的に導入・利用するためのアドバイスを行う仕事

AIを実運用化したり、アプリケーションに導入する仕事

  • AIアプリケーションエンジニア:GPTを活用した新しいアプリケーションの開発をする仕事
  • エッジAIコンピュティング技術者:ローカルデバイスでモデルを運用することの専門家
  • AI対話デザイナー:AIとの効果的な対話方法を設計する仕事
  • AI統合スペシャリスト:AIを既存のシステムやプロセスに統合する仕事
  • 言語文化監修者 :モデルの多言語対応と文化的背景を考慮した調整を行う仕事

AIを使う上での管理・監視・評価を行う仕事

  • AI監査官:AIを運用する前に、モデルを多角的に評価する仕事
  • AI監視員:AIの出力のバイアスや、品質を監視する仕事
  • AIセキュリティーアナリスト:モデルの脆弱性や、不正利用を監視し、対処する仕事

これってすでにやってる人たくさんいるよね、という仕事もあれば、単体で仕事として成立するのか現時点ではよくわからないものもありますが、AIの利用が今よりも何倍も一般化する世の中においては、十分あり得るような仕事も多いと感じませんか?

今回はAIに特に隣接したIT系のキャリアにおいて、今後どのような変化が起こるのかということについて少し考えてみましたが、アメリカで行われた調査では、80%労働者はGPTの導入によって少なくとも10%以上の仕事に影響があるという推定もされています。IT以外のあらゆる産業・職種において、今後どのような役割が必要とされるのか、仮に仕事は変わらないとしても既存のキャリアはどのように変わっていくのか、考えていくことがますます求められていくでしょう。