202628:少就是多——《软件设计的哲学》
2026-05-27 14:43:15 · 读书笔记
使用 AI 的上限,就是人的认知上限;好的软件设计,终究是在降低复杂性,也是在维持一种工程审美。
◆ 序
前段时间团队组织买书开展业务学习,我提交了两本书的书单:一本是《软件设计的哲学》,一本是《图解大模型》。
其实这两本书我都有电子版。《图解大模型》读起来轻松有趣,深度也够;但《软件设计的哲学》就不太一样了——总是读着读着就停下来,始终推进不了。
纸质书很好地弥补了这个不足。像这种技术类、需要反复翻阅和思考的书,好的排版和完整的阅读体验对我来说至关重要。

◆ 少就是多——《软件设计的哲学》
不知道是否应了那句老话——”差生文具多”。我对阅读是有条件的,排版、装帧、字体大小,都会影响我的体验。一旦它无法让我产生阅读的愉悦感,继续读下去就变成了一种自我强迫。
差生文具多

从 2012 年年末开始,我已经告别了专业程序员的身份。之后虽然偶尔写写代码、折腾一下程序,但都是以一种”半个行外人”的角色在做。之所以说是”半个行外人”,是因为要写出一份好的程序,需要思考变量、结构、文档、依赖、测试,以及大量辅助性的工具和流程——这些远不是单人作坊能完成的。所以老实说,我只能以业余爱好者的身份继续做这件事。
写程序并不难,业余程序员里写出比专业工程师还厉害的东西大有人在。我希望能成为那样的人,但我知道,现阶段还不是。
不过严谨地说,我应该还是具备一个好工程师的某些潜质:对架构有要求,对测试有要求,希望写出高效的代码,也希望像这本书里说的那样——降低复杂性。
上限,是人的认知上限
之所以读这本书,是因为我脱离了完整的”古法编程”之后,恰逢大模型崛起,AI 和智能体的能力越来越强,很多高质量的代码已经可以由 AI 生成。
去年某个 AI 工具很火的时候,我尝试用它来写一个客户端应用,希望做到小而美、”道”而全。结果我失败了。原因很明显——没有做好架构设计,没有考虑足够多的技术细节。我只是写了一小段提示词,让它生成一份设计文档,再沿着设计文档去做,每天在有限的 token 和调用量中实现一个功能。AI 写出的代码大多只是搭了个架子,实际功能还比较弱。不过这也见证了早期 AI 代码构建的能力。一年多后的现在,已经有许多工程师和爱好者通过 AI 写出了相当漂亮的工具和程序。
虽然我暂时做不到,但我认识到一点:借助 AI 实现想法,并不意味着不需要基础。使用 AI 的上限,就是人认知的上限。

如果只是写一小段代码,AI 还是非常称手的。在我能够驾驭、理解足够深刻的领域,我对 AI 写出的代码是有要求的——一眼看过去就能发现不足,然后让它不断改进,在试用和测试中持续提出问题,很快就能产出相对高效的代码。虽然目前这个项目规模不大、功能也相对简单,但结构是完整的——不是简单地完成某种程序逻辑,而是具备了状态检测、简单的任务调度和现场恢复。这些看似”简单”的功能,恰恰是一个商用软件或正式产品的基本需求。

无论如何,作为一个曾经在一线工作过的工程师,我依然能分辨出学生代码和企业级代码的差别。但由于以前去的不是最顶尖的大厂,我的起点并不算高。这怪我——并非没有机会,而是当时的见识有限。
那些年的学习

