普通视图

发现新文章,点击刷新页面。
昨天以前王垠的博客

continuation 和并发计算专项班

作者 王垠
2022年12月12日 00:00

continuation 和并发计算专项班

进阶班的内容在短时间的内覆盖面很广。虽然每个主题都讲的很深入浅出,整个课程也需要两个多月,所有的内容都很烧脑,所以再次开课可能不大方便。我在考虑把进阶班的内容分成小块,对每一块进行专项讲座。这样整个过程会大大缩短,时间安排会更加灵活,脑力负担会减轻。专门针对一小块内容,会大大增强认知效果。

所以我考虑进行一些非常短的”专项班“课程(也可以叫讲座),第一个主题可能是「continuation 和并发计算的实现」。它将以基础班为基础开始,自己实现最先进的 continuation 构造,包括 CPS,call/cc,shift/reset 等高级操作。这些主题将会加深对操作系统进程(线程)调度,coroutine(goroutine),node.js,async/await,promise, future 等系统和概念的内部机制的认识。

这个主题我估计总的过程只需要两周,大约三次课完成,随着内容的深入和发展,也可能临时增加课时和讨论。课后的微信群也会提供更多的思考内容,与现实的并发系统接轨。课后会形成一个专项研究群,持续讨论与这个话题相关的最新研究。我希望参加课程的同学能成为这方面的专家。

最后的时间还没有确定,会根据报名情况而定。由于需要基础班的基础知识,并且可能涉及一些具体的练习,所以目前仅限参加过基础班或阅读班的同学,参加过进阶班的同学也可以再次报名以加深理解。有兴趣的同学可以微信跟我联系。

疫情封控是违反宪法的

作者 王垠
2022年9月12日 00:00

疫情封控是违反宪法的

(由于网络封锁,很多国内人可能看不到我的博客了。欢迎大家拷贝转载。)

中国人民这么多个月忍受着残酷的封控,以为这一切都是合法的,政府有权这么做,然而请大家仔细看看《中华人民共和国宪法》第二章第三十七条吧:

第三十七条 中华人民共和国公民的人身自由不受侵犯。

任何公民,非经人民检察院批准或者决定或者人民法院决定,并由公安机关执行,不受逮捕。

禁止非法拘禁和以其他方法非法剥夺或者限制公民的人身自由,禁止非法搜查公民的身体。

也就是说,除了检察院或者法院批准“逮捕”之外,没有其它理由可以剥夺或者限制公民的人身自由,疫情也不是例外。所以疫情封控违反了中国宪法,属于“非法剥夺或者限制公民的人身自由”。我觉得《宪法》这么规定是有道理的,因为它防止了科学和数据造假,政府使用“保护民众”为借口滥用职权的可能性。

也许有人说,《防疫法》规定这么做的,所以不算“非法剥夺或者限制”,而是“合法剥夺或者限制公民的人身自由”。那么请你看看《宪法》第一章第五条:

第五条 中华人民共和国实行依法治国,建设社会主义法治国家。 国家维护社会主义法制的统一和尊严。

一切法律、行政法规和地方性法规都不得同宪法相抵触。

一切国家机关和武装力量、各政党和各社会团体、各企业事业组织都必须遵守宪法和法律。一切违反宪法和法律的行为,必须予以追究。

任何组织或者个人都不得有超越宪法和法律的特权。

《防疫法》如果规定了可以这样剥夺或限制公民的人身自由,那么《防疫法》就是违宪,属于无效的法律,公民不需要遵守它。懂得法律的人都明白这个道理。希望中国人民(特别是法律界人士)都行动起来,维护宪法的尊严,停止这一切毫无道理的封控,拿回自己的人身自由。

另外,强制或变相强制的核酸检测,疫苗接种,强制隔离阳性或密接人员,用健康码和场所码限制出入等,也都属于违反宪法的行为,应该立即停止。无论遇到如何严重的疫情,一切的防疫措施都应该基于自愿,才是符合宪法的。

第一位“计算机科学少年班”学生毕业

作者 王垠
2021年9月16日 00:00

第一位“计算机科学少年班”学生毕业

