产品沉思录 产品沉思录 产品沉思录 产品沉思录
Donald Knuth 写给人类的程序

Donald Knuth 写给人类的程序

fonter

Donald Knuth强调编程应以人类理解为核心,提出“文学编程”概念,主张程序应同时包含文档和代码,关注代码的可读性和可维护性。他认为,编写程序时应遵循人类思维逻辑,而非仅仅满足计算机语法,鼓励使用有意义的名称和结构化的段落,以便未来的自己和他人能够理解和维护代码。

01#人物:Donald Knuth,程序是写给人类看的

编辑:不管写文章、写程序也好,表达总是来理清自己的。

Donald Knuth
Donald Knuth

简介

美国计算机科学家,算法分析之父

Knuth 家中定制的管风琴,他的兴趣:音乐 → 物理 → 数学 → 计算机 → 排版印刷
Knuth 家中定制的管风琴,他的兴趣:音乐 → 物理 → 数学 → 计算机 → 排版印刷

写给人类的程序

我是做什么的?

1967 年,Knuth 参加学术会议,有人问他是做什么的。

当时计算机科学还没有真正的自我认同。学科被粗略地划分为三个方向:做计算的、做智能的、做编程语言的。

Knuth 回答不出来。后来他决定,再有人问起时,他会说:我研究算法

他甚至提出过一个更根本的建议:与其叫“计算机科学”,不如叫“算法学”(algorithmics)。

Knuth 认为人与人之间最好的沟通方式是通过故事。

在那个时代,大量计算机论文质量低劣,甚至本质上是错的。

Knuth 的直觉是:我们正身处一个全新的领域,但这个故事被讲得太糟了。

他想做的事很简单:把一个讲得很糟的故事讲清楚。

于是,他动笔编写《计算机程序设计艺术》,一套七卷本的系统巨著,用来讲清楚程序设计的本质。

向人类解释我们希望计算机做什么?

他在编写出版《计算机程序设计艺术》时,出版商放弃了旧的出版技术,转而支持照相排版。

他对照相排版法达到前几卷的质量感到非常沮丧,于是花时间研究了数字排版,亲手开发 TeX。

但更大的转变还在后面,在设计排版系统的过程中,他突然意识到:

我们写程序,是不是太关注“让机器能跑”,而忽略了“让人能懂”?

与其想象我们的主要任务是告诉计算机该做什么,不如让我们专注于向人类解释我们希望计算机做什么。

这个转念,改变了他的写作方式。他提出一个新概念:文学编程(Literate Programming)。

文学编程

写程序时,不妨问自己:如果这段代码是你未来十年后要阅读的,你现在会怎么写给自己看?

Knuth 认为,传统的编程方式过于关注“让计算机执行”,而忽视了“让人理解”。

这导致程序难以维护、难以合作、更难复用。

现在他想推动下一步进化,写“有文学性的程序”,即“Literate Programming”。

写给人看的代码,是另一种写作。

编写顺序是“心理顺序”

段落式结构:一个思想 + 一段解释 + 一段代码

名字就是文档:用“可读的名称”组织程序

模块不是“先写好”,而是逐步展开

Knuth 所谓“文学编程”,不是搞浪漫,也不是故作风雅,而是回到一个基本问题:

你写下的东西,别人能不能理解?未来的你还能不能读懂?

这背后的信念是:程序不仅是一堆命令,更是一个人思考的痕迹。

写得清楚,才能看见自己的思路;

表达得明白,才更知道自己在干什么。

参考