新人エンジニアがAPI実装をできるまでに大切だったこと

# はじめに
この記事は[リンクアンドモチベーション Advent Calendar 2023](https://qiita.com/advent-calendar/2023/lmi)の17日目の記事になります。

初めまして、リンクアンドモチベーションの木村と申します。
今年の4月から新社会人として入社し、半年間の研修を経て10月から正式に配属されました。現在はバックエンドエンジニアとしてAPIの開発を中心に携わっています。

元々入社前に多少pythonで遊んではいましたが、チーム開発、アプリケーション開発の経験はなく、チームに配属された10月はAPIってなんだ？フレームワークってなんだ？と**右も左も分からないレベル**でした。そこから2ヶ月で、**ある程度自力で実装できるレベル**になりました。


そこからレベルアップをするために大切だと感じたのは以下の３点です。
- **一般知識の獲得**
- **設計の理解**
- **チーム開発でのコミュニケーション**

これらに対してよかったアクションを計7つ備忘録的にまとめました。

## こんな人におすすめ
* 新人で開発力を引き上げたい
* 先輩で後輩育成のヒントを得たい
という方には何か役に立てると思います。

# 本題
## 一般知識の獲得
### ①本でインプットする
開発をするにあたって、コードを書くだけでなく、開発に関わるさまざまな知識をつけることは重要です。最初は理解が浅くても、知っておくだけで、後で立ち戻って学び直すことができるからです。



実際に全部で30冊読んだ中で領域ごとに一部紹介します。
* プロダクトの開発体制
    - [プロダクトマネジメントのすべて](https://amzn.asia/d/fMn0OQK)
    - [リーン・スタートアップ](https://www.amazon.co.jp/dp/4822248976)
* 機能の開発体制
    - [SCRUM BOOTCAMP](https://amzn.asia/d/6lMOQba)
    - [GitHub実践入門 ~Pull Requestによる開発の変革](https://amzn.asia/d/c21Uw7q)
* 技術力
    - [入門Python3](https://amzn.asia/d/2Y3l7fY)
    - [Webを支える技術 -HTTP、URI、HTML、そしてREST](https://www.amazon.co.jp/dp/4774142042)
    - [知識ゼロから学ぶソフトウェアテスト 【改訂版】](https://www.amazon.co.jp/%E7%9F%A5%E8%AD%98%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%86%E3%82%B9%E3%83%88-%E3%80%90%E6%94%B9%E8%A8%82%E7%89%88%E3%80%91-%E9%AB%98%E6%A9%8B-%E5%AF%BF%E4%B8%80/dp/4798130605/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2G5H988BEAUSH&keywords=%E7%9F%A5%E8%AD%98%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%86%E3%82%B9%E3%83%88+%E3%80%90%E6%94%B9%E8%A8%82%E7%89%88%E3%80%91&qid=1697673282&s=books&sprefix=%E7%9F%A5%E8%AD%98%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%86%E3%82%B9%E3%83%88+%E6%94%B9%E8%A8%82%E7%89%88+%2Cstripbooks%2C138&sr=1-1)
- 実装+α
    - [リーダブルコード](https://amzn.asia/d/fvc9Wi4)
    - [オブジェクト指向でなぜつくるのか](https://www.amazon.co.jp/dp/4296000187)


### ②ドキュメント、GPT、本などを使って深める
本を読んで知識をつけたところで、実務上ではわからない問題にぶつかることはよくあります。ですが、様々な手段で知識を得て課題を乗り越えることができます。

実際に検索する際の手段についてまとめました。

- 公式ドキュメントでの検索
引数や細部の情報に関しては公式ドキュメントが最適です。具体的な情報を正確に知ることができます。
- GPTでの検索
早くて的確な情報が多いので、非常に便利です。ただし、誤った情報も提供される可能性があるため、注意が必要です。
- 本での検索
一度読んだ本を再確認することも有益です。同じ専門用語やフレーズに触れることで、理解が深まります。

## 設計の理解
### ③ディレクトリ構造と役割を覚える
開発を進める中で、全体のディレクトリ構造の中で瞬時に現在地を把握することは、効率的な開発に不可欠です。

もしディレクトリの構造と役割を理解していないと、「今何を作業しているのか」「どのディレクトリのどのファイルを見ているのか」「どのファイルが参考になるか」に迷走してしまいます。

全体のディレクトリの意味を理解することで、参考にしたいファイルを簡単に見つけることができます。

実際に位置情報と、役割を覚えていくための方法として、[ペアプログラミング](https://info.isi-grp.co.jp/blog/isit/what-is-pair-programming#:~:text=%E3%83%9A%E3%82%A2%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A8%E3%81%AF%E3%80%81%E5%88%9D%E5%BF%83%E8%80%85,%E3%81%AA%E3%81%8C%E3%82%89%E9%80%B2%E3%82%81%E3%81%A6%E3%81%84%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)が非常によかったです。
先輩方にまとめて時間をいただいて、作業を一緒に進めながら、ディレクトリを行き来することで、目先のコードを全体構造と紐づけることができました。
時間をかけていただいて本当に感謝しています。

### ④設計書を読む
開発の際、何を実装するか、どのように実装するか困った時は設計書を見るようにしましょう。
開発で行うテストや実装の根幹は設計書にあります。

実際のコーディングに追われる中で、「設計書を読んだ？」という問いに何度も直面し、設計書を読むことが開発において不可欠であることを痛感しました。

## チーム開発でのコミュニケーション
### ⑤先輩に専門用語を使う
先輩に開発について相談する際、「これ」「それ」ばかりで結局何を指しているのかわからない、冗長な説明をしてしまうことがありました。

スムーズな相談をするためには、本から学んだ用語、先輩方が使っている用語を覚え、使っていくことが重要でした。

### ⑥どこまで理解したのか、何がわかっていないのかを伝える
新人は視野が狭い分、先輩に開発に関する質問をするのって難しいですよね。

漠然とわからないから質問しにくい、、とか
結局「なんかここらへんでわかりません」とただ画面を見せるだけになる、、とか結構あります。

最近の質問を整理していて、以下のポイントに沿って理解度を伝えることが重要だと感じました。
1. 目的の理解
2. 処理の順序の理解
3. 実装したコードの意味理解

これらを踏まえて、
「目的は〇〇で、実際に処理は××のようにされると認識しています。ただ、それを実際にどのように書いて良いかわかっていません。先輩のコードを理解できていないと思うので、そこの説明をしていただきたいです。」
という質問ができたらいいと思っています。

わからない時ほど、不安な気持ちになり、質問が曖昧になりますが、そういう時こそ、明確な質問を心がけましょう。

## 最後に
以上、ほぼ未経験の新人エンジニアがAPIの実装をしていくために踏んだプロセスでした。
上記のアクションを積み重ねつつ早く一人前のエンジニアになりたいです。

何か役に立てれば嬉しいです。
見ていただきありがとうございました。