認知負荷とは?新人エンジニア向けに「頭がいっぱいになる理由」と学習・開発への活かし方を解説

こんにちは。ゆうせいです。

今回は、新人エンジニアにぜひ知っておいてほしい「認知負荷」について解説します。

認知負荷とは、簡単に言うと「頭の中で情報を処理するときにかかる負担」のことです。

たとえば、こんな経験はありませんか?

説明を聞いているときは分かった気がしたのに、あとで自分でやろうとしたら手が止まる
エラー文、コード、DB、画面、ログを同時に見ていたら混乱する
Gitの操作、ブランチ名、コミット内容、レビュー依頼が一気に出てきて頭がいっぱいになる
AWSの画面で、EC2、VPC、IAM、セキュリティグループという言葉が同時に出てきて疲れる
研修資料を読んでも、知らない用語が多すぎて内容が入ってこない

このような「頭がいっぱいで処理しきれない状態」が、認知負荷の高い状態です。

新人エンジニアは、認知負荷が高くなりやすいです。

なぜなら、プログラミング、データベース、ネットワーク、Git、クラウド、セキュリティ、業務知識など、同時に覚えることが多いからです。

だからこそ、「自分は頭が悪いのでは?」と落ち込む必要はありません。

多くの場合、問題は能力ではなく、頭に入れる情報の量や順番にあります。

認知負荷とは何か

認知負荷とは、人が情報を理解したり、記憶したり、判断したりするときに、作業記憶へかかる負担のことです。

作業記憶とは、頭の中で一時的に情報を置いておく場所です。

英語ではワーキングメモリと呼ばれます。

たとえるなら、作業記憶は机の上です。

机の上が広ければ、ノート、教科書、資料、ペンを置いて作業できます。

しかし、机の上が狭いのに、資料を10冊、ノートを5冊、パソコン、飲み物、工具まで置いたらどうなるでしょうか。

作業しにくくなりますよね。

人間の頭の中も同じです。

一度に扱える情報には限界があります。

コードを見る
エラー文を見る
仕様を思い出す
DB構造を考える
画面遷移を考える
上司の説明を聞く
次に何をするか判断する

これらを同時に処理しようとすると、作業記憶の机がいっぱいになります。

その結果、理解が止まったり、ミスが増えたり、疲れたりします。

新人エンジニアが認知負荷を感じやすい理由

新人エンジニアは、ベテランより認知負荷が高くなりやすいです。

理由は、知識がまだ自動化されていないからです。

たとえば、ベテランは「Controller」「Service」「Repository」という言葉を聞くと、だいたいの役割をすぐに思い出せます。

しかし、新人は1つずつ考えます。

Controllerって何だっけ?
Serviceは何をする場所だっけ?
RepositoryはDAOと同じ?
DTOとEntityは何が違う?
Formはどこで使う?

このように、用語を理解するだけで作業記憶を使います。

その状態で、さらにコードを書こうとすると、頭がいっぱいになります。

項目ベテラン新人
用語理解すぐ分かる毎回思い出す必要がある
エラー対応よくある原因を想像できるエラー文の意味から調べる
コード構造全体像をつかみやすいどこを見ればよいか迷う
作業手順自然に進められる1つずつ確認しながら進める
負荷低くなりやすい高くなりやすい

新人が疲れやすいのは、努力不足ではありません。

まだ多くの情報を意識して処理している段階だからです。

認知負荷の3種類

認知負荷は、大きく3種類に分けて考えると分かりやすいです。

種類意味新人エンジニア向けの例
内在的負荷学ぶ内容そのものの難しさ再帰、非同期処理、VPC、IAM、トランザクション
外在的負荷説明や環境の悪さによって余計に増える負担資料が分かりにくい、手順が飛ぶ、画面と説明が違う
学習関連負荷理解や成長に役立つ負担自分で考える、比較する、整理する、説明する

この3つはとても重要です。

特に、新人研修やOJTでは、「外在的負荷」を減らし、「学習関連負荷」を増やすことが大切です。

内在的負荷とは

