📚

認知負荷および認知負荷理論 (Cognitive Load Theory) をもう少し正確に理解するための心理学研究・知見の紹介

2023/10/27に公開

この記事の目的

ここ数年で、ソフトウェア開発やプログラミングの文脈で、「認知負荷」 および 「認知負荷理論」 という用語をよく見聞きするようになりました。私が今思い出せるだけでも、以下のような書籍や Podcast で重要なキーワードとして取り上げられています。

この「認知負荷」ですが、少なくとも近年見聞きするような「人間の有限の認知資源を圧迫する負荷」の意味で用いられ始めたのは、教育心理学の分野においてでした。そして、この概念を有効な教授・学習デザインの設計に活かす「認知負荷理論」も同様で、この概念および理論を用いた正式な研究の嚆矢は、Cognitive Load Theory の提唱者である Sweller の論文、1988年の "Cognitive Science" 第12巻、"Cognitive load during problem solving: Effects on learning." と言われています[1]。そこから、認知負荷理論の研究は教育心理学、認知心理学、教育工学、神経科学などの知見を吸収しながら広がり、専門の書籍も複数出版されるほどになっています。

このように、近年分野を超えて注目されている「認知負荷理論」ですが、オリジナルの概念を深掘りしようとすると、認知・教育心理学、認知科学、教育工学の論文や書籍にあたる必要が出てきます。そして、それらはほとんどが英語文献です。
残念ながら、徐々に増えてきてはいるものの、日本国内で認知負荷理論についてまとまった文献はまだあまりない印象です[2]。また、誤りがあったり、表層的なものも存在し得ますが、オリジナルが英語かつ日本語文献が少ないので、そうした記事があったとしても区別することも通常よりは難しい状況です[3]。国内での文献が少ない点については、上記のような話題になっている書籍の原著が、全て海外で出版されたものであることからもわかります。
この状況で、国内の IT関係者[4] で関心を持った方が、より正確な理解を求めてオリジナルにあたることはコストが高いと考えています[5]

筆者は学生時代に認知・教育心理学を専攻しており、卒業論文・修士論文で認知負荷理論に基づいた研究を行っていたので、古い知識ではあるのですが、IT業界では相対的にですが知見は持っている方であると思います。
そこで、せっかく自分が過去に研究したものが、自分が今身を置いている分野で関心を持たれているので、日本語でアクセス可能な情報をある程度まとめておこうと考え、この記事を書きました。

この記事が、認知負荷理論に関心を持った方、それを何らかの取り組みに活かそうとしている方などの一助になれば幸いです。

認知負荷理論について

前置きが長くなりましたが、認知負荷理論について紹介します。
なお、本記事の情報の多くは筆者が研究していた当時、およそ 2015年までのものに基づくものであることはご留意ください。

認知負荷理論の概要

認知負荷理論は、一言で言えば 「人間の認知機能の構造と限界に注目して、効果的な学習デザインを考案するための理論」 と言えます。すでに触れたように、その理論を用いた研究の初出は 1988年までに遡り、オーストラリアの教育心理学者である John Sweller によって提唱されました。

Sweller もその内の一部を執筆している、Cognitive Load Theory の名を冠した 2010年出版の書籍[6] のイントロダクション冒頭では、以下のように説明されています。

The objective of CLT is to predict learning outcomes by taking into consideration the capabilities and limitations of the human cognitive architecture. The theory can be applied to a broad range of learning environments because it links the design characteristics of learning materials to principles of human information processing. CLT is guided by the idea that the design of effective learnings has to be based on our knowledge about how the human mind works. Starting from the premise, different processes of knowledge acquisition and understanding are described in terms of their demands on the human cognitive system, which is seen as an active, limited-capacity information processing system. Taking into account the demands on cognitive resources induced by the complexity of the information to be learned, the way in which the instruction is presented to the learner, and the learner's prior experience and knowledge, CLT aims to predict what makes learning successful and how learning can be effectively supported by teaching and instruction. (p.1)

和訳も置いておきます (筆者訳)。

認知負荷理論の目的は、人間の認知アーキテクチャの能力と限界を考慮することによって、学習成果を予測することである。この理論は、学習教材の設計の特徴を人間の情報処理原理と結びつけるため、幅広い学習環境に適用することができる。認知負荷理論は、「効果的な学習のデザインは、人間の知性がどのように働くかについての知見に基づかなければならない」という考えに導かれている。この前提から出発して、知識の獲得と理解の様々なプロセスが、能動的で容量の限られた情報処理システムとみなされる人間の認知システムへの要求という観点から説明される。学習すべき情報の複雑さ、学習者への指示の提示方法、学習者の既有の経験や知識によって引き起こされる認知資源への要求を考慮し、認知負荷理論は、何が学習を成功させるのか、そしてどのように学習が教授や指導によって効果的にサポートされるのかを予測することを目的としている。

このように、認知負荷理論は「人間の認知アーキテクチャの能力と限界」を出発点とした、効果的な学習デザインを考案するための理論です。ソフトウェア開発やプログラミングも、「複雑性との戦い」という表現をされることがあると思いますが、この「複雑性」も「人間の認知アーキテクチャの能力と限界」があるからこそ発生し、増減するものだと考えられます。
認知負荷理論は複雑性との戦いにおいて、有効な道具となり得ると考えられ、注目が集まっているように思われます。

