とある大学生が思う理想的エンジニア像[Qiita Engneer Festa 2024 38記事 完走記念]

私はとある大学の3年生としてエンジニアとしてのライフプランを考えてみる．色々な企業で実務を経験したところで，どのようなエンジニアになりたいか，ふと疑問に思った．Qiita Engneer Festa 2024で約1ヶ月間毎日記事投稿をしてこの記事が最後の38記事目となる．様々な基礎技術やプロジェクトマネジメントのことを書いてみていろいろな知識がついたと思う．これはいい機会だったのでエンジニアライフプランについて考えてみた．

>10年後なったとき読み返してみたいと思う．

:::note info
ぜひいろいろコメントお待ちしています！
:::

# 開発は勉強という名で受動的に行うものではない
開発するにあたって情報系の知識をつけるためにいろいろ**勉強**することが必要だと思う．それを受動的に**勉強**するような義務で開発することは良くない．ITの仕事といえば，バックエンド，フロントエンド，デザイン，インフラといったエンジニアから，設計，コンサルなどなどいろいろあると思うが，**楽しんで**仕事し，ゲームや趣味のようになるといいだろう．

:::note info
楽しんだもん勝ちです！
:::


# 目指すエンジニア像
私は初めコーディングがエンジニアにおいて一番重要なのではと思っていた．しかし，実務を経験する上で**コミュニケーション力(読む力や書く力の総合)** が必要だと思った．

そこで，私が目指すエンジニア像は，コミュニケーション能力と開発スキルを兼ね備えた人材である. 実務経験から，文章力の重要性を痛感した. プルリクエストや仕様書を適切に作成する能力は，エンジニアにとって不可欠だ. また、コードを読む力も同様に重要である. 実務では、コーディングに加え，既存のコードを理解し，仕様書を読み解き，コードレビューやデバッグを行う機会が多い. これらのスキルは，すべてコミュニケーションの一形態と言える.

# 実務経験で学んだこと:チームワークの重要性

開発プロセス全般に関わるためには，チームメンバーとの円滑な**コミュニケーション**が欠かせない. 設計からテストまで，各段階で適切な対話が必要となる. このようなスキルを磨くためには，技術力と対人スキルの両方を向上させる必要がある.

# コミュ力を上げるには？
私が経験した上で必要だと思ったコミュ力のあげ方について考えてみた．

>今後私が実践するための実施事項を箇条書きにしてみる

## 知識の習得

まずは知識の習得が不可欠だ. しかし，単にコーディングを繰り返すだけでは不十分である. 

### 1. 仕様書や公式ドキュメントの精読: 
例えば，JavaScriptのECMAScript仕様書を読み込み，言語の深い理解を得る. また，ReactやVueなどのフレームワークの公式ドキュメントを隅々まで学習し，ベストプラクティスを身につける.

### 2. 既存プロダクトのコード解析:
オープンソースプロジェクトのコードを読み解き，実際の開発現場での実装方法を学ぶ. 例えば，GitHubで人気のライブラリのソースコードを読み，設計パターンや効率的なアルゴリズムの使用例を学習する.

### 3. デバッグモードでのコード追跡:
自分が使用しているフレームワークやライブラリの内部動作を理解するため，ブレークポイントを設定してステップ実行し，データの流れや関数の呼び出し順序を把握する.

### 4. コンピュータサイエンスの基礎学習:
アルゴリズムとデータ構造，オペレーティングシステム，データベース理論など，エンジニアとして必要な基礎知識を体系的に学ぶ.

### 5. 最新技術のキャッチアップ:
技術ブログや論文，カンファレンスの発表資料などを定期的にチェックし，業界のトレンドや新しい技術の特徴を理解する.

### 6. ハンズオン形式の学習:
Udemy, Courseraなどのオンライン学習プラットフォームを活用し，実際にコードを書きながら新しい技術やツールの使い方を学ぶ.

### 7. 技術書の精読:
定評のある技術書を選び，章ごとに内容を深く理解し，学んだ概念を小さなプロジェクトで実践する.

