怎么会有两个“原本”

今天很突然地发现裘宗燕老师还翻译了一本《编程原本》,英文名是”Elements of Programming”,是C++的STL库之父Alexander Stepanov,简单地说就是“一个大牛”。而看到这个书名的时候,就是一惊:撞衫撞脸撞书名,我那本《程序原本》的英文名原本也是打算用”Elements of Programming”的呀。

这里写图片描述

这两本书的介绍在这里:

Alex这本书是2009年出的,中文版则等到了2012年。所以我写《大道至易》的时候并不知道这本书,这很正常。到2012年《大道至易》发行的时候,我在“程序原本”这一篇上用的标题是“程序源流”,是再到后来把这一部分独立成书并打算出电子版的时候,才用回到更早拟的名字,也就是《程序原本》。

于是现在就有了两个“原本”:《编程原本》和《程序原本》。

我仔细读了读Alex的《编程原本》,感叹于裘宗燕老师精准的翻译——是的,没错,这本书确实应该叫“编程(Programming)原本”。Alex在讲的,根本就不是“程序是怎么一回事”,而是“怎么写出好程序”——编程源于数学,因而可以从一个数学系统的构建和演进来理解编程的精髓,并“(或许就是)希望基于这种思维方法和开发技术,为范围广泛的软件系统建立起坚实基础”。由于这样的观念,Alex的《编程原本》中的数学系统既不是严格学术上的数学,也不是一般含义上的计算机系统。

在书中,Alex用于定义/构建数学系统的篇幅很小,也就是第一章(“基础”,14页)。而在这14页中,用于讨论“数/数据”的篇幅更少,大概只有3~4个小节。在全书接下来的篇幅中,Alex就基于这样的数学系统开始设计和分析算法,并以之解决实际问题了。

这与我在《程序原本》中讲述的内容与方法完全不同,并且存在着根本观念上的不同。在《程序原本》的第一个小节中,我就通过一个断言“算是程序之表,数是程序之本”,将整本书定调在了对“数”的讨论之中。由数的结构化延伸到算的结构化,以及后面的应用和系统的结构化,其本质上是在讨论:如今在“程序”中出现的种种元素,无非是大家在“结构化”这一个求解方向上的所得。因此我才在《我的架构思想》中提出了我对这所有观察作出的结论:程序是可被组织的元素。并由此提出进一步的观点:结构化——只是“程序是什么”的一个解,而绝非唯一解。

所以,我其实是在讨论“程序(Program)的原本”,而Alex在讨论的是“编程(Programming)的原本”。正是因此,《程序原本》中看到的就是数据,或者结构化视角下的可组织元素;《编程原本》中看到的就是数学系统,以及由此构建的算法与实现。

算法 + 数据结构 = 程序这个经典的描述中,我讨论的是“数据结构”的问题,并进一步的讨论了“对数据、算法和程序的结构化”的问题,而Alex讨论的是算法问题。源于这种分析问题的剖面不同,Alex的《编程原本》要求读者有较高的数学基础,而《程序原本》则几乎对此没有什么要求——所以你看我在致谢中就只感谢了“我的小学数学老师”。^^.

不过《程序原本》要求你有很好的抽象思维能力,你可以把整本书看成一个完整的抽象思维与论证的训练过程——如何拿着最基础、简单的“数”的概念与原则,构建出对整个的系统描述。这本书回顾了你所有见到过的“程序”的样子,以及这些“样子”背后的逻辑,但是却并不教你写一行有效的代码、一个有用的算法,或者一个看起来有明确运行逻辑的系统。

算是程序之表,数是程序之本。

又:

我最终觉得我在这本书的英文译名上还是犯了“严重且不可饶恕的错误”,所以只好悻悻然地将所有已经用过英文名的地方(例如github上)都进行了修改。我的《程序原本》这本书,今后就只用“Elements of Program”这个英文的书名吧。

好象更确切的译法是“Elements of Programs”?比如“算法 + 数据结构 = 程序”原书名就是“Algorithms + Data Structures = Programs”。算了,就这样吧!我的英文还没有好到可以较真这个东西的地步……

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
编程原本》提供了有关编程的一种与众不同的理解。其主旨是,实际的编程也应像其他科学和工程领域一样基于坚实的数学基础。本书展示了在实际编程语言(如C++)中实现的算法如何在最一般的数学背景中操作。例如,如何定义快速求幂算法,使之能使用任何可交换运算。使用抽象算法将能得到更高效、可靠、安全和经济的软件。 这不是一本很容易读的书,它也不是能提升你的编程技能的秘诀和技巧汇编。本书的价值是更根本性的,其终极目标是提升你对编程的洞察力。要想从中大获裨益,你需要从头到尾认真学习:阅读代码,证明引理,完成练习。到结束之时,你将看到如何把这里讨论的演绎方法应用到你的程序中,保证你做出的软件部件能一起工作,并表现出它们所应该表现的行为。 书中给出的算法和需求针对某些被操作的类型。有关这些描述的代码(也可以通过Web得到)采用C++的一个小子集书写,这样做是为了让所有有经验的程序员都能理解。这个小子集可以看做一种特殊语言,是由Sean Parent和Bjarne Stroustrup一起设计的。 无论你是一位软件开发者,还是其他以编程作为一项重要活动的专业人员,或者是一名在校的学生,你都逐渐理解本书的经验丰富的作者多年来一直在教授和阐释的道理:数学对于编程是绝好的东西,理论对于实际是绝好的东西。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值