では、概要を見たところで、次に認知負荷理論のベースとなる「人間の認知アーキテクチャの能力と限界」について見ていきます。

認知負荷理論の基盤: 人間の認知アーキテクチャの能力と限界

認知負荷理論の出発点となった「人間の認知アーキテクチャの能力と限界」は、具体的には何を指しているのでしょうか。これは、すでにご存知の方も多いかもしれませんが、主に「ワーキングメモリ (Working Memory)」[7] と、その限界を指しています。

では、その「ワーキングメモリ」が何かを知るために、認知心理学における記憶のモデルの変遷を簡単に見ていきます。

なお、一口に「記憶」と言っても、切り口によって様々な種類が存在します[8]。ここでは、認知負荷理論を考える上で主に必要なもののみを紹介します。

記憶のモデルの歴史

Modal Model: 短期記憶と長期記憶

心理学が科学として成立して以降の、初期の記憶のモデルで最も有名なものは Atkinson & Shiffrin (1968)[9] の modal model です。これは、耳にしたことがある方も多いと思いますが、「短期記憶 (Short Term Memory: STM)」と「長期記憶 (Long Term Memory: LTM)」を区別した、二重貯蔵理論と呼ばれるものです[10]

このモデルでは、インプットはまず感覚記憶を経て STM に入り、そこでリハーサル (繰り返し input を反芻すること) などを十分経たものが LTM に転送され、後から想起可能なものとして貯蔵される、としています。Zenn を読んでいるような方なら、メモリ (RAM) とストレージのアナロジーで理解しやすいのではないでしょうか。STM も RAM のように揮発してしまうので、意識的に LTM へ転送しない限り忘れてしまいます。また、LTM に比べかなり容量が限られています。

もはや想像がつかない方もいそうですが、よく例として挙げられていたのが、電話をかけるときに電話番号を保持しているが、かけた後は忘れている、というものです。電話番号は STM にのみ保持されていましたが、LTM に転送するために十分なリハーサルを行わなかったので、電話をかけた後は揮発して忘れてしまった、ということになります。

このモデルは、直感的にわかりやすいものだと思います。

ワーキングメモリの登場

このように明快でわかりやすい modal model でしたが、このシンプルなモデルでは説明がつきづらい事象がいくつか報告されてきました。

代表的なものの一つは、「単純なリハーサルで STM に情報を一定期間保持するだけで学習が保証されるのか?」という疑問です。Craik & Lockheart (1972)[11] は、情報の保持期間よりも、情報の処理方法がより重要だとする、処理水準の原理を提起しました。すなわち、「形態処理、音韻処理、意味処理の順に水準が深くなり、深い水準の処理を行うほど記憶成績が良くなる」ことを実験で確かめています。

二つ目は、いくつかの神経心理学の知見を説明できない、というものでした。Shallice & Warrington (1970) の研究[12] では、事故や病気などにより STM に障害を持った患者でも、長期記憶への転送は健常者と変わらないことなどが報告されました。
modal model によれば、STM に一定期間インプットを保持することが LTM への転送条件でしたが、STM に障害を持つ = 短期間の情報保持が困難な人でも LTM への転送が健常者と変わりないことは、このモデルの限界を示唆する好例と言えます。

こうした知見の積み重ねから、Baddeley & Hitch (1974)[13] は STM に取って代わる、ワーキングメモリのモデルを提唱しました。ワーキングメモリは情報の保持に加え、情報の処理 を行う場としての役割が強調されています。

ワーキングメモリの役割を説明する際に、よく「繰り上がりを含む掛け算」や、「代名詞を含む文章の処理」が挙げられます。前者では繰り上がった数を保持しつつ、同時に次の桁の計算を行わなければなりません。後者では、代名詞が指すものを保持しながら文章を読み進める必要があります。
このように、ワーキングメモリは情報の保持と同時的に行われる、積極的な処理に焦点を当てた概念 となっています。

また、LTM との対比から、ワーキングメモリの容量と役割について説明されることもあります。
よく聞く例だと思いますが、LTM とワーキングメモリの関係は、図書館の蔵書と作業机に喩えられます。図書館には参照しきれないほどの蔵書が蓄えられていますが、その中で一度に机に広げられる本はせいぜい数冊という限界があります。
ワーキングメモリは制限のある作業机のように、膨大な知識の貯蔵庫から限られた量の情報を引き出し、広げ、作業する場であると言われます。

modal model の説明で RAM とストレージの喩えを使いましたが、ワーキングメモリでもこの喩えは有効です。RAM 上では様々な処理が行われ、ストレージへの I/O が発生しますが、それと同様ワーキングメモリでも情報の処理が行われ、LTM への I/O が発生します。modal model の時には強調されていなかった、「情報の処理」という点が重要となります。

なお、このような作業場としての特徴から、ワーキングメモリは 「意識」 と表現されることがあります。これは重要な表現であり、後ほど言及しますが、習熟して「無意識的」に行えるようになった処理は、ワーキングメモリの容量を圧迫することなく行えるもの となります。

