新卒エンジニアが半年奮闘してワクワクの境地にたどり着いた話

2022年4月にエンジニア職の新卒として入社した太田です。
大学の授業や研究でプログラミング言語は触ってきましたが、業務未経験で入社しました。

本記事では、大学で初めてプログラミングに興味を持った学生など未経験の方に向けて、入社後に山あり谷ありで少しずつできることが増えてきて感じたエンジニアのやりがいやワクワクは何か、僕が感じたことをまとめました。
僕はWebサイトの見える部分を作るフロントエンドではなく、システムの裏側を作るバックエンド領域からのスタートです。

未経験の僕が少しずつ成長し、ドラクエでいう最初のダンジョンを終えて、冒険の真のスタートラインに立つまでの話です。

入社してすぐに本配属となり自社プロダクト「SEARCH WRITE」の開発チームにジョインして、チームと一緒に働きながら自分の研修を進めました。
トレーナーのTさんと相談して、プログラミングの基礎を学び、学んだことを全て使う総合芸術のWebAPI(Web上でデータの受け渡しをするシステム)を6月に実装することを目標に、夢と希望と不安に満ち溢れた楽しい?研修がスタートしました。



※トレーナー:新卒と1年間二人三脚で進む指導者
※SEARCH WRITE:自社プロダクト SEOの対策支援をするツール
※SEO:検索エンジンにおいて、特定の検索ワードで自社のWebページの上位表示を目指すための施策

フェーズ1(4月-5月) 訳が分からなかった

黒い画面にコードカチカチ書いていくのかっこいいなあ

まずはプログラミングの基礎をしっかり身につけるためにJavaというプログラミング言語の基礎の部分を勉強しながら、簡単なプログラムを作成したり、ファイルの読み込み書き込みをしたり、CSVというデータの入ったテキストファイルを読み込んで集計等したり、並び替えするプログラムを自前で実装したりと課題をずっと解いていました。

プログラミングを研究で使っているときは、しっかりお作法を学ばずになんとなく使っていました。そのため業務でコードを書いてもルールを全然守れておらず、ここで初めてプログラミングのルールをしっかり学びました。
毎日新しい学びの繰り返しでしたが、特に印象に残っているのは、変数名を適当に(dataとか)つけたらダメ、調べる時は公式ドキュメントを見ると徹底的に教えてもらったことです。

またSQL(データベースを触るための言語)で必要なデータを集計して取り出せるようになったり、Gitというチーム開発をする上で必須の仕組みを学んだりしました。学んだことは、その度にチームメンバーにアウトプットしました。

MacBookの黒い画面(ターミナル)でキーボードをカチカチするのは、何かエンジニアっぽさが出てかっこいいです。笑
プログラムを書いているとき、そんな自分に惚れながら仕事をしていました。

↓下の図はGitのアウトプットをするためにまとめたものです。GitやSQLなど開発に必要な知識を学んで終わりにするのではなく、実際に手を動かしつつ、オンラインのホワイトボードを使って、チームメンバーや上司にアウトプットしていました。
ただ学んだことをインプットするのではなく、「こういうことしたらやばいからやめよう」リストも考え、図にもまとめながら、なんとなくではなく、しっかり理解することを意識しました。そのおかげでチームメンバーや上司に「まだまだではあるけど、よくまとめられている」と言っていただけました。

新人でもプロダクトやチームに貢献できることはある

研修をやりながら開発チームとしても働き、日々の会議にも参加していました。

ただ会議に出ても「リファインメント?」「プランニング?」なにそれ?何する会議?と思いながら参加し、参加しても技術用語がバンバン出てきて、15分後には僕の魂が抜けて、会議に体はあっても魂はない、そんな状態でした…

この状態を少しでも打破して、会議についていけるよう、4月末から会議の議事録をまとめていきました。

ただまとめるだけではなく、会議で発生したアクションをまとめて各メンバーに送ったり、結論も確認する動きを意識していく中で、少しずつ会議についていけるようになりました。
それ以上にチームにまだ何も貢献できない中、議事録という一つの貢献できる場所を見つけたことが当時は嬉しかったです。