最近有一件让我很欣慰的事情,经过一段时间的实验教学,我的第一位“少年班”学生(13 岁)已经完成计算机科学基础班的全部课程,并且超额完成了成人学生难以完成的某些难度大的“进阶练习”。教学的过程比教成人还轻松,有些课只需要一半的时间就讲完了,还有一节课作为练习直接给他了。这个成功案例让我更加的相信了教学的有效性。

某人说“如果你不能给 6 岁小孩讲明白,那你不是真的懂”,我的另一个实验却显示这个说法是不切实际的。与另一位小朋友(6 岁)的教学实验说明,6 岁的小孩由于心理不够成熟,恐怕难以对课程内容感兴趣,因为我没有设计“小兔子”,“小乌龟”这样的故事。

但 13 岁的少年显然已经成熟到能够兴致盎然地做练习,牢固地理解博士级别的知识。想起我自己 13 岁的时候也是一个样子,每天放学回家都在和同学谈论宇宙是怎么回事。我开始想象,如果我 13 岁的时候有我这样的老师,我现在会是什么样子。真希望有“穿越时空”的本事。

计算机科学阅读班(实验)

作者 王垠
2021年2月16日 00:00

计算机科学阅读班(实验)

昨天发出计算机科学基础班(第三期)的信息,已经收到了好些同学的踊跃报名。请大家写申请不要有太大压力,我会在春节之后的一个星期才开始阅读这些申请。请注意我不是按照发送的时间顺序,而是综合考虑的,所以请大家写申请不要有时间压力,好好享受春节的最后几天。

大家的踊跃报名让我感觉欣慰,因为我长期以来改善教育的希望得到了很多的理解和支持。同时也让我有些不安,因为亲自授课付出很多精力,以至于课程的容量很有限,而且价格给很多年轻人造成一定压力。每次集体班都会不得已而拒绝很多人的申请,以至于很多有志于学习的人们得不到帮助。经过「集体班」和「一对一微信教学」的实验,我发现这样的教学效果确实好,所以这段时间我一直在设想一种新的授课方式,可以逐步改善这种情况。

这个新的授课方式就是通过阅读来进行。内容很像一对一的对话教学方式,只不过讲课不是通过实时的对话,而是通过分阶段的阅读来进行。我会根据以往的一对一对话教学积累的经验撰写一本书,这本书将来会正式出版。为了确保这本书真的能看懂,这个阅读班的同学会成为第一批“小白鼠”。

我会把书的内容分批写出来,不断地改进,内容是对话的形式。在我写书的同时,参加阅读班的同学会分多次拿到写出来的内容,进行阅读,然后我会给他们和普通班一样的练习。练习做出来之后,按照跟普通班一样的方式发送给我,进行一对一的指点。基础的练习可能会采用助教辅助的方式,难度较高的练习由我和助教一起来指点。助教会从以往参加过教学的同学里面选择表现很好又热心的同学。

这样的方式会减轻我的教学压力,而且根据到目前为止的经验,我预计效果应该也很好。最终我会写出一本真正能让大部分人都能看懂的计算机入门书,帮助改善全世界的计算机教学。

这本书除了内容方面不同,还有一个其它书籍没有的特点,那就是它是可以扩展的。将来我可以根据这个框架设计更高级的练习,可能会收取新的费用之后作为“升级”。这种“升级”方式可能在将来达到很高的水平,囊括计算机领域最混乱,最难的一些领域,甚至扩展到计算机以外的领域。但因为思维是一套系统,恐怕只有通过了基础学习的同学才会很好地吸收这些内容,所以这类升级内容并不提供给没有参加过我的基础教学的人员。

虽然我考虑过设计 app 来进行教学,但 app 并不是永恒的。最近发现以前有人用 flash 做过一些我想看的教学动画,结果因为 flash 不再被支持,我无法看那些内容。iPhone app 也就是最近十几年的事情而已,而且系统升级之后 app 就不一定还能用了。如果想要把知识传承三百年以上,恐怕不能考虑用 app。

