文学化编程

Donald Knuth at the IBM 650 console; illustration bySiobhán K Cronin

学计算机科学的人,基本都听说过这么一套书,叫《计算机程序设计艺术》。作者是大名鼎鼎的 Donald E.Knuth,中文名叫高德纳。这个中文名怎么来的,我也不清楚,幸好叫起来还满顺口。这位老爷爷长这样:

高德纳是斯坦福大学的荣誉退休教授,是计算机科学家,也是数学家。比尔盖茨曾今说过:“如果你觉得自己是个好程序员,那一定要读《计算机程序设计艺术》。若是整套书都读完了,那请把简历发给我。”

这是一本高级选手要读的书。如果你才刚入门计算机,先收藏可以,但别读,我怕你会对计算机失去兴趣。

其实,我今天想推荐的不是高德纳的这套书。我要推荐的是高德纳提出的一个理念:Literate Programming (文学化编程)。这是什么意思呢?看看高德纳本人在1984年是怎么说的:

I believe that the time is ripe for significantly better documentation of programs, and that we can best achieve this by considering programs to be works of literature. Hence, my title: "Literate Programming."

我认为,用更好的方式记录程序的时机已经成熟了,并且我们要通过把程序看成文学作品的方式来达到这个目的。因此,我的标题:“文学化编程。”

Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.

我们要改变构造程序的传统态度:不要想象我们的主要任务是指导计算机做什么,我们应该要集中精力向人类解释清楚我们想要计算机做什么。

The practitioner of literate programming can be regarded as an essayist, whose main concern is with exposition and excellence of style. Such an author, with thesaurus in hand, chooses the names of variables carefully and explains what each variable means. He or she strives for a program that is comprehensible because its concepts have been introduced in an order that is best for human understanding, using a mixture of formal and informal methods that reinforce each other.

文学化编程的实践者可以被看做是一位散文作家,其主要关心点在详细阐述和风格上的杰出。这样一位作者,手里拿着同义词词典,仔细挑选变量的名字并解释每个变量的含义。他或她要争取让程序可以被理解,因为程序会按照最易于人类理解的秩序介绍概念,混合使用相辅相成的正式的和非正式的方法。

软件工程发展至今,不断强调的一个原则就是易读性。效果一样的两套代码,一套人能读懂,另一套人读不懂,那后者肯定更好。我们永远要记住,程序,尤其是现代的程序,不仅是写给计算机执行的命令,还是写给人读懂的文稿。

最后,许多用Python的数据科学家都会使用一个叫Jupyter Notebook的工具,而这个工具就是对文学化编程的实践。我推荐每个人学习一点Python,了解一下Jupyter Notebook,做未来的文学家。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180918G1WWI000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券