また、チームが普段使うボードを「誰が見てもすぐ何をすればいいか分かる」状態にするため、各会議のやる意味を勉強して、各ボードに補足説明を加えていきました。
このボードがかなり好評で、開発本部内でも称賛していただいたようで、他の開発チームにも使ってもらえました!今ふりかえると入社して最初の大きく貢献した仕事だったかもしれません。

↓これはふりかえりのボードをパワーアップしたものです。左や下に補足を加え、誰が見ても何をすればいいかすぐ分かるボードを作りました。これをすべてのスクラムイベント(会議)分作りました。

トレーナーに提案して、毎朝30分間、ユーザー目線で少しずつSEARCH WRITEについて触って聞いて勉強し、上司やチームにアウトプットを繰り返しました。
その他に社内のパソコンセットアップなどできる仕事があれば自ら進んでどんどん手を挙げて、できることをコツコツやっていました。

この時期、技術の勉強は楽しいが、年齢差が1歳しかない先輩がバリバリ活躍されている一方、僕はチームに貢献できることがまだ少なく、よく分からずモヤモヤを抱えながら進んでいました。ただゼロの状態から少しずつできることが増えていく感覚は楽しかった記憶があります。

エンジニアというと技術がないと何も貢献できないイメージがありましたが、

  • チームやプロダクトに色々な貢献の仕方があること
  • 知識ゼロでも貢献できることは多くあること
  • エンジニアはパソコンをカチカチするだけではない

ということをこの時期に学びました。

就活している時はエンジニアはちょっと別人種で社内の他の事業部との距離が遠いみたいなイメージがありました。
しかしエンジニアや営業などプロダクトを作る人がみな集まる会議でエンジニアじゃない人にも分かるように、技術用語をできるだけ使わず分かりやすく伝えている先輩エンジニアの姿にとても驚きました。
日々の会議でも先輩が議論をしている様子を見て、PLAN-Bのエンジニアはユーザーのためにどうしたらいいのか常に考えながら作る、つまりただ作れるエンジニアではなく、常にユーザーへの価値を考えながら作るエンジニア…そういう人たちなのだなとこの時期に感じました。

こんな感じで最初の2ヶ月があっという間に終わり。
よし!ある程度プログラミング力もついたし、ここからWebAPIの実装だ!と思っていましたが…

フェーズ2(6月-7月) 心が折れていた

まだまだ知識が足りなかった

ある程度Javaの知識が身につき、SQLでデータ集計ができるようになり、WebAPIを作っていくぞとなりましたが、いざ開発に着手するとまだまだJavaを書けないことに気づきました…

特にクラスやメソッドの考え方、オブジェクト指向という簡単にいうと「理解すればめちゃくちゃシンプルで分かりやすいコードを書けるが、学ぶのが難しい概念」が理解できていなくて全然書けない、つまり基礎の基礎は身についてもまだまだ知識が足りませんでした。
ドラゴンクエストに例えると、メラを覚えて強くなった気で、序盤のダンジョンのボスにいきなり挑んだら敵がめっちゃ強くて、あっさり負けた的な。

そこでトレーナーと相談した結果、Javaの研修を続け、WebAPIを作るのは先延ばしすることにしました。
せっかくスタート地点にたって、これからエンジニアっぽく開発していく予定だったのに、まだまだスタート地点にすら立てていないことは正直とてもショックでした。

早くスキルを身につけ、夏から開発に貢献していきたい中、一度立ち止まり一人ずっとJavaの研修を続けていたのは辛くて、ちょっと会社に行きたくないなという気持ちにも陥っていました。

この時トレーナーに、僕がプログラミングができるようになるには何時間必要か?という質問に僕は「30時間」と答えましたが、トレーナーに「400時間」と言われたのがとても印象的です。
また上司のHさんがエンジニアはコードを書きまくらないと成長できない、キーボードを触りまくって成長できると仰っていたこともよく覚えています。
この時にエンジニアはある意味、職人気質なところがあり、周りに認めてもらうにはとにかくコードを書いていくしかないということを感じました。