内在的負荷とは、学ぶ内容そのものが持っている難しさです。

たとえば、HTMLの見出しタグを学ぶのと、Spring Securityの認証・認可を学ぶのでは、難しさが違います。

Spring Securityのほうが、関係する概念が多いため、内在的負荷が高くなります。

負荷が低めの内容負荷が高めの内容
HTMLの見出し認証・認可
SELECT文JOINとGROUP BYを組み合わせた集計
変数オブジェクト指向設計
画面表示バリデーションと例外処理
S3のファイルアップロードVPC、サブネット、ルートテーブル、IAMロールの組み合わせ

内在的負荷が高い内容は、分解して学ぶ必要があります。

いきなり全部を理解しようとしてはいけません。

たとえば、VPCを学ぶなら、次のように分けます。

VPCとは何か
        ↓
サブネットとは何か
        ↓
ルートテーブルとは何か
        ↓
インターネットゲートウェイとは何か
        ↓
セキュリティグループとは何か
        ↓
全体を組み合わせる

難しい内容は、階段にしろ!

一段ずつ上がれば理解できます。

外在的負荷とは

外在的負荷とは、本来の学習とは関係ない余計な負担です。

たとえば、説明資料が分かりにくい場合です。

専門用語の説明がない
手順が途中で省略されている
画面キャプチャが古い
ファイル名が資料と違う
エラーが出たときの対応が書かれていない

このような状態だと、受講者は本来学ぶべき内容ではなく、資料の読み解きに力を使ってしまいます。

エンジニアの研修で言えば、Spring Bootを学ぶはずなのに、資料の誤字や手順漏れで時間を使う状態です。

外在的負荷が高い状態問題点
資料と画面が違う受講者が不安になる
手順が飛んでいる初心者が再現できない
用語説明がない理解の前に言葉で詰まる
コード例が長すぎるどこを見ればよいか分からない
目的が書かれていないなぜその操作をするのか分からない

外在的負荷は、できるだけ減らすべき負荷です。

初心者向けの資料では、説明の順番、用語、画面、コードの見せ方がとても重要になります。

学習関連負荷とは

学習関連負荷とは、理解や成長につながる良い負荷です。

負荷と聞くと悪いものに感じるかもしれませんが、すべての負荷が悪いわけではありません。

筋トレを思い出してください。

重すぎる負荷はケガにつながります。

しかし、適度な負荷がなければ筋肉は育ちません。

学習も同じです。

ただ答えを写すだけでは、あまり成長しません。

少し考える、比較する、自分の言葉で説明する、エラー原因を推測する。

こうした負荷は、学習に必要です。

良い負荷理由
コードの意味を説明する理解が深まる
似た概念を比較する違いが整理される
エラー原因を予想するデバッグ力が育つ
自分で小さく改造する応用力がつく
人に説明する知識が定着する

研修では、外在的負荷を減らし、学習関連負荷を残すことが理想です。

つまり、「分かりにくさ」は減らし、「考える余地」は残します。

認知負荷が高いと何が起きるか

認知負荷が高すぎると、新人エンジニアには次のようなことが起きます。

状態具体例
理解が止まる説明を聞いても頭に入らない
ミスが増えるファイル名、変数名、手順を間違える
視野が狭くなるエラーの一部分だけ見てしまう
質問できなくなる何が分からないか分からない状態になる
疲れやすくなる短時間でもぐったりする
自信を失う自分は向いていないと思ってしまう

特に怖いのは、「何が分からないか分からない」状態です。

この状態では、質問も難しくなります。

たとえば、Spring Bootのエラーで詰まっているとします。

認知負荷が高すぎると、次のように混乱します。

Controllerが悪いのか
HTMLが悪いのか
Formが悪いのか
入力名が悪いのか
URLが悪いのか
DBが悪いのか
そもそも何を見ればよいのか分からない

この状態になったら、頑張り続けるより、情報を減らすことが先です。

認知負荷を下げるコツ1:一度に学ぶ量を減らす