ワーキングメモリのモデル

ワーキングメモリは複数のコンポーネントから構成されると仮定されており、少なくとも 2015年時点では以下のようなモデルが想定されていました。簡単に調べましたが、構成自体は今も変わっていなさそうです。ワーキングメモリの構成は理解が少し難しく、(2015年当時時点で) 曖昧な部分もあり、かつこれを正確に理解することは認知負荷理論の概要を理解する上ではそこまで重要ではないので、ここでは深入りはしません。
気になった方は画像検索などすれば、モデルを図示したものを多く見つけられると思います。

ワーキングメモリのコンポーネント一覧:

  • 視空間スケッチパッド (visuo-spatial sketchpad): 視空間的情報を保持・処理する
  • 音韻ループ (phonological loop): 音韻的情報を保持・処理する
  • 中央実行系 (central executive): 上記のようなコンポーネントを制御[14]
  • エピソードバッファ (episodic buffer): LTM とのインターフェースであり、LTM や視空間スケッチパッド・音韻ループなどから取り出された情報が統合されるバッファ

認知負荷理論の理論的説明とそこから導き出された効果

ここまで背景や基盤について説明してきましたが、ようやく本丸である認知負荷理論の説明に入ることができます。

すでに述べたように、認知負荷理論は 「人間の認知機能の構造と限界に注目して、効果的な学習デザインを考案するための理論」 です。名が表すように、主な関心は、「認知活動中に生じ、有限のワーキングメモリを圧迫する認知負荷」であり、この負荷をいかに操作し、学習者に知識体系 (スキーマ) の構築とその利用の習熟を促すかを論じています。

また新しい用語、スキーマが出てきました。度々すみませんが、重要な用語なので一節を割いて説明します。

スキーマ: 学習や経験により獲得される知識体系

スキーマという用語は非常に多義的です。分野や研究者によって定義が異なっていたりするので、共通の定義を用いることは困難です。そのため、ここでの説明も人 (専門家) によっては違和感を感じるものもあるかもしれません。
ここでは、認知心理学、教育心理学などにおける一定義である、「関連づけられた知識や概念、手続きのネットワーク」[16] を用います。
記憶にも複数のモデルが存在しましたが、知識体系をスキーマとして表現するものも一つのモデルに過ぎません。しかし、学習を説明する上で非常に便利な概念です。

もう少しイメージできるように、別の表現をしてみます。あるトピックに関連する個々の知識が node であり、それら node のつながりが link です。この node と link の集合がスキーマです。いわゆる「連想」は、ある node が想起されて活性化され、その活性が link で繋がっている別の node に伝播することで起きる、とする理論[17] などもあります。

スキーマの概念を説明する、有名な実験を紹介します。
Chase & Simon (1973) の研究[18] では、チェスのプロと初心者にチェスの盤面の記憶をしてもらい、その成績を比較しました。すると、現実にあり得る盤面の記憶成績はプロが勝っていたのに対し、ランダムな盤面の記憶成績は、プロと初心者で差がない、という結果が得られました。

単純にプロは初心者よりも記憶力が大きい、と説明するならば、ランダムな盤面の記憶課題も成績に差が出るべきです。しかし実際には、現実にあり得る盤面だけで記憶成績に差が見られました。この結果は、「プロは現実での膨大なチェスの知識と経験により、チェスに関する豊かなスキーマが構築されている。すなわち、現実にあり得る盤面では、その盤面に至るまでの経過や、そこに至った理由、その時に自分だったらどのような手を打つか、などを自身の知識や経験から構築されたスキーマに紐づけることができ、記憶できた。ランダムな盤面では、現実に起こり得ない = 自身のスキーマとの紐付けができなかったため、記憶成績も初心者と変わりなかった」と説明できます。

なお、正確性のために述べますが、この研究ではこの結果に対し、スキーマを用いた説明はされていません。代わりに、チャンキング (chunking) によるものとして説明しています。
チャンキングとは、ひとまとまりの知識を一単位にしてしまうことでを指します。極端な例を挙げれば、e、d、u、c、a、t、i、o、n という 9つの文字を覚える時に、英単語も、さらにはアルファベットの発音すらも知らない人だと苦労するでしょう。しかし、これが教育を意味する education という単語と知っている人には、education に加えて多数の情報を記憶する余裕があるはずです。これが、9単位となるはずだった文字を 1単位にまとめて負荷を下げたという、チャンキングの例です。
このチャンキングがより複雑、精緻なレベルで達成されたものが、スキーマと言えます。

このようなスキーマの概念は様々な場面で当てはめることができます。例えばプロのイラストレーターと初心者が同じイラストを見たとき、プロのミュージシャンと初心者が同じ曲を聴いた時、プロのスポーツ選手と初心者が同じ試合を見た時、そして熟練の開発者と初心者が同じコードを見た時、それぞれスキーマが豊かな前者と後者で、得られる情報量は大きく異なるでしょう。

このような、豊かなスキーマを獲得することが学習の目標であると言われることもあり、認知負荷理論でも「スキーマの獲得とその利用の習熟を促す」ことも目標としています

