怎么会有两个“原本”

今天很突然地发现裘宗燕老师还翻译了一本《编程原本》,英文名是”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”。算了,就这样吧!我的英文还没有好到可以较真这个东西的地步……

展开阅读全文

怎么会有两个.designer.cs文件呢????

07-04

在设计窗体时,有一个FrmMain.designer.cs文件,运行时却又出来一个FrmMain1.designer.cs文件。前一个文件是添加控件时 的设计代码,而后一个文件不知到是怎么回事,代码如下: partial class FrmMainrn rn rn /// rn /// 强类型资源类,用于查找本地化字符串等。rn /// rn // 此类是由 StronglyTypedResourceBuilderrn // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。rn // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGenrn // (以 /str 作为命令选项),或重新生成 VS 项目。rn [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]rn [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]rn [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]rn public class FrmMainrn rn private static global::System.Resources.ResourceManager resourceMan;rn rn private static global::System.Globalization.CultureInfo resourceCulture;rn rn [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]rn internal FrmMain() rn rn rn /// rn /// 返回此类使用的缓存 ResourceManager 实例。rn /// rn [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]rn public static global::System.Resources.ResourceManager ResourceManager rn get rn if (object.ReferenceEquals(resourceMan, null)) rn global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DocdumentManager.UILayer.FrmMain", typeof(FrmMain).Assembly);rn resourceMan = temp;rn rn return resourceMan;rn rn rn rn /// rn /// 为使用此强类型资源类的所有资源查找rn /// 重写当前线程的 CurrentUICulture 属性。rn /// rn [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]rn public static global::System.Globalization.CultureInfo Culture rn get rn return resourceCulture;rn rn set rn resourceCulture = value;rn rn rn rn public static System.Drawing.Point menuStrip1_TrayLocation rn get rn object obj = ResourceManager.GetObject("menuStrip1.TrayLocation", resourceCulture);rn return ((System.Drawing.Point)(obj));rn rn rn rn public static System.Drawing.Point toolStrip1_TrayLocation rn get rn object obj = ResourceManager.GetObject("toolStrip1.TrayLocation", resourceCulture);rn return ((System.Drawing.Point)(obj));rn rn rn rn public static System.Drawing.Bitmap toolStripButton1_Image rn get rn object obj = ResourceManager.GetObject("toolStripButton1.Image", resourceCulture);rn return ((System.Drawing.Bitmap)(obj));rn rn rn rn运行时提示错误:错误:类型“DocdumentManager.UILayer.FrmMain”的声明上缺少 partial 修饰符;rn 存在此类型的其他分部声明 论坛

没有更多推荐了,返回首页