認知負荷を下げる基本は、一度に扱う情報を減らすことです。

初心者にいきなり全部を見せると混乱します。

たとえば、Webアプリ開発を学ぶときに、最初から次を全部扱うと大変です。

HTML
CSS
JavaScript
Java
Spring Boot
Thymeleaf
SQL
DB接続
バリデーション
セッション
ログイン
例外処理
Git

この量を一度に扱うと、頭の机がいっぱいになります。

そこで分けます。

段階学ぶ内容
1HTMLだけで画面を作る
2Controllerから画面を表示する
3Formで入力値を受け取る
4Serviceで処理を書く
5DBからデータを取得する
6バリデーションを追加する
7ログインやセッションを学ぶ

分けると、1回あたりの認知負荷が下がります。

学習は詰め込みではありません。

順番が大事です。

認知負荷を下げるコツ2:用語を先に整理する

専門用語が多いと、認知負荷は一気に上がります。

新人エンジニアがSpring Bootを学ぶとき、次のような言葉が出てきます。

Controller
Service
Repository
Entity
DTO
Form
Model
Validation
BindingResult
DI
Bean

これらの意味が分からないままコードを見ると、コード以前に言葉で詰まります。

そのため、最初に用語を簡単に整理します。

用語初心者向け説明
Controller画面やURLから来たリクエストを受け取る入口
Service業務処理を書く場所
RepositoryDBとのやり取りを担当する場所
EntityDBのテーブルに近いデータの入れ物
Form画面から入力された値を受け取る入れ物
DTOデータを運ぶための入れ物

用語を先に整理すると、コードを読むときの負担が下がります。

地図を見てから街を歩くようなものです。

地図なしで歩くと迷います。

認知負荷を下げるコツ3:コードを短く見せる

初心者に長いコードを一気に見せると、認知負荷が高くなります。

たとえば、最初からController、Service、Repository、Entity、HTML、SQLを全部見せると、どこに注目すればよいか分かりません。

コードは、学習目的に合わせて短く見せるのがコツです。

悪い見せ方良い見せ方
完成コードを全部見せる今日見る部分だけ切り出す
説明なしで貼る目的、入力、出力を添える
一度に複数ファイルを見せる1ファイルずつ役割を説明する
差分が分からない変更前と変更後を比較する

新人エンジニアがコードを読むときは、次の順番がおすすめです。

このコードは何のためにあるのか
        ↓
どこから呼ばれるのか
        ↓
何を受け取るのか
        ↓
何を返すのか
        ↓
どこを変更すればよいのか

いきなり細部に入らないでください。

まず役割を見ましょう。

認知負荷を下げるコツ4:チェックリストを使う

新人エンジニアは、作業手順を覚えるだけでも負荷がかかります。

そこでチェックリストを使います。

チェックリストは、頭の中で覚える情報を外に出す道具です。

たとえば、Pull Requestを出す前のチェックリストです。

不要なconsole.logやSystem.out.printlnが残っていないか
テストは通っているか
レビューしてほしい点を書いたか
Issue番号を記載したか
不要なファイルをコミットしていないか
画面表示を確認したか

チェックリストがあると、毎回頭の中で思い出す必要がありません。

チェックリストなしチェックリストあり
毎回思い出す必要がある見れば分かる
抜け漏れが起きやすい確認しやすい
不安が残る安心して進めやすい
作業が属人化するチームで標準化できる

覚えるな。外に出せ!

これが認知負荷を下げる基本です。

認知負荷を下げるコツ5:エラー対応を手順化する

エラー対応は、認知負荷が高くなりやすい作業です。

エラーが出ると焦ります。

焦ると視野が狭くなります。

その結果、さらに解決しにくくなります。

だから、エラー対応は手順化しましょう。

1. エラーメッセージを読む
2. 最初に出ているエラーを確認する
3. ファイル名と行番号を見る
4. 直前に変更した箇所を確認する
5. 入力値やURLを確認する
6. ログを確認する
7. 分からなければ、試したことを整理して質問する

手順があると、頭が真っ白になりにくくなります。