少し脇道に逸れますが、ChatGPT などの生成 AI の登場で「プログラマー不要論」がまた取り上げられることも増えてきています。しかし、ChatGPT などの生成 AI とのインターフェースになってばかりのプログラマーと、それを活用しつつも従来のような学習を続けて、自分の LTM に豊かなスキーマを構築できている人とでは、様々な面で当然開きが出ると考えられます。ですので、自戒を込めてですが、便利な生成 AI も活用しつつ、従来型の学習も頑張っていきたいですね。

認知負荷の定義: 定義の発展と三種の分類

認知負荷理論自体の説明に戻ります。

理論の主な関心である認知負荷ですが、研究が進むにつれて、学習する上で必然的に生じるものや、理解には寄与しない、周辺的な原因で生じるものなどの区別の必要性が考えられ、2015年時点では以下の 3種類に分類されていました。

  1. intrinsic[19] cognitive load (課題内在的負荷): 学習対象そのものの複雑さ = 要素の困難度により生じる負荷 (研究では element interactivity の数に依存すると言われる)
  2. extraneous[20] cognitive load (irrelevant load、課題外在的負荷): 学習に無関係な外的な負荷
  3. germane[21] cognitive load (relevant load、学習関連負荷): 理解など学習目標の達成のための認知活動により生じる負荷

なお、近年は () 内に記載したような訳語が当てられているようですが、私が知っている頃は定訳がなかったので、すみませんが本記事では慣れない表記を使わずにオリジナルの英名で表記します。

歴史的に登場した順番に、それぞれの負荷について見ていきます。

extraneous cognitive load

まず初めに登場したのは、extraneous load です。

初期段階では、認知負荷は一種類のみ想定されており、「教授デザインにより生じる (学習に) 不必要な認知要求」 を減らすことに焦点を当てていました。この認知負荷は、現在は extraneous cognitive load と呼ばれる、学習に無関係な、完全に余計な負荷 です。

具体例としては、極端な例ですが、説明文中で「B を参照せよ」とあるが、 B がどこに書かれているかを明示していない場合などが相当します。説明文の理解に認知資源を割きたいのに、情報を保持しながら参照先を探す、という不要な処理が必要になってしまっており、これは学習とは直接関係のない余分な負荷と言われます。このケースだと、B があるページ・行を明示するなどで、0 にはできないまでも負荷を減らすことができます。

このように、extraneous load は極力減らすべき認知負荷であり、かつ比較的容易に外部からの操作が可能な負荷です。このため、初期の認知負荷理論の研究では、この extraneous load をいかに減らすか に焦点を当てていました。

intrinsic cognitive load

次に、intrinsic load です。

そもそも学習者が取り組んでいる内容自体の複雑さによっても、認知負荷が増減することが取り上げられてきました。私たちが何かを学習する際に、その対象自体の複雑さによって学習可能性が変わることは、納得しやすいものと思います。

単純な例としては、例えば英単語や元素記号の学習は intrinsic load が小さく、v = gt などの物理公式の学習は大きいとされます。これは、vg t が何を表すかを理解した上で、その数値がどれに対応するか、を同時に処理しなければならないため、学習者が同時に保持・処理しなければならない要素の数および要素感の関係 = element interactivity が増えるため、と説明されます。

この intrinsic load は、学習内容に 固有 の負荷であるため、原則的には増減しません。しかし、私たちは現実に、自身の経験や知識の量に応じて、同じ内容であっても学習可能性が変わる ことを実感しています。この現象を説明するものが、認知負荷理論が目標の一つとする、「スキーマの獲得と利用の自動化」 によって達成されるものです。

例えば、自動車の運転を考えてみます。初めのうちは一つ一つの操作手順を考え、「意識」的に行っていたでしょう。しかし、十分に慣れた頃には、半ば「無意識」的に、苦もなく、時には同乗者と無駄話などしながら運転ができるようになっているはずです。これは、複数の関連する操作をまとめ (チャンキング、スキーマ化)、そしてそれらの処理を自動化した結果と説明できます。

コードの読み書きでも、コードの複雑さ「そのもの」は誰が見ても変わりません。ただし、熟練の開発者が読み書きすると、例えば言語の文法や利用されているライブラリの仕様を知っている (LTM にある) ので、いちいちドキュメントなどを調べることなく即時に理解に移れるでしょう。また、あるデザインパターンに従って書かれたコードがあるとき、そのデザインパターンを熟知している人なら、そうでない人より素早くコードの理解ができるでしょう。

このように、intrinsic load は学習内容の複雑さだけではなく、学習者の既有知識や習熟の程度によって増減するもの です。ただし、extraneous load と違って、intrinsic load に対しては 外部から直接・即時に操作することはできない ものです。

germane cognitive load

最後に、germane load です。