书籍(特别是纸质书籍)仍然是人类最宝贵,最可靠的财富,因为它使得人们可以跨越时空的交流,不依赖于任何技术,甚至不依赖于电,永远不会消失。但前提是书籍的作者必须真的用心写了,真的能通过它传递思想。不好意思地说,我发现现代大部分书籍都是沽名钓誉的工具而已,有的压根没想把事情说清楚,或者只是罗列一堆知识点。只有经过真正教学实验的书籍,才可能真的被人看懂。

我曾经开始写过一本《解谜计算机科学》。虽然我以为写出了“精髓”,但那个时候因为没有真正的教学反馈,内容很多时候其实是初学者看不明白的。通过一年以来的教学,我发现了这些问题,并且理解了为什么很多领域的教材是看不懂的。这一次的阅读教学,应该会真的写出一本这样的计算机科学入门书来,传承真正的知识,造福子孙后代。

为了专注于核心内容,避免将来的翻译开销,并且为了广泛的传播,这本书首先会用英语写作。所以阅读班的同学应该具有基本的英语能力。我会使用很容易的英语,不含复杂的语法和单词。这也可以锻炼参加者的英语能力。

书正式出版之后,我会把它翻译成中文或其它语言。练习和指导会仍然通过中文进行,但其中的一些练习可能会逐渐被翻译成英语,作为书籍的内容或者附件出版。

我觉得现在可以同时开始进行这个阅读班的实验。具体的方式如下:

  1. 内容和集体班一样,只是通过阅读,而不是视频授课进行。比起集体班,有一点好处就是学习时间是更自由的,可以根据自己的步调进行阅读。
  2. 阅读的时候如果有看不明白的地方,可以随时提问。我会在工作时间内,根据问题进行实时指导,并且根据问题的所在更新书籍的内容,避免再次出现看不懂的情况。
  3. 阅读班的内容范围,请查看集体班的内容说明。
  4. 因为没有了实时的视频教学负担,学费比集体班要低,但因为仍然有大量的练习指导需要花费很多精力,所以学费也不会过度便宜,暂定为 10000 元每人。
  5. 阅读班因为没有班级授课,所以随时可以开始,可以跨时区进行。国外参加者可以用 PayPal 美元支付学费。
  6. 因为内容需要临时撰写,所以在每个文档之间会有一个星期左右的间隔。在这个间隙时间,学生可以进行阅读,提问,做练习。
  7. 为了避免造成懈怠和拖沓情况,学生应该在三个月之内完成全部学习。在这个时间之内,请保证能用心付出大量的努力。这个期限和以前的一对一教学一样,应该能满足需求。
  8. 为了保护阅读材料的著作权,需要参加阅读班的同学签署一个版权保护协议。
  9. 阅读班的内容由于还没有写,所以不能提供给第三期集体班的同学作为参考。
  10. 我会根据实际的实验情况更新授课的方式。

报名方式

报名请仍然通过 email 发送申请到 yinwang.advising@icloud.com,标题《计算机科学阅读班报名》。信件内容和集体班一样,写明自己的基本信息,学习动机,附带自己的简历。阅读班同样会经过面试。由于具有大量的亲自教学,参加的同学应该具有良好的品质,所以请慎重书写申请。

已经报名参加集体班第三期的同学,在班级确定之前可以申请换成阅读班,但是集体班开课之后就不能再换,所以请想清楚自己的需求和情况再决定。

计算机科学集体班(第二期)报名

作者 王垠
2020年9月24日 00:00

计算机科学集体班(第二期)报名

从四月开始进行计算机科学基础教学,到现在已经快半年了。不论是集体班还是一对一教学,都取得了让人欣慰的效果。挺多人学到了真实的知识,我自己也更加清晰地理解了所教的内容和教学方法。经过反复的迭代,思考和改进,教学的步骤和方式已经趋于成熟。

通过自己最近对一些新领域的学习,我深入地体会到了中国教育长期存在的问题。我体会到的现实是,中国在几乎任何领域,都没有掌握切实的,深入的知识。从国外学来的东西,几乎都是不彻底,不地道。不求甚解,以讹传讹的思维方式盛行。所以在中国,在几乎任何领域,都很难找到好的老师。我自己感兴趣的几个领域,目前都只能靠自己去琢磨,或者直接从国外资源学习。

