t****a 发帖数: 1212 | 1 这是Knuth在84年提出的编程方式。
http://en.wikipedia.org/wiki/Literate_programming#Further_readi
我是个data scientist, 坚持这种编程方式已经有3年了。我使用过的literature
programming语言中包有R, python, lisp, clojure, sql, graphviz等。现在在使用的
literature programming tool是emacs org-mode+babel。自我感觉,这种方式刚开始
很难上手,习惯了以后,大大提高了我的工作效率。
这确实是一种很少人使用的技术。
我也能理解很多朋友对这种方法的质疑。毕竟它从提出开始有30年了,目前为止没有大
规模应用。可是我们知道很多学术概念到应用之间会相隔很久。比如OO的概念是60年代
就提出的。80年代C++出现之后才开始逐渐开始大规模应用。
Literature Programming (LP)的过程,就我的体会,更象是设计的过程,而且把设计
贯穿了整个编程序的始终。它强迫我在写程序之前仔细思考描述程序的逻辑,在整个项
目中的地位等。
在网上我看到了很多对LP的质疑,其中一种质疑是,程序并不是论文,不能够按照文章
的形式来组织程序逻辑。这里就问了一个很好的问题:程序究竟是以什么形式组织的?
文章又是以什么形式组织的?两者有相似之处么?
在我看来,两者都采用的是数据结构中的LIST(散列表)形式来组织。论文分为章,节,
小节,段落;程序也可以分为不同的逻辑分块,每个逻辑分块又分为各个小块,上层的
逻辑分块调用下层的逻辑小块,其中也存在交叉调用,就好像一篇论文内部的交叉引用
。从这个意义上说,LP的过程是自顶向下的设计过程。
支持我的论点的,经典的例子就是java里包的树状结构。
事实上,LP并不反对test case。我认为test就应该算作整个LP中的一个重要的章节:)
LP的优点,是它可以使用包括语言在内的各种方式来帮助/强迫程序设计师在code前进
行设计。同时生成高质量的文档,对于维护程序非常有价值。我经历的一个很好的例子
是一个比较复杂的operational research分析程序,从开始第一版到最后定型,中间经
历了很多的需求改变过程,LP在其中大大节省了我的时间。有些朋友觉得javadoc就是
个很好的LP工具,可在我看来,它不强迫先设计后写的过程,同时生成的文档又有诸多
限制(比如它只能支持文字),因此不能算作LP工具。
目前LP的局限之处是缺乏足够的工具来帮助程序员高效率的做LP。我曾尝试过一些不同
的工具,最后感觉emacs中的org-mode和org-babel配合一些自己写的emacs lisp宏对我
很合适。
Knuth有一本关于LP的书,我才刚刚开了个头,里面我相信会看到他的非常有价值的建
议。
非常欢迎各位朋友来讨论这个问题,我们相互提高。 | a*w 发帖数: 4495 | 2 我觉得LP对开发者要求比较高,需要很强的纪律性。
【在 t****a 的大作中提到】 : 这是Knuth在84年提出的编程方式。 : http://en.wikipedia.org/wiki/Literate_programming#Further_readi : 我是个data scientist, 坚持这种编程方式已经有3年了。我使用过的literature : programming语言中包有R, python, lisp, clojure, sql, graphviz等。现在在使用的 : literature programming tool是emacs org-mode+babel。自我感觉,这种方式刚开始 : 很难上手,习惯了以后,大大提高了我的工作效率。 : 这确实是一种很少人使用的技术。 : 我也能理解很多朋友对这种方法的质疑。毕竟它从提出开始有30年了,目前为止没有大 : 规模应用。可是我们知道很多学术概念到应用之间会相隔很久。比如OO的概念是60年代 : 就提出的。80年代C++出现之后才开始逐渐开始大规模应用。
| t****a 发帖数: 1212 | 3 哎,我自己就是个自由散漫毫无纪律观念的家伙...
【在 a*w 的大作中提到】 : 我觉得LP对开发者要求比较高,需要很强的纪律性。
| g******w 发帖数: 78 | 4 做data analysis用这个着实不错,我也用noweb。但觉得在develop software时未必合
适。 | L*****k 发帖数: 327 | 5 赞coding学术贴~
【在 t****a 的大作中提到】 : 这是Knuth在84年提出的编程方式。 : http://en.wikipedia.org/wiki/Literate_programming#Further_readi : 我是个data scientist, 坚持这种编程方式已经有3年了。我使用过的literature : programming语言中包有R, python, lisp, clojure, sql, graphviz等。现在在使用的 : literature programming tool是emacs org-mode+babel。自我感觉,这种方式刚开始 : 很难上手,习惯了以后,大大提高了我的工作效率。 : 这确实是一种很少人使用的技术。 : 我也能理解很多朋友对这种方法的质疑。毕竟它从提出开始有30年了,目前为止没有大 : 规模应用。可是我们知道很多学术概念到应用之间会相隔很久。比如OO的概念是60年代 : 就提出的。80年代C++出现之后才开始逐渐开始大规模应用。
|
|