· 4分で読了

メンタルモデルがプログラミング言語の学習に与える影響

この記事は中国語から自動翻訳されたものです。翻訳によりニュアンスが失われている場合があります。

はじめに

  • 本記事では JavaScript のプリミティブ型を例として使用しており、動作方式は他のプログラミング言語と異なる場合がある。
  • プリミティブ型の動作方式はオブジェクトや配列の動作方式とは異なり、ここではプリミティブ型のみを例として扱う。

メンタルモデル(Mental Model)とは何か

メンタルモデルとは、物事がどのように進展するか、あるいは物事がどのように動くのかを予測する認知プロセスのことだ。

少し学術的に聞こえるかもしれないが、例えば画面上にボタンの UI を見たとき、僕たちはこの UI がクリック可能で、クリックしたら一連のイベントが起こると予想する。そのため、ユーザーはこの UI が期待通りに動かないと困惑する。

しかし、なぜ僕たちはこのような UI をボタンだと認識するのだろうか? 一つには僕たちが置かれている環境によるものであり、もう一つは経験によるものだ。ユーザーはウェブに触れ始めてからずっとこのようなルールに従ってボタンを判断しており、そのため自然と他のウェブページにもそれが適用される。

例えばこのノブ(つまみ)を見て、なぜ僕たちは最初に押すことではなく回すことを思いつくのだろうか? 日常生活において、円形の機構を持つものの多くは通常、回転させることで調整を行うため、僕たちはそのルールを他の場所にも当てはめているのだ。

IMG_1170

あるいはドアのレバーハンドルもそうだ。なぜ僕たちは回して開けようとせず、ハンドルを押し下げようとするのだろうか? これもハンドルの仕組みに対して一定の認識を持っているため、押し下げればドアが開くと予測するからだ。

IMG_1171

プログラミング言語を学ぶ際にも、学習が進むにつれて言語の動作に対してメンタルモデルが形成され、頭の中でコードをコンパイルし、どのように実行されるかを予測するようになる。

メンタルモデルの重要性

ここでは JavaScript のコードを例に挙げる。

let a = 3;
let b = a + 3;
a += 1;
console.log(b); // b

これは非常に基本的な JavaScript コードだ。経験のある人なら答えが何であり、どこに罠があるかをすでに知っているだろう。仮に今日、誤ったメンタルモデルでこのコードを描き出すと、次のような結果になるかもしれない。

1. a+=1 が実行される前:

1

2. a+=1 が実行された後

2

自然な流れとして、a+1 されたため、円の中の 3 を 4 に書き換える。

b = a + 3 なので、a が変化した以上、b が指し示す円も 7 になるはずだ。そのため、正しく理解していない人からすると、ごく自然に「7」と答えてしまう。

強調しておきたいのは、答えは間違っているものの、僕がこれが完全に学習者のせいだとは思わないということだ。通常の思考パターンからすれば、b = a + 3 を数式のように捉えていれば、その後に a+=1 となれば、当然 b も一緒に変化するはずだと考えるからだ。

一度学習者にこうした思考パターンが定着してしまうと、その後の学習でそれを修正するのが極めて難しくなり、自分では説明のつかないバグに遭遇しやすくなる。

どこに問題があったのか?

JavaScript においてプリミティブの値を変更することはできない。この言葉は一見短いが、初学者にとってそれが本質的に何を意味しているのかを理解するのは至難の業だ。

正しい動作方式は次のようになる:

correct

いかなるプリミティブ型も値を変更することはできないため、円の中の 3 を直接 4(3 + 1)に書き換えることはできず、新たに 4 という数値を生成して、a の矢印をそちらに向ける必要がある。元の 3 は変更されない(青い円)ため、a の値がどう変化しようと、b の結果には何の影響も及ばない。

教科書的な「JavaScript におけるプリミティブ値は不変(immutable)である」という記述を引用するよりも、僕はむしろこのような形で説明することを好む。そのほうが理解の助けになり、実際に JavaScript コードが動作する仕組みそのものだからだ。よく見てみると、2つのモデルは非常に似通っているが、決定的な違いは学習者が JavaScript のプリミティブ値の特徴と動作原理を理解しているかどうかにある。

様々なケースに応用できるかどうかはメンタルモデルにかかっている。もし学習者が最初のメンタルモデルを使い続けていると、学習の過程で「primitive type は immutable である」という言葉を目にしたことがあったとしても、やはり誤った結論に至りやすくなってしまうのだ。

関連記事

他のトピックを探索