我难以看见这么大的一个国家如此对待知识,继续落后下去。是改变的时候了。

一对一的问答教学是成功的,它让我对人的认知规律有了一些理解。但由于一对一教学具有大量的重复,时间久了对于老师来说相当枯燥,虽然每个学生都觉得很新颖。最开头有利于改进教学方式,但前一天才讲了的东西,第二天就给另一个人讲,并不是有趣的事情。所以我决定限制一对一教学的数量,提高了价格,并且对申请人更有选择性。

在将来的一段时间里,我会投入更多精力在集体教学上。集体教学对于个人,虽然没有一对一那么灵活,但由于教学方式和内容安排的先进性,效果还是大大高于传统大学计算机科学专业的教学。

我不想在这里详细说明我的教学哪里先进,因为我发现有盗用“关键词”的人,拿过去就成为自己的主打广告词,却做不到实质。我提出的“问答式教学”这个做法,显然已经有了一些“山寨品”。似乎再好的理念到了中国,都会被很多人抄袭,成为空洞的口号。另一方面,过多宣传会引来很多不合适的人,所以我不想对自己的做法进行宣传。

现在我决定召集第二期的计算机科学基础班,但具体的很多事宜和特点,我不想在这里说,而只说明对于报名最关键的几点:

  1. 学费调整为 6000 元每人。
  2. 方式为 Zoom 音视频教学。
  3. 时间跨度还是两个月左右(法定节假日除外)。国庆节之后开始上课。
  4. 一周一次课,总共还是 8 次课。每周安排一次讨论会,方便大家交流。
  5. 课后练习仍然是一对一回复指点,但可能会安排有经验的助教帮忙。为了确保质量,助教拿不准的地方都会由老师直接指导。
  6. 内容包含了计算机科学最根源,最本质的一些思想,它们可以作为坚实的基础,用以理解和掌握更广泛的知识。
  7. 由于时区问题,可能无法照顾时区相差太多的国外报名者。
  8. 人数限制会放宽一些。由于集体教学比较少有人提问,所以不会是一问一答的方式,但可能有积极的同学参与问答,目的在于启发大家。
  9. “基础”并不等于“容易”或者“初级”,课程的内容虽然从零开始,最后却会很深入。这不是一般程序员知道的东西,所以不再要求申请者完全是初学者。但有基础的人士需要理解,这个教学仍然是从零开始,需要重新认识最基本的知识。

人员要求

心理健康,有礼貌,能尊重老师和其他同学。谦虚好学,能平等讨论。

申请方式

发送 email。标题:申请计算机科学基础课程(第二期)。内容包括:

  1. 你的真名,简单自我介绍,包括教育经历,工作单位,工作内容,上课的动机等。
  2. 你所在的地区,用于安排时间。
  3. 附上简历(PDF 格式)。
  4. 你的微信号,方便联系。

由于申请人数可能较多,请耐心等待回复。我会安排简单的电话面试。

一对一教学学生可以免费听课

已经参加一对一教学,还没有结束,也没有超过时间跨度的学生,可以免费旁听集体课程,作为一种补充或者复习。需要者可以给我联系,到时我会告知课程的 Zoom 会议号码。

知识星球成员优惠

由于之前建立知识星球的时候,没有考虑到提问的方式(而不是教学)很难真的帮助到人们,自我感觉知识星球的效果并不好。好的方式应该是老师提问,而不是学生提问。没有老师的输入和指引,学生会很难提出好的问题。提问越来越少,越来越艰深,所以后来知识星球就不再接受新的成员。有些人的提问进入一些误区,却因为理解那些需要补充比较多基础,而无法帮助他们。有时候看到问题进入自己探索过的误区,但因为别人正热心,也不好意思扫兴。由于教学的效果好很多,我已经挺长时间没有在知识星球活跃。

为了回馈知识星球的成员,感谢他们的支持,知识星球成员如果申请参加计算机科学基础班,会给予 2000 元的减免。这相当于退回我实际的知识星球收入(除去平台服务费)。也就是说知识星球成员报名基础班,只需要 4000 元学费。来信请注明在知识星球里的用户名。

几个需要避免的美国英语习惯