悪い対応良い対応
とにかくコードをいじるエラー文を読む
全部を疑う直前の変更から見る
何となく検索するエラー文の重要部分で検索する
質問で「動きません」と言う状況、エラー、試したことを伝える

エラー対応では、考える前に整理です。

整理すれば、認知負荷が下がります。

認知負荷を下げる質問の仕方

新人エンジニアは、質問の仕方にも認知負荷が関係します。

頭がいっぱいの状態では、質問もぼんやりします。

動きません
分かりません
エラーが出ました
何が悪いですか?

この質問だと、先輩も状況を把握するために多くの情報を聞き返す必要があります。

質問するときは、次の型を使うとよいです。

やりたいこと:
ログイン画面で未入力時にエラーメッセージを表示したいです。

起きていること:
送信すると400エラーになります。

見たエラー:
Required request parameter 'email' is not present

試したこと:
HTMLのinput nameを確認しました。
Controllerの引数名も確認しました。

見てほしいこと:
HTMLのname属性とControllerの受け取り方が合っているか確認していただきたいです。

このように整理すると、自分の頭も整理されます。

質問は、相手のためだけではありません。

自分の認知負荷を下げるためにも役立ちます。

認知負荷とUI/UX設計

認知負荷は、ユーザー向けの画面設計にも関係します。

UIとは、User Interfaceの略で、画面やボタンなど、ユーザーが操作する部分です。

UXとは、User Experienceの略で、ユーザーがサービスを使う中で得る体験全体のことです。

認知負荷が高い画面は、ユーザーを疲れさせます。

認知負荷が高い画面認知負荷が低い画面
ボタンの意味が分からないボタン名が具体的
入力項目が多すぎる必要な項目だけ表示する
エラー文が抽象的どこを直せばよいか分かる
次に何をすればよいか分からない次の行動が明確
情報が詰め込まれている見出しや余白で整理されている

たとえば、エラーメッセージを比べてみましょう。

入力エラーです。

このメッセージは、ユーザーにとって不親切です。

どこを直せばよいか分からないからです。

改善例です。

メールアドレスを入力してください。

こちらのほうが、ユーザーの認知負荷が下がります。

新人エンジニアが画面を作るときは、「ユーザーが考えなくても次に進めるか」を意識してください。

認知負荷とドキュメント作成

ドキュメントも、認知負荷に大きく影響します。

良いドキュメントは、読む人の負担を減らします。

悪いドキュメントは、読む人の頭を疲れさせます。

悪いドキュメント良いドキュメント
目的が分からない最初に目的が書いてある
前提条件がない必要な環境や権限が書いてある
手順が長文だけ番号付きで手順が整理されている
エラー時の対応がないよくあるエラーと対処がある
完了条件がない最後に確認方法が書いてある

手順書を書くときは、次の順番がおすすめです。

目的
前提条件
作業手順
確認方法
よくあるエラー
片付け・注意点

この型にすると、読み手の認知負荷が下がります。

認知負荷とコードの読みやすさ

コードにも認知負荷があります。

読みにくいコードは、読む人の頭に余計な負担をかけます。

読みやすいコードは、認知負荷を下げます。

認知負荷が高いコード認知負荷が低いコード
変数名が意味不明変数名から役割が分かる
1つのメソッドが長すぎる処理が小さく分かれている
条件分岐が深すぎる早期returnなどで読みやすい
責務が混ざっているController、Serviceなど役割が分かれている
コメントがない、または多すぎる必要な意図だけコメントされている

新人エンジニアは、コードを書くときに「未来の自分が読んで分かるか」を考えてください。

未来の自分は、今日の自分ほど文脈を覚えていません。

読みやすいコードは、未来の自分への親切です。

認知負荷とチーム開発

チーム開発では、認知負荷を下げる仕組みが重要です。

チーム全体で情報が散らばっていると、メンバーは毎回探す必要があります。

仕様はどこ?
環境構築手順はどこ?
DB定義はどこ?
API仕様はどこ?
レビュー観点は何?
リリース手順は誰が知っている?

