レベル別プログラマの特徴まとめ
独断と偏見で、プログラマをレベル付けして特徴をまとめました。
*Level 1 〜 5 に収まるようまとめる予定ですが、とりあえず Level 3 まで投稿しておきます。
Level-1 Novice
プログラミングに触れたばかりの初心者に相当するレベルです。
コーディングを担当する範囲は「プログラミング言語の公式リファレンスを見れば書ける」程度のものが多いです。
このレベル帯の方は、言語仕様の理解が追いつかないままネットで見つけたコードをコピペして利用することが多く、それ故にコンパイルエラーと戦う時間が長い傾向があります。
意外とコーディングのスピードが早く、最初は進捗が良く見えますが、疎通やテストのタイミングで根本的な手戻りや根深いバグに遭遇してしまい、最終的に遅延していることが多い印象です。
次のレベルに向けて
- プログラマの成長には「成功体験」や「楽しんだ時間」が非常に大切です。自分のレベルに合ったコードを沢山書きましょう
- 自分の書いたコードを「人に説明できる程度に」理解しましょう
- できる範囲で「コピペ」をやめて「読む→理解する→頭の中身を書き出す」に置き換えてみましょう
Level-2 Advanced Beginner
プログラミング言語仕様をある程度理解している初心者に相当するレベルです。
コーディングを担当する範囲は「小規模で影響範囲の狭い画面やビジネスロジック」などが多いです。慣れてくると「中規模」や「小規模ながら影響範囲の広いもの」が割り振られる場合もあります。
このレベル帯の方は、膨大な量を誇るプログラミング言語仕様のうち、頻繁に使用する範囲を暗記している為、ある程度スムーズにコーディングすることができます。しかし無意識のうちに「知っている範囲の言語仕様」と言う柵に囚われてしまい、最終的に可読性や保守性の低いコードを書くことが多い印象です。
次のレベルに向けて
- コードは常に複数のパターンを考え、その中で一番良いものを選ぶようにしましょう
- 「やりたいこと」と「コード量」が一致しない等の違和感を感じたら、公式リファレンスを確認してより良い方法が無いか確認しましょう
- 「半年後の自分がメンテナンスしやすいコード」を意識して書いてみましょう
Level-3 Competent
デザインパターンに一定の理解がある中堅者に相当するレベルです。
コーディングを担当する範囲は「小規模システムの全域」や「中〜大規模システムのうち難易度が高すぎない箇所」などが多いです。
このレベル帯の方は、ある程度複雑なアルゴリズムをコーディングすることができ、さらに定石ロジックを身に付けているため基本的にコーディングスピードが速いです。また、デザインパターンや定石を駆使したコードを書くため、クオリティのコントロールがしやすく、コーディングした量に比べてバグの数が少ないと感じることが多い印象です。
次のレベルに向けて
- さらに視野を広げて責務分担や責任分界点、テスタビリティを意識してコードをデザインしてみましょう
- 「脳内のコーディングスピード」と「実際のタイピングスピード」の差が大きくなりやすいので、IDE のショートカットなどを積極的に利用してみましょう
- 最初に書いたコードはフィージビリティ検証用として破棄して、少なくとも1度リファクタリングしたバージョンを利用しましょう
Level-4 Proficient
システム全体をデザインできる熟練者に相当するレベルです。
担当する範囲は「システム全体のデザイン」に加え「システムのうち特に難易度の高い部分」になることが多いです。このレベル帯からはシステムのデザインに時間を割くことが多くなり、必然的にコーディング量が減る傾向が強いです。
このレベル帯の方は、概念レベルの設計や責務分担・責任分界点などを考慮してシステムをデザインすることができ、概念レイヤなどシステムの動作に直接関係のない部分のソースコードが必要になるため、Level-3 以下のプログラマを育成しながらコーディングしていることが多い印象です。
次のレベルに向けて
- 概念レイヤまでコーディングした後、具象化はチームメンバーに委ねましょう
Level-5 Expert
pending