Home

公開日

経験3年目の壁?ベテランのコードが綺麗とは限らない、残酷な真実

img of 経験3年目の壁?ベテランのコードが綺麗とは限らない、残酷な真実

「経験を積めば、より洗練された良いコードが書けるようになるはずだ」。多くのソフトウェアエンジニアが、自身のキャリアの中でそう信じ、日々の開発に取り組んでいるのではないでしょうか。経験年数はエンジニアのスキルを示す分かりやすい指標の一つとして、採用の現場でも重視されがちです。

しかし、その「常識」に一石を投じる研究結果が報告されています。本記事では、フリーランス開発者98名のGitHubリポジトリを静的解析ツールSonarQubeで分析した論文「Aged to Perfection? Analyzing the Impact of Years of Experience on Code Quality」に基づき、経験年数とコード品質の間に存在する、意外で少し残酷な関係について深く掘り下げていきます。

驚きの結論:コード品質の問題は「経験3〜5年」の中堅層でピークを迎える

この論文が導き出した最も衝撃的な結論は、「経験年数とコード品質の向上は、単純な比例関係にはない」というものでした。むしろ、コード品質に関する問題の発生率は、経験3〜5年のエンジニアで最も高くなるという、非線形の関係が明らかになったのです。

以下の図表1は、経験年数のグループごとに、1,000行あたりのコードの問題発生密度(Issue Density)を示したものです。「All Issues(全ての問題)」の行に注目すると、経験3年未満の層(45.0)から3〜5年の層(56.6)にかけて数値が上昇し、その後5年以上の層(28.4)で大きく減少していることが分かります。これは、多くの人が抱く「経験が長ければ長いほど問題は減る」という直線的なイメージとは大きく異なる結果です。

図表1 経験年数ごとの平均問題密度

Issues Counted<3 years3-5 years>5 years
全ての問題45.056.628.4
保守性42.249.823.5
信頼性4.96.77.6
深刻度 高10.511.47.0
深刻度 中12.520.911.9
深刻度 低14.123.410.8

コードの「問題」を分解する〜保守性と信頼性の観点から

では、一口に「コード品質の問題」と言っても、その中身はどのようになっているのでしょうか。この論文では、問題を大きく「保守性」と「信頼性」の2つの側面に分けて分析しています。「保守性」とはコードの修正や拡張のしやすさ、「信頼性」とは予期せぬ不具合やシステム障害への繋がりにくさを示す品質のことです。

「保守性」の問題は、経験と共に着実に減少する

まず、コードの「保守性」に関する問題です。これには、複雑すぎる構造やコードの重複といった、いわゆる「コードの臭い(code smells)」が含まれます。図表2を見ると、JavaScriptやPHPでは、経験を積むほど保守性の問題密度が一貫して減少していく傾向が見られます。これは、「経験を積むことで、より読みやすくメンテナンスしやすいコードが書けるようになる」という私たちの直感と一致する結果と言えます。

図表2 保守性の問題密度と経験年数の関係

保守性の問題密度と経験年数の関係を示すグラフ

一方で「信頼性」の問題は、単純には減少しない

それに対して、システムの安定稼働に直結する「信頼性」の問題は、異なる傾向を示します。図表3を見ると、全体の傾向として、信頼性の問題密度は経験を積んでも下がらず、むしろわずかに増加しています。特にPHPでは、経験が増えるにつれて問題が顕著に増えるという結果でした。これは、保守性の問題とは対照的に、経験が必ずしも信頼性の向上に直結するわけではない、という複雑な実態を示唆しています。

図表3 信頼性の問題密度と経験年数の関係

信頼性の問題密度と経験年数の関係を示すグラフ

問題の「深刻度」で見る、最もクリティカルな課題を抱えるのはどの時期か?

次に、問題の「深刻度」に注目してみましょう。軽微なスタイル上の問題から、システムの機能を停止させかねない重大なバグまで、その内訳はどうなっているのでしょうか。