作者 王垠
2020年5月23日 00:00

几个需要避免的美国英语习惯

这篇文章汇集了最近我在微博提到的一些美国英语的“病毒”。

加州英语的语调问题

为什么我推荐机器学习入门,可以看 cs231n 2016 年冬季的视频,而不是同一门课的新版本呢?主要原因当然是 Andrej Karpathy 讲得比其它两个美国小孩好。很明显,换了另外两个人之后,发现很多地方听不懂。感觉他们只是拿着 Karpathy 写的 ppt 照本宣科,而不得要领。感觉他们在给别人讲,而自己心里都在发抖。

另一个我没说的事情,其实是我很受不了那两个美国小孩的英语,其中一个是白人,一个是 ABC。很典型的加州音,每个句子都以升调结尾,中间也是一路上飘语调,一直降不下来。像是一直在提问,征求意见,而其实是一个陈述句。

这样的语调在加州很常见,似乎他们想显得可爱,以为一路升调,可以让别人更喜欢他们。可是这种语调会让听者的心一直悬着,不知道什么时候结束。而且太刻意了,听久了就觉得特别假,很不自然。加州人不管男的女的,很多人这样。

看了 Karpathy 的视频,很明显发现他不是那样的,陈述句的结尾很明显就降下来了,给人一种踏实的感觉。他不是加州人,他恐怕就不是美国人。注意我不是说我喜欢伦敦音。看 Andrej 这个名字,是东欧某个靠近俄罗斯的国家来的。

我在 IU 的时候,好几个教授都是欧洲小国来的,他们说英语明显清晰很多,不是美国音,也不是伦敦音。Dan Friedman, Kent Dybvig, … 都没有明显的美国音。我的“正式导师” Amr Sabry 是从埃及来的,当然也不会美国音。

应该去掉的语气词

加州人的英语还有一个问题,那就是他们会附带很多没用的“语气词”。我最讨厌的语气词是 “like”。听加州人说英语,你会经常听见“…… like,……”,句子说到一半,接一个 like。意思不是“喜欢”,而是“看起来”。比如:“He is like, …” 本来要说他怎么样,结果加一个 like,接着一个很长的停顿。甚至 like 后面就没有下文了,尽在不言中。还有“It’s like…”,本来要说一件事,非得在前面加上一个“It’s like…”。现在每次听到句子里夹 like 的人就很受不了。

还有一个很讨厌的语气词,是“you know”。句子说到一半,加一个“you know…”(你知道的……),然后接着说。有时候一个句子里面可以加进七八个 you know,真叫人着急。我都 know 了你还说什么呢?而且我真的 NOT know 你要说什么。毫无意义,自相矛盾,严重影响语言表达,就像口吃一样。

另外几个加州人喜欢用的词:cool,awesome。开头他们都喜欢说 cool,这是一句毫无意义的套话。不管一个事情喜不喜欢,听到马上说 cool!很兴奋的样子,刻意让你对他产生“好感”。后来发现 cool 用得太多了,套路被识破了,有些人就开始说 awesome。不管听别人说什么,管自己心里怎么认为呢,先来一个 awesome!逐渐的,awesome 也失去了意义。

我不知道他们下一个选择是什么。总之,他们总有一句口头禅,用于掩饰他们对你说的内容的不理解,不知所云,假装很喜欢。

看 Karpathy 的视频,你会发现他没有任何这样的语气词。如果一句话说到一半想不起来,他会停顿一下,没有任何声音,没有 you know, like, 甚至没有“嗯”,想起来了就继续说,所以就感觉很清晰。

语言的垃圾真是很有传染性。听到身边朋友这样说话,不知不觉就学了。一般的心理是:这样听起来更像美国人,所以别人才看得起我。内心的自卑,导致了在美华人小孩很容易学会这些不好的东西。真希望住在加州的中国人能别让孩子学会这些。

So…

既 ‘like’,’you know’, ‘cool’, ‘awesome’ 之后,我又想起一个大家不应该学习的美国口头禅,那就是 “So, …”

