認知的過負荷を回避して生産性を向上させる

# 目次
1. 背景
2. 長期記憶、短期記憶、ワーキングメモリとは
3. 認知的負荷とは
    3.1 定義
    3.2 3つのタイプ
4. 認知的過負荷とは
5. 認知的過負荷を引き起こす要因
6. 認知的過負荷を回避する方策 
    6.1 課題内在性負荷
    6.2 課題外在性負荷
7. 最後に
8. 参考

# 1. 背景
https://anotherworks.connpass.com/event/294517/

- こちらのイベントで[認知的負荷](https://www.npmjs.com/package/dependency-cruiser?activeTab=readme)という言葉を聞いて気になったからです。

以下の記事をまとめながら理解を深めたいと思います。
[情報過多にご用心！生産性の低下を招く「認知的過負荷」への対処法 ── 海の向こうからオピニオン その70](https://atlassian-teambook.jp/_ct/17574839)

# 2. 長期記憶、短期記憶、ワーキングメモリとは
### 長期記憶
- 膨大な情報を保存できる、非常に長い期間覚えていられる記憶のことです。
- 期間は数時間から数日、あるいは数年です。

### 短期記憶
- 一定の短い時間だけ、一定の範囲の情報を保存する記憶のことです。
- 期間は数分から数時間です。

### ワーキングメモリ
- 何か作業を行う際に必要な記憶のことです。
- この記憶をもとに思考したり、展開することで次の作業が進んでいきます。

# 3. 認知的負荷とは

## 3.1 定義
- 脳のワーキングメモリが常に処理している「情報量」を指します。
- 英語ではcognitive-loadと言います。

脳のワーキングメモリは有限で、それを使い果たしてしまうと新しい知識の定着（学習）やタスクの完了が困難になります。
インプットされる情報の量や種類が人の学習能力に影響を与えそうな場合には、認知負荷理論を活用するのが適切とされています。

## 3.2 3つのタイプ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/255bf1d2-6e40-007b-7fd6-f54bf88c5478.png)
[引用](https://mcdreeamiemusings.com/blog/2019/10/15/the-good-the-bad-and-the-can-be-ugly-the-three-parts-of-cognitive-load)

- 課題内在性負荷（Intrinsic Cognitive Load）
    情報の内容を理解する困難さがもたらす負荷です。

- 課題外在性負荷（Extraneous Cognitive Load）
    気を散らせる情報や事象といった外的要因によって引き起こされる認知の負荷です。

- 学習関連負荷（Germane Cognitive Load）
    - 「適切」な認知負荷で、ここにかける割合を高めるのが理想です。
    - 脳がスキーム（世界を理解するための枠組み）を構築しているときに発生する負荷です。
    - 同様の状況に直面した際に何をすべきかが適切に判断できるようになリます。
    - スキームの構築・蓄積により前の2つの負荷を軽減することにも繋がります。

3つのタイプをエンジニアの開発業務で当てはめると以下です。

- 課題内在性負荷
    - タスク自体の難易度や複雑さ
        - 複雑なプログラミングタスク
        - 未知のバグや問題の解決
        - 大規模なコードベースの管理・改修
        - 新しい技術の習得

- 課題外在性負荷
    - 不十分なドキュメント（例：githubのreadme）
    - コメントが陳腐化
    - コードの書き方が揃っていない
    - Pythonの書き方が分からない
    - コードが複雑で理解しづらい、デグレが起きないか不安になる
    - 不適切なツールやソフトウェアを開発に使う
    - コミュニケーション（明確でない指示や、適切なフィードバックが得られない）
    - chatで自分に関係ない内容で通知が来る
    - chatで済むやり取りを直接話しかけに言って、相手の作業を止めてしまう

- 学習関連負荷
    - 新しい技術の習得
    - プロジェクトの知識
    - 新しいプロセスやツールの採用
    - ベストプラクティスの追求
    - セキュリティ関連の知識
    - 公式ドキュメントを読む

# 4. 認知的過負荷とは
- 課題内在性負荷と課題外在性負荷が人の認知能力を超えた場合に引き起こされる負荷です。

# 5. 認知的過負荷の要因
- 多様な情報、タスクを一挙に処理しようとする
- マルチタスクによるコンテキストスイッチ（あるプロジェクトにおけるタスクを中断し、別のプロジェクトで別のタスクを実行した後に、元のタスクを再開するプロセス）」

# 6. 認知的過負荷を回避する方策
## 6.1 課題内在性負荷
- タスクを細分化し、計画を立てる
- 社内の技術を蓄積させる
- 大規模な改修の進め方のノウハウを蓄積させる
- タスクの振り返りをチームで共有することで他の人が直面した課題や解決策を知る

## 6.2 課題外在性負荷
- チームでドキュメントを整理する
- コードの可読性を挙げた上でコメントはコードで説明できない実装した背景、ドメイン知識等を記述する
- コーディングルールを決める
- 他のチームのプルリクを見る（急にアサインされるかもしれない）
- コードをリファクタリングする
- ツールやソフトウェアの選定理由が妥当か常に検討し、良いものがあれば変更する
- 認識のすり合わせをしてタスクを進める
- chatでは自分に関係ない内容のチャンネルの通知はミュートにする
- chatでは関係ある人のみやり取りする（最低限の人にメンション、その後はスレッドで継続してやり取りする）
- すぐに返答を求めないならchatでコミュニケーションを取る
- 自分のパフォーマンスが上がる時間帯を把握し、仕事の時間に合わせる
- 似たようなタスクを一緒に片付ける（コンテキストのスイッチングを最小限に抑える）
- Webブラウザで開くタブの個数に制限をかける（[拡張機能](https://chrome.google.com/webstore/detail/xtab/amddgdnlkmohapieeekfknakgdnpbleb/related?hl=ja))


# 7. 最後に
- 認知負荷のうち学習関連負荷の割合を高めることで生産向上に繋がるということが分かりました。
- チームで一体となって課題内在性負荷、課題外在性負荷を軽減する必要があると思いました。

# 8. 参考
- [情報過多にご用心！生産性の低下を招く「認知的過負荷」への対処法 ── 海の向こうからオピニオン その70](https://atlassian-teambook.jp/_ct/17574839)
- [The Good, The Bad and The (Can Be) Ugly: The Three Parts of Cognitive Load](https://mcdreeamiemusings.com/blog/2019/10/15/the-good-the-bad-and-the-can-be-ugly-the-three-parts-of-cognitive-load)
- [Cognitive Load and Coding](https://computethought.blog/2020/05/18/cognitive-load-and-coding/)
- [ワーキングメモリとは？鍛えることができる？長期・短期記憶との違いや発達障害との関係などをご紹介！【専門家監修】](https://h-navi.jp/column/article/35026645)

# 参考になる記事を書いてくださった皆様に感謝致します！

本記事を読んで頂き、ありがとうございました。
いいねいただけると記事執筆の励みになりますので、参考になったと思われた方は是非よろしくお願い致します🙏