ベテランエンジニアと新人エンジニアの6つの違い

 ベテランのエンジニア、一般には5年以上、そして新人のエンジニア、一般には0から3年くらい。この二人の違いはなんでしょうか?

 多くの人は、その違いを年齢だと言います。

 果たして本当にそうでしょうか?

多くの人が年齢というなかで、年齢は関係ないという人もたくさんいます。


 二人の違いは単なる年数の違いではないと思います。

 どうして?

 あなたの仕事の質は、あなたが持っている長年の経験を凌駕するからです。

20代でも経験が豊富なら年齢は関係ないといえますよね!

 今回、私は、新人開発者とベテラン開発者の違いをここに書き留めたいと思いました。それがあなた自身をバージョンアップするために少しでも役立って欲しいを願っています。

新人エンジニアにおすすめの記事:

1. 実装にしがみつくか、問題解決にしがみつくか

 新人の開発者は、特定の機能の実装に重点を置く傾向があります。プログラミングの知識を使って目前の問題を必死に解決したいというごく自然な傾向により、彼らは実装に集中します。これは、新人の開発者が全体像を見逃す主な理由です。
 そのような場合、問題解決へのコミットメントと実装を混同します。悪いことではありませんが、実装は問題解決自体ではなく、問題解決への手段です。

 一方、上級開発者は、システムの全体的なアーキテクチャに集中するという根深い意志を持っています。彼らは機能を見るだけでなく、全体的に必要となる変更やその複雑さなど、システム全体に与える影響を常に確認しています。必要とされる労力を見積もり、チーム全体のために必要に応じて立ち回ることができます。

 新機能の導入には、ビジネスへの影響、タイムライン、優先順位などに関する質問を常に考える必要があるでしょう。必要なことに集中するためです。

2. 仮定を立てるか、明確にするか

 新人の開発者は、疑問があるときに物事を仮定する傾向があり、疑問を明確にすることを見逃すことがよくあります。 それには、自信がない、誰に質問すればよいかわからない、自分ができないやつだと思われたくないなど、多くの理由が考えられます。
 問題は、実際には決して発生しないと仮定してそのまま進めてしまうことです。そのおかげでコードベースが巨大になり、デバッグが非常に困難になってしまい、長期的にはより大きな問題につながることも起こり得ます。

コミュニケーションにおける唯一最大の問題は、それが達成されたという幻想である。

ジョージ・バーナード・ショー(1856-1950)

 ベテランエンジニアはこの問題について自信があります。 彼らには1つの経験則があり、疑わしいときはいつでも質問をします。
 問題を明快にするのはもはや義務です。彼らは必要に応じて他のチームメンバーや他のチームとうまくコミュニケーションを取り、何をする必要があるかを正確に理解できてから、進めていきます。

 仮説を立てることは素晴らしいことです。しかし、仮説から、問題と解決策についてより明確で精巧になることで、小さなバグや問題を抑えることができるのです。

3. 技術に固執するか、原理に固執するか

 新人の開発者は経験が浅いです。

 フルタイムで仕事を始めている人もいますが、新人開発者の考え方は、多くの場合、できるだけ早く学ぶことです。彼らはコードベースでの作業を開始し、使用されるツール、ライブラリ、およびフレームワークの学習を開始します。SpringMVCなどを使用してサービスを作成について学ぶかもしれません。しかし、フレームワークなしでサービスを作成することができなくなってしまうかもしれません。

 一方、ベテランエンジニアはその段階を経て、フレームワークは便利だが、有効期限があることを理解しています。そのため、システムの要件、システムとアーキテクチャの設計方法に焦点を当て、次にどのツールやフレームワークが最適かを決定します。

 テクノロジーとフレームワークは流行り廃りがあります。市場にはいろんなフレームワークが公開されてますが、私はその数に圧倒されています。
 しかし、それらはすべてコアコンセプトに基づいて構築されているのです。概念を理解していれば、フレームワーク、言語、ツールを簡単に切り替えることができます。
 リレーショナルデータベースの例を考えてみましょう。多機能に渡っていますが、ACIDプロパティ、インデックス、トランザクション管理、同時実行性などの基本的な原則を理解していれば、使用可能なデータベースの数について心配する必要はありません。

4. 内在知識のみでのプログラミングか、コラボレーションか

 多くの開発者は、ヘッドホンをつけたまま一人で作業することを好みますね。そのほうが集中できるのでしょう。彼らにとって、コンピューターと話すことは人間と話すことよりはるかに簡単です(笑)。コーディングとは、人間とコンピューターの両方のコミュニケーションに関するものです。つまりコードは、将来それを使用する必要がある他の開発者にとって意味のあるものでなければなりません。これが、新人開発者とベテラン開発者の大きな違いです。

 ベテラン開発者はコラボレーションの方法を知っています。
 彼らは、いつ、どうやって他の人と協力するかを理解しています。新人開発者を指導したり、問題を解決するためにペアを組んだり、優れたコーディング慣行を説明したり、コードを確認したりすることができます。さらに、彼らは計画のためにプロダクトマネージャーと話し合い、技術的負債について考え、それに応じてタスクに優先順位を付けることもできます。つまり、彼らはバランスを取る方法を知っているんですね。すごいわ……

 他の人から学ぶことにオープンになりましょう。
 周囲の経験とあなた自身の経験から利益を得ることができますし、あなたは彼らの知恵と知識を継承することもできます。身の回りにいる人々は、私たちの行動、態度、結果に最も大きな影響を与えます。そのため、役職や給与だけでなく、転職の際にもそれを考慮することが非常に重要です。

5. スピード重視か、品質重視か

 新人の開発者はしばしばソリューションの品質をおざなりにします。彼らはそれが役に立たず、そして開発プロセスを遅くすると考えてしまっています。彼らはしばしば、コードの品質がどれほど重要であるか、テストがどれほど重要であるかを理解していません。

 エンジニアの仕事は、機能的であるだけでなく、読み取り可能で保守可能なコードを提供することです。ベテランエンジニアはそれがとても上手です。彼らは、高品質のコードの記述、設計パターンの追跡、テストの記述、エンドツーエンドテストの計画の策定、契約テストの導入、設計決定の文書化などに精通しています。つまり、タスクを完了するにあたり、ベテランのエンジニアは非常に多くのことを考えているのです。それゆえに、これらを定期的に行うと、品質に妥協することなく自動的に速度が上がります。

 品質が意思決定を促進します。それはより多くの時間と労力を必要とするので、最初は難しいと思います。私も日々苦悩しています。しかし、それによって毎日が良くなり、あなたにとっても多くの新しい常識になることは保証します。

I’m not a great programmer. ’m just a good programmer with great habits.

Kent Beck

まとめ

 新人の開発者とベテラン開発者を区別するのは、長年の経験だけではありません。複数の側面があり年齢を気にする事はないのです!エンジニアの分野だけでなく他の分野でもいえることでしょう。