これらの知識習得の手法を組み合わせることで，幅広く深い知識を効果的に習得できる. 単なる表面的な理解ではなく，技術の本質を掴むことが，長期的なエンジニアとしての成長につながると思う．

## 実践的スキルの向上

知識を蓄えた後は，実践的なスキル向上に取り組む. 読む力を基礎としつつ，書く力と技術的な対話能力を同時に鍛えていく. 

### 1. 技術文書の作成:
   - 自分が学んだ技術についてQiitaなどでブログ記事を書く. 
   - 技術ドキュメントを作成する. 例えば，新しく導入したCIツールの使用方法や，コーディング規約をまとめる.

### 2. プロトコルや簡単なシステムの再現実装:
   - HTTPやWebSocketなどの通信プロトコルを，仕様書を読みながら自分で実装してみる.
   - 簡易版のデータベース管理システムを作成し，SQLクエリの処理やトランザクション管理を実装する.

### 3. プルリクエストの書き方の工夫
   - 変更内容を明確に説明し，なぜその変更が必要なのかを簡潔に記述する.
   - 影響範囲や潜在的なリスクを明記し，レビュワーの負担を軽減する.
   - 必要に応じてスクリーンショットや図表を追加し，視覚的な理解を促す.

https://qiita.com/JavaLangRuntimeException/items/329eb92a47a07ff4dde8

### 4. コードレビューの実施:
   - オープンソースプロジェクトに貢献し，他の開発者のコードをレビューする.
   - チーム内でペアプログラミングやモブプログラミングを行い，コードの品質向上とナレッジ共有を図る.

### 5. 技術プレゼンテーションの実践:
   - 勉強会や技術共有会で，自分が学んだ内容について発表する.
   - 地域のテックコミュニティで登壇し，自分の経験や知識を共有する.


これらの活動を通じて，技術的な内容を正確に理解し，それを他者に分かりやすく伝える能力が培われる. また，他の開発者との協働作業を通じて，技術的な対話能力も自然と向上していく. これらのスキルは，チーム内でのコミュニケーションを円滑にし，プロジェクトの成功確率を高める重要な要素となる.

# 結論：技術の話を楽しむエンジニアへの道

エンジニアとしての成長は，技術の話を心から楽しめるようになった時に始まる. これこそが，プロフェッショナルとしてのスタートラインだと考える. 

大学生の間から，単なる知識の習得にとどまらず，実務を意識した学習を心がけることが重要だ. 仕様書の読解，オープンソースプロジェクトへの貢献，技術ブログの執筆など，実践的な活動を通じて，技術への深い理解と愛着を育むことができる.

これらの基礎の上に立ち，より高度な実践的スキルを磨いていく. チーム開発での経験，難しい技術的課題の解決，新しい技術の導入など，様々な経験を通じて技術力を向上させる. 同時に，技術セミナーでの登壇やテックブログの執筆など，自らの知識を共有する機会を積極的に作ることで，コミュニケーション能力も磨いていく.

そして最も重要なのは，この過程を楽しむことだ. 新しい技術に触れる喜び，難問を解決した時の達成感，同僚とのテクニカルな議論の面白さ—これらを心から楽しめるようになることが，生涯エンジニアとして活躍するための鍵となる.

技術の話を楽しむことは，単なるスキルの向上以上の意味を持つ. それは，常に学び続ける姿勢，問題に創造的に取り組む態度，そして技術コミュニティへの積極的な参加をする. このような姿勢こそが，急速に変化する技術環境の中で，長期的にキャリアを築いていくための基盤となる.

したがって，私のエンジニアとしてのライフプランは，技術を楽しむ心を忘れず，常に学び，成長し続けることだ. 大学生活から始まり，卒業後も実践的なスキルを磨き続け，技術の世界で自らの可能性を最大限に追求していきたい. そうすることで，一生エンジニアとして活躍し，技術の進歩に貢献できるエンジニアになれると信じている.