Core Concepts
優秀なソフトウェアエンジニアは、優れたコーディング能力、状況を最大限に活かす仕事の実践、十分な情報に基づいた意思決定、他者の意思決定を容易にすること、そして絶え間ない学習を備えている。
Abstract
この記事は、マイクロソフトの研究者が行った調査について述べている。研究者らは1,926人のエンジニア、アーキテクト、テクニカルフェローを対象に、優秀なエンジニアの54の属性について調査を行った。
その結果、優秀なエンジニアの特徴は以下の4つのグループに分類されることが明らかになった:
パーソナリティ - 情熱や好奇心などの属性
意思決定 - 現状の把握、代替案の特定、確率的な結果の評価などの属性
チームメイトとの相互作用 - 合理性、影響力、効果的なコミュニケーション、信頼構築などの属性
エンジニアの倫理観 - ソフトウェアの美しさへの拘りなどの属性
さらに、優秀なエンジニアの5つの主要な特徴が明らかになった:
優れたコーディング能力 - 複雑性を扱える精神的能力と、コーディングの細部への注意
現在の仕事の価値の最大化 - 状況を考慮し、長期的な需要や費用対効果を分析しながら最適化する
十分な情報に基づいた意思決定 - 適切な手順に従って判断を下す
他者の意思決定を容易にすること - 他者のタスクを簡素化し、より効果的な意思決定を支援する
絶え間ない学習 - 既存の技術の習熟だけでなく、新しい技術の習得も重要
一方で、長時間労働や個人的な好意は、優秀なエンジニアの特徴とは見なされていないことが明らかになった。
Stats
1,926人のエンジニア、アーキテクト、テクニカルフェローを対象に調査を実施
54の属性について調査を行った
Quotes
"Without code, there is no software, so great software engineers must be able to write good code."
"Great engineers set themselves apart by considering the context of their software product and optimizing their current activities while accounting for potential future expenses and benefits."
"Great engineers set themselves apart by following the appropriate procedures to arrive at well-informed judgments."
"Great engineers set themselves apart by simplifying the tasks of others and assisting them in making decisions more effectively — or, at the very least, by preventing them from getting worse."
"They discovered that the capacity to acquire new technical abilities can be just as crucial as, if not more so than, mastery of existing ones."