自分のプログラマキャリアを振り返るために今の自分を採点してみた

# 背景
期の初めということもあり、皆さん憂鬱の目標設定があり、目標を考えるにあたって今の自分のプログラマとしての立ち位置を振り返って整理してみようと思って記事を書いてみました。

# 注記
- 自分のためのまとめなので厳密性のへったくれもありません。体感・主観・レイヤのごちゃまぜが平気でおきます
- 「プログラマ」という言葉を使っているんですが、職業としてプログラムを書く人を意図しており、具体的には「プログラマ」「エンジニア」を指す言葉として使っています。
- プログラマのキャリアパスとしてプロジェクトマネージャーとかあると思うんですが、私のキャリアに無く、生きた言葉を使えないので除いています。
- プログラマが関われる領域に「テック」「ビジネス(プロダクト)」「チーム」の領域があるとする場合、今回は「テック」の領域に限定

# プログラマのランク付け
| 点数 | どんな状態 |
| --- | --- |
| 20点 | プログラミング言語・フレームワーク（Web業界ならWebフレームワーク）の基本的な記法や扱い方がわかる。 |
| 30点 | 業務で簡単な修正ならできる |
| 40点 | 業務固有のユースケースのコードを読める・修正できる |
| 50点 | 与えられた課題に対して自分で考えて解決に導ける |
| 60点 | 「あの人に任せておけば安心」と組織内で一目置かれる |
| 70点 | 自身で技術領域に対して問題発見できる |
| 80点 | 自分の組織（チーム・会社）に閉じず、業界に影響を与えられる |
| 90点 | 業界を牽引する |
| 100点 | 神と呼ばれる |

- 100点満点で考えていきす。
- 100点を構成する要素があるわけではなく、体感で◯◯までできた自分は◯点だな、っていう感じです。
- ◯点で書いていることは、そのレベル到達時にできていることです。
    - 「20点」欄に書いていることは
        - 20点に達した人ができていることです
        - 「20~30点の間の幅でできること」という意味ではありません。むしろ20点を超えた21点22点など細かく区切ることがあるならば、30点への助走として考えられるよう記載しています。。
- 20点から始めています
    - 20点に至るまでノンプログラマでやることは多いので、その意味を含め0点~20点という広い幅を空けております。
    - ただ、仕事でプログラムをやるにあたってMVCなどフレームワークは入り口なのでそれ以下のディティールは省いています。念能力覚えて一人前みたいな感じです。

## 20点
プログラミング言語・フレームワーク（Web業界ならWebフレームワーク）の基本的な記法や扱い方がわかる。

- プログラムを見て基本的な記法で書かれていたら何をやっているか分かる状態
- 本やチュートリアルにあるサンプルコードを書いたくらい
- 具体的な業務には携わっていないので、業務起因の複雑さや闇は知らない状態
- 研修を終えたくらいのレベル

## 30点
業務で簡単な修正ならできる

- 本やチュートリアルにある内容+αくらいの知識でできることを業務で行っている感じ
- エラーが起きたときには、
    - エラーメッセージでググって奮闘する
    - Qiitaがメインの情報ソースであり、リファレンスなどは魔境に見えて足を踏み入れたくない状態
- 既存コードの修正はなんとかできるが同じコードを0から書けと言われたら壁に感じる

## 40点
業務固有のユースケースのコードを読める・修正できる

- 業務のコードと業務知識(ドメイン知識) についてある程度わかるようになっている
- 30点レベルの修正は息を吸うようにできるようになっている
- 本やチュートリアルに載っていないレベルの問題の扱い方も少しはわかるようになっている
    - 載っていても細かく載っているようなこと
    - 例: ログイン周り（セッションやフィルターなど）
- 新規でコードを書く際も臆せず書ける

## 50点
与えられた課題に対して自分で考えて解決に導ける

- ありがちな問題の解決は(常識的な)時間さえかければ解ける状態
- 問題を解く際に複数の問題解決方法が浮かび、その中から最適なものを選ぶ習慣が付いている
    - プログラムで問題解決するサイクルを俯瞰して見れるため、最終着地地点を見据えられ、それの最大化をテーマにできる。
    - 考え方も上記のレベルであり、実現するためのコードやアーキテクチャもきれい

## 60点
「あの人に任せておけば安心」と組織内で一目置かれる

- 50点クラスの行動を繰り返し、安定した実績を他者からも認められている状態
- 組織内で手本として扱われる

