资深程序员书单揭秘:从软件工程到商业模式的经典之选 Peter Pang 2025-11-15

经典软件工程与计算机科学入门

首先,我将逐一介绍书单中的书籍。这里的排名是随机的,但也有一定的意义。

第一本书是**《人月神话》(The Mythical Man-Month: 软件工程项目管理领域的经典著作),这本书应该是所有人都听说过的。如果没听过,建议去了解一下。它被誉为软件工程**(Software Engineering: 运用计算机科学、数学及工程原则来设计、开发、测试和维护软件的学科)的圣经。这本书在Amazon上很好找,价格也很实惠。

第二本书是**《Just for Fun》**,这是Linus Torvalds的自传。这两本书都曾在我之前的视频中介绍过,在此不再赘述。

第三本书是**《Code: The Hidden Language of Computer Hardware and Software》**。我个人非常喜欢这本书,它最近刚刚出了新版,但我手上仍是旧版。这本书的作者Charles Petzold是一位天才作家,如果可以阅读英文原版,强烈推荐阅读英文版,因为他的表达方式非常出色。作为一本技术书籍,它以讲故事的方式向读者阐述概念。这本书并没有深入探讨某个非常具体的技术点,而是让你从零开始感受计算机的整个演变过程。从最初的灯泡、简单的线路,到最原始的“与”和“或”逻辑门,再到如何处理字节,计算机逐渐变得复杂。它将历史以可视化的方式呈现,但并没有在最后讲述特别复杂的内容。

图灵的秘密与UNIX哲学

第四本书是**《图灵的秘密》**(The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and Turing Machines),这本书非常有趣,它与《Code》是同一位作者。我是在学校图书馆偶然发现这本书的,它的英文名字更具吸引力。这本书实际上是对图灵1937年论文的详细解读,这篇论文是计算机科学的开端,定义了计算器和可计算性的概念,所有计算器理论都以此为基础。作者并没有枯燥地讲解论文,而是将图灵的生平故事与论文内容穿插讲述。图灵的人生非常精彩,大家应该都有所了解。书中所有加粗斜体的部分都是论文原文,作者逐句进行解释,这就是“Annotated”的含义,即在整篇论文上添加了注释。我年轻时读这本书,读了不下百遍,甚至将这篇论文打印出来,对照着看,感觉非常有意思。通过这本书,你可以深入了解一位伟大思想家的生平。图灵的故事已经被拍成了不少电影,例如《模仿游戏》。这本书价格不贵,我当年在书店买的价格也差不多。

第五本书是**《UNIX编程艺术》(The Art of UNIX Programming)。如果你认真看过我的视频,应该会注意到我多次提及UNIX相关话题,尽管有时是在批判它。UNIX的一些观念,虽然有其历史局限性,但也有许多理念是通用至今的。它被称为“艺术”,因为它提出了许多理念层面的东西。尽管我们现在更多使用Linux,但Linux也是基于UNIX的艺术。正如Linus Torvalds在《Just for Fun》一书中提到的,整个Linux系统的开发和设计风格基本上都源于UNIX的风格、艺术和哲学理念。如果你看了这本书,很多东西就不需要看我的视频了。我经常在视频中提到UNIX哲学**(UNIX Philosophy: 一系列关于软件开发和系统设计的文化规范和原则,强调模块化、简洁性、可组合性等),它非常值得学习,而我提到的只是其中很小一部分。这本书相对较厚,里面提到的内容远比我提及的要多。

软件设计与产品管理