周りにも支えられながら、6月はJavaをずっと勉強しました。プログラムのイメージを図にまとめたり、日本語で言語化したりしてからプログラムを実装しました。このとき作成したのは、ロボットに命令し本棚から本を取ったりしまったりするプログラム…いわゆるデータの受け渡しのプログラムです。
そして7月にはこのプログラムがちゃんとバグなく動くのか調査するテストを書きました。

またエンジニアとして事業部と調整しながら開発をやりきってみるということで、SEARCH WRITEのサービスサイトにロゴを入れる仕事、つまりWebサイトを触る仕事をもらいました。
この仕事を通して、エンジニアにはコミュニケーションが必須であることを改めて感じました。デザインなど自分でできないことはできる人にお願いをする、事業部の人とこのサイトの見た目でいいか確認する…など、HTMLとCSSを修正するだけではなく多くの工程があり、ただパソコンをカチカチするのがエンジニアではないということを強く感じました。

↓やりたいことをひたすらイラストにまとめて、それを言語化して、コードを書いていました。

それでも少しずつ会議についていけるように

プログラミングは心が折れかけていましたが、悪いことばかりではありませんでした。

各会議のやるべき意味やSEARCH WRITEの勉強が功を奏して、技術用語はまだ分からなくても、「今どこの何を議論しているのか」技術のことはまだまだ分からなくても、「SEARCH WRITEのこの機能について今議論している」ということがだいぶ分かるようになり、チームの一員として会議についていけるようになりました。

議事録を毎日書き、レベルが上がってきたことに加え、会議で出た宿題をまとめてチームメンバーに共有。また会議のファシリをやって、どうしたら議論の質を下げずに時間内に終えられるか考えながら進行を進めるなど、まだまだ貢献できるポイントが少ないなりに、できることを探して、+1の工夫を意識して仕事をしていました。
日々の議事録のパワーアップを認めていただき、部長やマネージャーなど事業部の人が全員集まる会議で議事録を書く役割を任せていただけました。

またずっと進めていたSEARCH WRITEの勉強についても、チームのメンバーに最終アウトプットを行いました。会社資料を使って、「そもそもなぜSEOをするのか」から説明したのです。説明がかなり難しかったですが、この経験のおかげでプロダクトへの理解が深まり、開発にかなり役立っています。
ただ作るエンジニアではなく、ユーザーに価値を与えられるエンジニアになるために、自分達の作っているプロダクトについて語れるようになることは大事だなと感じました。

この時期は当初の予定通りに研修を進められなかったことにより劣等感を感じていました。
ただ毎日のトレーナーとのふりかえりの時間で、「なんとなくコードを書ける人ではなく、自分の書いたコードを説明できるようになって欲しい」ことから今しっかり知識を蓄えることが大切であることを教えていただいたり、上司にエンジニアの成長は曲線ではなく、階段のような成長をするため、今はまだ0段目で成長を感じづらいかもしれないが、ある日1段登って急に感覚が変わる瞬間があることを教えていただいたりしました。

だからこそ今は大きく飛ぶために深く沈む段階、いつかエンジニア楽しいと思う時期が来ると信じて、日々の業務に向き合い、なんとか乗り越えました。

ある日トレーナーとのふりかえりで本番のプロダクトのコードを見せてもらいましたが、あのツラツラと長い膨大なコードを少し読むことができて、自分で自分に驚きました。

こうして想定よりも長くなったJava研修は終わり、徐々に業務に入っていくことになりました。

フェーズ3(8月) 少しずつ貢献できるものが増えてきた

やっと開発業務に携われた

Javaの研修が終わり、この時期から少しずつ業務に入っていきました。
あるプログラムが期待通りに動いているかをチェックするプログラム(単体テスト)をひたすら書いていました。

まずこのプログラムを書くためにはコードを読んで「このプログラムで想定されるシナリオ」を全て洗い出し、各シナリオに対するテストを書いていきます。
つまり本番のコードをどんどん読んでいかないといけないので、楽しみな気持ち半分と不安な気持ち半分で始まりました。

