「もう少し基礎を固めてから」「今の現場に慣れてから」。そう言い聞かせて、居心地のいい場所に留まり続けたことはないでしょうか。私にも覚えがあります。そして今なら断言できます。その「もう少し」は、待っていても絶対に来ません。
概要
新卒で入社した当時、私が書けたコードは学生時代にちょっと触っていた程度のものでした。それが今、曲がりなりにもエンジニアとして仕事を続けられているのは、資格の勉強を頑張ったからでも、家で黙々とコードを書き続けたからでもありません。単純に、厳しい環境に放り込まれ続けたからです。
この記事では、プログラミング初心者に毛が生えた程度の新卒がJava開発の現場でもがいた話と、SESでの代わり映えしないレガシー開発から自社開発へ移って再び「知らないことだらけ」に叩き落とされた話を振り返ります。行き着いた結論は一つで、机の上での準備よりも先に、逃げ場のない現場に身を置いてしまったほうが早い、ということです。
新卒、Javaの現場に放り込まれる
入社前の私が書けたものといえば、学生時代に写経したFizzBuzzと、簡単なWebページを動かすJavaScriptくらいでした。オブジェクト指向という言葉は知っていても、それが実際のコードでどう表現されるのかは、正直よく分かっていませんでした。
それでも配属先はJavaでの業務システム開発でした。DIコンテナが何をしているのか分からないままSpringの設定ファイルを読み、継承とインターフェースの使い分けが腹落ちしないままクラス図を追い、先輩の書いたコードを真似ながら見よう見まねで機能を実装する。分からないことを分からないまま放置すると翌日のレビューで詰まるので、毎晩わからない単語を調べ続けることになりました。
配属から3ヶ月目、初めて一人で任されたのが月末の請求書出力バッチの改修でした。既存のコードをコピーして条件分岐を足しただけのつもりが、本番投入後の深夜バッチで大量のNullPointerExceptionを吐き、翌朝一番でチームリーダーに詫びを入れる羽目になりました。原因は、自分が触った条件分岐の外側で、別画面から渡ってくる値がnullになりうるケースを考慮していなかったことでした。参考書で「nullチェックは重要」と読んで知っていたつもりの知識と、実際に自分のコードが深夜に本番を止める重みは、まったく別物でした。
正直、あのとき「まだ早い、もっと基礎を固めてから現場に出たい」と思っていたら、今の自分はいなかったと思います。基礎というのは、現場で追い詰められて初めて本当の意味で身につくものだと、あとになって気づきました。分からないなりに動くコードを書き、レビューで指摘され、直す。このサイクルを回した数ヶ月は、参考書を何冊読むよりも濃かったです。
SESのレガシー開発から、知らないことだらけの自社開発へ
新卒からしばらくして、SESとして客先常駐の現場に配属されました。ここでの数年は、正直に言うと「慣れ」の時間でした。同じような改修案件、同じような技術スタック、同じような手順のレビュー。仕事はこなせるようになっていましたが、新しく学ぶことは目に見えて減っていきました。
このままでいいのだろうか、という違和感はずっとありました。ただ、慣れた現場は居心地が良く、わざわざそこを離れる決断はなかなかできませんでした。結局、背中を押してくれたのは「このままではまずい」という漠然とした焦りだけです。
転機になったのは、自社開発の会社に環境を変えたことでした。飛び込んでみると、そこはこれまでとはまるで違う世界でした。インフラ構成から開発フローまで自分たちで決める裁量がある一方で、責任範囲も一気に広がります。SESの現場では意識したこともなかった設計判断や運用まで、当事者として考えなければならなくなりました。
知らないことだらけでした。転職して2ヶ月目、本番のRDSが突然too many connectionsエラーを吐いて、深夜に一人で対応することになったときは、正直かなり焦りました。SESの現場ではインフラ側のトラブルは別チームの領分で、自分が本番のコネクション設定をいじる機会など一度もなかったからです。ログを漁り、コネクションプールの設定値とアプリのインスタンス数を突き合わせ、原因がスケールアウト時にプール上限を見直していなかったことだと突き止めるまで、2時間近くかかりました。答えを持っている人がすぐ隣にはいない環境で、自分で調べ、試し、失敗し、また調べる。このサイクルを回さざるを得ない状況に身を置いたことで、SES時代に何年もかけて得られなかった量の学びを、短期間で得ることになりました。
筆者の考え・教訓
資格の勉強も、自宅のパソコンで個人的に触るコードも、もちろん無駄ではありません。ただ、正直に言うと、それらで身につく技術力には限界があります。資格試験の問題は、実際の業務で降ってくる問題ほど複雑でも曖昧でもありません。自宅のコードは、締め切りもレビューもなく、逃げようと思えばいつでも逃げられます。
一方で、仕事は逃げられません。締め切りがあり、動いているシステムがあり、待っている人がいます。分からないなりに答えを出さなければいけない状況に追い込まれたとき、人は初めて本気で調べ、本気で理解しようとします。私自身、資格の勉強で身についた知識より、締め切りに追われながら必死で解決した障害対応の記憶のほうが、圧倒的に体に染み付いています。
だからこそ、伝えたいのはシンプルなことです。とにかく行動してしまったほうがいい。「勉強してから転職しよう」「もう少し準備ができてから」と考えている時間があるなら、先に厳しい環境に飛び込んでしまうほうが、結果的に近道になります。IT業界に入りたいなら、体系的な勉強を完璧に終えるのを待つより、先に現場に飛び込んで働きながら学ぶほうが早いというのが、私の実感です。
もう一つ付け加えるなら、今はAIという心強い味方がいます。私が新卒だったころは、分からないことがあれば分厚いリファレンスを開くか、先輩を捕まえて聞くしかありませんでした。今は、目の前でつまずいた瞬間にAIへ聞けば、たいていの疑問はその場で解消できます。厳しい環境に飛び込む上での最大の不安は「分からなくなったときに一人で詰む」ことだと思いますが、その不安は以前よりずっと小さくなっています。だとしたら、行動しない理由はますます減っているはずです。
まとめ
- 技術力は、資格の勉強や自宅での学習よりも、逃げ場のない仕事の現場で本気になったときのほうが身につく
- 「準備が整ってから」厳しい環境に行こうとすると、その日は永遠に来ない。先に環境を変えてしまったほうが早い
- 今はAIがあるおかげで、行き詰まっても一人で抱え込まずに解決策を探せる。行動へのハードルは、以前よりずっと低くなっている