第六本书是**《软件设计的哲学》**(A Philosophy of Software Design)。这本书很有意思,作者Johann Osterhout教授曾与《Clean Code》的作者进行过一场辩论。我个人认为Osterhout教授对“抓挠”软件的观点更合理。我全程阅读了他们的辩论过程,完全认同Osterhout的观点,很少有人能让我如此认同。因此,我决定阅读他的书。我原本打算购买英文原版,但人民邮电出版社的编辑联系我,表示愿意寄书给我,我便请他们寄了这本。我收到的是2021年第二版的《软件设计的哲学》。我认为这本书很好,它没有谈论那些老生常谈的“红灯”问题,而是直接探讨非常具体的设计理念,并指出了当前设计中存在的一些问题。书的封面很好地传达了其核心思想:我们现在有很多软件设计上的混乱,需要将其理顺。如何让软件设计更顺畅?这本书讨论了软件出现问题的诸多原因。我曾在视频中提到过,暗色模式(Dark Mode)与我之前提到的概念非常相似。软件结构的复杂性、隐藏的复杂性,理论上,暗色模式和亮色模式不仅仅是将文字从黑色变为白色,背景从白色变为黑色。为什么实现起来如此困难?为什么这么多软件都做不好,甚至还有很多地方出错?这就是因为设计的复杂性。在开发时,你可能没有注意到这种复杂性,但它最终会反噬你。

接下来是第七本书,《Hooked: How to Build Habit-Forming Products》。我最近的视频中多次提到“红钩理论”。如果你不想一辈子只写代码,想了解如何成功打造产品,如何使其获得成功,并有一个更系统的理解,那么你一定要学习“红钩理论”。如果说《人月神话》是项目管理的圣经,那么“红钩理论”就是产品管理的圣经。我个人认为这两本书是两本“圣经”。你与事物互动越多,就越会觉得这个理论非常棒。就像你参与的项目越多,就越会觉得《人月神话》真的了不起。Frederick Brooks凭借《人月神话》获得了图灵奖(Turing Award: 计算机科学领域的最高荣誉,被誉为“计算机界的诺贝尔奖”),这足以说明其影响力。他真的没有错过任何一点,总是正确的。

第八本书是**《平台革命》(Platform Revolution)。这本书有点私人化,但它系统地总结了平台型服务和系统。例如,我们常说的电商系统就是平台型的。YouTube也是一个平台,我们创作者创作内容,你们观看。它只是一个舞台。《平台革命》(Platform Revolution: 描述了平台型商业模式如何颠覆传统行业,通过连接生产者和消费者创造价值)这本书是我见过解释平台运作细节最具体、最深入的,它不是泛泛而谈。例如,第一章就解释了基本的网络效应**(Network Effect: 指产品或服务的价值随着用户数量的增加而增加的现象),如何获得网络效应,以及如何整合大量消费者和其他生产者形成网络效应。下一章是“架构”,讲述如何设计一个成功的平台,需要考虑哪些原则,如可扩展性、监管问题等,书中讲得非常详细。基本上,你可以把它当作一本教科书。如果你想开发平台类软件、服务、系统或产品,这些知识你都应该了解。再下一章是“颠覆”,探讨平台如何取代传统的服务方式,以及平台如何利用自身优势击败竞争对手的弱点。书中内容非常详细,包括第八章“治理”,讲述如何管理平台。当平台规模扩大后,很多事情无法手动控制,需要系统化,需要有规则和流程来自动处理一些常见问题。如何衡量什么才是重要的,这一点也非常关键。因为在很多情况下,你可能不知道什么才是最重要的,你可能认为用户数量更重要,有时又觉得内存是最重要的。这本书详细阐述了什么重要、如何研究等。总之,整本书基本上是手把手教你如何开发这类软件和产品,你可以买来查漏补缺。

供应链管理与编译原理

第九本书是**《采购与供应链管理》**。这本书很厉害,它是唯一一本与计算机毫无关系的。我曾在某个视频中提到过它。这本书就是刘宝宏的“红宝书”系列,他出了红色、绿色、黄色三本,但这三本之间有些重复。如果只看一本,就看这本红色的。我为什么喜欢这本书?它虽然与计算机毫无关系,但神奇的是,你读这本书时会觉得它讲的东西太通用了。尽管它只谈论公共领域,但作者刘宝宏在高科技制造业(似乎与半导体相关)浸淫多年。他在讲述这些概念时,会引用他参与过的制造业案例。你看副标题“一个实习生的视角”,全书有很多例子,他讲得一点也不枯燥,全是真实案例。从这些真实案例中,你会产生一种非常奇妙的感觉。虽然他给出的例子都来自制造业和其他行业,但你可以将其应用到计算机行业和软件行业,很多事情都是一模一样的。你会觉得它在告诉你一些本质的东西。我在这本书上做了很多笔记,用了阅读App,做了200多条笔记,每一句话都让我深有感触。我甚至写了一篇推荐语:“这个系列是关于供应链的,大部分例子都在高端制造业。但这个系列之所以伟大,是因为其使用范围从农业到互联网,从CEO到程序员,无所不包。高端制造业作为20世纪第三次工业革命爆发后人才最集中的地方,一群顶级天才围绕着最新的技术工具和世界格局,经过几十年的尝试和改进,提炼出了一系列理论工具和实践手法,着实是人类智慧的精华,不学习太可惜。刘宝宏是一个很优秀的讲师,除了啰嗦一点,不过他的重点知识重复三遍也是可以理解的。他能够用很通俗、很轻松、很接地气的语言和亲身经历的案例,将大量的专业知识讲到普通人都能听懂的程度,不学习太可惜。”

