【未経験エンジニア転職】 1年目振り返り

## はじめに
営業からエンジニアに転職してから1年の時が経ち、１年目の振り返りとかしてないな・・・とふと思ったので簡単に１年目の振り返りをしていきます。

結論営業から転職して、かなり自分的にはよかったなと感じてます！

:::note warn
現状思い出せる範囲でつらつらと書いてみたので、何か思い出したら随時追記していきます。
:::

## 筆者の簡単な経歴
広告代理店にて3年半ゴリゴリの営業を経験した後に、独学でエンジニアの学習を行いWebエンジニアに転職しました！
参考までに独学でやってきたことの詳細などは下記記事にまとめてますので、気になる方は見てみてください！

https://qiita.com/derasado/items/ed8b22881c8bc1f28c21

## 入社時の技術レベル
- **サーバーサイド**
    - `PHP`と`Laravel`を使って、簡単な顧客管理サービスを作成していた程度

- **フロントエンド**
    - `HTML`・`CSS`などのマークアップと`JS`を少し触っていた程度で、フロントに関する学習リソースは正直捨ててました

- **インフラ**
    - `AWS`を使って、`EC2`上に諸々インストールしてデプロイしてサービスを公開できていた程度

## 業務に関する振り返り
自分は研修などは無しで、最初から結構コードを書かせて頂いてました！
思い出しながらつらつらと書いていきます！

### 担当業務
- **サービス内容**
    - 広告管理系のサービス

- **使用技術**
    - **バックエンド**
        - `PHP(Laravel)`
    - **フロントエンド**
        - `JavaScript(Vue)`

        ※一部は`TypeScript`と`Tailwind`を使用

- **主な作業内容**
    - **0ヶ月〜6ヶ月目**
        - バック、フロントエンド共に簡単な機能修正
        - 大きめな新機能追加部分のフロント開発(コンポーネント作成やUIコーディング)

    - **6ヶ月〜1年目**
        - 外部APIを使用した新機能開発
        - バック、フロントエンド共に既存機能変更や機能追加

- **所感**
上記のように、はじめは簡単な機能修正などできる範囲のタスクを与えていただいておりました。
自分は入社前にバックエンドメインで学習していたのもあって、最初急いでJavaScript(Vue)を学習して結構大変だった記憶があります。
フロントは最初コーディングすらしっかりとできていないレベルだったので、大きな新機能の追加部分でかなりコーディングの部分は鍛えられたので良かったです！
そして、共通して言えるのはフロントとバックエンドどちらも触れているのがとてもよかったなと思ってます。

### 業務で意識していたこと
- **~半年間**
    - **自分で10~15分程度考えて試してみてわからないことはすぐに聞く**
        - リモートなので、質問する際は相手に必要な情報は足りているか想像しながら都度確認してから聞く
    - **見栄をはらずわからないことは、わからないとしっかり伝える**
        - これは上司よりアドバイス頂きました

    - **面倒くさがらず、ソースコードを一行一行ちゃんと把握して読んで仕様を把握する**
        - 自分は最初ここを怠っていて、結論を出すのがはやく間違っていることが多かったので、エラーやバグなどを自分一人で対処していくには、この点がとても重要だと感じました

    - **既存のコードから学べる点や、真似できる点はたくさんあるので参考にしながら原因を特定したり同じ用に実装して試してみる**
        - 原因がわからない場合は、既存で動いている箇所のコードを真似して同じ用に動かしてみたりすると解決したりすることがあるので、周辺のコードや似たような実装をしている箇所を探すのは大事だと思いました

- **半年以降**
    - **質問する前にエラーの意味をちゃんと理解する。**
        - エラーがたくさん出るとどこのエラーを見たらいいかわからなくなって読むのが億劫になりますが、ここもしっかりと読むことが大事だと思いました
        - エラーを出たときは一番上に出てきたエラーから見て解決していく。二番目以降のエラーは一番目のエラーが原因で出ている可能性もあるためです

    - **関数(メソッド)を作成するときはなるべく汎用性ではなく専門性をもたせる**
        - 関数で切り出す際は、処理単位ではなく文脈で切り出すことで、影響範囲をへらすことを意識する

    - **可読性が良い、メンテナンスがしやすいを意識したコードを書く**
        - なぜこうしているのか？のコメントも必要な箇所にはしっかりと入れる

    - **共通化を意識するときは、共通化というより「抽象化」することを意識する**
        - 抽象化を意識するとは具体的なコードを排除して、そのコードを使う側に責任を押し付けるようなイメージ

- **所感**
自分が担当しているプロジェクトは基本ドキュメントのようなものがなくて、コードをメインに仕様を把握する形なので、はじめはかなり苦労しました。
この既存のコードを読んで仕様を把握していくのはかなり最初抵抗ありました、、、
丸一日以上読んでもわからなかったり、時間が想像以上にかかり焦ってしまうこともありましたが、
ここで焦らず時間を掛けて一行一行しっかりとコードを読んで仕様を把握することが成長のポイントにもなりましたし、こんな書き方もあるんだなと勉強にもなりました。

## 行った自己学習

