01. 心智模型(Mental Models)
Mental Models
思考下面代码的执行过程
let a = 10;
let b = a;
a = 0;
- 声明了一个变量 a,设置(set) 为 10
- 声明了一个变量 b,设置 为 a 。因为 a 是 10,所以 b 也是 10
- 设置变量 a 为 0
- 最后结果 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 通过这些小小的例子,让我意识的心智模型是比较重要的,大概他的想法是会通过这些课程来重建我们的心智模型。