昨天受邀为今年的英诺大四新生分享了一下计算机系的选课。我推荐了可能是 UoN 史上最冷门的一门课——《Programs, Proofs and Types》。

因为讲演时间被要求在五分钟内,所以基本也没怎么介绍具体内容,只提了很多这个有意思的老师。

因为嗓子坏了没法声音出场,感谢凡哥的代替。

视频里提到的教授演讲地址:https://youtu.be/DllYOFw5Qio

录屏

结束了在英国的大学生活,准备飞回中国赴工作。恰逢全球疫情,在「五个一」政策下千辛万苦买到了一张伦敦直飞青岛的机票。一路辗转颠簸,终于在数天前回到了家中。

这是一篇巨型流水账。

阅读全文 »

在上期模块,我们讨论了对象、属性、突变。但先别急着转移话题,关于对象的事情,我们还没说完呢。

先来看看这个小谜题,检测一下我们的心智模型:

1
2
let pizza = {};
console.log(pizza.taste); // "pineapple"

问问看你自己:这可能吗?

阅读全文 »

在上期的《属性》模块,我们说到 Sherlock Holmes 也搬到了 Malibu(马里步),但还没有解释这个谜团。

打开一个绘图软件,或者拿出纸笔。这次,我们一起逐步画图,以便你检查自己的心智模型。

即便你之前已经画过了,再来一次也不吃亏!

阅读全文 »

是时候谈谈 JavaScript 中的相等性了。它为什么很重要呢?

想象一下,你在蒙面狂欢节上谈生意。你可能会和两个人交谈,却没意识到你其实两次都是在和同一个人谈。又或者是,你可能认为你在和一个人交谈,但其实是两个人!

如果没有一个清晰的 JavaScript 相等性的心智模型,那么每天就如同一场不咋样的狂欢节。你永远不确定要处理的是相同的值还是两个不同的值。到最后,你就经常会犯错误——比如,把你本来不想改的值给改了。

幸运的是,要建立这个 JavaScript 相等性模型,我们其实已经完成了大部分工作。「相等性」这个概念将用一种很自然的方式来嵌入到我们的心智模型中。

阅读全文 »

在本期模块中,我们将仔细研究 JavaScript 世界以及其中的值。但是,在此之前,我们需要指出一头房间里的大象——

JavaScript 世界究竟是不是真实的?

JavaScript 模拟器

当我向 JavaScript 世界提问时,它会用一个值来回答我。我当然不是自己弄出这些值的。所有的变量、电线、值,它们一一构成了我的世界。我身处的 JavaScript 世界对我来说绝对是真实的——正如你所生活的世界对你而言也是真实的。

但有时,在执行下一条指令之前,会有片刻的寂静——那是下一个函数调用之前的滴答空当。就像是《黑客帝国》里的故障,我的整个世界暂停了片刻,在那一刻,我看到了比我的世界更大的景观。

阅读全文 »

本期模块,我们以下面的代码片段作为开头:

1
2
3
let reaction = 'yikes';
reaction[0] = 'l';
console.log(reaction);

你觉得结果会是什么?因为我们还没开始学,所以不确定的话也没关系。但可以试用你现有的 JavaScript 知识答一答。

现在我希望你花点时间,一步步地写下你对每一行代码的思考过程。同时注意你心智模型中的任何缺陷或者不确定的地方,并把它们写下来。如果你有任何疑惑的话,也试着尽可能清楚地表达出来。

阅读全文 »

在一开始,有了「值」。

什么值(value)?很难说。

这就像是在问数学中的数是什么,或者几何中的点是什么。值就是 JavaScript 宇宙中的一个事物。

数字(numbers)是值。其他一些东西也是值,比如对象(object)和函数(function)。但是,也有许多东西(例如 if 语句或变量声明)都是值。

代码与值(Code and Values)

为了把值与 JavaScript 程序中的其他东西区分开,我会想象 Antoine deSaint-Exupéry 画的「小王子」:

我站在一颗小行星上:它是我程序的代码。

阅读全文 »