当初はいきなりやっていくと思うと不安しかありませんでしたが、実際にコードを読んでみると意外と理解できて、一部難しかった箇所がありましたが、ここで初めて自分のプログラミングのレベルの向上を少し感じました。

想定していたよりも時間がかかってしまいましたが、なんとかコードを書き終えることができました。
終わった後はなんとかやりきったという安心感がありつつも、まだまだちょっと簡単なコードを書いただけなので、満足はしていなかったです。

その他にもチームの皆さんの手作業を自動化するSQLを書くなど少しずつテクニカルな業務もしていました。

またコードを書くだけではなく、『リーダブルコード』というコードを綺麗に書くための本を参考に、他の人が書いたコードを見て、分からないことを聞いたり指摘したりするチャレンジもしていました。
ただこの時期はコードをまだまだしっかり読み込めていなかったし、「こんなコメントしていいのかな」となかなか書き込みできない状態でした。

またコードを書く楽しさ、作る楽しさを感じ始めたのもこの時期です。
業務では主にバックエンドの研修をしていたため、業務外に弊社のフロントエンド向けの研修資料も読んでHTML・CSS・JSを勉強しました。作る楽しさを感じたことで、自然と自己研鑽も増えてきたなと思います。

少し余談ですが、この時期に外付けのいわゆる少しいいキーボードを買って、なおさらプログラミングにハマった感があります。
(余談:これからエンジニアになる人は絶対いいキーボード買った方がいい、指が楽だし、仕事が楽しくなる)

またプログラミングを学ぶだけではなく、WebAPIを作るために必要なWebの知識の勉強をこの時期に本格的に始めました。
ただ本を読むだけだと理解が浅くなるので、チームメンバーの知識向上も兼ねて、本の内容をボードにまとめて、チームに発表するということを繰り返しました。

↓このようにボードに学んだことをまとめて、チームにひたすらアウトプットをしていました

自分からのアクションも少しずつ増えてきた

今まではどちらかと言えば、指示されてやってきたことが大半ですが、この時期から自分で手を挙げて仕事をもらいにいく動きを意識し始めました。

ただ正直この時期は「技術のことがまだまだ分からないのに、手を挙げていいのか」「今持っている仕事すらも終わらせられていないのに、そんな状態で手を挙げたら無責任じゃないのか?」などと葛藤してしまい、なかなか手を挙げられない時期が続いていました。

ただそのような中でもできることを見つけようと考えながら業務に取り組んでいました。
例えば部長とプロダクトマネージャーなど全員が集まって、プロダクトで起こった障害をふりかえる会でアジェンダがなく、なかなか1回の会議で進められていないことに問題意識を持ち、アジェンダ作成を提案して自分で取り組みました。そのおかげで皆さんに会議が進んで生産性が上がったと言ってもらえました。

その他にも、このテックブログで他の人が書いた記事の入稿作業や、プロダクトの障害対応の進捗を議事録にまとめるなど、できることはどんどん手を挙げて取り組んでいました。

フェーズ2で仕事が楽しくないモードになっていましたが、この時期はできることが徐々に増えて、貢献できるポイントが増え、なかなか開発がまだまだできない難しさを感じながらも楽しく仕事ができていました。
特に研修と違い、いつまでに作るのか、期限をしっかり意識して仕事を見積もる必要があり、ただ分からないことだらけなので、見積もっても全然見積もり通りに進まない難しさがありました。

こうして少しずつ出来るようになったことがどんどん仕事に繋がるようになり、やっと9月に本格的な開発業務を任せていただく時がきました。
つまりやっと最初のダンジョンのボスまで辿り着くことができたのです。

フェーズ4(9月) スタート地点に立った

やっと開発業務を任せてもらえた

9月上旬トレーナーに「そろそろ太田にもチームの開発に入って、総合芸術のWebAPIを作ってもらう」という大仕事をいただきました。
いただいた時は「やっともらえた!」という嬉しい気持ちと「やっていけるのかな」という不安な気持ち両方がありました。