第十本书和第十一本书略过,因为我已不记得第十一本书了。

第十二本书是**《编译原理》**(Dragon Book: 计算机科学领域关于编译器设计和实现的经典教材)。这本书我不太推荐所有人阅读。它虽然不深奥,但非常具体。如果你的工作不涉及编译器层面或编译结果,它对你的影响不大,你就不必阅读。我认为这本书适合那些工作与编译器非常接近的人,例如,你需要考虑编译后的优化。举一个更普遍的例子,如果你只是在数据库中做简单的查询、更新、插入,你不需要对数据库原理有很深的理解。但如果你要做复杂的查询和更新,数据库的核心原理就会对你的操作效率产生巨大影响。在这种情况下,你就需要了解数据库的原理,数据如何存储、如何分块、如何索引,查询发送后查询优化器如何做决策,数据结构的存储方式如何导致缓存刷新等。编译原理(Compiler Principles: 研究如何将高级编程语言转换为机器可执行代码的理论和技术)也是如此。如果你的二进制文件、你的软件编译后,你不需要关心更多细节,就没必要看。但如果你需要关心,我觉得你有必要去了解一下编译器的原理,这样你对你的产品就会更了如指掌,更有掌控能力。

商业模式与设计心理学

第十三本书是**《商业模式新生代》(Business Model Generation)。我纯粹觉得这本书设计得很好看。我在这本书上也做了很多标签和书签。这本书虽然谈的是商业模式,但实际上与“红钩理论”一样,它清晰地阐述了你所做事情的一些基本细节。其中最重要的一个图就是商业模式画布**(Business Model Canvas: 一种战略管理工具,用于描述、设计、评估和改变商业模式,可视化地呈现其核心要素)。你有没有办法把你想要做的事情,用这些部分清晰地描述出来?例如,最右边的客户细分(Customer Segment),你的用户群体是谁?客户关系渠道(Customer Relationship Channels),你用什么渠道联系用户?客户关系(Customer Relationship),你想与用户建立什么样的关系?长期、短期、一次性、重复性?价值主张(Value Proposition),这个价值如何呈现?关键活动(Key Activities)、关键资源(Key Resources),你为了呈现这个价值,最重要的事情是什么?最重要的资源是什么?最后一个是最重要的,你会有哪些合作伙伴?因为你不可能独自完成所有事情。接下来是成本结构(Cost Structure),你从头到尾的成本结构是怎样的?收入来源(Revenue Stream),你的稳定收入来源是什么?这个来源是源源不断的吗?如果你能把这些都填清楚,就意味着你对你想要做的事情有了更清晰的理解。否则,你的想法就是半瓶子醋,空中楼阁,不切实际。这不仅仅是创业的问题,无论是创业还是做任何软件或产品,刚才提到的这些你都应该有。你想想,如果你做的东西成本很高,为什么有人愿意为你做?如果你做的东西没有收入,那谁愿意让你一直烧钱下去?如果你没有合理的渠道,如何将这些东西传达给用户?这与创业无关,与软件无关,它是任何产品都应该能解释清楚的要点。如果你已经了解这些,那没关系。如果你觉得不理解或感到困惑,这本书会是一个很好的参考资料。《商业模式新生代》是2015年的书,到现在依然很靠谱。

