エンジニア生活：6ヶ月目

## はじめに

エンジニアとしてデビューして約半年が経ちました。毎日が新しい経験で溢れており、時間があっという間に過ぎてしまいます。まだ新人ではありますが、この半年間で得た経験や学びから、日々の業務で気付いた5つの重要なポイントを共有したいと思います。この記事がエンジニアとしてデビューした方々の役に立てれば幸いです。

### -自分の現状について-
私は現在、某飲料メーカーの生データを扱っており、S3やRedshiftを使ってデータを加工し、BIツールでの可視化、さらには従業員が使用するアプリの開発に携わっています。最初のプロジェクトで、バックエンドのサポートとして参加していますが、SQLを使ったテーブルやレコードの操作（追加・削除・更新）やAPIの呼び出しによるデータの扱い方など、多くを学んでいます。このプロジェクトを通じて、SQLとデータベースに関する知識を深め、専門性を高めていきたいと考えています。

## 1.自己学習の重要性とその方法

恐らく最初にぶち当たる壁がこの議題になると思います。
エンジニアの世界では、新しい技術が日々登場し、既存の技術も絶えず更新されています。
このような環境では、自己学習は単なる選択肢ではなく、生き残るための必須スキルとなります。
以下では、自己学習の重要性とその方法についてさらに詳しく掘り下げていきます。

#### 自己学習の重要性

- **技術の急速な進化に対応する**: 新しいフレームワークやライブラリ、プログラミング言語が常に登場しています。自己学習を通じてこれらの新技術をキャッチアップすることで、時代遅れになることを避けられます。
- **問題解決能力の向上**: 実務で遭遇する問題は、教科書やコースで学んだ内容だけでは解決できないことが多いです。自己学習によって得られる知識は、独自の問題解決策を見つけ出すのに役立ちます。
- **キャリアの機会の拡大**: 多様な技術に対する深い理解と幅広いスキルセットは、キャリアの選択肢を広げます。特定のニッチな技術領域の専門家になることも、フルスタックエンジニアとしての能力を高めることも可能になります。

#### 効果的な自己学習方法

