Skip to main content

01. 心智模型(Mental Models)

Mental Models

思考下面代码的执行过程

let a = 10;
let b = a;
a = 0;
  1. 声明了一个变量 a,设置(set) 为 10
  2. 声明了一个变量 b,设置 为 a 。因为 a 是 10,所以 b 也是 10
  3. 设置变量 a 为 0
  4. 最后结果 a = 0,b = 10

Dan 通过这个例子,举例有可能你描述的方式不太一样,

你可能想的是分配(assign),而不是设置(set)

你可能想的是不一样顺序,等等,这些每个人不一样的直觉思考,都是各自的心智模型。

ps: 我认为这涉及基础知识的储备,团队讨论的氛围,看了哪方面的技术文章,或者从另一门语言的转变,都会导致心智模型的偏差。

Coding, Fast and Slow

《Thinking, Fast and Slow》 Daniel Kahneman

快慢的思考方式会导致不同的结果,快速的看下面的例子,思考他的过程,或者有什么问题

function duplicateSpreadsheet(original) {
if (original.hasPendingChanges) {
throw new Error('You need to save the file before you can duplicate it.');
}
let copy = {
created: Date.now(),
author: original.author,
cells: original.cells,
metadata: original.metadata,
};
copy.metadata.title = 'Copy of ' + original.metadata.title;
return copy;
}

最直观的可以看到

  • 这是一个复制表格的方法

  • hasPendingChanges 边界处理,抛出异常

  • copy的过程中,仅仅是 title 属性,在前面增加了 Copy of

如果你仔细观察,你会发现这里修改了 original.metadata.title , 从而会导致 bug 的出现。

总结

Dan 通过这些小小的例子,让我意识的心智模型是比较重要的,大概他的想法是会通过这些课程来重建我们的心智模型。