## 70点
自身で技術領域に対して問題発見できる

- 既知でないボトルネック点に自身で気づくことができ、その問題解決ができる
    - (参考)既知のボトルネックの例
        - 障害(インフラ・アプリケーション問わず)
        - 明らかに遅いことがわかる処理
- 自身の組織が技術的に向かうべき方向について影響を与えられるようになる
    - 「影響を与えられる」とは
        - 自身の動きにより結果が左右されるような状態。
        - できていない状態例: 依頼された誤字修正を行っただけ（気持ち的に関与したと思うのは自由だけど）

## 80点
自分の組織（チーム・会社）に閉じず、業界に影響を与えられる

- 自身の功績が業界で認識される
- 勉強会とかのスピーカーで呼ばれる


## 90点
業界を牽引する

- その人の働きで業界が動く
- Twitterの発言などが注目され、影響力がある

## 100点
神と呼ばれる

- もう正直どういう人がこのレベルかわからないです。




# (余談)別の枠組みでランクを見てみる
## [部下育成の教科書](https://www.amazon.co.jp/%E9%83%A8%E4%B8%8B%E8%82%B2%E6%88%90%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E5%B1%B1%E7%94%B0-%E7%9B%B4%E4%BA%BA/dp/4478020442)(プレイヤー限定)

スターター: ~40点(年収300万レベル?)
プレイヤー: 40~50点(年収300~350万レベル?)
メインプレイヤー: 50~60点(年収350~400万レベル?)
シニアプレイヤー: 60点~(年収400~500万レベル?)

※年収は完全に独断と偏見で根拠なく書いています。

## 守破離
守: ~50点
破: 50~70点
離: 70点~

## 問題解決
実際40点以降は問題解決能力がものを言います。
技術について詳しいというより、問題解決力の多寡ができることを決めるんですよね。
皮肉です。最初は知識を覚えることでレベルアップしてたのに、いつの間にかそのレールでいけるところが終わっているというのは。


# 現在の自分の状況
今の自分は60点です。
何かプロジェクトやるってなったらできるので。

この記事を書いた理由は自慢のためではありません。
この状態ってプログラマが仕事を始めたときに具体的に見えた景色のゴールっぽいところなんですが、ゴールに見えてしまうがゆえに次に何をすればいいかわからない意外と悩む状態です。
自分が70点に達していない道半ばの人間であることを認識する意味も込めています。
（世の中にこのレベルの人少なくないんじゃないかな、と感じています。）

## では次に何をするか
### 逆に（それっぽく見えるけど）やっても点数が上がらないこと
まずこのレベルにおいて、やっても点数が上がらないことを書きます。
何かそれっぽいことをやってるように見えるんですが、今の自分のやるべきことでない、というアンチパターンだからです。

#### 問題意識なく本を読みまくる
次の70点は自分なりに組織の問題を解決することで達せます。
ですので外から知識を入れまくることはそのクリティカルパスにはなりません。
ただ本を読んでいるから、頑張れば次の道に行けると盲信しないように自戒します。

クリティカルパスは別として技術書を読むのは好きなので趣味として本は読み続けます。
自分なりの問題発見をするにあたって、型がないと問題を見つけられないのでその型を探すという意味でも。

#### 新しい技術（言語・ミドルウエア）を節操なく追う
これも本を読むのと同様です。
ポイントは「問題意識がない」ことです。

ただただ新しい技術のキャッチアップを行っても、20~40点で行えるMVCを書くという問題解決に関する手数が増える以上の結果にはなりづらいです。
既に解決してる問題を別の記法で解決しているということが起きがちです。

ただ、これは問題意識がある場合は別です。
オンプレミスでのメンテコストがかかりすぎるからクラウド知識を覚える、
Javascriptのような型がない世界だとバグが増えるからTypescriptを覚える
など問題意識がある上なら組織の発展に寄与する可能性があります。

## 次の点数を考えた上で必要なこと
やってはならないことでイメージが固まりましたが、ひとえに
「組織に対する技術方面の問題を発見すること」
に尽きます。

あくせく頑張っても良いんですが60点のままで時間を重ね、その中で気付いたボトルネックを整理することで70点を目指します。
これは意識してもできないことで待ちが必要なことなので、気長にチャンスを待とうと思います。

以上、雑記でしたが読んでいただきありがとうございました