extraneous load も intrinsic load も、学習に寄与することのないできるだけ減らしたい負荷でしたが、germane load は 学習が進行する際に発生する、生産的な意味を持つ負荷 です。
Clark ら (2006)[22] は germane load について、学習時に「複数の類似した問題に取り組む」場合と、「複数の変化に富んだ問題に取り組む」場合とを比較して説明しています。これまでの説明からは、前者の方が望ましいと考えられます。なぜならば、変化の少ない類題 (このような問題を近転移問題と言います) に取り組む方が、複雑度も小さく、また新たに問題設定の把握などにワーキングメモリを割く必要もないからです。一方、変化に富む応用問題のようなもの (このような問題を遠転移問題と言います) だと、以前に解いた問題と異なった観点や知識の組み合わせなどが必要となり、複雑度も大きくなってしまいます。

しかし、我々が経験的に知っているように、intrinsic load、extraneous load をできるだけ小さくする、という原則のみに従ったような近転移問題ばかりを解いていても、豊かなスキーマは構築されません。後者の応用問題のように、スキーマ構築という観点から、より良い学習の達成に寄与し得る認知負荷が、germane load と呼ばれるもの です。

三種の負荷の関係

なお、これらの三種の認知負荷は、ワーキングメモリ内で加算的であることが仮定されています (additivity hypothesis)。したがって、上述した三種の負荷の特徴から考えると、

  1. 問題の複雑さによって生じ、学習者の既有知識や自動化の程度によって減少し得る intrinsic load が存在
  2. 教授デザイン (学習内容の提示方法など) や周辺的な要因によって生じる extraneous load が加算される
  3. ワーキングメモリから 1 + 2 を引いて残された容量が、germane load に割り当てられる理論上の最大値

となります。
ただしすでに見たように、germane load は残されたワーキングメモリの容量を自動で埋めるように発生する負荷ではなく、動機づけ (モチベーション) なども含めた、学習者の要因によって変動するものです。したがって、ワーキングメモリの容量が残っていることはスキーマ獲得・自動化の必要条件ではあっても十分条件ではなく、学習者が積極的にその資源を germane load に割り当てなければ、学習は達成されません。

以上をまとめると、認知負荷理論の基本的な関心は、いかに extraneous load を減らすデザインを工夫し、そしていかに germane load を喚起するようなデザインを行うか、という点にあると言えます。

認知負荷理論の研究で見出された原理・効果の例

認知負荷理論の基礎を見たところで、実際に認知負荷理論の研究によって見出された原理や効果をいくつか見てみます。

Sweller (2010)[23] では、類似するものがあったり、包含関係にあると思われるものもありますが、その時までに発見された認知負荷理論の効果・原理を 12挙げています。ちなみに内訳としては、8種が extraneous load に関わるもので、残りは intrinsic load、germane load それぞれ 2種ずつでした。わかりやすいものをいくつか簡単に紹介します。

また、筆者が勝手に考えた コーディングにおける例も記載してみます。

Split-Attention Effect

統合すべき複数の情報が空間的・時間的に離れて提示される場合、内容理解に入る前段で情報統合が必要となり、余分な負荷が発生するという原理。主に extraneous load に関係。極端な例としては、図表とその説明がページをまたいで記載されている場合など。

コーディングで考えられる例:

  • 一連のコードとそれに関するコメントの位置がずれている場合
  • 変数宣言・関数定義とそれを参照するコードが位置的に大きく離れている場合
Modality Effect

split-attention effect から発展。統合すべき情報を単一モダリティーで提示するよりも、視覚刺激と聴覚刺激のように、異なるモダリティーで同時に活用することが学習を促進するという効果。

認知負荷理論の基盤となっているワーキングメモリのモデルで、visuo-spatial sketchpad と phonological loop が分かれていることから、それらモダリティー独立な資源を最大限活用することが効果を持つ、と説明できる。

コーディングで考えられる例: 思いつきませんでした。強いて言えばペアプログラミングやモブプログラミングで、口頭で説明を受けながらコードを読むこと?

Redundancy Effect

modality effect が必ずしも成り立つわけではなく、異なるモダリティーで全く同一の情報を提示した場合、情報量が増えることはない上、「二重に提示された情報が一致するか」という判断に処理資源を割いてしまい余計な負荷となるという効果。

コーディングで考えられる例: 思いつきませんでした。modality effect と同様、ペアプロやモブプロで場合によってはこちらの効果が発生するシチュエーションがあるなど?

Imagination Effect

イメージ生成が複雑性の高い問題の解決・理解に寄与する効果。イメージ生成によりワーキングメモリで積極的処理を行うことでスキーマ処理が活発になり、スキーマ構築と自動化が促されたためと報告。
ワーキングメモリ登場のきっかけになった「処理水準説」とも関わり、またワーキングメモリのうち visuo-spatial sketchpad を活用できているために発生する、とも言えます[24]

コーディングで考えられる例: 思いつきませんでした。ライブラリの依存関係や関数などの呼び出し順序を図でイメージすると理解が促進されるなど?

Expertise Reversal Effect

初学者にとっては有効に働く教授デザインが、学習の進んだ者には効果を持たなくなり、時にはむしろ処理を阻害するものになってしまう。逆に、初学者には有効でなかった教授デザインが学習の進んだものには有効になる、という効果。

