- Authors

- Name
- Youngju Kim
- @fjvbn20031
- はじめに: 十二年目なのになぜ伸びないのか
- 1. キャリアがそのまま実力ではないという不都合な事実
- 2. 意図的な練習の四要素
- 3. 開発者のための具体的な練習法
- 4. フィードバックループの作り方
- 5. コンフォートゾーンの外へ出る
- 6. 停滞期(プラトー)を突破する
- 7. 進捗を測定する
- 8. 週次ルーティンの設計
- 9. よくある罠
- おわりに: 今日の一歩
- 参考資料
はじめに: 十二年目なのになぜ伸びないのか
私が知るある先輩は、バックエンド歴十二年でした。履歴書だけ見れば、誰もがシニアとして迎えたくなる方です。ところが一緒に働いてみると、奇妙な違和感を覚えました。彼は五年前に身につけたやり方そのままにコードを書き、新しい問題の前でもいつも同じ道具を取り出しました。キャリアは十二年でしたが、実力はむしろ「三年を四回繰り返した」に近いものでした。
逆にある後輩は、三年目なのに議論の場で核心を正確に突きました。彼は毎週、自分が書いたコードを見直して「これはなぜこうしたのか」を問い、わからない部分をメモしておいて最後まで掘り下げました。同じ時間を過ごしたのに、二人の差は次第に広がっていきました。
この記事は、その差の正体についての話です。結論から言えば、キャリアの長さは実力を保証しません。何を、どのようにやったかが保証します。そしてその「どのように」には名前があります。意図的な練習(deliberate practice)です。
この記事は抽象的な説教ではなく、明日の朝から机の上で適用できる具体的な方法を目指します。温かくも、しかし芯のある形で、誇張なく進めます。
1. キャリアがそのまま実力ではないという不都合な事実
十年の罠
よく「一万時間の法則」という言葉を耳にします。何でも一万時間を投じれば専門家になれるという通念です。ところが、この通念の原典であるアンダース・エリクソン(Anders Ericsson)の研究は、実はその正反対に近いことを語っています。
エリクソンが強調したのは時間の「量」ではなく「質」でした。彼の研究で最高水準のバイオリン奏者を分けたのは、単なる練習時間の総和ではなく、限界を押し広げる集中した練習の時間でした。ただ長く弾くことと、できない部分を選んで意識的に直すことは、まったく別の活動だったのです。
エリクソンは著書『超一流になるのは才能か努力か?(Peak)』で、一つの不都合な観察をしています。多くの分野で、人はある水準に達すると、それ以上伸びなくなるというのです。運転を二十年しても自動車レーサーにはならず、診療を三十年した医師が五年目より診断が上手だという保証もない、という研究があります。ある瞬間「十分に上手」になると、私たちは自動操縦モードに入ります。
自動操縦モードの正体
自動操縦モードは効率的です。慣れた仕事を考えずに速く片づけられます。問題は、自動操縦の状態では実力が伸びないという点です。脳は難しいと感じない仕事には変化を起こしません。
開発者の自動操縦モードはこんな姿をしています。
- いつものフレームワークで、いつものパターンで書く
- エラーが出たらメッセージをコピーして検索し、最初の答えを貼り付ける
- コードレビューは「LGTM」で素早く通す
- 新しい技術は「あとで時間ができたら」見る(その時間は来ない)
- 振り返りは形式的に、同じことを繰り返す
このモードの中では、一年働こうが十年働こうが同じ筋肉ばかり使います。キャリアは積み上がるのに実力が平らなままなのは、ここに理由があります。
核心的な区別: 経験 vs 練習
| 区分 | 経験(単なる反復) | 意図的な練習 |
|---|---|---|
| 目標 | 仕事を終えること | 特定の弱点を改善すること |
| 難易度 | 快適な水準 | わずかに手強い水準 |
| 集中 | 分散しても構わない | 完全な没入が必要 |
| フィードバック | たまに、曖昧 | 即座で具体的 |
| 結果 | 仕事は終わるが停滞 | 仕事もでき実力も成長 |
この表の核心は、経験と練習は重なり得るが同じではないという点です。私たちは毎日働きながら無数の経験を積みますが、そのうち意図的な練習へ転換される割合は意外なほど低いのです。
2. 意図的な練習の四要素
エリクソンの研究を開発者の言葉に置き換えると、意図的な練習は四つの柱の上に立っています。一つずつ見ていきます。
要素1: 明確で具体的な目標
「Reactを上手くなりたい」は目標ではありません。大きすぎて曖昧で、何をすればいいかわかりません。意図的な練習の目標は測定可能で狭くなければなりません。
悪い目標: 「非同期処理を上手く扱いたい」
良い目標: 「Promise.allとfor-await-ofの動作の違いを
自分の実験で再現でき、いつ何を使うかを
自分の言葉で一段落説明できる」
良い目標は「終わったかどうか」を自分で判定できます。曖昧な目標は永遠に進行中です。狭い目標は一度に一つの弱点だけを狙うので、脳が集中できます。
要素2: 完全な集中
意図的な練習はマルチタスクと相性が最悪です。Slackの通知をつけ、YouTubeを流しながらする「練習」は、練習ではなくBGM付きの時間つぶしです。
集中のための現実的な仕掛けはこうです。
- 25〜50分単位でタイマーをセットする(ポモドーロ)
- その時間は通知をすべて切る(おやすみモード)
- 一セッション = 一つの目標だけ
- 終わったら5分メモ: 何がわかり、何で詰まったか
集中の質が練習の質を決めます。散らばった二時間より、没入した三十分のほうが上です。
要素3: 即座で具体的なフィードバック
フィードバックのない練習は、暗闇の中でゴルフのスイングを練習するようなものです。ボールがどこへ行ったかわからなければ、いくら振っても上達しません。意図的な練習には「今やったことが正しかったか」を素早く知らせる仕掛けが必要です。
開発者にとってフィードバックの源は意外に多くあります。
- テスト: 赤/緑で即座に知らせてくれる
- 型チェッカー/リンター: コーディング中にミスを捕まえる
- ベンチマーク: 速くなったか遅くなったかを数字で語る
- コードレビュー: 人の目で見た構造的なフィードバック
- 本番メトリクス: 実際のユーザーがくれる最も正直なフィードバック
核心はフィードバックループを短くすることです。一か月後に来るフィードバックより、三十秒後に来るフィードバックのほうが学習にはるかに強力です。この記事の第4章でフィードバックループの設計を別に扱います。
要素4: 限界の向こうへの挑戦(コンフォートゾーンの外)
最後の柱が最も難しく、最も重要です。意図的な練習は定義上、不快です。快適なら、それは練習ではなく復習です。
学習科学が語る領域は三つです。
コンフォートゾーン(快適な領域) - すでにできること。成長なし。
ラーニングゾーン (学習の領域) - わずかに手強いこと。成長が起きる。
パニックゾーン (恐慌の領域) - 難しすぎること。挫折だけが残る。
意図的な練習はラーニングゾーンに留まる技術です。易しすぎれば退屈で、難しすぎれば崩れます。ちょうど一歩難しいところ、九十パーセントはわかるが十パーセントで詰まる地点、そこが黄金地帯です。
3. 開発者のための具体的な練習法
ここで抽象を離れ、机へ向かいます。以下の四つは、私自身が実際に効果を見た、そして多くのシニアエンジニアが共通して勧める方法です。
方法1: コードを読む(よく書かれたコードを意識的に読む)
文章を上手く書くには良い文章を読むべきだとは知っているのに、コードを上手く書くには良いコードを読むべきだということは、しばしば忘れます。ほとんどの開発者は自分のコードと同僚のコードしか見ません。世界最高水準のコードはなかなか覗きません。
オープンソースがその宝庫です。ただ、ただスクロールするのは練習ではありません。
コードを読む練習の手順
1. 目標を決める
例: 「このライブラリは並行性の問題をどう解くか」
2. 入口を見つける(README、テスト、public API)
3. 一つの流れだけ最後まで追う(全部は読まない)
4. 詰まる部分に質問をメモする
「ここでなぜロックではなくCASを使ったのか?」
5. 答えを探すか、自分で仮説を立てて実験する
6. 学んだパターンを一文で書く
この練習の核心は能動性です。「なぜ?」という質問を止めないこと。良いコードは無数の決定の結果であり、その決定の理由を追跡する過程そのものが練習です。
方法2: 再実装(見て写すのではなく、理解して書き直す)
読むことから一歩進んだのが再実装です。動く何かの動作を理解したうえで、原本を見ずに自分で作ってみることです。
再実装の練習の例
- デバウンス/スロットル関数を自分で実装してみる
- 小さな状態管理ライブラリ(ストア+購読)を作ってみる
- Promiseを標準仕様だけ見て自分で実装してみる
- 簡単なルーター、簡単な仮想DOM diffを書いてみる
- LRUキャッシュをテストと一緒に最初から書く
再実装の力は、「わかっているつもり」と「本当にわかっている」を分ける点にあります。デバウンスを百回使ったことがあっても、自分で書こうとするとタイマーの後始末、thisのバインド、最後の呼び出しの処理で詰まります。その詰まる地点こそ、あなたが知らなかった部分です。
方法3: コードカタ(小さな問題を反復して基礎を磨く)
カタ(kata)は武術で、定められた動作を反復して鍛錬することを指します。コードカタは、同じ小さな問題を複数の方法で、複数回解く練習です。目的は問題を解くことではなく、解く過程を磨くことです。
コードカタの運用法
- 小さな問題を一つ選ぶ(例: ローマ数字変換)
- 月: いつものやり方で解く
- 火: TDDで、テストを先に書いて解く
- 水: 関数型スタイルだけで解く
- 木: 最も少ない行数で(可読性を犠牲にする実験)
- 金: 最も読みやすいコードで再び(バランスを探す)
同じ問題を異なる制約の下で解くと、普段は自動で下していた決定が表面に現れます。codewars.comやcodekata.comのような場所で問題を入手できますが、実は日々の業務で出会った小さな関数一つをカタにしても十分です。
方法4: ポストモーテム(失敗と事件から意識的に学ぶ)
最も高価な教科書は障害です。明け方に鳴ったアラーム、壊れたデプロイ、消えたデータ。これらの経験は強烈なので自動的に学習になりそうですが、意識的に整理しなければ、ただのトラウマとして残るだけです。
ポストモーテムは事件を学習資産に変える意識的な手続きです。核心は非難なし(blameless)の態度です。「誰が間違えたか」ではなく「どんなシステムがこのミスを可能にしたか」を問います。
簡単な個人ポストモーテムのテンプレート
1. 何が起きたか(事実だけ、時系列で)
2. なぜ起きたか(5 Whysで根本原因まで)
3. どう気づいたか(検知までの時間)
4. どう復旧したか
5. 何を変えれば再発を防げるか(具体的なアクション)
6. 今回新しく学んだこと一つ
GoogleのSREブックのポストモーテム文化の章が良い出発点です。チーム単位のポストモーテムがなくても、個人的に上のテンプレートを埋めてみるだけで、同じ事件から二倍学べます。
4. フィードバックループの作り方
意図的な練習の四要素のうち、開発者が最も頻繁に抜かすのがフィードバックです。一人で勉強するとき特にそうです。そこでフィードバックループを別に設計する方法を扱います。
フィードバックループの構造
┌──────────────┐
│ 1. 試みる │ (コードを書く、仮説を立てる)
└──────┬───────┘
│
v
┌──────────────┐
│ 2. 信号を受ける │ (テスト、レビュー、メトリクス、人)
└──────┬───────┘
│
v
┌──────────────┐
│ 3. 差を見る │ (期待 vs 実際、何がずれたか)
└──────┬───────┘
│
v
┌──────────────┐
│ 4. 調整する │ (仮説を修正、次の試み)
└──────┬───────┘
│
└──────────> 1番へ戻る(ループが短いほど強力)
このループが速く回るほど学習が速くなります。良い開発環境は結局、このループを短くする道具の集合です。ホットリロード、速いテスト、良いエラーメッセージはすべてループ短縮の仕掛けです。
一人でフィードバックを作る方法
同僚のレビューがないときでもフィードバックを作れます。
- 未来の自分にレビューしてもらう:
コードを書いて一日後に読み返すと客観化される
- テストをフィードバック機械にする:
「これが正しい」をコードではなくテストで証明する
- 公開して書く:
学んだことを文章やメモに整理すると穴が現れる
- 説明してみる(ラバーダック):
人に(あるいは人形に)説明していると知らない箇所が出る
- 二つの方法で書いてみる:
同じものを違うやり方で書くと両者が互いのフィードバックになる
同僚にフィードバックを求める会話
フィードバックを上手く受けるには、上手く尋ねなければなりません。「コード見て」は良い質問ではありません。広すぎて、相手が何を見ればいいかわかりません。
悪い依頼:
「このPRをレビューしてください。」
良い依頼:
「このPRでエラー処理の部分に自信がありません。
特に外部APIがタイムアウトしたときのリトライ処理が
妥当かどうかを見ていただけるとありがたいです。
残りは軽く見ていただいて大丈夫です。」
狭く具体的な依頼は相手の時間を節約し、あなたが本当に弱い部分にフィードバックを集中させます。
5. コンフォートゾーンの外へ出る
頭では「難しいことをやらないと伸びない」とわかっていても、体は楽なほうへ流れます。コンフォートゾーンを抜け出すのは意志力の問題というより、設計の問題です。
コンフォートゾーンを診断する
まず自分がどこに留まっているかを知らなければなりません。以下の質問に正直に答えてみてください。
コンフォートゾーン・チェックリスト
[ ] 最近一か月、詰まって一時間以上さまよったことがあるか?
[ ] 最近書いたコードのうち「これ動くかな?」と思ったものがあるか?
[ ] わからないと正直に言ったことが最近あるか?
[ ] 新しい道具/言語/パラダイムを試したことがあるか?
[ ] 自分の決定に誰かが反論したことがあるか?
チェックが少ないほど、コンフォートゾーンに深く留まっている可能性が高い。
詰まりが全くないというのは快適だという意味であり、快適さは成長が止まったというサインかもしれません。
一歩ずつ押し出す
コンフォートゾーンを抜け出す安全な方法は、パニックゾーンへジャンプすることではなく、ラーニングゾーンへ一歩移すことです。
- 慣れた言語の未使用の機能を一つわざと使ってみる
- 普段避けている領域(フロントなら裏側、DBならフロント)に触れる
- コードレビューで意見が分かれたら黙らず根拠を述べる
- 自信のない主題で社内発表/共有を自ら買って出る
- 推測だけしていた部分を測定で検証する
小さな不快を頻繁に経験するほうが、大きな不快をたまに経験するより良いのです。毎日5パーセントずつ手強いことをする人が、一年後に最も遠くまで行っています。
6. 停滞期(プラトー)を突破する
頑張ったのに、ある時点から伸びない感じ。これが停滞期です。停滞期は失敗ではなく、学習曲線の自然な一部です。ほとんどすべての熟達の過程に現れます。
停滞期の正体
エリクソンは、停滞期が能力の限界ではなく方法の限界である場合が多いと言います。これまで使っていた練習方法ではもはや刺激にならない地点に達したのです。同じ刺激に適応してしまったわけです。
停滞期のよくあるサイン
- 新しいものが一つもないと感じる
- 慣れた仕事が易しくなりすぎた
- 興味が落ちて退屈だ
- 努力に対して変化が見えない
停滞期を破る戦略
1. 弱点を精密に狙う
漠然と全部上手くなろうとせず、最も弱い一つを見つけて
それだけを集中攻略する(自動操縦を断ち切る効果)
2. 制約を追加する
「ライブラリなしで」「一ファイルで」「性能2倍で」のような
人為的な制約は、新しい筋肉を強制的に使わせる
3. 難易度を一段階上げる
より大きなコードベース、より厳しい要求へ移る
4. 教える
人に教えると、自分の理解の穴が赤裸々に現れる
5. 環境を変える
新しいチーム、新しいドメイン、新しい同僚は自動操縦を強制的に切る
停滞期で最も危険な反応は「もっと多く、もっと長く」です。同じ方法で量だけ増やすのは効果がありません。方法を変えなければなりません。
7. 進捗を測定する
「測定されないものは改善されない」という言葉は実力にも当てはまります。ただ、実力は売上のようなきれいな数字ではないので、測定に少しの工夫が必要です。
何を測定するか
- 学習ログ: 毎週「今週新しく知ったこと」3つを記録
- 詰まり時間: 同じ種類の問題で詰まる時間は減っているか
- 再実装の速度: 以前二時間かかったものを今はどれくらいで
- コードレビューのコメント: 受ける指摘の種類が高度へ移っているか
- 説明能力: 一つの概念を詰まらず説明できるか
学習ジャーナルを書く
最も単純で強力な測定の道具は学習ジャーナルです。大げさである必要はありません。
週次学習ジャーナルの様式(5分)
日付:
今週意図的に練習したこと:
新しく知ったこと3つ:
1.
2.
3.
最も大きく詰まった地点:
来週に試す一つ:
数週間分を集めて読み返すと、毎日では見えなかった成長曲線が見えます。ジャーナルは進捗を測定すると同時に、学習したことをもう一度引き出して記憶を強化する効果もあります。
8. 週次ルーティンの設計
良い意図は、ルーティンがなければ蒸発します。「時間ができたら勉強しよう」のその時間は来ません。意図的な練習はカレンダーに場所を確保してこそ生き残ります。
以下は週あたり約5時間を意図的な練習に配分した例です。分量は都合に合わせて調整してください。核心は、毎日少しずつ、そして多様にです。
| 曜日 | 活動 | 時間 | 意図的な練習の要素 |
|---|---|---|---|
| 月 | コードカタ一問 | 30分 | 明確な目標、即座のフィードバック |
| 火 | オープンソースのコードを読む | 45分 | 限界の向こうへの挑戦、集中 |
| 水 | 昨日読んだものを再実装 | 45分 | フィードバック、コンフォートゾーンの外 |
| 木 | コードカタ(別の制約) | 30分 | 制約で停滞期を突破 |
| 金 | 週次学習ジャーナルの整理 | 20分 | 進捗の測定、引き出しの強化 |
| 随時 | 業務中の小さな挑戦 | - | 毎日のラーニングゾーン |
| 事件発生時 | 個人ポストモーテム | 30分 | 失敗からの学習 |
この表をそのまま守る必要はありません。重要なのは二つです。第一に、練習がカレンダーに具体的な時間として刻まれていること。第二に、毎週最低一回はコンフォートゾーンの外へ出る活動が入っていること。
業務中の挑戦を強調したいです。別枠の5時間だけが練習ではありません。日々の業務の中で「もう少し良い方法はないか」をもう一度問うこと、慣れた解法の代わりに一歩難しい解法を試すことが、最も効率的な練習です。仕事と練習を分けず、仕事の中に練習を植えてください。
9. よくある罠
最後に、良い意図を持った人がよく陥る罠を指摘します。これらの罠を避けるだけでも半分は成功です。
罠1: 忙しさを練習と勘違いする
最もよくある、そして最も巧妙な罠です。私たちは忙しいと成長していると感じます。チケットを片づけ、会議に出席し、Slackに答えて一日が埋まります。しかしその大半は自動操縦モードの忙しさにすぎず、意図的な練習ではありません。
忙しさ vs 練習の見分け方
- 終わって新しく学んだことがあるか? なければ忙しさだ。
- わずかでも手強かったか? 楽だったなら忙しさだ。
- 弱点を狙ったか? 強みだけ使ったなら忙しさだ。
忙しいことと育つことは違います。仕事を多くした日と実力が伸びた日は、同じとは限りません。
罠2: 受動的な消費を学習と勘違いする
講義動画を2倍速でまとめ見し、技術記事をブックマークだけ大量にためること。入力は学習の始まりにすぎず、学習そのものではありません。自分で手を動かして出力しなければ、大半は揮発します。講義一時間を見たらコードを二時間書く比率が健康的です。
罠3: 大きすぎる目標で麻痺する
「機械学習をマスターする」のような目標は大きすぎて、最初の一歩すら踏み出しにくくします。目標が大きいほど小さく刻まなければなりません。大きな山は一歩ずつしか登れません。
罠4: フィードバックを回避する
自分が書いたコードを人に見せるのはいつも怖いものです。だからフィードバックが最も必要な人ほどフィードバックを避けます。しかし恥を忍んで受けたフィードバックが、最も速い成長の近道です。フィードバックは攻撃ではなく贈り物です。
罠5: 固定マインドセット
キャロル・ドゥエック(Carol Dweck)の研究は、能力を固定されたものと見る人と、育てられるものと見る人の成長の差を示します。「自分はもともとアルゴリズムが苦手」という言葉は自己成就的予言になります。弱点はまだ練習していない領域にすぎません。「まだ(yet)」という言葉一つを付けることから始まります。「これができない」ではなく「これがまだできない」と。
おわりに: 今日の一歩
最初の二人の先輩・後輩の話に戻ります。十二年目の先輩と三年目の後輩の差は、才能でも時間でもありませんでした。毎日の小さな意識的な努力が複利で積み重なった結果でした。
意図的な練習は大げさな決心ではありません。今日書いたコードをもう一度見直すこと、わからないことをわからないとメモすること、一歩難しい解法を試すこと、その小さな行動の累積です。
そして正直に言えば、これはいつも楽しいわけではありません。意図的な練習は定義上、不快ですから。快適な自動操縦を切り、毎回ラーニングゾーンに自分を置くのはエネルギーが要ります。ですから自分にあまり厳しくしすぎないでください。毎日完璧である必要はありません。ただ止まりさえしなければいいのです。
キャリアの長さではなく、その時間に何をどのようにやったかが、あなたを作ります。明日のあなたは、今日のあなたが選んだ練習の合計です。大げさに始めず、小さく始めてください。今日の一歩で十分です。
参考資料
- Anders Ericsson & Robert Pool, "Peak: Secrets from the New Science of Expertise"
- The Making of an Expert (Harvard Business Review)
- Carol Dweck on Growth Mindset (Stanford Profile)
- Will Larson, Irrational Exuberance (lethain.com)
- StaffEng — Stories and guides for reaching Staff-plus roles
- Martin Fowler — Refactoring
- Google SRE Book — Postmortem Culture
- CodeKata — Dave Thomas
- Codewars — practice coding challenges