内容はSEARCH WRITEの検索順位チェックという機能の、ある指標の計算の修正です。

さあやっていくぞ!サッと環境構築をしよう!
と思いましたが、環境構築を完全に舐めていました。
GitLabというWebAPIのコードが全部入っているプロジェクトを落として、開発する環境に取り込んで、データを入れ出しするデータベースを立ち上げて、コードを動かして、あれ?プログラムの結果が返ってこない…

環境構築でするべきことが多くあり、構築できたと思ってもエラーが出て、黒い画面に大量に出力されるエラーを調べて調べて分からず、周りに聞いてやっと解決して。
環境構築だけで丸1日かかりました。汗
つまりボスと戦う前の準備だけで1日が終わってしまった感覚です。

さあ、やるぞ開発!先輩に聞きながら、コードを読んでいき、なんとか今回の該当箇所を探しました。
そして該当コードを見つけてひどいコードを書いていく。。。
フェーズ2でひたすらもくもくJavaの研修をしたことが活きて、着実にパワーアップしていることを感じました。ただもちろんコードを書いたらそこで終わりではなく、バグがないか調査をするテストのコードを書いたり、ちゃんと画面上で動くか確認する必要があります。

完成した後は書いたコードを先輩に見てもらい「ここをこう書いてもっとシンプルにできないか」など多くのコメントをもらい、直していきます。コメントをもらった時は「うわっ」となりましたが、書き直していくとコードの量が当初の量の2/3になりびっくりました。
ここでただコードを書くのではなく、他の人や1年後の自分が見たときにすぐ理解できるコードを書くことが大事であることを学びました。

そんなこんなで当初の期限より少し伸びてしまいましたが、無事最初の開発を終わらせることができました。
自分でリリース手順書を作り、リリースする(世の中に出す)ところまで行いました。これでやっとエンジニアの真のスタート地点に立つことができました。

↓計算の算出方法を変えて、小数点も表示します。このためにデータの受け渡し部分を修正しました。

またフェーズ3からずっと他の人が書いたコードを見ることを継続し、この時期はやっと質問したり、指摘したり、たまには褒めてみたり、少しずつ他人のコードが読めるようになってきました。

6月にWebAPIの開発に入れずこの時期になってしまいましたが、まずはしっかり開発業務を終わらせることができて一安心でした。
学んで増えてきた自分の技で、自分が作ったものが世の中に出されるのは、本当に小さい修正ではありますが、何か感慨深いものがあります。

この半年で一度心が折れかけましたが、あの時に折れずに踏ん張ってプログラミングをしっかり学んだからこそ、「よく分からないけど動いた」ではなく、プログラミングのルールを理解した上でコードを読み書きできるようになりました。あの時の踏ん張りが今とても活きていると感じます。
コードをなんとなく書ける人ではなく、自分の書いたコードを説明できる人に少しは近づけたかなと思います。

まとめ

このように入社当初はシステム開発なんて右も左も分からず、会議も訳が分からず魂が抜けていた僕が、やっと開発業務をやりきることができました。

この半年で感じたことは多くありますが、一番強く感じたことは「どんどんできることが増える感覚はとても楽しい」ということです。
Javaでデータの受け渡しをするプログラムを書いたり、SQLで必要なデータを引っ張ってきたり、書いたプログラムにバグがないか調査するテストを作ったり、このできる技が増える感覚がドラクエでどんどんレベルアップしていく感じに似ていて、面白いです。

心が折れそうになることもありますが、ドラクエのレベルを上げていく感覚で仕事に取り組めるのが、エンジニアの仕事の魅力かなと感じます。

この半年でただ作れるエンジニアになるのはでなく、考えて考えて考え抜いて、使ってくれる人に価値を与えられるようなエンジニアになりたいと思いました。
ワクワクしながら自分でプロダクトを作れて、周りにワクワクを与えられるようなエンジニアになれるように、これからやっと始まるものづくりを楽しんでいきます!