`
lovnet
  • 浏览: 6694187 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

<<C++的设计与演化>>读书笔记(二)

 
阅读更多

<<C++的设计与演化>>原文摘录与自己翻译及注解

原文1:

1.There is no agreement on what a programming language really is and what its main purpose is supposed to be.Is a programming language a tool for instruscting machines? A means of communicating between programmers? A vehicle for expressing high-level designs? A notation for algorithms? A way of expressing relationships between concepts? A tool for experiment ? A means of controlling computerized devices? My view is that a general-purpose programming language must be all of those to serve its diverse set of users.The only thing language cannot be- - and survive--is a mere collection of "neat" features.

关于一个程序语言是什么和主要用途是什么不存在定论.程序语言是驾驶机器的一种工具吗? 一种程序员之间交流的手段吗?一种表达高层设计的工具吗?一种描述算法的符号吗?一种表达概念之间的联系的方法吗?一种实验工具吗?一种控制计算设备的方式吗?我认为一种通用程序语言为了服务各种各样的用户必须具备上面所有功能.而决不能只是一些"优雅"特性的集合,这样的语言肯定会灭亡.


注解:

程序语言是驾驶机器的工具,控制计算设备的方式.那自然贴近机器的构造比较好点.而不是中间隔了太多层.所以能自由的去使用内存就能比较灵活的驾驶机器.这里的机器包括电脑与嵌入式系统.

程序语言是程序员之间交流的手段,是一种表达高层设计的工具,一种表达概念之间联系的方法.那如果语言设计的更接近自然语言,更符合人们的思维习惯,更容易把业务中的问题直接映射到程序语言中就比较好点.像面向对象中的类就与平时我们喜欢给万事万物分类的思维吻合.

程序语言是算法的符号.而我们知道算法就是一系列从头到尾的执行步骤.面向过程的思想就比较适合描述算法.面向过程中最重要的就是怎么把数据组织好,然后怎么高效灵活的去操作数据.概括的讲就是数据结构与算法.

编程与练武功的类比

上面多次出现工具,方式.所以程序语言只是个帮助我们实现目的的一种外在辅助手段.打个比方,很多男生比较喜欢看武侠.有内功和外功的说法.像啥九阳神功,易筋经是练内功的.葵花宝典貌似也算内功吧.而像各种剑法,刀法就是外功.像啥孤独九剑,灭绝十字九法啊.编程中的内功是一些逻辑思维能力,一些原理性的东西,凡书名带原理两字的基本上是教你练内功的.啥计算机组成原理,操作系统原理,编译原理,数据库原理啊.而编程的外功就是程序语言.

当你内功比较厉害时可以使用任何工具打败人家用剑的.你可以以草木为剑,以掌为剑.在编程中当你对很多基础理论比较熟时,啥编程语言你都能随便拿来用.随便用啥语言都能写出很优秀的软件系统.

当然并不是说工具不重要.当两个人内功相当的时候外功就尤其重要.当你拿把破剑,而人家拿把削铁如泥的武器,比如椅天剑,屠龙刀,轩辕剑啊.那你就死定了啊.而且在一些特殊的场合,武器,工具可能比内功还重要.你内功再厉害人家孔雀翎或啥暴雨梨花针这样的暗器一搞照样挂掉.在开发一些复杂的商业WEB系统时,假如你用C,汇编这样的工具,就算你内功再厉害,也比不过人家刚出道用Java,C#,PHP这样的工具啊.

实际上Struostrup发明C++的很大一个原因也是因为用Simula这个工具时用的非常不爽.Simula语言思想很美妙,有类的概念,差不多算是第一个面向对象的语言了吧,但是这个语言的实现非常糟糕,自然是编译器写的差劲啊.所以设计一门语言时编译器也是个非常非常重要的东东啊.然后他 想整个更好的工具出来.于是在借鉴了Simula中类这个美妙的概念,然后借鉴C中的一些概念搞出了C++


原文2:

2.I sudied pure and applied mathematics ....This left me with an appreciation of the beauty of mathematics,but also with a bias towards mathematics as a practical tool for problem solving as opposed to an apparently purposeless monument to abstract truth and beauty ....Computer and programming languages can be appreciated as works of art ,but aesthetic factors should complement and enhance utility,not substitute for or compromise utility.

我以前学习纯数学与应用数学专业...这让我既欣赏数学之美又带有这样一种偏见:认为数学应该作为一种解决问题的工具,还不是做为一个没有实际用途的抽象的真理与美的作品....计算机与程序语言可以被看成一种艺术作品.但是美学的因素不应该替代和损坏其实用性,而是应该补充和增加其实用性

注解:

原来stroustrup这老兄是学数学出身的啊.很多编程高手貌似都是搞数学出身的.他也提到了程序语言是一种艺术品.这话有理,虽然有很多语法限制,但也有很多自由发挥的空间.我们能用自然语言写出美妙的诗歌,感人的散文,震撼人心的小说.

程序之美

也自然能用程序语言写出各种有趣的软件.用软件在计算机的世界中搭建起一种虚拟的丰富多彩的世界.这不就像写小说一样吗,小说家用优美的语言构建了一个个的虚拟美妙的世界.程序语言中的美应该主要还是数学之美.至于啥是数学之美呢,吴军写过一本叫<<数学之美>>的书,比较通俗易 懂举了很多有趣的例子告诉你.那里面的数学之美不是没有实际用途的抽象美,而是有非常实际的用处的数学之美,可以完全应用到软件开发中.增加软件的实用性.

有人说工科领域只有建筑能称得上是艺术品了,看来说的不准确,还应该算上软件才行呢.


原文3:

3.I feel most at home with the empiricists rather than with the idealists - the mysticists I just can't appreciate.That is,I tend to prefer Aristotle to Plato,Hume to Descartes,and shake my head sadly over Pascal.I find comprehensive "systems" like those of Plato and Kant fascinating,yet fundamentally unsatisfying in that they appear to me dangerously remote from everyday experiences and the essential peculiarities of individuals.

相较理想主义者而言,我更喜欢经验主义者--对于怀疑主义者的观点我是更加不赞同.这就是为什么我相较柏拉图更喜欢亚里士多德,相较笛卡尔我更喜欢休姆.而对于帕斯卡这样的怀疑主义者我只遗憾的摇摇头.我觉得像柏拉图和康德的那种完整的体系思想是令人着迷的,但是由于看起来过于远离日常生活和个体的必不可少的独特性让我很不满意.

注解:

由此可见stroustrup是多么讲究实用的一位老兄了吧.不过对于上面提到的天才人物们我喜欢的人和他刚好倒过来了,我是比较喜欢一些完整的体系.而相较亚里士多德我更喜欢柏拉图一点.柏拉图的书里继续沿用那老师苏格拉底的风格,用对话的形容来讨论问题,并且喜欢用些有趣的比喻.而柏拉图的徒弟亚里士多德虽然在很多方面可以说是青出于蓝了啊,但文采不如老师啊.写的有点枯燥难懂.那形而上学看的叫一头大啊.不过亚里士多德的政治学那本书写的非常不错.

而相较休姆我更喜欢笛卡尔.对这个世界多带点怀疑还是有趣一点.只要别变成彻底的怀疑主义者了.至少笛卡尔还觉得我思故我在嘛.另外笛卡尔这老兄数学造诣也绝对是天才人物了啊.我们知道从古希腊开始西方都比较看重几何,有个比较出名的例子不是希腊有个谁在园子外面挂着个牌子"不懂几何者不得入内".而代数就不太受重视.后面笛卡尔这哥们就发明了解析几何,用代数的手段来研究几何.你可能会问啥叫解析几何啊,还记得高中数学不,学的啥椭圆,双曲线,抛物线不.然后有很多代数式子描述这些几何物体的性质.这就是解析几何.而且研究平面几何时往往会整个坐标,就是所谓的X坐标,Y坐标.这样的坐标系统也是笛卡尔这哥门整出来的.你现在写代码时涉及到图形时,还会涉及到坐标啊,左上角是零点坐标,然后从左到右是X轴,从上到下就是Y坐标.

所以笛卡尔虽然看起来是个怀疑主义者,理想主义者.但人家算是先破后立,整出这么多有用的理论出来啊.

对于康德这老兄,虽然他的书没怎么看过.但他的事迹还是听说过.终生未取,一辈子呆家乡那小地方也没出过远门.一门心思研究学问,每天准时作息.对于这样牛逼严谨的人来说我只能说佩服的五体投地啊.

分享到:
评论

相关推荐

    <<C++程序设计与应用>>源码

    &lt;&lt;C++程序设计与应用源码&gt;&gt;与及Borland C++ Compiler 5.5.1,希望对C++初学者会有所帮助。

    <<C++程序设计_谭浩强 >>书中示例汇总

    &lt;&lt;C++程序设计&gt;&gt;谭浩强版本书上的所有示例汇总

    <<Visual C++ 6.0实例教程>>电子教案

    看下对VC的学习者非常有用.&lt;&lt;Visual C++ 6.0实例教程&gt;&gt;的电子教案

    C /C++库函数及文件大全 经典 chm

    Character &lt;br&gt;Standard C Math &lt;br&gt;Standard C Time & Date &lt;br&gt;Standard C Memory &lt;br&gt;Other standard C functions &lt;br&gt;All C Functions&lt;br&gt;C++&lt;br&gt;C++ I/O &lt;br&gt;C++ Strings &lt;br&gt;C++ String Streams &lt;br&gt;...

    c++中的<cstdio>实现

    c++中的&lt;cstdio&gt;实现 c++中的&lt;cstdio&gt;实现 c++中的&lt;cstdio&gt;实现 c++中的&lt;cstdio&gt;实现 c++中的&lt;cstdio&gt;实现 c++中的&lt;cstdio&gt;实现 c++中的&lt;cstdio&gt;实现 c++中的&lt;cstdio&gt;实现 c++中的&lt;cstdio&gt;实现 c++中的&lt;cstdio&gt;实现 ...

    c++中的<algorithm>实现

    c++中的&lt;algorithm&gt;实现 c++中的&lt;algorithm&gt;实现 c++中的&lt;algorithm&gt;实现 c++中的&lt;algorithm&gt;实现 c++中的&lt;algorithm&gt;实现 c++中的&lt;algorithm&gt;实现 c++中的&lt;algorithm&gt;实现 c++中的&lt;algorithm&gt;实现 c++中的...

    <<C++程序设计>>谭浩强答案及演示程序

    &lt;&lt;C++程序设计&gt;&gt; 谭浩强 第五版 答案 演示程序

    <<C++STL中文版>>

    STL(标准模板库)是在惠普实验室中开发的,已纳入ANSI/ISO C++标准。其中的代码采用模板类及模板函数的方式,可以极大地提高编程效率。本书由P.J.... 本书适合对C++有一定了解的程序员及高等院校师生阅读。

    <<Visual C++编程技巧精选>>源代码1

    在使用或测试本书中的所有实例时,建议首先安装Visual C++.Net 2003 简体中文企业版。 2.建议读者将光盘中的所有文件或程序复制在硬盘上运行。 3.在测试有关注册表方面的实例程序时,建议读者首先备份系统注册表...

    <<Visual C++编程技巧精选>>源代码5

    在使用或测试本书中的所有实例时,建议首先安装Visual C++.Net 2003 简体中文企业版。 2.建议读者将光盘中的所有文件或程序复制在硬盘上运行。 3.在测试有关注册表方面的实例程序时,建议读者首先备份系统注册表...

    <<Visual C++编程技巧精选>>源代码8

    在使用或测试本书中的所有实例时,建议首先安装Visual C++.Net 2003 简体中文企业版。 2.建议读者将光盘中的所有文件或程序复制在硬盘上运行。 3.在测试有关注册表方面的实例程序时,建议读者首先备份系统注册表...

    <<Visual C++编程技巧精选>>源代码2

    在使用或测试本书中的所有实例时,建议首先安装Visual C++.Net 2003 简体中文企业版。 2.建议读者将光盘中的所有文件或程序复制在硬盘上运行。 3.在测试有关注册表方面的实例程序时,建议读者首先备份系统注册表...

    <<Visual C++编程技巧精选>>源代码7

    在使用或测试本书中的所有实例时,建议首先安装Visual C++.Net 2003 简体中文企业版。 2.建议读者将光盘中的所有文件或程序复制在硬盘上运行。 3.在测试有关注册表方面的实例程序时,建议读者首先备份系统注册表...

    <<Visual C++编程技巧精选>>源代码6

    在使用或测试本书中的所有实例时,建议首先安装Visual C++.Net 2003 简体中文企业版。 2.建议读者将光盘中的所有文件或程序复制在硬盘上运行。 3.在测试有关注册表方面的实例程序时,建议读者首先备份系统注册表...

    <<Visual C++编程技巧精选>>源代码3

    在使用或测试本书中的所有实例时,建议首先安装Visual C++.Net 2003 简体中文企业版。 2.建议读者将光盘中的所有文件或程序复制在硬盘上运行。 3.在测试有关注册表方面的实例程序时,建议读者首先备份系统注册表...

    <<Visual C++编程技巧精选>>源代码4

    在使用或测试本书中的所有实例时,建议首先安装Visual C++.Net 2003 简体中文企业版。 2.建议读者将光盘中的所有文件或程序复制在硬盘上运行。 3.在测试有关注册表方面的实例程序时,建议读者首先备份系统注册表...

    <C和C++代码精粹>

    &lt;C和C++代码精粹&gt;&lt;C和C++代码精粹&gt;&lt;C和C++代码精粹&gt;&lt;C和C++代码精粹&gt;&lt;C和C++代码精粹&gt;

    <>课程设计报告

    课程信息:课程编码、课程名称、适用专业、课程类型,学分、学士、主讲教师等。学生信息系统,学生选课系统(学生选课分数有一定范围),学生可以对课程进行查询、浏览、选完课后可以进行退选、重选,并可以按学号、...

    <<C++必知必会>>

    本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式.............

    C++设计与演化

    Bjarne Struostrup的C++语言的设计和演化

Global site tag (gtag.js) - Google Analytics