一般说来,so 应该用在一个句子中间,前面应该有一个分句,然后接着一个 so 开头的分句,前面的东西表示 so 分句的条件或者起因。比如,“…, so we can…” (……,这样我们就能……)你必须有一个起因,然后你才能说 so…

可是很多人喜欢在一句话开头说”So, …” 前面的句子也没有相关的起因,不知道这个 So 接着什么在说。而且说出这个 So 之后,有时会有很长的停顿。往椅子上一趟,So… 意味深长的样子。有时候一个 So 还不够,接着又来几个 so。你就听到 so so so… 个不停。

我发现这个现象已经传染到中国人,而且翻译成了中文。有些人喜欢以“那么……”开始一个句子,而“那么”前面的内容却没有任何相关内容,就是这种“英语病毒”的国内版本。

以 ‘right?’ 结尾的句子

最近有人跟我说话,忽然冒出一句英语,而且句末加了一个 ‘right?’。我心里忽然哽了一下。不仅是因为中国人说话忽然冒出一句英语,而且因为这个句末的 ‘right?’

在美国的时候,经常听到有人这样说话,似乎习以为常。离开美国几年之后,再听到这样的句子,却忽然注意到它隐含的让人不快。这真是有意思。

因为最近都在琢磨美国英语的问题,今天想起这件事,仔细分析,并且上网搜索调研,才发现原来这种 ‘right?’ 在末尾表示疑问的句型,也是一种隐藏的“语言病毒”。

很多人经常听身边人用 ‘right?’ 结束一个句子,自己也开始这样说,却没发现这是一种居高临下,不礼貌,不尊重的语言。久而久之,这种语言就像病毒一样传播开去,我们就又离文明远了一些。

一个陈述句,加一个 ‘right?’ 在末尾,是什么意思呢?这不是问你问题,或者征求意见,而是陈述一个自己相信的事情,并且想确认你也认可。他只是在要求你认可他说的话,而不是在征求你的意见。“你听明白了吗?明白了就说 ‘对!’ ” 他期望你的反应是口头认可,或者点头。

简言之,说 ‘right?’ 就是在迫使你点头。不停地说 ‘right?’ 就是不停地迫使你点头。这是一种居高临下,潜移默化奴化其他人的语言。什么人会不停对别人点头呢?奴才。

这样一种居高临下的语言,却被很多美国人用于日常问话。在美国的时候,很多人这样说话。本来应该是一个疑问句,比如本来应该说:

Do you like football? 你喜欢足球吗?

结果说出来一个陈述句,最后接一个 ‘right?’

You like football, right? 你喜欢足球,对吧?

为什么第二种句型显示出居高临下和不尊重呢?因为它表面上在问你问题,却强制给你安排了一个答案。比如这个例子,对方好像假定了你喜欢足球,而你可能并不喜欢,他却等着你说 ‘right!’。可能因为他自己喜欢足球,所以他认为所有人都应该喜欢足球。

普通的疑问句,相当于在末尾有一个 ‘yes or no?’ 可是这种句子,结尾是 ‘right?’,并没给你 ‘no’ 的选择。

普通的疑问句,你可以回答 ‘yes’ (right) 或者 ‘no’。可是这种 ‘right?’ 结尾的,前面是一个陈述句,而不是疑问句。接一个 ‘right?’,隐含的意思是:我已经决定了,肯定就是这样,我期望的回答是 ‘right’,你最好说 ‘right’,不要说 ‘no’,我等着你说 ‘right’,你说了 ‘right’ 我就可以继续了。

很多时候有人说出 ‘right?’,却并不等你回答就继续,默认了你的回答就是 ‘right’。也就是说,说这句话的人并不在乎你的回答。他早已经单方面决定了答案,只是象征性的问你“对吧?”

这就像一个知道考试答案的老师,在问一个学生。“这个是这样,对吧?” “你知道这个,对吧?” 他不是在问你,不是在讨论,而只是想确保你明白了他认为一定是正确的东西。所以显示出不尊重,居高临下。

警察录口供的时候,陈述一个他所了解的事情,然后说“Am I correct?” “Yes or no?”这都比 ‘right?’ 好点,因为他给了你否认的机会。

“4月27号晚上 11 点,你去了这个地方。Am I correct?”

