对文式编程的一些误解

几年前,王垠写了一篇批判文式编程的文章『On literate programming』(http://yinwang0.wordpress.com/2011/05/18/literate-programming )。他在 2014 年写的一篇文章『我和权威的故事』(http://www.yinwang.org/blog-cn/2014/01/04/authority ) 中还是坚持着原有的观点。

他的主要观点如下:

  • 文式编程会弄丢大图景;

  • 文式编程工具不具备解析程序代码的能力,只是将代码分割为一段一段的文本,会导致变量作用域混乱,引入潜在的 bug;

  • 文式编程是企图用人类的语言取代编程语言,而人类不是至高无上的,人类的语言是不精确的,程序语言却是在很多方面高于人类语言的,它不应该受到人类语言里的糟粕的影响……程序代码不应该迎合个别人的认知习惯,它应该符合它的建模的概念本质(The nature of the concept it models);

  • 文式编程会导致代码浏览困难。

在我看来,文式编程只不过是注解程序的一种比较另类的方式——用写篇文章或写本书的方式来注解一个程序,并非是说程序代码必须像人类语言一样。这只是个编程习惯而已,它并非拯救软件工程的银弹,可能连弹都算不上……Knuth 本人在他的文式编程论文里强调过:『I must warn the reader to discount much of what I shall say as the ravings of a fanatic who thinks he has just seen a great light』。

至少到现在为止,人类的语言依然是人类彼此理解的最基本的工具。脱离了人类语言,给你 E = mc^2 这个非常简单的程序,你未必知道它在说什么,以及这个程序可以用于计算哪些问题。未承载物理解释的形式化描述是没有任何意义的,无论它有多么准确。既然数学公式本质上就是程序,而有些人说他写的程序代码是自明的,事实上他将代码中的变量及函数名设成了人类语言的词汇,这恰恰可以证明,程序语言无法脱离人类语言。即使 E = mc^2 中出现的字母也都是人类语言词汇的首字母。

有些人自己所研究的领域里的各种形式化模型非常熟悉,训练有素,他们能够对领域问题相关的程序代码有着直觉上的认识。倘若代码交流只限于他们与同行之间,那么非形式化语言通常是不必要的。然而,初学者总是有的,否则知识无法承继。有着良好注解的代码,可以降低门槛,这就是文式编程的存在意义。

文式编程是在承认非形式化的人类语言与形式化的编程语言存在对立性的前提下尝试对它们进行统一,并非是用前者来干扰后者。

阅读 1.9k

推荐阅读
while(1) { }
用户专栏

NULL

233 人关注
125 篇文章
专栏主页
目录