初学者はほとんどスキーマが構築されていないので intrinsic load の割合が大きい。それを補うヒントのようなものを教授者から提示することで intrinsic load の圧縮などの効果が期待できる。一方で、学習が進行した者にとってはそうしたヒントが redundancy effect に類する効果を生じる原因にもなり得る。
逆に、遠転移問題は学習が進行した者には豊かなスキーマの構築を促すが、初学者は intrinsic load が膨大でそれどころではない、などと考えられる。この効果はある程度連続的であることが報告されており、徐々にヒントを減らしていく faded worked example などの手法が効果的と報告されている。

コーディングで考えられる例:

  • いわゆる「きれいな」「短い」コードのうち、一見ではわかりづらい文法や表記、ライブラリ利用によって達成したものは、熟達者にとっては情報圧縮された効率の良いコードだが、初学者には読みづらく理解に時間がかかる

個人的に一推しの効果で、修論ではこれを取り上げていました。
「きれいな」コード論争がよくありますが、この効果の存在を見落としているために平行線になっているものなども実はあるのかもしれません。この効果のおもしろいところは、「個人内でも」「個人間でも」この効果が生じることです。
つまり、同一人物でもスキーマ構築や自動化が進んで熟達していけば、過去読みやすかったコードも冗長と感じるようになったり、逆に読めなかったコードが感動的なほど読みやすいものになったりすることも説明できます。
また、熟達者と初学者で、同じコードでに対する「読みやすさ」が大きく違うことも説明できます。

この効果から考えると、エキスパート揃いのチームであり、今後もそのレベルのメンバーの採用が見込めるならば徹底的に効率化したコードでも良いかもしれませんが、成長中のチームだったり、ポテンシャル枠の新メンバーが入るかもしれない、エキスパートを採用する余力がないかもしれないチームでは、多少冗長でも読みやすいコードを保守することが望ましい、と言えるかもしれません。

認知負荷理論から考察できる「良いコード・コーディング」の説明

以上、過去の研究に基づいて認知負荷理論を紹介してきました。
ここでは、過去の研究があるわけではない (あるいは私が知らないだけ) ですが、「良いコード」の要因について、認知負荷理論からの説明を少し試みてみます。各種効果の紹介で取り上げたものと被る部分もあるかもしれません。

なお、筆者はコードの読み書きはできますが、本職がプログラマーでもなく、そんなに経験も実績ないので、そこはご容赦ください。
冒頭で挙げた fuakbori.fm 第 102 回で話題に挙がったものなども含まれます。

  • formatter でインデントやスタイルを揃える:
    無駄なインデントがあったりスタイルがバラバラだと、それだけで内容と無関係な認知負荷 = extraneous load が発生すると考えられます。チームで共通の formatter を使うことで、そうしたところに認知資源を割かずに済みます
  • linter をかけて最低限のコード修正は行う:
    linter をかけることで検出できる内容は事前に検出して修正するルールにすれば、レビュワーがその前提でレビューできるので余計な負荷を減らせます。CI や pre-commit などで強制しておけば前提がもっと確実になるのでより良さそうです
  • typo を排除する:
    (正しいスペリングを知っている人にとっては) typo により、余計な情報の修正 = extraneous load が発生すると考えられます
  • 変数や関数の名前を十分説明的なものにする:
    変数や関数の中身を都度参照しなくてもコードの読み書きができるようになり、extraneous load を減らせます
  • 短いスコープの変数は短い名前にする:
    ループで用いる一時変数など、短命な変数を長い変数名にすると不必要な負荷 = extraneous load が生じます。これは賛否両論あるかもしれません。または、expertise reversal effect により、一定以上の熟達者は i などで十分と感じるが、初学者は短命な変数でも説明的な名前を好むかもしれません
  • 凝集度が高いコードを書く:
    チャンキング、スキーマ化がしやすく、これによりワーキングメモリに保持できる情報量が増えます。ただし凝集度がただ高ければいいわけではなく、関数に分割しすぎたりすると参照が増えて split-attention effect のようなものがかえって発生するかもしれません
  • 適切にコメントを書く
    複雑なコード読解のヒントとなり、余分な負荷・処理を減らせるでしょう。ただし、コードと同じ内容を書いただけのコメントだと、特に熟達者にとっては redundancy effect が生じ、かえって余計な負荷となりそうです。初学者にとっては、expertise reversal effect により、逆に嬉しいかもしれません
  • コードの副作用を減らす:
    副作用が生じないとわかっているコードなら、副作用の影響という余計な部分に認知資源を割かずにコードの読み書きができそうです
  • mutable でなく immutable を使う:
    変更可能性がないとわかっている変数であれば、変更可能性という余計な部分に認知資源を割かずにコードの読み書きができそうです
  • IDE やプラグインを利用してコードの情報量を増やす・操作を減らす:
    最近の IDE は、マウスオーバーすると関数の仕様などを表示してくれたりします。いちいちコードをジャンプせずにすむので、extraneous load を減らせます。また、コードジャンプが必要だとしても、ショートカットで飛べるので余計な操作に認知資源を割かずに済みます

私レベルで思いつくだけでも、こんな感じでしょうか。もっとプログラムに詳しい方ならもっと思いつくと思います。
このように、良いコード・設計を考える際のフレームワークの一つになってくれるポテンシャルを感じるものであり、だからこそ近年取り上げられていると言えそうです。