| 種別 | 学習技術 |
|:-|:-|
| バックエンド | PHP(Laravel), DB設計(SQL), Docker |
| フロントエンド | JavaScript(Vue, React), TypeScript, Next.js |
| その他 | UI・UX, テストコード|

## エンジニアに転職してよかったこと
- シンプルにリモートワークができる
    - ここは運動不足要注意ですｗ
    - 営業職って基本ここのフルリモートワークって難しいと思います

- 常に新しい技術が生まれてくるかつ、学ぶことや領域が膨大なため飽きがこない

- 設計や概念など奥が深いことがたくさんあって、知れば知るほど楽しい

- 社内価値だけじゃなくて、市場価値も上がる実感がより感じられる

## 全体を通して振り返り

### 1年目にやってよかったと思うこと
- **`Notion`などにその日に新しく覚えたことなどを、自分なりの解釈でローカルアウトプットとしておく**
    - これで新しく覚えたことを忘れないうちに定着させることができるかつ、追々検索して参考にすることができる

- **QiitaやZennのトレンドやTwitter、IT系ニュースサイトを毎日チェックして最新の動向を知っておく**
    - ここで便利なツールなども知ることができて実際に導入してより効率的に開発を行うことができていると感じる

- **AIペアプロツールを取り入れる**
    - 一年目はわからないことだらけなので、先輩に聞くことが多くなってしまいます。
      そこでAIペアプロツールを導入してみましたが、かなり知らないことを知れましたし、成長スピードも上がり先輩に質問する頻度も下がりました。
MUSTで入れてほしいです！！詳しくは下記記事で導入手順ございますので、ぜひ導入してみてください。

https://qiita.com/derasado/items/8749839e65ef9f463418

- **1年目は業務時間外も頑張る←**
    - すみません、これはあまり癖付けると逆に生産性が下がるのでよくないかもしれませんが、１年目はわからないことだらけでそこを少しでも補いつつ、たくさんコードを読んで知識を盗んだり経験を得るためにやってみて結果的によかったと思ってます

- **リモートワークが選択できるなら、リモートワークする**
    - 通勤の時間を勉強時間や業務時間に割り当てることで、かなり成長スピードも上がる気がしてます

- **業務時間外に、足りていない部分の学習を行う**
    - 業務で足りていない点は、業務時間外にインプットしたり、実際に何か簡単なものを作ってアウトプットしてみたりすることはおすすめします

- **運動する習慣をつける**
    - リモートワークしていると、基本座りっぱなしで外にも出ないとかなり体に悪いですし健康的に良くないのでランニングを週1~2と筋トレは週２でずっとやってきましたが、これを行うとかなりスッキリしてポジティブ思考になりますので、おすすめです！！
        - ずっとPCと睨めっこしていると、気持ちが曇って病んでしまう人も多いみたいですので注意です。。。


### 1年目やればよかったと思うこと
- **アウトプットの習慣化**
    - 自分の場合これは途中で始めたので、月１とかでも習慣化することをおすすめします。
        - アウトプットを習慣化することで、記事を書くためのハードルがかなり下がりますし、アウトプットすることによって誰かの役に立つことができる上に、自分のインプットした知識をさらに人に説明できるレベルまで定着させることができたりすると思ってます

- **社外エンジニアや社内エンジニアとの交流**
    - フルリモートワークということもあり、社内の別プロジェクトにいるエンジニアですらあまり交流する機会がなく、ここはもっと積極的にやっておくべきだと感じてます。
        - 実際にリモートとかでもいいので、社外エンジニアと交流すること得られる知見や情報などはとても参考になり仕事で取り入れてみたりできますし、視野が広がるといったいい点もある気がしてます

### 課題
大まかに今後の課題として以下があるかと思ってます。

- **機能設計, DB設計, UI設計などの設計周り**
    - 設計周りがまだ経験不足があって、実際に個人開発などで経験していきたい。
        - 現状基本は与えられたタスクをこなしているだけなので、設計ができるようになると、新しい課題が出てきたときにこうしたほうがいいんじゃないかという提案ができそう。

- **実装スピード**
        - 既存のコードを読んで仕様を把握するのに、まだとても時間がかかっているため、勘でこうかな？みたいなところは予想で進めて、デバッグの数をなるべく減らしていきたい。

- **知識不足**
    - ここは単純に経験年数の問題かもしれませんが、知識がないのが原因でやり方がわからないことが多いので、ここは今後経験を重ねつつ最近便利で知らないことも教えてくれる話題のAIツールなども活用して成長していきたい。

- **ドメインの知識不足**
    - サービスを開発していくには、やはりドメイン知識も必要でそこが足りていなく困ることが多いので今後知識を得ていく必要がある(今後他サービスを担当する際も、ドメイン知識はちゃんと得るようにする)

## 終わりに
うむ、まだまだ課題だらけですね。
とりあえずこの1年間、新しいことに挑戦してきて学びがとても多く充実した1年間でした！

営業は営業で対人感性力, 行動力, 提案力, マーケティングなど結構学びになることがありましたが、
エンジニアも工夫できることやどんどん出てくる課題や技術など学びがいっぱいあって楽しいです！

ただ人と話す機会が圧倒的に減ったので意識して話すようにしないと、人と話すのが下手くそになってきている気も・・・ｗ

何かしら参考になれれば幸いです！