私は現在、2026年度新卒研修のトレーナーとして、主にJava言語周りの教育を担当しています。
研修を担当していて考えるのは、「AI時代において新人エンジニアが学んでおくべきことは何か?」ということです。
昨今では生成AIの台頭により、今後のシステム開発の在り方も様変わりしていくことが予想されます。
しかし、少なくとも現時点では全てをAIに任せることはできず、生成したコードが本当に適切なのか、保守しやすい設計になっているのかといった判断は、依然として人間が行う必要があります。
そのため、人間側で正しい意思決定を行えるだけの知識を身につけておく必要がある、ということは今も昔も変わらないと考えています。
そこで今回は、私のこれまでの経験を振り返ってみて、新人時代にどのような学習を行うのがおすすめかを書いていきたいと思います。
個人的な意見ですが、 「体系的な知識を身につけること」 が重要だと考えています。
それを実感した経験として、私が最初にJavaの開発案件に参画したときの話を例に挙げてみます。
その案件はStrutsというフレームワークを使ったWebアプリケーション開発だったのですが、当時の私はJavaの基礎知識はあったものの、Webアプリケーションの仕組みや、フレームワークに関する知識はほとんどありませんでした。
担当のタスクで必要な知識についてはその都度調べて対応できていましたが、フレームワークが内部で何をしているかなどの根本的な部分は理解しないまま、その案件を終えてしまいました。
その後、次の案件でもWebアプリケーション開発に携わったのですが、断片的な知識しか持っていなかったため以前の経験を十分に活かすことができず、また苦労して適応し直さなければなりませんでした。
今にして思えば、かなり勿体ないことをしていたと感じています。
案件に参画したての段階で、Web開発やフレームワークについて体系的に学習していれば、その後の実務経験を通じて理解をさらに深めることができたでしょう。
そして次の案件でも、それまでに得た知識をもとに「何が共通していて、どこに違いがあるのか」という観点でスムーズにキャッチアップできたはずです。
上記のように、早い段階で知識を身につけておくことで、実務経験から得られる学びの量が増えます。
そして経験が増えることで、新しい知識もさらに吸収しやすくなるという意味で、「知識の複利効果」 のようなものが得られると思っています。
このサイクルを回していくことで、成長速度が大きく変わるはずです。
一方で、その場その場で調べたり、AIに聞くだけでは知識が点のまま終わりやすく、他の知識との繋がりが生まれにくくなります。
そのため、キャリアの初期段階にこそ、書籍などを使った体系的な学習をおすすめしたいです。
では、具体的に何を学べばいいのかと迷う方もいると思いますので、ここからは実際に私が読んでおいて良かった、役に立ったと実感できた書籍について紹介していきます。
各書籍はそれぞれ以下のような内容に対応しており、順番に学んでいくことで少しずつ理解を深めることができると思います。
まず最初におすすめしたいのがこちらの書籍です。
『リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック』ダスティン・ボズウェル、トレバー・フォシェ(著), オライリージャパン出版, 2012年
業務でコードを書くと、必ずと言っていいほど他の人にコードを見られることになります。
コードレビューはもちろん、自分が書いたコードに対して別のメンバーがバグ修正や仕様変更を行うことも多々あります。
その中で理解しづらいコードを書いてしまうと、周囲の時間を奪ってしまうだけでなく、誤った解釈によるバグを生むなど、品質の低下にも繋がりかねません。
本書は、「他の人が最短時間で理解できるコード(=良いコード)とは何か」ということを具体的な例とともに学ぶことができます。 多くのエンジニアが必読書として挙げている本でもあり、コードの良し悪しを判断する基準として非常に役に立つのではないかと思います。
次におすすめしたいのがこちらの書籍です。
『リファクタリング(第2版) ―既存のコードを安全に改善する』マーティン・ファウラー (著), オーム社出版, 2019年
ある程度コードを読み書きできるようになってくると、既存のコードに苦しめられることがあります。 同じ処理が何ヶ所もコピペされていたり、1つのメソッドに書いてある処理が長すぎて修正すべき箇所がわからないなど、実務のコードには様々な経緯によって良くない状態のコードが存在してしまっていることも珍しくありません。
本書では、ソフトウェアの外部の振る舞いを保ったままで内部の構造を改善する「リファクタリング」という考え方と、その具体的な手法を学ぶことができます。
また、「どのようなコードが改善の対象になるのか」という視点も身につくため、自分が新しくコードを書く際にも活かすことができます。
AI時代においても、生成されたコードをそのまま採用するのではなく、より保守しやすい形へ改善する力を身につけるという意味で、学んでおいて損はないと思います。
(補足)私が読んでいた初版はサンプルコードがJavaだったのですが、第2版ではJavaScriptに変更されているようです。 JavaScriptがわからない場合、最初は少し基本的な文法を学ぶ必要がありますが、考え方は言語問わず活かせる内容になっています。
最後におすすめしたいのがこちらの書籍です。
『現場で役立つシステム設計の原則 ―変更を楽で安全にするオブジェクト指向の実践技法』増田 亨(著), 技術評論社出版, 2017年
オブジェクト指向について基礎的なことを学んだものの、「実際のシステム開発でどう活かせばいいのか?」という疑問を持っている方は多いのではないでしょうか。
当時の私もそのような疑問を持っており、案件のコードを見ても適切な設計になっていたとは言いづらく、オブジェクト指向の必要性というものを実感できていないような状態でした。
そんな中で、最もオブジェクト指向に対する理解を深めてくれたのがこの本でした。
本書ではドメイン駆動設計(DDD)という考え方をベースにして「複雑な業務ルールをどのようにしてオブジェクト指向で表現するか」という内容がJavaのサンプルコードと共にわかりやすく解説されています。
私自身、この本を読んだ後で実際にドメイン駆動設計を採用している案件に参画する機会がありましたが、前提知識を持っていたおかげですぐにキャッチアップすることができました。
AI時代においても、「システムをどのような構造で作るべきか」を考え、AIに適切な指示をする必要があるため、本書はシステム設計について学ぶための良い入口になるのではないかと思います。
私自身、キャリアの最初期にはこのような体系的な学習が十分にできていなかったため、振り返ると「もっと早い段階で学んでおけば良かった」と感じることが多くあります。
日々の業務経験はもちろん重要ですが、それを支える知識の土台があることで得られる学びの量や深さは大きく変わるため、数年後に振り返った時には大きな差になっているはずです。
特に現在はAIを学習の補助として活用できる時代になり、以前よりも効率的に知識を身につけやすい環境が整っています。
だからこそ、目の前の課題をこなすだけでなく、基礎となる知識を身につけることに、ぜひ今のうちから取り組んでみてください。
この記事が、これから学んでいく方々にとって少しでも参考になれば幸いです。