最後に

以上となります。長くなるとは思っていましたが、思った以上に長くなりました。最後にこの記事の背景情報としての筆者の属性、注意事項、謝辞などを記して締めたいと思います。

筆者の属性

記事を書いている人間の属性によって、内容について信頼できるか、信頼できる部分はどこか、などが変わってくると思うので、簡単に記載しておきます。

  • 学生時代の専門は認知・教育心理学
  • 卒業論文・修士論文で認知負荷理論の観点から、より良い学習・教授デザインの設計をテーマに研究
    • 卒論も修論も仮説を支持する結果が出なかったので出版はされていません
  • 修士卒業後に IT 系企業に就職し、現在 2社目
  • 現職はQA エンジニアで、コードは趣味で書く程度 (なのでプログラミング的な知見が足りない部分はご容赦ください)
    • QA としても Web アプリケーションの QA ではなく、かつ中間管理職をやっているのでここしばらくそんなに手を動かせていないです

注意事項

まずは内容を知ってもらいたかったので最後に回しましたが、本記事を読む上でのいくつかの注意事項を記載します。

  • 本記事の内容は、筆者が当時研究していた 2015年頃までの知見や研究を主に基にしています
  • 認知負荷理論では三種の負荷を想定していますが、客観的に測定する方法は当時確立されていませんでした。つまり、「この効果はどの種類の負荷に影響する効果であるか」を仮定して研究が行われたり結論が出されたりしていますが、信頼性・妥当性が十分な測定方法をもって結論づけられたものではありません (一応、質問紙による測定方法は登場はしていました)
  • 認知負荷理論はあくまでモデルの一つです。これが自然法則のように真に存在するものというわけではなく、観測された事象を説明しやすい、便利なフレームワークの一つにすぎません。また、こうしたモデルを用いることで、かえって誤解を招いたり、見落としたり、飛躍してしまうものも当然あることはご注意ください (天動説にこだわって地動説を受け入れられない、のような話)
  • 論文として出版された内容だからといって、それが真実とは限りません。統計的処理によって「たまたま結果が得られた」という事態をできるだけ回避するようになっていますが、統計処理を行うための前提が実は崩れていたり、恣意的に結果を改変したもの、結果が出るように実験条件に手を加えたもの、結果が出るまで統計検定手段を変えたもの、などがあり得ます。そして残念なことに、教科書に載っているような心理学研究でも、結果が出るように不正が行われていたことが、(真偽のほどはまだ断定できませんが) 近年になって告発されています[25]。もちろん逆に、だからといって全ての研究がまやかしというわけではないです。論文になったからといって研究結果を盲信しない、というバランス感覚が重要です
  • 類似した問題として、近年いわゆる「再現性の問題」も取り沙汰されています[26]。過去行われた実験などを再現しようとすることを「追試」と呼びますが、過去の有名な研究の追試が成功しない = 現代でも有効な結果なのか、当時の研究結果に疑義の余地があるのでは、という可能性が生まれてきています。もちろんこちらもいろいろ考慮すべきことはあり、研究・論文採択の構造的な問題もあり、非常にセンシティブな問題でもあります。とりあえずは上記同様、研究結果の盲信は気をつけましょう、という話になります
  • 冒頭に挙げた三冊の書籍を、筆者はまだ読んでいません。読んでからこの記事を書くとどんどん公開が遅くなると思ったためです、許してください

興味を持った方向けの参考書籍紹介

文中で、「英語文献がメイン」「専門書がメイン」と書いてきましたが、それでもオリジナルの文献を読みたい、という方がいらっしゃる場合、個人的には以下の書籍がおすすめです。

  • Cognitive Load Theory: 2010年の書籍ですが、私が当時読んだ文献の中では一番読みやすく、まとまっており、コンパクトだった覚えがあります

と思ったのですが、高いですね……円安の影響かもしれません。

ワーキングメモリについては、日本語で検索すると研究者向けというより教育向けの書籍が多くヒットします。
やはり提唱者である Baddeley の書籍がおすすめですが、正直専門的なことと、文章的にもかなり読みづらかった覚えがありますのでご注意ください。

謝辞

完全に勝手な個人的な謝辞ですが、Twitter (X) 上で認知負荷について言及されたり、fukabori.fm の該当回を間接的に紹介してくださった @koma_koma_d さんのおかげで本記事を書くきっかけとなりました、この場を借りてお礼申し上げます[27]

