開発エンジニアとして試行錯誤した社会人2年間を振り返る（後編）

# はじめに

現在、[公式イベント(エンジニアのキャリア振り返り)](https://qiita.com/official-events/72b44470c9c08f6f080b)が開催されているようなので、自分もこの機会にエンジニアとしてのキャリアを最初から振り返っていこうと思います。

この記事は前編(学生編)と後編(社会人編)の後編に当たる記事になリます。前編(学生編)は[こちら](https://qiita.com/yuto_h9m8/items/1f8db497213010ba37a7)の記事になりますので、興味のある方はぜひ見てみてください。

前編(学生編)を軽くまとめると、

**成長点**

* アルゴリズム構築能力(コーディング含む)がかなり上がった
* 環境構築が少しスムーズにできるようになった
* 画像処理,ディープラーニングなど一部の技術へ対応できるようになった
* エラーが出ても比較的冷静に対処できるようになった
* 自力で解決できる割合が圧倒的に増えた

**課題点**

* WEBアプリの開発においては、環境構築〜簡単なCRUD機能の実装まで1ヶ月程度かかる
* まだまだ未知の技術なども多く、知識が全然足りない自覚はあった

といった感じでした。実務では特に課題点である **「WEBアプリの開発」** にガッツリ携わっていくことになるので、苦戦するだろうと入社段階では考えていました。

※社会人編では、会社の機密情報は話せないので、話せる範囲で執筆していきます。

# 6.【克服】1年目前半：とにかく図解した

<font color="SeaGreen">**自信度：60**</font>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661690/e441af16-e997-efc0-bb9d-4ece7aa2591f.png" width="70%">

## 覚えること大量...

入社して半年間は、会社の研修がありました。
そこでは、ITスキルの知識の体得やWEBアプリの開発など、今後のエンジニア人生としての入門編のような研修を受けていました。そこで当たったこととして

「GETとPOSTの違いってなんだ？」
「コンストラクタ、クラス、メソッドって何？」
「GitHubの使い方複雑すぎないか？」

など基本的な部分でも最初はかなり難しく感じました。しかし、ここで自分の実力が伸びたなといった土台を形成した瞬間がここにありました。それが<font color="Red">**図解**</font>でした。とにかく、わからないことや複雑なことはできる限り図解して効率的に覚えるようにしました。例えば、GETとPOSTの違いで言えばこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661690/409ac373-cb39-753d-049f-187c5eb6d189.png)


これが、かなり効果がありました。今でも第一に図解して理解に努めていますが、長期的に記憶できるようになったと思っています。

## GitHubの使い方も少しわかってきた

学生時代もGitHubでソースコードを管理していたものの、使い方がいまいちわかっておらず、

「pullとpushの違いってなんだ？」
「fetchってなんだ？」
「なんでpushしているはずなのにpull requestっていうんだ？」

など謎が多い状態でした。会社の研修でもGitの使い方の講義があり図解で理解に努めようとしたものの、用語が多すぎるのと違いがあまりわからずに苦戦しました。しかし、実際に開発してGitHubにソースコードを上げていくにつれて、どんどん理解できるようになってきました。

（ただ当時はpullの意味をわかっておらず、最新のソースコードを引っ張ってくる時は、一回フォルダを消して再度クローンするという超荒技をやっていました、笑）

## 【第1次覚醒期】簡単なWEBアプリが2時間で作れた

1年目前半で、個人的に成長を実感できた一番の出来事でした。
これまでは、CRUD機能の実装に1ヶ月近くかかってたのですが、会社の研修を受けてきて理解できた！と思う瞬間が何回かあって、研修が始まって2ヶ月経ったとき(1年目の6月)に、第1次の覚醒期が起きました。その出来事が、

**「え、簡単なアプリがバグなく2時間で作れた！」**

といったものでした。積立NISAのシミュレーションアプリを作ったのですが、今まで途中で挫折することも多かった自分が初めてアプリを一貫して作れた瞬間でした。正直すごく嬉しかったのを覚えています。また、その後にあったチーム開発でも、

|項目|入社前|入社後|
|:-:|:--|:--|
|GitHub|意味不明|**ソースコード管理が粗方理解できてなんとか形に**|
|CRUD機能|1ヶ月程度|**2日で一通り実装＆チームで教えられる立場に**|

と分からなかった部分が一気に開花しました。この要因として、元からWEBアプリの開発に苦手意識があった分、日頃から図解で整理しながらインプットして地道に理解していこう！と思えたことで、少しずつ身を結んだのかなと思いました。

## 1年目前半の成長点

会社の研修期だった1年目前半は

* WEBアプリの開発速度が一気に上がった

* GitHubのソースコードの管理が粗方できるようになった

* 複雑な概念は、図解したり違いを明確にすることで、理解度が格段に上がった

とエンジニアとして基本となる実装とソースコードの管理がなんとか形になるところまで持ってこれました。これで、実務に入る1年目後半からもなんとか食らいついていけるレベルまで持ってこれたと思って、自分に自信がつきました。

# 7.【歓喜】1年目後半：実務も結構やっていけそう！

<font color="SeaGreen">**自信度：75**</font>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661690/d96da1d5-3314-8017-ed6c-9bd38aacf459.png" width="70%">

## 保守運用の案件をひたすら

1年目10月に入って本配属となり、実務が始まって、社内の管理システムの保守運用(言語:PHP/フレームワーク:Laravel)を担当することになりました。基本的に改善要望として上がってくるものを修正する仕事を行なっていました。例えば、

* リンクを作成して該当画面に遷移させる

* 新規テーブルを作って、新しい機能を追加する

* サイトの速度改善

などと、様々な難易度の改善要望があったので、それぞれ消化していきました。

## 半年で35件の案件を消化し、自信になる

上記のような改善要望を消化していくにあたり、同じ言語で開発していた大学3年生のインターンの時とは明らかに成長していることが肌でわかりました。
また「サイトの速度改善」「slack通知」「大規模案件の実施」など実装の方法すらわからなかったものも、半分以上は自力で解決できた上に個人的には予想よりも速く案件を消化させることができました。

「あれ意外と実装できてる、？」
「大学生でPHP触った時とはなんか感触違うな？」

といった感じでした。この時は、1年目前半で培った図解をしたり、新たにエラーが出たらとにかくデバッグをしまくって原因を早急に突き止めたり、ググる力をつけたり、と自分で考える癖をつける意識をしました。その結果、WEBアプリ開発でも比較的多くの機能の実装にも対応できるようになり、大小あれど1年目後半だけで**35件**の改善要望を消化させることができました。

## 1年目後半の成長点

実務が始まった1年目後半の段階では、

* WEBアプリ開発の改善要望を幅広く消化できるようになる
* エラーを突き止める力が伸びる(エラー文理解＆デバッグによる究明)
* 自分の実装したい内容を言語化することで、検索力が伸びる

と、WEBアプリを開発するだけでなく、エラーの解決速度や検索力も上がった半年間であることを実感できました。

# 8.【自信】2年目前半：WEBアプリの開発が開花したかも？

<font color="RoyalBlue">**自信度：100**</font>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661690/533c68b9-c79c-5860-7dbc-b4ee73a6a749.png" width="70%">

## 【第2次覚醒期】大規模案件を半年かけて実装

2年目前半にかけて、第2次覚醒期がやってきました。
ちょうど1年目の3月ごろに、新しいPJへ参画して、新規サービスの開発(言語:Ruby/フレームワーク:Ruby on Rails)で基幹システムを作る仕事にも従事しました。正直このPJに参画するまでは、Rubyの勉強を1mmもしておらず、完全未経験の状態でした。しかしここで気づいたのが、

「ルーティングやMVCモデルなど基本的な考えはLaravelと一緒だ」
「ググる量はかなり増えたし先輩に相談することもあったけど、業務に支障ない程度には一人で実装できてる」

と技術の横展開ができていると実感できたものでした。また、従事して1ヶ月ほど経って(2年目4月頃に)、大規模案件を任されることとなりました。それが**新規サービスの予約システム構築/実装**でした。

「大丈夫かな、でもとりあえずやってみます！」

と不安気ながらもやってみることをPMに伝えた記憶があります。実際にやってみると、

「うわ...ロジック考えるのも超むずかしい...」
「テストパターン何百通りとある...」
「新たに追加のケースも考えてたらどんどん複雑化していく...」

など実装ももちろんですが、仕様を考えるのすら頓挫しかけました。しかし、この経験が自分のプログラミングに対する自信を大きくつける案件となり、プログラミング能力だけでなく、資料作成能力もかなり開花しました。

## 「深く」「速く」「正確に」の3要素

予約システム構築/実装をしていくにあたって、今までにやったことないレベルでロジックが煩雑化しており、不具合なく実装を完遂させることができるかが自分の課題でした。そこで、実装の前に**資料を丁寧に作って、物事を深く考える土台を作ろう**となったのがきっかけでした。その前提も踏まえた上で、

1. 複雑な概念やロジックに関しては、スプレッドシートやフロー図に書き起こして可視化する
2. 実装でも「型」を作る意識をする(DBから必要情報取得→予約情報のDB更新→返却値設定 の型作り)
3. テストパターンもフロー図をもとに検討して、テストコードに落とし込む

の3点を主に意識しました。それぞれの項目に対する効果として

1. [深さ]複雑なロジックに関して、深く理解をする意識ができて途中で投げ出さなくなった
2. [速さ]実装の流れをパターン化することで、速く実装できるようになった
3. [正確さ]フロー図の書き起こしによって、抜け漏れなく実装を確認することができた

といったものがありました。この考え方もあって資料作りに力を入れた結果、難しめのWEBアプリの実装に対しても立ち向かうことが少しずつできるようになりました。

## 2年目前半の成長点

学生時代までとは取って代わって、実務でかなり順調に推移してこれました。特に

* 概念整理やフロー図を活用することで、仕様を深く/正確に検討することができるようになった

* 実装の流れをパターン化することで、速く実装できるようになった

* 技術の横展開に手応えを感じた

* 大規模な予約システムを自分が主に担当して、半年で一通り完成させることができた

とWEBアプリの技術の横展開や大規模開発ができたことに加えて、資料整理能力もかなり伸びて、この頃はかなりウキウキしていました。そんなこともあり、WEBアプリの開発にかなり自信がついた半年間となりました。

# 9.【喪失】2年目後半：慢心でした

<font color="Gold">**自信度：40**</font>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661690/cac42ba6-da07-b9c8-7688-0051d21f68d9.png" width="70%">


## フロントエンドの実装難しい...

ここまで順調にきていた実務ですが、2年目の12月に自分の実力不足を痛感する出来事が起きました。それが、**フロントエンドの案件が自分の予想以上にできなかったこと**でした。その時のPM(プロジェクトマネージャー)にも、

「フロントの勉強1からやった方がいいんじゃない？」

と言われる始末でした。一旦そこで自信喪失するも、そもそも自分は

「フロントエンド(言語：TypeScript)の実装も触ったことないけど、バックエンド開発同様、技術の横展開を活用できるだろう」

と当時慢心していたためでした。実際フロントエンドは、そもそも考え方がMVCモデルとは全く違い、全然別物だということにその時ハッと気付かされました。そこからは

「地道にフロントエンドの勉強も1からやっていこう！」

という気持ちになり、年末年始にかけてフロントの基礎的な勉強したを結果、年明けすぐに無事フロントの案件を完遂させることができました。

## Qiita発信開始

上記の背景もあって、ちょうど2024年になってから、自分の学んできたことやつまづいてきた事を逐次わかりやすく発信しようと思って始めたのがこのQiitaでした。
最近では、年末年始にかけて勉強をしてきたTypeScriptの記事が中心になりますが、今後はバックエンド側の知識も発信して、ゆくゆくは他のエンジニアの方々に役立つ記事を多く投稿できればなと思っています。

## 2年目後半の成長点
ということで、実務に入って自信喪失した部分もありますが、

* TypeScript(静的型付き言語)の仕組みや基礎事項を理解できた

* Qiitaを通して発信力をつけることができた

と技術の幅が広がっただけでなく、社外にも積極的に発信できる礎を築くことができました。

# 最後に
社会人2年間を振り返ってみると意外と成長できたんだなと記事を書いていて思いました。特に、

**概念理解**

* 実装で複雑な部分中心に、図解したりフロー図にまとめる → 深く理解でき長期記憶にもつながる

**実装**

* 様々な案件を消化する(エンジニアの実務ならでは) → 自信につながる
* 実装の流れを決める → 速い実装が期待できる
* テストパターンをフロー図で抜け漏れなく洗い出す → 正確な納品物が期待できる

と闇雲に実装するだけでなく、その前段階である設計の部分を大切にすることが大事だということを特に学べました。もちろん、まだ実務に入って1年半の駆け出しエンジニアということもあり、

**概念理解**

* 学びになったことは、その場で整理する(現状、実装を優先して復習するのを後回しにしている部分がある)

**実装**

* 可読性については、そこまで意識できていない

* 新しい技術の導入となったときに、調べるのに時間がかかっている部分がある

* 環境周りの構築も、まだまだ知識&実装が足りていない

* サイトの速度改善などの案件には、まだまだ対応ができていない自覚がある

など、まだまだ知識が根本的に足りていない部分や、自立して一人で実装できる技術力がある、という部分までは程遠いなと思っています。

入社した2022年,2023年は社内サービスの実装を通して技術に慣れること中心でしたが、今年2024年は自分でアプリを自作してみたり、発信力をつけていくのが大きな目標となっています。直近の目標としては、環境構築〜デプロイまでを一人でできる自走力をつけていき、適宜発信できるネタがあれば逐次投稿していきたいです。

この社会人生活2年間で成長した部分も多くありましたが、まだまだ課題となる部分も多いのが現状なので、さらに今年も成長できたという年にしていきたいです。

最後まで読んでいただきありがとうございました！