几年前,王垠写了一篇批判文式编程的文章『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. 一文搞懂: 响应式编程是什么?

    文章目录 导言 响应式编程是什么? 响应式宣言 响应式系统应该具有什么特性 什么是弹性? 回弹性? 消息驱动还是事件驱动? 响应式编程相关讨论 为什么使用观察者模式 什么是背压(backPressur ...

  2. 一文搞懂 响应式编程是什么

    文章目录 导言 响应式编程是什么? 响应式宣言 响应式系统应该具有什么特性 什么是弹性? 回弹性? 消息驱动还是事件驱动? 响应式编程相关讨论 为什么使用观察者模式 什么是背压(backPressur ...

  3. 阿里专家杜万:Java响应式编程,一文全面解读

    本篇文章来自于2018年12月22日举办的<阿里云栖开发者沙龙-Java技术专场>,杜万专家是该专场第四位演讲的嘉宾,本篇文章是根据杜万专家在<阿里云栖开发者沙龙-Java技术专场& ...

  4. 响应式圣经:10W字,实现Spring响应式编程自由

    前言 全链路异步化改造的基础是响应式编程 随着业务的发展,微服务应用的流量越来越大,使用到的资源也越来越多. 在微服务架构下,大量的应用都是 SpringCloud 分布式架构,这种架构总体上是全链路 ...

  5. 响应式编程 函数式编程_函数式编程简介

    响应式编程 函数式编程 根据您要求的对象, 函数式编程 (FP)是一种应运而生的开明编程方法,或者是一种在实践中几乎没有实际好处的过于学术化的方法. 在本文中,我将解释什么是函数式编程,探讨其好处,并 ...

  6. Spring 5.0 GA版本发布,支持JDK9及反应式编程

    Spring Framework 5.0耗时两年,终于在9月28日通过Spring官方博客撰文宣告发布第一个GA版本.期间经历1年多的里程碑版本和数个RC版本,现在 5.0.0.RELEASE已正式发 ...

  7. IOS响应式编程框架ReactiveCocoa(RAC)使用示例

    本文转载至 http://blog.csdn.net/dfqin/article/details/39164241 IOS ReactiveCocoa RAC 响应式编程 RACSignal Reac ...

  8. 响应式编程入门:实现电梯调度模拟器

    据说每个程序员等电梯的时候都思考过电梯的调度算法-所以怎么动手实现一个呢?虽然这个场景貌似有些复杂,但却非常适合使用响应式编程的范式来处理.下面我们会在 RxJS 和 Vue 的基础上,一步步实现出一 ...

  9. Android什么是函数,什么是函数响应式编程(JavaAndroid版本)

    什么是函数响应式编程(Java&Android版本) 函数响应式编程(FRP)为解决现代编程问题提供了全新的视角.一旦理解它,可以极大地简化你的项目,特别是处理嵌套回调的异步事件,复杂的列表过 ...

  10. 浅谈Spring5 响应式编程

    目录 为什么是响应式编程 用于响应式编程实现的理想案例 响应流 (Reactive Streams) Spring 5 提供的响应式编程 Spring Web Reactive vs. Spring ...

最新文章

  1. python写一个文件下载器_Python3使用TCP编写一个简易的文件下载器
  2. Slide:11g新特性-在线实施补丁online patching
  3. Latex安装中知道的基础常识
  4. aix系统java堆_浅谈AIX环境下的Java性能调优
  5. 在Tomcat中配配置数据源汇总
  6. 栈溢出笔记1.8 字符串问题
  7. 11134 - Fabled Rooks
  8. UDT协议实现分析——数据发送控制
  9. 移动端 Modal 组件开发杂谈
  10. 远控免杀从入门到实践 (11) 终结篇
  11. 【Tips小技巧】电脑全屏截图网页滚动截图
  12. 分享240道有意思的逻辑思维题
  13. c语言自动生成uml,五个免费UML建模工具推荐
  14. C语言实现【关机程序】
  15. 高速下载百度网盘资料(Tampermonkey+百度网盘直链下载助手+xdown)
  16. IBM Websphere CEI Configuration
  17. 【jzoj1747】马蹄印
  18. excel如何把顺序倒过来_Excel中表格进行颠倒顺序的操作方法
  19. 抖音上热门的7大小技巧
  20. 吉首大学2019年程序设计竞赛(重现赛)A:SARS病毒(找规律 or 推公式+欧拉降幂+快速幂)

热门文章

  1. C#中RestoreDirectory属性
  2. EO CAT软件下载数据
  3. EXCEL同一个界面下打开两个表格比较
  4. 省级国土空间基础信息平台建设方案分析
  5. 源码解析 | 万字长文详解 Flink 中的 CopyOnWriteStateTable
  6. 仅 1 年 GitHub Star 数翻倍,Flink 做了什么?
  7. 老码农最后都去哪了?
  8. 理工科学生计算机要求,理工科学生
  9. 一个请求里能有多个cookie吗_从一个男人对女人家人的态度里,能看出他有多爱对方吗?...
  10. canal与mysql高可用_canal 高可用介绍(4)