みなさんは良いコードとは?という問いに答えられるでしょうか?
私は答えられなくて日々苦労しております。可読性とかいう概念はある程度わかってきたものの、コーディングスキルとは何か、どうすれば伸びるのかという部分に関しては割と明確な答えがないように感じます。
そんな中、コードスキルを調査したぞ!という論文が出ておりましたのでご紹介します。これを読めば「良いコードを書け!」という漠然としたステレオタイプから脱出するヒントになります。
340 人のソフトウェア担当者を調査
紹介する研究は5大陸33か国の340人のソフトウェア担当者を調査して実証研究を行われたもの。 まず3 社の 15 人の開発者にインタビューすることで、9 つのカテゴリにグループ化された 38のコーディング能力スキルを特定。 次に調査の回答者にこれらのスキルの重要度を評価し、その評価の根拠を提供してもらうという手順を踏んでおります。 評価をしてもらい、38あったスキルのうち平均評価が 4.0 以上の合計21 の重要なスキルを特定したんだとか。ちなみに協力会社はIBMとかマイクロソフトとか名だたる企業なんだとか。
前置きが長くなりましたので、早速21のスキルをどうぞ!(右にある数字は重要度。高いほど重要)
1. 一般的なコーディング スキル
S1 コードを効率的に書く (つまり、短時間でコーディング作業をクリアする) 4.03
S2 効率的なコードを書く。たとえば、コードは非常に高速に実行でき、メモリの使用量が少ない 4.12
S3 よく文書化されたコードを書く 4.07
S4 他の人が書いたコードとうまく組み込めるコードを書く (例: write code 4.37)
2. リファクタリングと再利用
S5 より大きなコードベースから再利用可能なコードを認識して抽出する 4.16
S6 他の人が再利用できるように、ソフトウェアライブラリをパッケージ化し、文書化し、配布する 4.13
S7 車輪を再発明するのではなく、内部で作成されたコードを再利用できる 4.19
S8 車輪を再発明するのではなく、適切なサードパーティのライブラリを再利用する 4.26
S9 コードとアーキテクチャの嫌な部分を特定して排除することによるコードのリファクタリングをする 4.28
3. 要件エンジニアリング
S10 要件に従って機能を正しく実装する 4.31
S11 要件と実装の間の不一致を認識する 4.29
4. ソフトウェア設計
S12 複雑なコーディングタスクをより小さなタスクに分割し、別途実施する 4.45
S13 モジュール設計に従って機能を実装する 4.34
5. 理解と学習
S14 短期間で既存のコードを理解する 4.04
S15 異なるシステム アーキテクチャ間のトレードオフを理解する 4.02
S16 新しいドメイン固有の知識を習得するか、新しいプログラミングを学ぶ 4.03
S17 新しいツールの使い方をすばやく学ぶ 4.04
6. 環境との相互作用
S18 バージョン管理システム (SVN、Git など) を使用する 4.45
7. バグの防止と修正
S19 バグを迅速かつ正確に見つけて修正する 4.33
S20 潜在的なバグを検出するための適切な単体テストケースを作成する 4.18
S21 潜在的なバグを検出するために適切な統合テストケースを作成する 4.02
うーん、どれも納得のラインナップ。1番重要なのがバージョン管理というのはやや意外でしたが、この辺を軽視している私なんかは反省する部分も多いです。続くのが要件定義とバグ修正っていうのも大手が重要と思いそう。
まとめ
というわけで今回はコーディングスキルについてのお話でした。意識はしたいものの、これをどう伸ばしていくかは今後の研究待ちな部分があるので、今の所使い方としては転職などの際に「Gitは問題ないです!」みたいな感じくらいにとどまるでしょう。続報をお待ちくださいということで今回も最後までお読みいただきありがとうございます。