- **実務から学ぶ**: 仕事で直面した課題や新しいプロジェクト要件から学習テーマを見つけ出し、それを深掘りすることは非常に有効です。実際に必要とされる技術を学ぶことで、理論と実践のギャップを埋めることができます。
- **コミュニティから学ぶ**: オンラインフォーラムや技術コミュニティに参加することで、他のエンジニアから学び、自分の知識を共有することができます。難しい場合は会社の飲み会などで敏腕エンジニアの先輩に仕事のノウハウや失敗談を聞きに行くといいでしょう。
- **反復学習**: 新しい概念を一度に完全に理解するのは難しいため、繰り返し学習することが重要です。[世界一流エンジニアの思考法](https://www.amazon.co.jp/%E4%B8%96%E7%95%8C%E4%B8%80%E6%B5%81%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E6%80%9D%E8%80%83%E6%B3%95-%E7%89%9B%E5%B0%BE-%E5%89%9B/dp/4163917683)という本にも書いてありましたが、敏腕エンジニアの方でも理解に時間をかけているので、私も焦らず取り組むことを意識しています。

自己学習はエンジニアとしての成長に不可欠です。
ただ、勉強内容って結構迷うポイントではあると思うので、まずは実務と関係している分野から学習していくことを勧めます。

## 2. 様々な技術に触れる柔軟性について

技術の世界は常に進化しており、エンジニアとしての成功は、新しい言語、ツール、フレームワークに柔軟に適応できる能力に大きく依存します。職場の敏腕エンジニアの先輩もよく「プログラミングは手段の一つでしかないから、**それよりも顧客やチームの仲間が現状何を求めてるかを瞬時に判断できる柔軟性の方が大事**だよ。」と仰っています。
以下では、様々な技術に触れる柔軟性を持つことの重要性と、それ実践する方法について詳しく解説します。

#### 柔軟性を持つ重要性

- **技術選択の多様性**: プロジェクトはそれぞれ異なる要件を持っています。柔軟性を持つことで、最適な技術スタックを選択し、プロジェクトの成功に貢献できます。
- **キャリアの機会**: 技術の幅広い知識と経験は、ジョブマーケットにおけるあなたの価値を高めます。特定の技術領域に限定されない多様なプロジェクトに参加する機会が増え、キャリアパスも広がります。

#### 効率的な学習方法

- **プロジェクトニーズに基づく**: 新しい技術を学ぶ際は、現在取り組んでいるまたは将来取り組む予定のプロジェクトのニーズに基づいて選択します。これにより、学んだ技術を実際の作業に直接適用できる機会が増え、学習効率が高まります。

- **ドキュメントの利用**: 公式のドキュメントを積極的に利用することで、学習プロセスを加速させます。他の開発者との交流は、新しい視点を得たり、困難な問題を解決するためのヒントを得る良い方法です。

様々な技術に触れる柔軟性を持つことは、エンジニアとして成長し続けるために不可欠です。上述の方法を実践することで、新しい技術への適応力を高め、キャリアの可能性を広げることができます。常に学び続ける姿勢を持ち、変化する技術の流れに積極的に乗り出しましょう。

## ３. 仕様の認識のすり合わせ

プロジェクトを成功に導くためには、チーム内での仕様に関する共通認識の構築が極めて重要です。特に複雑なシステムや新技術を取り入れるプロジェクトでは、仕様の認識のずれが後々まで大きな問題となることがあります。ここでは、仕様の認識のすり合わせの重要性とそのための効果的な方法について深掘りします。

#### 仕様の認識のすり合わせの重要性

- **予期しない誤解を防ぐ**: プロジェクトの初期段階で仕様について徹底的に話し合い、共通認識を確立することで、後の開発フェーズでの誤解や予期しない問題を防ぐことができます。
- **効率的な開発プロセス**: 仕様に関する認識がチーム内で一致していると、無駄な作業や重複するタスクを避けることができ、開発プロセスの効率化につながります。
- **品質の向上**: すり合わせによって明確にされた仕様をもとに開発を進めることで、最終的なプロダクトの品質向上に寄与します。仕様のすり合わせは、バグの発生を減らし、ユーザーの要求を満たす製品を作るための基盤となります。

#### 効果的なすり合わせ方法

- **ドキュメント化**: 会議やディスカッションの内容を正確にドキュメント化し、すべてのチームメンバーがアクセスできるようにします。仕様に関する変更があった場合も、すぐにドキュメントを更新し、関係者に通知することが重要です。
- **可視化ツールの活用**: 複雑なシステムやプロセスを説明する際には、フローチャートやUML図などの可視化ツールを活用します。視覚的に情報を伝えることで、仕様の理解を深めることができます。
- **フィードバックループの確立**: すり合わせのプロセスにおいては、フィードバックを積極的に求め、それを基にさらなる改善を行うことが重要です。特に、開発途中で見つかった問題点に対しては、迅速にフィードバックを行い、修正を加える必要があります。

仕様の認識のすり合わせは、開発プロジェクトにおいて時間をかける価値があるプロセスです。丁寧すぎるくらいに細部にわたって確認し、共通の理解を構築することで、開発プロセスのスムーズな進行と高品質なプロダクトの実現に寄与します。チーム全員が同じ方向を向いて努力するためにも、仕様のすり合わせには十分な注意を払うべきです。

## 4. タスクの日本語化: コミュニケーションと理解の深化

タスクの日本語化は、技術的な内容を自分自身やチームメンバーに明確に伝える能力を指します。このスキルは、技術的な課題を理解し、解決策を見つけ、チーム内のコミュニケーションを円滑にする上で非常に重要です。以下では、タスクの日本語化の重要性とその実践方法について掘り下げます。

#### タスクの日本語化の重要性

- **明確なコミュニケーション**: 技術的なタスクや問題を日本語で明確に表現する能力は、チームメンバーやステークホルダーとのコミュニケーションを効果的に行う上で不可欠です。特に非技術者とのコミュニケーションにおいては、専門用語を避け、理解しやすい言葉を選ぶことが重要です。
- **問題解決能力の向上**: タスクや問題を言葉で表現するプロセスは、自分自身の理解を深めるのに役立ちます。問題を別の言葉で説明することで、新たな視点が得られ、それまで見過ごしていた解決策に気づくことがあります。

#### タスクの日本語化を実践する方法

- **技術用語をシンプルな言葉に置き換える**: 専門用語やアクロニムを使う代わりに、できるだけシンプルで理解しやすい言葉を選んで説明します。これにより、技術的な背景が異なる人々ともコミュニケーションを取りやすくなります。
- **ビジュアルを活用する**: 図やチャート、フローチャートを使って技術的なプロセスやアーキテクチャを視覚化することで、理解を助けることができます。ビジュアルは、特に複雑なシステムやフローを説明する際に有効です。
- **フィードバックを求める**: 説明が理解されたかどうかを確認するために、聞き手からのフィードバックを積極的に求めます。理解の確認や質問に答えることで、さらにコミュニケーションを深めることができます。私は毎日マネージャークラスの方とタスクの整理をする時間を取っていて、そこで言語化の訓練をしています。笑
※最初は怖くて日本語すらおかしくなっていましたが・・・😅

タスクの日本語化は、単に言葉を変換するだけでなく、技術的な内容を深く理解し、それを他者と共有するためのスキルです。
私は会議中に出てくるカタカナ用語や略語にすごい苦労したのでITパスポートなどの資格勉強を実施し、どういう意味で使われているのか1つ1つ理解していきました。

## 5. チーム内で自分の意見をしっかりと伝える

チーム内で自分の意見をしっかりと伝える能力は、プロジェクトの成功に不可欠です。この能力は、コミュニケーションの明確化、チームの意思決定プロセスの改善、そして最終的にはプロダクトの品質向上に直接貢献します。以下では、自分の意見を伝えることの重要性と、それを効果的に行うための方法について詳しく解説します。

#### 自分の意見を伝えることの重要性

- **多様性の尊重**: 異なるバックグラウンドを持つチームメンバーからの意見は、プロジェクトに多角的な視点をもたらします。これにより、問題をより総合的に理解し、革新的な解決策を見つけることが可能になります。
- **意思決定の質の向上**: チーム内で意見がオープンに交換されると、より多くの情報と視点が意思決定プロセスに組み込まれます。これにより、より練られ、バランスの取れた決定が可能になります。
- **コンフリクトの解消**: 意見の不一致は避けられないことですが、積極的に自分の考えを表現することで、潜在的なコンフリクトを表面化させ、解決に向けて動くことができます。これは、チーム内の健全なコミュニケーションを促進します。

#### 効果的に意見を伝える方法

- **具体性を持たせる**: 自分の意見を伝える際には、具体的な事例やデータを用いて説明することが重要です。これにより、相手に自分の意見の根拠を明確に伝えることができます。
- **建設的なフィードバックを提供する**: 批判的な意見を伝える場合でも、それが建設的であることを心がけます。どのように改善できるかを示唆することで、ポジティブな変化を促すことができます。
- **リスペクトを持って聞く**: 自分の意見を伝えることと同様に、他者の意見に耳を傾け、リスペクトを持って接することも重要です。これにより、互いの理解が深まり、より協力的なチーム環境が築かれます。

チーム内で自分の意見をしっかりと伝えることは、コミュニケーションスキルの中でも特に重要な部分です。オープンで率直な意見交換は、プロジェクトの成功に欠かせない要素であり、チームの一員として積極的に貢献するためには、自分の意見を恐れず発言することも大切です。

## 終わりに
いかがだったでしょうか？
全体的にまとまりがない文章で読みづらかったかもしれません。
次は半年後にまたこれ系の記事を書こうと思います笑
最後までお読みいただきありがとうございました🙇