文学编程与Emacs

文学编程

文学编程,和绝大多数的计算机理论一样,是一个舶来品。它的英文原名是Literate Programming。“把文学和编程两个风马牛不相及的东西揉到一起,也是一个够奇葩的说法了吧!”。第一次看到这个概念的人,包括我,一定都是这个想法。确实,文学需要我们充分的展开感性的翅膀,感受生活中的遐思;编程需要我们具有严谨的理性思维,务必做到事无巨细,事必躬亲。这两样完全不一样的东西要联系在一起,确实需要“一定”的想象力啊!

然而,文学编程的想法是由计算机大师高德纳提出来的,那一定是有不同寻常的地方。让我们来看看感性和理性的碰撞会产生出什么样的火花。

关于高大师,维基百科是这样介绍老人家的:

唐納德·爾文·克努斯(英语:Donald Ervin Knuth,漢名:高德納,1938年1月10日-),出生於美国密尔沃基,著名计算机科学家,斯坦福大学计算机系榮譽退休教授。高德纳教授為现代计算机科学的先驅人物,創造了演算法分析的領域,在數個理論計算機科學的分支做出基石一般的貢獻。在计算机科学及数学领域发表了多部具广泛影响的论文和著作。1974年圖靈獎得主。

高德纳最為人知的事蹟是,他是《计算机程序设计艺术》(The Art of Computer Programming)的作者。此書是計算機科學界最受高度敬重的參考書籍之一。此外還是排版軟件TeX和字型設計系統Metafont的发明人。提出文学编程的概念,並創造了WEB與CWEB軟體,作為文學編程開發工具。

什么是文学编程

首先我们来看看文学编程在维基百科中的定义:

文学编程(英语:Literate programming)是由高德纳提出的编程方法,希望能用來取代结构化编程范型。

正如高德纳所构想的那样,文学编程范型不同于传统的由计算机强加的编写程序的方式和顺序,而代之以让程序员用他们自己思维内在的逻辑和流程所要求的顺序开发程序。文学编程自由地表达逻辑,而且它用人类日常使用的语言写出来,就好像一篇文章一样,文章里包括用来隐藏抽象的宏和传统的源代码。文学编程工具用来从文学源文件中获得两种表达方式,一种用于计算机进一步的编译和执行,称作“绕出”(tangled)的代码,一种用于格式化文档,称作从文学源代码中“织出”(woven)。

虽然第一代文学编程工具特定于计算机语言,但后来的工具可以不依赖具体语言,并且存在于比编程语言更高的层次中。

文学编程的特点

文学编程讲究的是文档与计算机程序的统一。需要按照某种逻辑组织起来的计算机程序,成为了一篇文档的组成部分。通过一些计算机软件的支持,使得计算机可以调去其中的代码以便执行,人类读取文档方便进行代码的维护。因此

  • 文学编程里,文档和计算机程序是合并在一起的。开发文档和计算机代码不再独立存储
  • 文学编程需要具有一定的组织逻辑,这个逻辑更多的是符合人们阅读文档的逻辑。
  • 支持文学编程的开发环境会自动提取用于计算机执行的代码,交由计算机执行
  • 文学编程是比计算机编程更高级的一种开发方式。对于开发IDE的依赖更多
  • 目前文学编程还没有成为主流的编程方式。文学编程还需要更多推广和计算机开发环境的支持。

Emacs对文学编程的支持

通过org mode里的babel模块,可以实现对五十余种语言按文学编程的方式进行代码开发。同时由于Emacs的开放性,开发者还可以根据自己的需求方便的定义新的语言支持。Org mode的文档中甚至为此而提供了一个template(ob-template.el)。

这里是一个我的Emacs的启动配置文件。我采用的文学编程的方式对代码进行组织。有图有真相:

按文学编程方式组织的Emacs配置文件
按文学编程方式组织的Emacs配置文件

这种编程方式解决了几个我的痛点:

  1. Emacs 配置文件中的代码很多,用处也各有千秋。
    修改代码的时候我希望能有一种快速定位的方法。显然,符合自然语言的文档组织方式是最简单的
  2. Emacs 配置文件中的代码有一些我已经不再使用了,但舍不得删除。
    为了供将来参考,我保留不再使用的配置代码在我的Emacs配置文件中。这时,只需要调整代码块的参数即可。
  3. 对于一部分逻辑比较复杂的代码片段,可以进行详细的描述
    在描述代码的时候,甚至可以吧代码设计的想法和过程写进去。这个和写代码的时候添加注释的感觉完全不一样啊
  4. 有了上面的这些自然语言的文档,代码的可维护性得到了提升
    说实话,我也不是每天都会吧自己的Emacs配置文件打开来看看。时间长了,自己的代码,自己都不认识了。在我使用Vim的时候,我自认vim的配置文件我已经写的很好了,但是现在我回去看,代码的组织方式已经被我遗忘了。要重新捡起来,还需要一些时间恢复记忆。:P

我应该使用文学编程吗?

说实话,这个问题应该问你自己哦。我觉得使用文学编程在管理我自己的Emacs配置文件上是有效的、简便的。当然也有国外的大牛在使用文学编程的方式进行科学研究。对于他们来说,研究的数据执行结果也不过是文档中的一个代码块而以。也将不同类型的编程语言按照一种统一的方式组合在了一起,共同为研究报告的编写贡献数据。

说实话,我认为对于这种新的编程方式,了解了解是有好处的。你说呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容