前段时间团队外出调研,大家都在回忆大学生活。我认真想了想自己的那几年——虽然不能说不快乐,但确实没有太多闲暇。
我的大学学业安排得非常满。大一上学期完成了 C++ 的学习,下学期开始接触 Java;大二进入计算机网络体系结构、操作系统、编译原理等一系列繁重的专业基础课程;大二暑假跟着吴军博士尝试编写 Linux 文件系统和 ARM 处理器相关的程序。即便如此,当时其实有些消化不良。从一个完全不懂编程的学生到不断深入学习,在那个资讯匮乏的年代确实困难,加之我们是第一届没有师兄指路的学生,所有一切都靠自己摸索。
我似乎是从大学才开始真正认真学习的。这意味着我的中学阶段并没有好好读书——一方面是青春期的叛逆,和家里关系紧张;另一方面是和老师之间存在矛盾,所以我并不太喜欢那个阶段的老师。
除了课业,我还参加了学校的学生干部工作。来自兴趣的自驱力,加上学生工作的忙碌,已经挤占了所有的时间。倒也不是真的没时间认识女生,只是想着想着觉得太难,就干脆去写程序了。所以本科阶段,学习和学生工作都很努力,两边的回报也相对满意。
后来保研去了另一所学校,巨大的落差让一个曾经有志趣的孩子竟然放弃了深造,现在回想起来也觉得不可思议。虽然我口口声声说,在发表那篇论文之前只阅读了一篇论文,但在那种困境下我确实找到了突破点并完成了工作。实话实说,我相信在那个瞬间自己是有一定天赋的,扎实的计算机学科理论也确实帮助了工作。但这些似乎是无法量化的东西——我考试永远考不过别人,只是在实践、工程、构思和创新的时候比较活跃。以至于当我想重新回到科研一线时,已经没有机会了。在冷嘲热讽和现实的双重夹击下,我选择了放弃,再不去想。
科班出身,然并卵
我是软件工程科班生,对软件工程及相关理论非常熟悉。当年几乎把图书馆里由机械工业出版社出版的那批国外翻译教材全部看了一遍,无论懂还是不懂,先读了再说。以至于现在看这类书籍时依然感到亲切,因为核心概念和基础从未改变。
我的薄弱项在于具体的技术细节——某个继承关系、某种接口设计、某种设计模式、某种程序的编排方式。由于编程经验不能覆盖所有这些细节,遇到具体内容时偶尔会感到迷惑。
整体而言,这些理论我可能都熟知、都了解,但实际上”然并卵”。对我后续这十多年的工作来说,它们好像并没有带来太多直接的助益,反而更多地产生了一种副作用——一种”知道应该怎样,却做不到”的落差感。

好的程序,是写给人看的

这本书之所以出名,是因为它提醒我们:在 AI 时代,依然有些核心原则不可忽视。当我们不再仅仅是码农,而是一名真正的工程师,工程师的角色本质上是设计者。这不仅需要哲学观念和落地能力,还需要调试纠错的技能。因此,如何设计出一个好的程序,已经变得比如何写代码重要得多。
书中谈到了很多深刻的观点:复杂性是增量的;仅仅能工作的代码是不够的;模块应该是”深的”,而接口应该是”简单的”;要想办法降低复杂度,因为代码终究是写给人看的;要考虑如何把代码写两次,如何写好注释,以及如何将重要和不重要的信息分开。
这些都是一个优雅的工程师会去思考的东西,也是我一贯追求的目标。只是受限于能力、经验和水平,未必总能做出最优雅的设计。但就我个人的编程经历来说,我会不断重构自己的代码,甚至推翻原有结构,一版一版地打磨。这种写法没有业绩压力,也不受发版节奏限制,纯粹是因为——只有达到那种水准的东西,我才交得出手。
审美这件事,没有共鸣就不说了

所以,当我离一线越来越远的时候,已经几乎不再和别人谈论软件工程与软件哲学了。因为有同样审美的人,自然会有同样的观念;而当你发现对方在软件和程序上并没有同样的审美与苛求时,说了也是白搭。这种自取其辱的经历发生多次之后,我选择了沉默。
我并不是说自己有多深,而是说:专业程度要有一定的深度,对计算机领域要有一定的广度,并且对前沿技术要有足够深刻的认识。这种审美、知识的深度与广度,以及过往的积淀,从很多细节中就能看得出来。
一小时完成以前一天的工作

今年年初生成式 AI 异军突起之后,很多流程和工作流都变得高效了。我也在不断地写程序、构建自己的想法,持续尝试用好手上的 AI 能力。
比如我现在已经完成了一套写读书笔记和播客的新工作流:用 Typeless 口述,记录并整理思考和内容;接着利用大模型调整和连贯口语表达;再对内容做一次完整审阅,整合惯用描述、删减重复冗余、调整需要修改的部分;调用文生图大模型生成插图;借助相关工具和微信公众号平台的 API 接口实现自动化排版,将插图自动插入并放入草稿箱;最后再进行整体的编辑和审校。
完完整整走一遍流程,现在一个小时就能搞定。而以前光是打字输入、整理理顺、生成图片,可能就要花上好几个小时甚至好几天。我想,这就是 AI 与我的生活目前最紧密的一种结合。
◆ 结语

“唯有热爱,可抵漫长岁月。”
二十多年前,当我踏入这个领域的时候,我就相信自己是愿意投入的,愿意把它变成生活的一部分。虽然那时候它不一定是我最热爱的方向,而我也并不知道自己最擅长什么、天赋在哪里。
但经过这么多年一贯的心血倾注,我所喜爱的终究造就了现在的我。
对我来说,我永远拥有创造力,永远愿意接触新的技术,去感受最前沿的设备与科技;我愿意思考,愿意交流,也愿意去做一些代码及相关的工作。不一定能做得多么领先傲人,但我热爱,我投入,我开心——好像也就足够了。
夜雨聆风