プログラマーの能力は経験年数で測れない
経験年数より大切なもの
プログラマーの能力を推定するのに重要な要素は何か
ソフトウェアエンジニア、デザイナーが転職サイトに登録するとスキルシートの提出を求められることがあります。Java何年、MySQL何年、Photoshop何年とかいうやつですね。
一方で経験年数は多いエンジニアが少し難しいタスクになると上手く書けなかったり、経験年数の期待値と実際の業務能力との乖離が観測されることはあります。
プログラマーの能力を推定する特徴量として経験年数は使える指標でしょうか?
ESEC/FSE 2022採択の論文Correlates of Programmer Efficacy and Their Link to Experience: A Combined EEG and Eye-Tracking Studyの中で面白い比較を見つけたので紹介します。
単位時間あたりのコード理解能力をプログラマーの能力とする
論文では37人の被験者に対して1時間の中でコードの理解を問うタスクを解いてもらって経験年数などの指標と相関があったか比較しています。
プログラマーの特定の条件下の能力(efficacy)を完了時間内で何個コード理解度のタスクを解けたかで定義しています。
実際に使われた問題も公開されていて、Javaのコードを読んで、とある関数の返り値が何を返ってくると思うか選択肢から選ぶタスクのようです。
被験者は31/37名男性で±標準偏差の統計だと年齢は25.95 ± 6.76歳、プロとしてのプログラミング経験が3.55 ± 4.30年。
本題でないですが、職業エンジニアがソフトウェアエンジニアリングにさく時間は週25時間でそのうちプログラミングにさいている時間は11時間。60%の時間はコード書いていないというのは面白い示唆ですね。
プログラマーの能力は経験年数で測れない
結果を元に事前アンケート項目との相関を比較しています。𝜌 ≥ 0.3で中〜強い相関がみられたとの解釈。
結論として
プログラマーの特定の条件下の能力(efficacy)は、一般的に使用されている経験年数のような尺度とは相関がない。
自己推定や学習意欲の指標は、少なくとも中程度の相関を示している。
と述べられています。
以下が細かいデータ。
上から並べるとこうです。
- 同僚との自己比較 0.59
- コードレビューにかける時間 0.47
- プログラミング言語の数 0.42
- 10年経験したプログラマーとの自己比較 0.38
- テストを書く時間 0.35
- 命令型パラダイムの経験 0.32
- メンターしている時間 0.32
- 学習している時間 0.32
同僚との自己比較が一番相関の高かった項目。学習している時間、ラーニングアニマルを採用しろというのは昔からよく言われることですね。
逆に下から並べるとこうです。
- 社会人経験年数 -0.06
- Javaの経験 0.04
- 仕事中にプログラミングにかける時間 0.06
- ロジカルパラダイムの経験 0.07
- デプロイにかける時間 0.10
- 仕事でのプログラミング年数 0.14
- プログラミング年数 0.15
- 会議にかける時間 0.16
AIにプログラミング作業を奪われているという話がありますが、論文でも実際コーディングにかけている時間と理解度には相関がないことが強調されています。
バックエンド開発に必要な能力の半分以上は言語力以外の部分が自分の主張なんですが、実際Javaの問題なのにJavaの経験年数はプログラミング年数より理解度に影響を与えていないようです。
面接で聞くべき質問集
せっかくなので能力と相関の高かった項目について、面接で聞くべき質問集を作ったので置いておきます。
- Q: 同僚の能力の平均(経験年数10年のエンジニア)を100とすると自分はどのくらいに位置すると思いますか?
- Q: 普段働く中でチーム内でどのような動きをすることが多いですか?(レビューやメンタリングをする立場にいるか)
- Q: 今まで触ったことのある言語を教えてもらえますか?何個くらいありますか?(論文での平均は5.1)
- Q: 普段タスクを行う中で実装する際にテストを書いている割合はどのくらいですか?
- Q: 普段どのように情報のキャッチアップをしていますか?勉強会に参加したり個人開発をされていたりしますか?
アイトラッキングや脳波のデータもあり
今回は経験年数部分にフォーカスしたのですが、論文ではアイトラッキングや脳波のデータも使って読み解くときの挙動、認知負荷についても取り上げられています。そちらも面白いのでぜひ読んでみてください。
Discussion