この状態では、作業そのものより、探すことに時間を使います。

チームで認知負荷を下げるには、情報の置き場所を決めます。

情報置き場所の例
タスクIssue、Backlog、Jiraなど
仕様設計書、Wiki、README
環境構築README、セットアップ手順書
レビュー観点Pull Requestテンプレート
決定事項議事録、ADR
運用手順Runbook、運用手順書

情報の置き場所を決めるだけで、チームの認知負荷は大きく下がります。

探す時間を減らせ!

認知負荷のメリット

認知負荷は悪いものだけではありません。

適度な認知負荷は、成長に必要です。

メリット説明
理解が深まる少し考えることで知識が定着する
応用力がつく自分で試行錯誤すると対応力が育つ
記憶に残りやすい苦労して解いた内容は忘れにくい
問題解決力が育つエラー原因を考える力がつく
説明力が上がる自分の言葉で整理すると理解が深まる

大切なのは、負荷をゼロにすることではありません。

余計な負荷を減らし、成長につながる負荷を残すことです。

認知負荷のデメリット

認知負荷が高すぎると、デメリットが目立ちます。

デメリット説明
理解が止まる情報量が多すぎて処理できなくなる
ミスが増える注意力が分散する
疲労が強くなる短時間でもぐったりする
学習意欲が下がる自分には無理だと感じやすい
質問しづらくなる何を聞けばよいか分からなくなる

認知負荷が高すぎるときは、努力で押し切るより、情報を減らしてください。

資料を分ける。

タスクを小さくする。

用語を整理する。

チェックリストを使う。

それだけで、かなり楽になります。

新人エンジニアが明日から使える実践法

明日から使える方法をまとめます。

実践法やり方
今日のタスクを3つに絞るやることを増やしすぎない
分からない用語を書く用語リストを作って1つずつ調べる
作業手順をメモする頭で覚えず、外に出す
エラー対応を型にするエラー文、行番号、直前の変更を確認する
質問をテンプレート化するやりたいこと、起きていること、試したことを書く
休憩を入れる頭がいっぱいになったら一度離れる

特におすすめなのは、作業前に次のメモを書くことです。

今からやること:
ログイン画面の未入力エラーを表示する

見るファイル:
login.html
LoginController.java
LoginForm.java

完了条件:
メールアドレス未入力で送信したとき、画面にエラー文が表示される

詰まったら見るもの:
エラーメッセージ
inputのname属性
Controllerの引数
BindingResultの位置

このメモがあると、頭の中で保持する情報が減ります。

認知負荷を下げるには、頭の外に情報を出すことが大切です。

まとめ

認知負荷とは、情報を理解したり、判断したり、作業したりするときに、頭の中へかかる負担のことです。

新人エンジニアは、知らない用語、初めて見るコード、慣れないツール、複雑な手順が同時に出てくるため、認知負荷が高くなりやすいです。

項目内容
認知負荷頭の中で情報を処理するときの負担
内在的負荷学習内容そのものの難しさ
外在的負荷資料や環境の分かりにくさによる余計な負担
学習関連負荷理解や成長につながる良い負担
対策情報を減らす、分ける、外に出す、手順化する

一言でまとめるなら、認知負荷は「頭の机の上にどれだけ情報を置いているか」です。

机の上が散らかると、作業しにくくなります。

だから、タスクを分ける、用語を整理する、チェックリストを使う、手順をメモする、質問を型にする。

このようにして、頭の机を片付けましょう。

情報を減らす
        ↓
順番に並べる
        ↓
外に書き出す
        ↓
小さく確認する
        ↓
理解が進む
        ↓
次の少し難しい課題へ進む

今後の学習では、認知負荷に加えて、フロー理論、ゴール勾配効果、ツァイガルニク効果、オヴシアンキーナ効果、タスク管理、ドキュメント設計、UI/UX心理学を順番に学ぶとよいです。まずは明日の作業で、「今日やること」「見るファイル」「完了条件」を3行で書き出すところから始めてみましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。