🐥

生成AIでまともなコードが書ける時代にエンジニアになるか迷っている学生へ

に公開

おめでとう。この記事を読んでいるあなたはエンジニアに向いている。
それを説明するためにエンジニアに必要な素養と現役エンジニア視点でのポスト生成AI時代のエンジニアのあり方を中心に私の考えを述べる。

エンジニアに必要な素養

学生で競プロや簡単な個人開発などをメインにコーディングしているとあまりピンと来ないかもしれないが、今までもこれからもエンジニアには目の前の課題を解くために、今後を見据えて熟考する必要がある。
例えばあるシステムのアーキテクチャや使用技術などを考える際に、今後ユーザーが増える見込みがあるか、増える見込みがある場合はスケールアップできるか、使う技術は今後も枯れないか、サービスの開発者を増やしたい場合にその技術に知見をもつエンジニアを中途採用市場で探しやすいか、などいろいろ考えるべき要素がある。また、技術に常に正解はない。良いとされるプラクティスは変わっていくものだし、現在良いとされてるプラクティスが必ずしも自社のサービスにとってベストな選択であるとは限らない。そのような状況の中で技術調査を必要十分に行う必要があり、調査に基づいて意思決定する必要がある。さらにその意思決定に説明責任をもつ必要がある。エンジニアであれば若手であってもこのような意思決定に関わる機会は訪れるし、最終的な意思決定者でなかったとしても、頭の隅に入れておかないと開発はできない。
生成AIの発達によってエンジニアがいらなくなるんじゃないかと未来を見据えて危機感をもち、「どんな職業だってAIに置き換わる可能性があるし、今それを考えたって仕方がない」という悲観的思考放棄に陥らずに危機感に向き合い、おそらくいくつもの情報を見聞きしたのちにこの記事にたどり着いたあなたはエンジニアに向いていると思う。

ポスト生成AI時代のエンジニアのあり方

たしかにコーディングなんてほぼ生成AIだけでできる時代になってきた。しかし、エンジニアの役割の本質は今までもこれからもコーディングではない。ビジネスをロジックに落とし込み、コンピュータサイエンスの力の恩恵を受けられるようにすることだ。少なくとも現状の生成AIでは複雑なビジネスサイドからの要求を要件定義に落とし込み、品質を保証したうえでプロダクトとして提供するという面では人間に負ける。
生成AI開発の現場では最近SDD(仕様書駆動開発)が流行っていて、要件定義から生成AIにサポートしてもらうことができるようになった。しかし、「こういうのほしいんだよね」というビジネスサイドの発言の細かい意図を汲み取り、コンピュータサイエンスで実現可能な解決策を提示するということはビジネスサイドとのコミュニケーションが必要であり、それを生成AIに伝えてAIが提示してきた設計に間違いがあればそれを正すことはエンジニアの仕事だ。これをただのビジネスからAIへの伝言ゲームだと思ってるとネットミームとして有名な「顧客が本当にほしかったもの」の画像のような状況になりかねない。
品質保証面でもコードレビューは現状生成AIでも結構いい感じにやってくれるが、結合テスト、E2Eテストとテストの複雑性が上がるにつれて生成AIの限界がきてくる。また、ソフトウェア開発というものは少しのミスで大きな損害が出ることが多々ある。一番分かりやすい例でいうと顧客データの流出により、顧客のクレジットカードが勝手に使われてしまい、損害賠償請求に繋がるみたいなケースがある。それ以外でも扱うドメイン固有のものとして、例えば何らかの医療系サービスを提供している場合、障害によるダウンによって人命に関わるインシデントが発生しうる。このような場合には当然ソフトウェアを開発した企業に責任の所在があるし、企業内で言えばエンジニアに責任の所在がある。このあたりの課題は自動運転システムがテスト走行ではうまくいっていてもなかなか社会実装が難しい問題と似ていると感じる。生成AIが複雑なテストもできるようになったとしてもしばらくは(少なくとも最終的な振る舞いのテストは)生成AIと人間の両方が見ていくことになるだろうし、テストで見るべき観点はビジネス側の人間とエンジニアとの間に差があるのでエンジニアの目は今後も必要になる。

現役エンジニアたちの悩み

ここまでエンジニアの希望論的なことをつらつらと述べてきたが、もちろんエンジニアとして働く人々は皆少なからず危機感を抱いている。社会人として経験を積んでいても私とは違い、エンジニアという職業自体がなくなるかもしれないと言っている人はいる。エンジニアという職業がなくならず、本質的なエンジニアの価値が変わらない(もしくは上がる)としても日常的な作業はがらりと変わる。そこについていけるか、馴染めるかということに不安を感じている人もいる。これに関して言えることは2つだ。
まずはこの問題はエンジニアだけではないということ。ほとんどの職業で生成AIによる効率化は始まっている。その職種自体がなくならないとしても市場に供給過多になるのではないかとか給料がもう上がらないのではないかと危機感を覚える人は多い。生成AIによってエンジニアがいらなくなるかもしれないからという理由だけで別の職種を選んだとしても、今度は選んだ先の職種で同じ悩みを抱えることになるだろう。
次に悩むのは良いことであるということだ。エンジニアのやる作業が変わるということは今まで言われていたエンジニアに向いている人、向いていない人の価値観が変わるということを意味する。この点については議論が多いが、個人的に1つだけ挙げるとすれば技術に詳しくない人とのコミュニケーション能力は今まで以上に重視されると思う。また、一概にエンジニアといっても大きく分けてマネージャーに進む、スペシャリストに進むという2つの選択肢があり、その中でもマネージャーであれば管理するのが人間であるか、プロジェクトであるか、スペシャリストであればどの技術のスペシャリストか、というキャリア上の分岐が存在する。そのような細かい職種の分類が変わるだろうし、キャリアパスも今までなかったようなルートが開拓されるかもしれない。個々のエンジニアを超えて会社の業態に目を向けると、現状エンジニアの活躍する分野は主にSIer、ITコンサル、Web開発企業、受託開発、SES、非IT企業の内製化チーム・DXチームなどだった。このうちいくつかの業態が消えるかもしれないし、業態の規模が大きくなったり、新しい業態が生まれるかもしれない。適度に悩むことで先を見通して社会でどのようなエンジニアが今後必要となるか、自分はその中でどうあるべきかを考えて行動することができる。

