当前位置:首页 > 新闻 > 正文

计算机程序设计艺术(熟练使用文学编程(literate programming)是怎样一番体验)

新闻 2022-09-20 07:29

什么是“文学编程”?

“文学编程”是算法大神高德纳提出的编程方法,希望能用來取代传统的结构化编程方式。

高德纳何许人也?

高德纳(英語:Donald Ervin Knuth,音译:唐纳德·尔文·克努斯,1938年1月10日-),出生于美国密尔沃基,著名计算机科学家,斯坦福大学计算机系荣誉退休教授。高德纳教授是现代计算机科学的先驱人物,创造了演算法分析的領域,在多个理论计算机科学的分支做出基石一般的贡献。在计算机科学及数学领域发表了多部具广泛影响的论文和著作。1974年图灵獎得主。

高德纳也是一个有趣的人,他会奖励每一个找出他的著作中任何错误的人,他们每指出TEX的一个错误,就能得到2.56美元,因为“256美分刚好是十六进制的一美元”(256 pennies is one hexadecimal dollar);另外,对于每个“有价值的建议”,他设立了0.32美元的奖金。高德纳可以算是一名标准的黑客,他最喜欢的软件是Emacs,并曾向其作者理查·史托曼提交修补补丁。

文学编程的目的、概念与工具

正如高德纳所构想的那样,文学编程的目的是:将程序员从面向机器的枯燥思维中解放出来你,用人类日常使用的语言来自由地表达逻辑。

为了实现这一目标,高德纳定义了三个概念和两个工具:

概念1:巨集。它用来隐藏具体的实现,存在形态通常是一段自然语言的话。你可以把它直观地看作是对一段源代码的高度抽象和描述。

巨集由两个尖括号组成("<<...>>")的标记符号表示,"@"符号在noweb文件中表示一节代码的结束。"<<*>>"符号表示“根”,即最上层节点,文学编程工具要从这里展开巨集组成的网。

例子如下:

这里是由noweb程序wc.nw定义的文件wc.c的概述:

<<*>>=

<<包含头文件>>

<<定义>>

<<全局变量>>

<<函数>>

<<主程序>> @

概念2:绕出。众所周知,计算机最终能识别和运行的是二进制文件,所以上述用自然语言描述的文学源文件,必须通过工具转换成可编译、执行的形态,这个过程称为“绕出”(tangled)。

概念3:织出。相信80%以上的程序员都比较讨厌写文档。将文学源文件的信息抽取出来,形成可读性高的文档的过程,称为“织出”(woven)。

工具1:WEB。它是第一种实现“文学编程”的语言。如前面所讲到的,它的目标是通过在描写性的文字中嵌入源代码,让开发者如同创建文学作品一样编写软件;而非像其他大多数编程语言中一样。相反,所采用的结构更注重人阅读要求,而非编译器的要求。

CWEB是WEB的C语言新版本。

工具2:noweb。是另外一种借鉴了WEB的文学编程工具,但是它的优势在于与语言无关。

这里的代码块做了计数的工作,这正是wc存在的目的,实际上非常容易写。我们查看每一个字母并且如果它是一个单词的开始或结束,则会更改状态。

文学编程的体验

文学编程使得用自然语言进行编程变得可行,而且把传统的“树形编程思维”转换成了“网状编程思维”。后者更符合人类大脑的工作方式——想想人脑的神经元是如何连接的。

来看看高德纳的原话:

"我感觉自顶向下和自底向上是两种截然相反的方法论:一个更适合分析程序,一个更适合创建程序。但是,使用WEB编程后,我意识到不必在自顶向下和自底向上之间艰难抉择,因为我们最好把程序的结构看作网状而不是树状的。层级结构是存在的,但对于程序来说,最重要的是其结构的关系。一个复杂的软件由多个简单部分和它们之间的简单关系构成。程序员的任务是用人类最易理解的顺序,而不是用像自顶向下或自顶向上之类刻板僵硬的顺序,来描述清楚这些部分和关系。"

最后的一点补充

巨集和标准文档中的“节名”不同。文学编程的巨集能隐藏任何代码块,并且被用于任何低层次的机器语言操作符内,常常在如"if", "while"或 "case"这样的逻辑操作符内。

<<扫描文件>>=

while (1) {

<<Fill buffer if it is empty; break at end of file>>

c = *ptr++;

if (c > ' ' && c < 0177) {

/* visible ASCII codes */

if (!in_word) {

word_count++;

in_word = 1;

}

continue;

}

if (c == 'n')

line_count++;

else if (c != ' ' && c != 't')

continue;

in_word = 0; /* c is newline, space, or tab */

}

@

标签 使用 / 熟练 / 文学 / 程序 / 编程 / 计算机 / 设计艺术 / 
最新文章
二手机械设备交易市场(二手挖掘机去哪买比较靠谱)
二手机械设备交易市场(二手挖掘机去哪买比较靠谱)

1、国内挖机的二手市场基本上以上海,深圳这两地最全最大。 2、上海那边不太了解,深圳相对知道一点。 3、早年深圳的机确实很不错,原装原机而且型号齐全,可能是深圳靠近香港...[详细]

创维酷开手机(创维酷开电视显示很抱歉,“com.ireadygo.eventdevice” 上海大闸蟹(上海哪一天吃大闸蟹) 废品收购公司(废品回收站和废品回收公司的区别) 3d效果图培训(办一个专业教3D效果图室内设计培训的培训班可行 网站推广服务(网站推广方式有哪些) 黑龙江省方正县(黑龙江方正县的杨姓是从山东来的吗) 中国工程信息网(工程信息网哪个app好) 气溶胶灭火系统(气体灭火系统有哪几种) 兄弟标签机(兄弟标签机打印机型号pt-d200怎么调汉字) 静电油烟净化器(静电除油烟净化器的工作原理是什么)
热门排行