脚注
  1. この論文では Cognitive Load "Theory" という用語自体は登場していませんが、後に「この論文が認知負荷理論を用いた最初の研究」とよく言及されます ↩︎

  2. 少なくとも私が一番文献を漁っていた 2015年頃までは、国内で認知負荷理論に言及した文献はほぼありませんでした。あっても紀要などだったかと思います。海外では初出が 1988年で、それ以降も認知負荷理論をテーマにした書籍が複数出版されていたにもかかわらず、国内での注目度は低かったことがわかります (先行研究すらも日本では見つけられなかったので、当時苦労しました) ↩︎

  3. 当然、国内の記事が全て誤っていたり表層的と述べているわけではありません。申し訳ないですがこの記事の多くは当時の調査・知識をベースに書いているので、「今だと国内でもこの辺りは信用できる文献だ」というものがありましたら、教えていただけると大変助かります。また、この記事にも誤りは当然あり得ますし、情報が古いことは事実ですので、何かお気づきの方はご指摘いただけると大変助かります ↩︎

  4. 適切な表現ではないかもしれませんが、簡単のために、ソフトウェア開発に関わる人々を総称して、ここではこの表現を用います ↩︎

  5. 認知負荷理論的に引きつければ、非母国語かつ非専門分野での知識獲得を試みることは、学習的には通常は非効率と言えます ↩︎

  6. Plass, J. L., Moreno, R. & Brünken, R. (Eds.). (2010). Cognitive load theory. New York: Cambridge University Press. ↩︎

  7. 日本語文献だと、「作動記憶」や「作業記憶」と表記されることもあります ↩︎

  8. 感覚記憶、意味記憶、エピソード記憶、手続き記憶、宣言記憶、フラッシュバルブ記憶、虚偽記憶、顕在記憶、潜在記憶、自伝的記憶、メタ記憶、展望記憶、などなど、「記憶」と言う接尾辞がつくものは多数あります。それぞれが一テーマになり得るくらい色々研究があります ↩︎

  9. Atkinson, R. C., & Shiffrin, R. M. (1968). Human memory: A proposed system and its control processes. The Psychology of Learning and Motivation, 2, 89-195. ↩︎

  10. 厳密に言えば、インプットが初めに転送される、感覚器官に対応してごく短期間保持される感覚記憶もありますが、本筋にあまり関係ないので割愛します ↩︎

  11. Craik, F. I., & Lockhart, R. S. (1972). Levels of processing: A framework for memory research. Journal of verbal learning and verbal behavior, 11(6), 671-684. ↩︎

  12. Shallice, T., & Warrington, E. K. (1970). Independent functioning of verbal memory stores: A neuropsychological study. The Quarterly journal of experimental psychology, 22(2), 261-273. ↩︎

  13. Baddeley, A. D. & Hitch, G. J. (1974). Working memory. In G. H. Bower (Ed.), The Psychology of learning and motivation: Advances in research and theory, 8, 47-89. New York: Academic Press. ↩︎

  14. ワーキングメモリのモデルの中でも中央実行系は曖昧で過度に汎用的に定義されている、というリスクがあり、Baddeley 自身がそれを認めながら、「ホムンクルスを生み出した罪はあるが、ホムンクルスをだんだんと解体して不要なものにしていくことでモデルを完成させていく」といったような内容を 2007年刊行の書籍[15] で述べています。ちなみに認知心理学におけるホムンクルスとは、「重要な意思決定を行う頭の中の小人」であり、「ホムンクルスのホムンクルス問題 (ホムンクルスがいるとしたらホムンクルスにもホムンクルスを仮定できる、という無限ループ)」なども有名です ↩︎

  15. Baddeley, A. D. (2007). Working memory, thought, and action. Oxford: Oxford University Press. ↩︎

  16. Rumelhart, D. E., & Ortony, A. (1976). The representation of knowledge in memory. In R. C. Anderson, R. J. Spiro, & W. E. Montague (Eds.), Schooling and the acquisition of knowledge. Lawrence Erlbaum Associates, pp. 99-135 ↩︎

  17. spreading activation theory (活性化拡散理論) と呼ばれるもの ↩︎

  18. Chase, W. G., & Simon, H. A. (1973). Perception in chess. Cognitive psychology, 4(1), 55-81. ↩︎

  19. 固有の、内在する ↩︎

  20. 外部からの、無関係な ↩︎

  21. 密接な関係がある、適切な ↩︎

  22. Clark, R. C., Nguyen, F., & Sweller, J. (2006). Efficiency in learning: Evidence-based guidelines to manage cognitive load. San Francisco: Pfeiffer. ↩︎

  23. Sweller, J. (2010). Cognitive load theory: Recent theoretical advances. In J. L. Plass, R. Moreno, & R. Brünken (Eds.), Cognitive load theory. New York: Cambridge University Press, pp. 29-47. ↩︎

  24. ここでは自然にイメージを visuo-spatial sketchpad を使う映像的なものとしていますが、(心的) イメージというものも心理学的には議論のある概念で、「イメージは絵か表象 (representation) か」という「イメージ論争」というものが長年続いていました。このため簡単に「イメージは絵のようなもの」と言ってしまうとたくさん界隈から矢が飛んできますが、ここでは本筋には関係ないので「絵のようなもの」として深く解説しません。おもしろい研究がたくさんあるので興味を持った方は調べてみてください ↩︎

  25. The Lifespan of a Lie -- The most famous psychology study of all time was a sham. Why can’t we escape the Stanford Prison Experiment?How misconduct helped psychological science to thriveThey Studied Dishonesty. Was Their Work a Lie? など ↩︎

  26. 心理学・行動経済学等の著名な研究論文が次々に追試失敗【心理学】 など ↩︎

  27. @koma_koma_d さんとはお会いしたこともお話ししたこともありませんし、この記事に何の責任もありません、この点ご了承ください ↩︎

Discussion