図表4は、経験年数別に「深刻度の高い(High Severity)」問題の発生密度を示したものです。結果は明らかで、ここでも経験3〜5年の層で問題の発生がピークに達しています。特にJavaScriptにおいてその傾向は顕著です。つまり、単に問題の数が多いだけでなく、ビジネスに与える影響が最も大きいクリティカルな問題を、皮肉にも中堅層が最も多く生み出している可能性があるのです。

図表4 深刻度の高い問題の密度と経験年数の関係

深刻度の高い問題の密度と経験年数の関係を示すグラフ

なぜ中堅エンジニアは「成長痛」に悩むのか?論文が示す3つの仮説

なぜ、ある程度経験を積んで自信もつき始める「経験3〜5年」の中堅層で、かえってコード品質の問題が増加してしまうのでしょうか。この一見不可解な現象について、論文ではその背景にある可能性として、以下の3つの仮説を挙げています。

仮説1:スキル習熟の過程で訪れる「中級者の壁」

スキル習熟度を説明する「ドレイファスモデル」によれば、技術者は「初心者」から「中級者」、そして「専門家」へと段階的に成長します。論文では、この「中級者」のステージが今回の結果と関係している可能性を指摘しています。中級者は、初心者のようにルールに厳密に従う段階は脱し、より複雑で挑戦的なタスクに取り組み始めます。しかし、まだ専門家のような状況を直感的に把握し、最適な判断を下す能力は完全には身についていません。この過渡期において、新しい技術や高度な機能を使おうと試みる中で、結果的により多くの問題を生み出してしまうのではないか、という考察です。

仮説2:扱うタスクの複雑化と「自分はできる」という過信

経験を積むにつれて、任されるタスクの難易度や責任範囲は大きくなります。それに伴い、コードの複雑性も増し、潜在的な問題が入り込む余地も増大します。加えて、論文は「ダニング=クルーガー効果」にも触れています。これは、能力の低い人ほど自身の能力を過大評価してしまう認知バイアスのことです。ある程度の経験を積んだことで生まれた自信が、時として「自分は大丈夫だ」という過信につながり、ベストプラクティスを軽視したり、細かな問題を見過ごしたりする原因になっているのかもしれません。

仮説3:言語の特性やプロジェクトの環境という外的要因

エンジニア個人のスキルだけでなく、使用するプログラミング言語の特性もコード品質に影響を与えます。例えば、論文のデータでは言語ごとに問題の発生傾向が異なっていました。また、個人のプロジェクトか、厳格なコードレビューが行われるチーム開発か、といった開発環境も品質を左右する大きな要因です。経験年数という個人の属性だけでは説明できない、こうした外的要因の存在も無視できません。

まとめ:経験年数というモノサシを超えて、本質的なスキルアップを目指すあなたへ

今回ご紹介した論文は、「エンジニアの経験年数」と「コード品質」の関係が、私たちが思うほど単純ではないことを、客観的なデータをもって示してくれました。

  • コード品質の問題は、経験3〜5年の中堅層で一度ピークを迎える傾向がある。
  • この現象の背景には、スキル習熟の過程で訪れる「壁」や、扱うタスクの複雑化、そして個人の認知バイアスなどが関係している可能性がある。
  • 経験5年以上のベテランは、総じて問題の発生率が最も低く、安定して質の高いコードを生み出している。

この結果は、現在3〜5年目でスキルに伸び悩んでいるエンジニアの方にとって、少し耳の痛い話かもしれません。しかし、これは決して悲観的なデータではなく、自身の現在地を客観的に把握し、次のステージへ成長するための重要なヒントと捉えることができます。また、採用や育成に携わるマネージャー層にとっては、経験年数という単一の指標で候補者やメンバーを評価することの危うさと、多角的な視点を持つことの重要性を示唆しています。経験年数は、あくまでスキルを測るための一つのモノサシに過ぎないのです。


開発生産性やチームビルディングにお困りですか? 弊社のサービス は、開発チームが抱える課題を解決し、生産性と幸福度を向上させるための様々なソリューションを提供しています。ぜひお気軽にご相談ください!

参考資料:

Author: vonxai編集部

Google Scholarで開発生産性やチーム開発に関する論文を読むことが趣味の中の人が、面白かった論文やレポートを記事として紹介しています。