下一本是第十四本书,《精益创业》(The Lean Startup)。这本书非常有名。当年“Move Fast and Break Things”这句话好像是Facebook提出的,但毕竟他们是大企业,你学不来。《精益创业》(Lean Startup: 一种创业方法论,强调通过快速迭代、验证学习来开发产品和商业模式,以最小化风险和浪费)这本书系统地解释了如何快速迭代和快速推进。它基本上是将“Move Fast and Break Things”这句话系统化成了一本书。我没有完全读完,因为对我来说很多东西已经是常识了,但对你来说可能不是,那就有价值去看一下。不过它确实比较偏向于创业,因为它主要针对的是创业场景。比起刚才那本《商业模式新生代》,我更推崇《商业模式新生代》,它更扎实。而《精益创业》有点像走捷径。它里面举了一些例子,毕竟是很多年前的书了,2011年出版的。所以它有些理念现在听起来可能有点过时,但在当时,应该算是互联网时期,如何抓住第二个互联网时代的价值,快速做好一个新产品,快速迭代,快速获得市场认同,这是一个当年比较好的方案。

第十五本书是**《设计心理学》**(The Design of Everyday Things)。各位做前端的人,这本书是好书。不过它不是完全针对计算机设计的,它讲的是日常事物的设计。中文翻译“设计心理学”非常糟糕,我不知道为什么要这么翻译,里面几乎没有心理学的内容。它只是讲日常设计的概念,但其中很多知识点和理念非常通用。它探讨了设计的灵感或侧重点是什么。例如,书中举例说明了控制设置(Control Setting),无论是软件还是硬件,只要做前端的我们肯定天天都要接触这种东西。如何让这些设计更合理?因为这些东西是给人操作的,是给用户去操作的,应该如何操作?书中还讲到很多日常生活的例子,比如灶台怎么摆放,炉子和点火控制器怎么排布比较好。如果你像我一样是纯粹的UI设计师、前端设计师,你可能觉得书中很多例子与你无关,但不可能所有都无关。因为大的道理是相通的。如何从用户的角度反推,这个设计是否合理?而不是从设计者的角度去做,先做完了,然后他会不会用,我再说。他不会用,我再在附近加上说明、备注、弹窗、问号、提示,或者新手引导。这些都是补救措施。这本书更多地是关于如何在设计之初就从用户角度出发,而不是事后修补。我认为它这一点很好,因为很多非软件的设计,你真的没有机会去修补。东西一旦生产出来,不像软件还可以打补丁。硬件的东西,一旦生产出来卖到人家那里,你就碰不了了。所以我个人推荐看一看,原文名字叫做《The Design of Everyday Things》。2013年的是更新版,原版是2002年的。谁想召回产品呢?召回一次会死人的。

算法与编程思维

有读者问对**《算法导论》**(Introduction to Algorithms)有什么看法,读了几页感觉难度颇高。《算法导论》是我大学时学习算法入门的教科书,我非常不推荐。我们所有同学都一致认为这本书不适合作为教科书,它对你的负面影响比起正面影响要大。如果你纯粹想通过它来入门算法,那就算了,它真的不适合做教科书。

最后一本是**《编程珠玑》**(Programming Pearls)。这本书怎么说呢,你没事可以看一下。其实里面绝大部分都是做题。虽然说这些题现在如果你是想要跳槽的话,你有空还是多做LeetCode,而不是看这个。看这个是你如果没有跳槽的想法,不想要刷LeetCode,但是你想要去了解一些有意思的编程题目,编程问题。你想要研究它?其实LeetCode刚出来的时候并不是为了面试而设计的。因为做一些困难的纯计算机概念题,对一些人来说其实是很有趣的事情。只不过后来那些大企业把这个东西变成了一种工具,导致整个行业都扭曲了,变成了一个纯粹为了面试、为了考试而存在的工具。但在以前的年代,像《编程珠玑》这样的书,它纯粹就是一种锻炼脑力的方式。所以如果你还保留着这一点点的兴趣,如果你没有刷题考面试的需求,不需要刷LeetCode,但你又对这种有点兴趣,就有点像脑筋急转弯那样,是成体系的智力题,主要是它很经典。你想想这多少年了,原版是1986年的,到现在已经快40年了。

好了,17本书都讲完了。