生成AIとソフトウェアエンジニアの仕事について。今後どんなスキルを伸ばせばよいのか
今回もちょっと雑談。本業をやってて思ったことを書いておく。
無限に覚えるべきことが湧いてくるソフトウェアエンジニアという職種について
スクラッチ開発とパッケージ開発で求められる知識が違い過ぎるし、スクラッチ開発で要求される知識量は桁違いに多い
スクラッチ開発2年、パッケージ開発+保守を3年くらいやった人の感想という前提で話を聞いていただきたい。現在はスクラッチ開発をしている。
もちろん、開発のフローやテストの観点、具体的なコードの落とし込みなど、開発や保守をするにあたって基本的な考え方は全く同じである。しかし、求められる知識量は全く違う。一言で違いを表すならば、パッケージ開発をいくらやろうが、スクラッチ開発のスキルは一生身につかない。
特に今の私の場合、ソフトウェアエンジニアの中でもプロダクトエンジニアという位置付けでスクラッチ開発をしており、一昔前で言うフルスタックエンジニアのような動きをしながらも、プロダクトを成長させるための思考と行動を同時に求められる立ち位置にいる。普通に考えて、この職種はあまりにも多くを求められすぎている。
普通にコードを書いたりして機能開発するだけなら、フロントエンド・バックエンド・データベースで使われる技術の扱い方が分かりさえすればよい。しかし、普段の開発とは別の新しいことをやろうとするとさらに話が変わってくる。
例えば自動テストを拡充したいなら、どういう設計でどの範囲までテストを書くのか。テストに使うパッケージはどうするか。CIツールを動かすために、どうやってGitHub Actionsでワークフローを作るか。ワークフローの設定時に脆弱性のある書き方になってないか。
依存関係が山ほどあるフロントエンドのライブラリのアップデートの手間をどうやって減らしていくか。脆弱性のあるライブラリをどう検知してアップデートするか。
検索で見られるページがあるのであれば、Google検索関連の知識も割と要求される。サイトマップを例に挙げると、それをどう整理するか。そもそもサイトマップはどこに格納すべきか。サイトマップを分割しつつ、サイトマップインデックスファイルを用意しないといけない場合もあるだろう。それをどうやって作成し、ファイルを配置すればよいのか。
これらに加えて、インフラ関連の知識もないと対応できなくなる場面がある。
それに最近は、生成AIのコーディングツールを使えないと技術者として話にならないので、その使い方を学ぶ必要もある。チームの中で技術者として存在感を出していきたいなら、このような新しいツールや技術をチームに導入することを主導していかなければいけない。
これらはスクラッチ開発でよく求められるが、生成AI関連を除き、パッケージ開発ではあまり求められない知識が多いだろう。上に挙げた例もほんの一部であり、他にも無限に出てくる。他のサービスと連携するのであれば、その数だけさらに別の知識が要求される。
ちなみに、これらの知識や考え方の1つ1つは全く難しくない。情報技術というのは極めて合理的で、人間が理解しやすい形で作られているので、時間があれば基本的に誰でも理解できるだろう。しかし、何をするにしても新しい知識が求められ、使いたいツールやAPIなどの仕様を1つ1つ自分の中でかみ砕きながら記憶していく必要がある。
しかも、スクラッチ開発というのは丁寧に設計や実装をしていかないと、負債が貯まっていき、開発効率が落ちてくる。この丁寧な設計や実装には、開発におけるデザインの知識とそれを使いこなす経験が求められるのだが、パッケージ開発をするだけでは、これらの知識や経験はまあ身につかない。今現在の生成AI(GPT-5.5)のレベルでも、何も指示しなくてもデザインまでちゃんと考えたうえで完璧な実装してくれることはないので、生成AIの実装を見てもデザインは学びにくい。意外にこの知識や経験が、他の開発メンバーとの技術力の差が如実に表れやすい部分のような気がしており、かなり重要な部分だと思っている。
情報技術を扱うエンジニアとして考えると、パッケージ開発をするエンジニアとスクラッチ開発をするエンジニアはどちらも一緒の職種ではあるのだが、求められるスキルの量も質も全く違うのである。私のパッケージ開発/保守の3年間の経験は、技術面だけに関して言うと、今のスクラッチ開発にほぼ活かされていないと思う。(未経験で入ったことを考えると堅実なキャリアパスではあるし、チーム外からの問い合わせ対応に素早く反応するなどの業務面のスキルは活かせているので、昔の経験が無駄だったというわけでは全くない。)
記憶力がかなり良くても、テックリードになれるまでの道のりやビジョンは全く見えないほど遠い
私は昔から記憶力がかなり高い方で、単純な暗記は苦手だが、理系科目は大体1回聞いただけで感覚を掴みつつ覚えられる。ソフトウェアエンジニアの仕事をしていても、レビューで指摘を受けたことはほぼ1回で長期記憶にできるし、重要なことは毎回抽象化した上で理解しているので、覚えるべきことが無限にあるこの職種でも、要点を理解してすぐ応用できるようにしている。
特に直近の約半年は、技術力の高いメンバーの近くで仕事ができていた分、自分の技術面をかなり強化できた。記憶力の高さや抽象化の作業を怠らない姿勢などをうまく使うことが功を奏したのか、客観的な視点から見ても、私は既に開発組織の中である程度の存在感を発揮できているようである。
しかしそんな私でも、覚えるべきことや理解すべきことが未だに毎日湧いて出てくる。それだけ環境が恵まれている証拠でもあり、うれしい悲鳴というやつなんだろうが、脳疲労に悩まされる原因ともなっている。仮眠を取るなどして脳内の整理をしたり疲労を蓄積させない工夫は取っているが、まあ疲れる。プライベートでゲーム制作をしつつ、やったことのない音楽制作も始めようとしているのだから、さらに疲れる。もしテックリード的な立場になろうとしたら、一体何年かかるのだろうか。記憶力が高くても、全く先が見えない。
抽象化が得意で記憶力も高く学習が好きな人であれば、これほど楽な仕事はないかもしれない
今までの話を聞くと、ソフトウェアエンジニアは相当大変な職種だと思われるかもしれない。ある意味その通りではあるのだが、その要求される知識量や経験の多さが参入障壁になって差別化要因になる。そのため、抽象化や記憶が得意で学習が好きであれば、これほど楽で自然と市場価値を上げられる仕事はないかもしれない。
ソフトウェアエンジニアの多くは顧客と直接やり取りしないので、顧客対応というストレスがかかることをしなくて済む。それに、これは利点でも欠点でもあるが、ソフトウェアエンジニアの成果は数値で評価しにくい。数値で評価しにくいということは、表彰されることは少ないが、営業のように露骨に売上高などで評価されて消耗することもない。数値で評価されにくい分、普段の行動を見て評価してくれる可能性が高いため、良い働きをしている人が正当に評価されやすいという利点が目立つ傾向にある。
つまり、いろんな意味でストレスが少ない環境で仕事できるのである。常に学習し続けなければいけないし、もし記憶力が悪かったら努力してもなかなか活躍しづらいだろうし、努力が求められること自体にストレスがかかる可能性も大いにある。しかし、これらが苦にならない人間なら、仕事場の雰囲気さえ合えばとても健全に仕事ができるだろう。
生成AIがどんどん進化しても、技術力の高いソフトウェアエンジニアの需要は減らない
世の中には、生成AIでソフトウェアエンジニアを代替できると本気で思っている層がかなり多く存在するようである。特にアメリカの大企業では、生成AIが実用的になったあたりで大幅なリストラが行われている(インフレによる賃金上昇が主要因かもしれないが)。日本ではそんな話を聞かないが、企業側が応募者の選別を始めている傾向はあるようで、単なる労働力の追加目的での採用は減ってきている可能性が高い。
しかし、技術力が高いソフトウェアエンジニアの需要は減っていないどころか、むしろ増えているように思う。少なくとも現在の生成AIは使用者の能力を増幅させるツールでしかなく、要件定義や設計、レビューによって適切にAIを制御して初めて本領を発揮する。
半端な技術者を揃えても半端な成果物しか生成されない一方、優秀な技術者が1人いれば、質の良い成果物が多数生成される。質の良い成果物は将来の実装コストを増加させにくくする効果があるため、生産性の面だけを見ても、優秀な技術者1人による組織への貢献度は計り知れない。このような技術者は間違いなく取り合いになるし、平均年収もどんどん上がっていくだろう。
生成AIはこの先、知能の成長の頭打ちに悩まされるだろう
これは完全に個人的な意見であるが、私はこの先、生成AIの出力の質向上が頭打ちになると予想している。処理性能が上がったり単価が安くなることはあるかもしれないが、学習データの質はどうやっても向上しないので、出力の質は上がらない。
これは、現在のフラッグシップモデルであるGPT-5.5を使っているとよく感じる。処理能力はもちろんのこと、状況判断の精度も人間の平均値を大幅に超えているから、作業の方向性を間違えることもほぼなくなってきている。しかし、そんなレベルの高い知能を持っていても、先述の通り、開発のデザインも踏まえた最適な実装ができていない。これは単純に、学習データの質があまり高くなくて、開発のデザインに関連する知識や経験が足りていないのだと思う。
つまり、人間の出力の質に限界があり、その限界によって学習データの質も高くならないので、生成AIの進化も止まるということである。
これを根本的に解決するためには、生成AIに創造性を持たせ、全く新しいものを生み出せるにようにする必要があると思われるが、それができるようになるまでにはもっと時間がかかるだろう。仮にこれが実現してしまうと、少なくとも情報技術の分野において、勝手に生成AIが新しいものをどんどん発明するようになるので、人間がソフトウェア開発をする必要がないどころか、新しいことを発明したり研究したりする必要すらなくなるかもしれない。そんな時代が来るのは、少なくとも20年以上先だと思う。
さらに言うと、生成AIの知能向上もおそらく頭打ちになるだろう。メモリの供給が追いついてなさすぎるし、そもそもメモリの搭載量にも限界があったり、採算が合わないなどの理由により、LLMのパラメーター数の桁はこれ以上増やせない。生成AIでも分業が進み、特化型のLLMがこれから増えるだろう。特定の作業が非常に得意だが、その他のことはできない。
分業によって生成AIを使うためのコストは抑えられるが、汎用性が無いし、領域を横断する内容には対応できなくなる。そのため、このような最適化は、生成AIの創造性をより生み出しにくくなる進化だと思われる。
生成AIの進化は、学習データの質だけでなく、事業の採算性もボトルネックになる。これらを解決するような画期的な発明がないと、さらなる知能の向上は難しいだろう。だからこそ、人間による研究はまだまだ必要だし、ソフトウェアエンジニアの仕事もすぐになくなるわけでもないはずだ。
人間は何のスキルを伸ばせばよいのか
人間の強みは知能しかない。だからこそ知能を捨てるという選択肢はあり得ない
他の動物と比較した時の人間の強みは知能である。知能以外の強みはないと言っても過言ではない。
生成AIが実用化されてきた今の時代では、勉強が無駄になるみたいな話をする人間が一部いるようだが、本当にそうだろうか。人間の唯一の強みを手放した先は、生成AIを駆使して活動する人間や生成AI自体に良いように使われる未来しか私には見えない。むしろ、生成AIをうまく使いこなすために、より高い知能や知力が求められるはずで、高い知能や知力を持っている人間は今以上に重宝されるだろう。
人間は道具を使い始めたり、火の利用や調理をすることで、脳が大きくなったと言われている。生成AIをうまく利用すれば、さらに脳が進化する可能性も十分に考えられるのではないだろうか。私なら、新しい道具をよりうまく扱えるようになる進化を選ぶ。
生成AIの台頭により、人間の知力も伸ばしやすくなっている
ところで、生成AIには蒸留という概念が存在する。大量の学習データと膨大なパラメーター数で作られた高精度なLLMを教師として扱い、小規模言語モデル(SLM)を学習させて高性能化させる手法である。
この蒸留は、人間に対してもできるとは思わないだろうか。
高度な専門性を持つ話を除き、生成AIの論理的思考力や状況判断力、思考のバランス感覚は、既にほとんどの人間を超えている。それに加え、思考速度も処理能力も人間を大幅に上回っている。生成AIを利用するコストも安い。しかも、生成AIがどのような思考をして、その結果どういう出力をしたのか、履歴として確認することもできる。このように、人間が生成AIの出力を学習して自身の知力を高めるための環境は驚くほど整っている。
生成AIでコーディングするようになってからレビュー疲れに悩まされるみたいな話は山ほど聞くが、生成AIによって自分の学習スピードが速くなったとか、論理的思考力を鍛えるための先生になってくれているとか、自分の考え方に妥当性があるか確認するための壁打ち役になってくれるとか、自分を鍛えるような話は全く聞かない。なぜ蒸留で自分の知力を上げるという発想をする人がいないのだろうか。本当によく分からない。