今、どうすればいいか

就活がまだの人

まずは学校の授業で基礎を固める必要がある。基礎ができていない人が応用をやろうとすると失敗するのは昔も今も変わらない。生成AIによってコーディングが簡単になったが、AIをうまく使いこなすには知識が必要だ。学校で生成AIをあまり使わないのであれば個人で使ってみることを強く推奨する。これから就職するのであれば、生成AIはほぼ使うからだ。逆に今の時代エンジニア組織に生成AIをまったく導入していない企業に就職するのはよほどのこどがない限り推奨しない。生成AIを使って作るものとしては、初めは簡単なTODOアプリの模倣でもいいが、余裕があればTODOアプリにオリジナルの機能を入れたり、自分で使いたいと思ったアプリの開発に挑戦してみるといい。まだ世の中にないものを要件を定義して作り上げる能力というのは割と評価される。オブジェクト指向などの良いとされる書き方に従う、(個人であっても)gitでコードを管理してできればGitHubで公開する、ちゃんとデプロイして使える状態まで完成させる、テストを書くなどをするとなお良い。
必須ではないがもし興味があれば競技プログラミングやKaggleなどに挑戦してみてもいい。単純に能力の向上につながるし、競技プログラミングやKaggleのスコアに重きを置いている企業もある。

就活中の人

先述した就活がまだの人向けのことは可能な限り続けてほしい。そのうえで、ESの書き方や面接での受け答えなどは勉強すべきだ。就活のフォーマットは大きくは変わっていないし、採用担当は多くの学生を複数の評価基準をもとに比較検討するから、フォーマットから外れた志望者はふるい落とされる。エンジニア就活特有のものであるコーディングテスト対策もすべきだ。アルゴリズムの知識を蓄えて使えるようにするだけでなく、各企業のコーディングテストで試験中のインターネット検索が可能かどうか、競技プログラミングのようにテストの成否だけで点数をつけるのか可読性も評価項目になっているのか、くらいは調べておいた方がいい。私はコーディングテストですべてのテストをパスしたにもかかわらず競プロ特有の書き方をしていて可読性が悪かったせいでコーディングテストに不合格になったことがある。
就活対策本などを読むと職種別の志望動機例などがあるが、先ほど述べたように生成AIが普及してもエンジニアの仕事の本質は変わらないのである程度は参考になる。それでも生成AI時代に(特に志望企業の)エンジニアにとって必要とされることを自分なりに定義して、その定義に自分の能力・経験がマッチしていることを説明できれば高い評価は得られるだろう。
就活時から生成AIを使いこなすことも大事だ。就活の本質は自分自身の能力をアピールし、企業にとって自分がいかに価値のある人間であるかをプレゼンすることなので、それ以外のことは生成AIによってなるべく自動化したいし、本質である自分自身の能力のアピールも生成AIによるフィードバックループを入れたい。具体的な使い方としていくつか考えられる候補は、企業の特徴をまとめる、ESで要求される文字数にうまく文章を当てはめるように微調整する、自分のアピールポイントを多めに用意しておいて各企業でどの部分が刺さるかを考えてもらう、ESや面接練習などをフィードバックしてもらうなどだ。もちろん、ただの労力削減のために生成AIにESの大部分を作ってもらうのは論外だ。AI臭さをなくして本当の自分のアピールポイントを、より伝わりやすくするためにはまずESを自分で書き、それから自分と生成AIでフィードバックと修正のラリーを繰り返し、最後に学校の就活担当や就活エージェント、先輩などに見てもらうことだ。実際の開発現場でも流れとしては似たような手順で生成AIを使いながらコードを完成させる。
また、生成AIの進歩が激しくて不安になるかもしれないが、だからといって面接の場で聞きかじっただけの最近の用語(SDDだとかAI-DLCだとか)を意味もわからず使うのは良くない。あなたがどれくらいの理解をもってその用語を使っているのかは面接官には見抜かれるし、理解しないうえで話すのは見かけを良くしているように感じられて悪印象だ。生成AIなんか関係なく自分が今までやってきたことを正々堂々と話す、生成AI関連についてはある程度範囲を絞ってその代わり1つ1つのトピックに深く勉強することが重要だ。

最後に

世の中で言われているほど、エンジニアという職業の未来は暗くないと私は感じている。むしろ最近はソフトウェア開発が今後どのような方向性に進むのかワクワクすることが増えてきた。未来のことは誰にもわからないし、急激な変化によって考えることも増えてきたが、社会でどのようなエンジニアが必要とされるか、自分がどのような価値を提供できるか考えて行動し続けることができれば定年退職までエンジニアという最高の職業を続けていくことができると思っている。
私はこれからも私自身が思い描く理想のエンジニア像を書き直しながら、それに向かって頑張っていくのであなたも頑張ってほしい。そしてまだ誰も見たことのない良いプロダクトを世の中に提供してほしい。

Discussion