甘林·温斯克尔这本《程序设计语言的形式语义》,底子确实扎实。人家直接扒自剑桥大学跟奥胡斯大学的课堂讲义。计算机系大三、大四的本科生,或者正在读研的,想一头扎进形式语义学里头,给以后搞学术或者啃底层架构攒底子,这书确实对口。我手边那些干了十年以上、天天跟微服务架构和分布式系统死磕的老程序员,偶尔翻翻也觉得划算。毕竟有时候碰到那种逻辑乱成一锅粥的复杂系统,或者自己琢磨新语言设计时,拿数学那套尺子去量一量,心里多少能踏实点。不过咱得把话撂这儿。指望它教你怎么快速写出能跑的代码?趁早洗洗睡。要是看见集合符号就头皮发麻,也建议直接绕道。这书不教具体的代码语法怎么写。它专干一件事。把编程语言背后那副数学骨架给你抽出来。愿意耐着性子跟集合、偏序集、逻辑规则死磕的“硬核”玩家,才玩得转。这事儿,大概就是这么个意思。别指望它能让你下班早点走。
翻开它之前,先把离散数学、数理逻辑和基础集合论这几块砖头垒好。书里确实会补一些入门形式语义和逻辑的数学底子,但如果你自己先摸过集合运算,知道怎么写基础证明,脑子里有递归这根弦,读起来能少掉几把头发——我当年硬啃的时候,草稿纸用了半箱。看书的时候,别光用眼睛扫。脑子里得随时蹦出三个问题。形式化到底怎么给一段代码“定规矩”?操作语义、指称语义、公理语义这三套主流玩法,各掏出什么数学家伙事儿来描摹程序的行为?咱们怎么靠归纳原理和完备性证明,把纸面上的语义推导和机器实际跑出来的结果严丝合缝地对上?攥着这几个问题去对章节,作者怎么一砖一瓦搭起这座理论大厦的,你心里自然有数。不过说句实在话。指望本科生或者刚入门的研究生能一次性全弄透,可能不太现实。我总觉得,这书更像是一本“字典”或者“地图”。你不需要一开始就背下所有坐标,知道往哪儿走就行。
具体的读法,我建议先拿集合论和基础数学工具开刀。后面的理论全得踩在这块地基上。接着,指称语义、操作语义、公理语义这几章是重头戏。形式语义的“三足鼎立”全在这儿。别走马观花。得一个字一个字地啃,草稿纸备足跟着推演。每章后面的练习题,难度有大有小,千万别跳过去。不亲手算几遍,概念永远飘在天上。最容易卡壳的,通常是域论、信息系统,还有那些搞不确定性和并行的抽象模型。这几节把数学结构拔得太高。刚上手看,满纸符号,脑子里连个画面都拼不出来。我当年在这儿熬了整整两周。最后发现,与其死磕那些繁琐的技术细节,不如先抓主干思想。等以后真在架构设计里碰到头大,再折回来当工具书查,效率更高。毕竟,形式语义学这行当,就是用严丝合缝的数学语言去称量程序的行为。它不保证你敲键盘的速度变快,但能让你以后盯着一段烂代码,一眼看穿它到底在干嘛。
慢慢熬。把书后的练习当磨刀石。每一次符号推导,都是在给脑子抛光。等你真把这些抽象门槛趟过去,就会明白,形式语义不光是写论文凑数据的利器,更是你看透计算世界底层逻辑的一把钥匙。可能绝大多数写业务代码的人一辈子都用不上域论。但当你偶尔需要去理解一个编译器怎么优化循环,或者去搞形式化验证的时候,你会发现,当年熬过的夜、掉过的头发,全都在那儿给你兜着底。