所以 ‘right?’ 给人是怎样的感觉,你们体会一下。实际上,我觉得受过专业训练的警探,不可能结尾说 ‘right?’。因为法律给了你说 ‘no’ 的权利,他这样说就是在强迫你接受,是要被举报的。

如果 ‘right?’ 前面这个句子是事实,那只是显示出不尊重和自我中心。可要是前面这个句子是事实性的错误,你根本没法说 ‘right’,那么就显示出说话人的愚蠢,自以为是。

而且有些美国人会把这个 ‘right?’ 里面的 ai “哎” 这个音发音比较扁,张口较小,听起来就像 ei “诶”。听起来有点像 ‘rate?’,有种乡土味。再加上这个句型隐藏的强迫含义,经常这样说,就显得缺乏教育,素质低。

我给大家的建议是:中国人说的日常语言,除非是学术术语,就不要冒英语出来了。另外,必须说英语的时候,应该停止使用这种末尾的 ‘right?’

你还可以参考 Quora 上对于这个问题的讨论

使用干净的语言

当然美国英语的常见毛病不止这些,我只是发现了一些典型问题。这些英语语言现象,应该像中文的“网络用语”一样,主动避免。不管用什么语言,我们都应该讲究良好的风格,不要因为身边人都在那样说,就跟风学一些不好的习惯。只有这样,我们才会成为文明人,我们的社会才会更加舒适。

什么是语义学

作者 王垠
2012年7月25日 00:00

什么是语义学

很多人问我如何在掌握基本的程序语言技能之后进入“语义学”的学习。现在我就简单介绍一下什么是“语义”,然后推荐一本入门的书。这里我说的“语义”主要是针对程序语言,不过自然语言里的语义,其实本质上也是一样的。

一个程序的“语义”通常是由另一个程序决定的,这另一个程序叫做“解释器”(interpreter)。程序只是一个数据结构,通常表示为语法树(abstract syntax tree)或者指令序列。这个数据结构本身其实没有意义,是解释器让它产生了意义。对同一个程序可以有不同的解释,就像上面这幅图,对画面元素的不同解释,可以看到不同的内容(少女或者老妇)。

解释器接受一个“程序”(program),输出一个“值”(value)。用图形的方法表示,解释器看起来就像一个箭头:程序 ===> 值。这个所谓的“值”可以具有非常广泛的含义。它可能是一个整数,一个字符串,也有可能是更加奇妙的东西。

其实解释器不止存在于计算机中,它是一个很广泛的概念。其中好些你可能还没有意识到。写 Python 程序,需要 Python 解释器,它的输入是 Python 代码,输出是一个 Python 里面的数据,比如 42 或者“foo”。CPU 其实也是一个解释器,它的输入是以二进制表示的机器指令,输出是一些电信号。人脑也是一个解释器,它的输入是图像或者声音,输出是神经元之间产生的“概念”。如果你了解类型推导系统 (type inference),就会发现类型推导的过程也是一个解释器,它的输入是一个程序,输出是一个“类型”。类型也是一种值,不过它是一种抽象的值。比如,42 对应的类型是 int,我们说 42 被抽象为 int。

所以“语义学”,基本上就是研究各种解释器。解释器的原理其实很简单,但是结构非常精巧微妙,如果你从复杂的语言入手,恐怕永远也学不会。最好的起步方式是写一个基本的 lambda calculus 的解释器。lambda calculus 只有三种元素,却可以表达所有程序语言的复杂结构。

专门讲语义的书很少,现在推荐一本我觉得深入浅出的:《Programming Languages and Lambda Calculi》。只需要看完前半部分(Part I 和 II,100来页)就可以了。这书好在什么地方呢?它是从非常简单的布尔表达式(而不是 lambda calculus)开始讲解什么是递归定义,什么是解释,什么是 Church-Rosser,什么是上下文 (evaluation context)。在让你理解了这种简单语言的语义,有了足够的信心之后,才告诉你更多的东西。比如 lambda calculus 和 CEK,SECD 等抽象机 (abstract machine)。理解了这些概念之后,你就会发现所有的程序语言都可以比较容易的理解了。

❌
❌