怎么会有两个“原本”

书评书摘 专栏收录该内容
25 篇文章 0 订阅

今天很突然地发现裘宗燕老师还翻译了一本《编程原本》,英文名是”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
    点赞
  • 1
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

内容简介编辑 这不是一本很容易读的书,它也不是能提升你的编程技能的秘诀和技巧汇编。本书的价值是更根本性的,其终极目标是提升你对编程的洞察力。要想从中大获裨益,你需要从头到尾认真学习:阅读代码,证明引理,完成练习。到结束之时,你将看到如何把这里讨论的演绎方法应用到你的程序中,保证你做出的软件部件能一起工作,并表现出它们所应该表现的行为。 书中给出的算法和需求针对某些被操作的类型。关这些描述的代码(也可以通过Web得到)采用C++的一个小子集书写,这样做是为了让所经验的程序员都能理解。这个小子集可以看做一种特殊语言,是由Sean Parent和Bjarne Stroustrup一起设计的。 无论你是一位软件开发者,还是其他以编程作为一项重要活动的专业人员,或者是一名在校的学生,你都逐渐理解本书的经验丰富的作者多年来一直在教授和阐释的道理:数学对于编程是绝好的东西,理论对于实际是绝好的东西。[1] 编辑推荐编辑 追溯数学原理,探求编程的本质 STL之父Alexander Stepanov力作 C++之父Bjarne Stroustrup鼎力推荐 北大数学学院教授裘宗燕老师倾情献译 作者简介编辑 Alexander Stepanov 于1967~1972年间在国立莫斯科大学学习数学,从1972年开始在苏联,1977年移民后继续在美国从事编程工作。他编写过操作系统、编程工具、编译器和各种程序库。他在程序设计基础方面的工作先后得到GE、Polytechnic、AT&T、惠普、SGI和Adobe的支持。1995年因C++标准模板库的设计获Dr. Dobb, Journal的程序设计杰出贡献奖。
本书将演绎方法应用于程序设计,讨论程序与保证它们能正确工作的抽象数学理论之间的联系。书中把理论的规程、基于这些理论写出的算法,以及描述算法性质的引理和定理一起呈现给读者。 第1章 基础 1 1.1 理念范畴:实体,类别,类属 1 1.2 值 2 1.3 对象 4 1.4 过程 6 1.5 规范类型 7 1.6 规范过程 8 1.7 概念 10 1.8 总结 14 第2章 变换及其轨道 15 2.1 变换 15 2.2 轨道 18 2.3 碰撞点 21 2.4 轨道规模的度量 27 2.5 动作 28 2.6 总结 29 第3章 可结合运算 31 3.1 可结合性 31 3.2 计算乘幂 32 3.3 程序变换 35 3.4 处理特殊情况的过程 40 3.5 参数化算法 43 3.6 线性递归 44 3.7 累积过程 47 3.8 总结 48 第4章 线性序 49 4.1 关系的分类 49 4.2 全序和弱序 51 4.3 按序选取 52 4.4 自然全序 62 4.5 派生过程组 63 4.6 按序选取过程的扩展 63 4.7 总结 64 第5章 序代数结构 65 5.1 基本代数结构 65 5.2 序代数结构 70 5.3 求余 72 5.4 最大公因子 76 5.5 广义gcd 79 5.6 Steingcd 81 5.7 商 82 5.8 负量的商和余数 84 5.9 概念及其模型 87 5.10 计算机整数类型 88 5.11 结论 89 第6章 迭代器 91 6.1 可读性 91 6.2 迭代器 92 6.3 范围 94 6.4 可读范围 97 6.5 递增的范围 106 6.6 前向迭代器 108 6.7 索引迭代器 113 6.8 双向迭代器 114 6.9 随机访问迭代器 115 6.10 总结 117 第7章 坐标结构 119 7.1 二叉坐标 119 7.2 双向二叉坐标 123 7.3 坐标结构 129 7.4 同构,等价和序 129 7.5 总结 137 第8章 后继可变的坐标 139 8.1 链接迭代器 139 8.2 链接重整 140 8.3 链接重整的应用 147 8.4 链接的二叉坐标 151 8.5 结论 155 第9章 拷贝 157 9.1 可写性 157 9.2 基于位置的拷贝 159 9.3 基于谓词的拷贝 166 9.4 范围的交换 174 9.5 总结 178 第10章 重整 179 10.1 置换 179 10.2 重整 182 10.3 反转算法 184 10.4 轮换算法 188 10.5 算法选择 196 10.6 总结 200 第11章 划分和归并 201 11.1 划分 201 11.2 平衡的归约 207 11.3 归并 212 11.4 总结 218 第12章 复合对象 219 12.1 简单复合对象 219 12.2 动态序列 227 12.3 基础类型 233 12.4 总结 236 跋 237 附录 A 数学表示 241 附录B 程序设计语言 243 参考文献 253 索引 257
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值