【转】译者笔记
- bookread 财富等级:
|
原文出处: http://hanlei.name/archive/2006/03/29/8904.aspx 由于工作性质的关系,我常常需要为公司面试程序员。通常,我会首先要求应聘者做两件事:第一,口头说明虚方法、抽象方法、接口之间的异同和使用场景;第二,脱离IDE,手写一个简单的WinForm程序(例如包括布局整齐的两个文本框和三个按钮、点击按钮弹出消息框显示文本框内容),然后在命令行编译运行。第一题是考面向对象中的继承和多态概念,第二题则是考C# GUI类和关于委托等C#独有特性的基础知识,以及编译、调试技巧。很遗憾,有一大半的应聘者会在这两个简单考题面前败下阵来。尤其是第二个考题,甚至难倒了一些写代码有年头的程序员。为什么?因为这些程序员不具备基本的面向对象知识,更加不理解C#的面向对象实现手法。
这不能完全归咎于中国计算机教育。实际上,在美国或其他发达国家,真正懂得面向对象开发的程序员也并非随处可见。这也是Beginning C# Objects(及其Java原版本Beginning Java Objects)一书成为畅销书、并在Amazon上获得读者极高评价的原因。作者写道:“我们常常与一些软件开发者会面——在工作场所、在客户办公室、在专业会议上,或在大学校园里——这些开发者都尝试去掌握一门类似C#的OO编程语言,他们参加C#培训、阅读关于C#的书,或是安装和使用像Visual Studio .NET这样的C#集成开发环境(IDE)。然而,这是舍本逐末的做法:他们缺乏对什么是对象的基础认识,更为严重的是,缺乏利用对象从头开始构建软件应用程序的知识。”
翻开市面上任何一本你能找到的C#入门书,看看第一章讲什么,第一个范例是怎么实现的。闭上眼睛你都能告诉我,第一章多半是讲怎么安装VS.NET,第一个例子多半是拖一个按钮控件到窗体,双击后输入一段调用消息框的代码。我们的技术作者们,就是这样把读者引入歧途的。IDE(集成开发环境)能极大地提升生产力,但开发应用程序所需的高度专业的知识和技能,却非IDE所能代替。的确,任何一个菜鸟也许都能利用可视化组件拼凑出“看起来还不错”的应用程序,但这样的程序却将带来高昂的扩展和维护成本。
面向对象编程,绝非一些可视化组件那么简单,它涉及人类思维(抽象)模式、建模符号体系、面向对象方法学等诸多方面,对开发者有较高的要求。功夫过关的开发者,不止是技术高手,同时也一定会是有深度的思想者。把需求从自然语言翻译为对象模型,再把对象模型翻译为特定语言代码,殊非易事。最基础的,到底什么是对象?如果你曾经好好思考过这个问题,就会得到很多启发。例如,现实世界中的一张纸,如何抽象为计算世界中的对象?这个对象将具有那些特性(属性和行为),例如尺寸、颜色、质地、折叠、裁减,卷筒……?综合来看,面向对象的要素是什么?把事物抽象为对象的过程,是做思维体操的过程,也是极富挑战性和乐趣的过程。如果你还还不了解对象和面向对象的概念,或想与作者一起就该话题做更深入的思考,那本书第一部分就是最好的入门手册。
我认识一些优秀的程序员朋友,他们在大学时念的专业是建筑。这些朋友对应用程序架构和/或开发流程,有近乎严苛的要求,因为他们深刻地理解,蓝图、材料、工序……对于建造房屋是多么的重要。对象模型的静态方面(域类、数据结构等)在应用程序中开发相当于建材单元,而动态方面(行为、方法等)则是关于建材之间如何组合的指导书,它们合起来,构成一个应用程序的“蓝图”。越是复杂、大型的应用程序,对蓝图的要求就越高;即便是简单的应用,有蓝图也比较有利于维护、升级和扩展。给你一份需求说明书,你将如何分析它、并且组织出正确的对象模型(蓝图)?如果你对此信心不足,建议好好阅读本书第二部分。
第三部分涉及的范例,在有经验的开发者眼中看来,似乎过于简单。其实不然。整个开发过程当中,没有使用IDE拖放过任何一个控件,或在IDE中编译调试。这样做的目的有二:一、让读者可以掌握.NET Framework和C#本身的特性,而不会被IDE的花哨界面所迷惑、急于求成;二、帮助读者学会用正确的手法和模式(如公认的MVC模式)开发程序。例如委托(delegation),这是.NET Framework中一种特别的语言元素,也不易理解。如果你只懂得往窗体放一个按钮,双击该按钮,输入一行代码,那么你永远不会明白,这个过程体现了利用委托实现事件处理的巧妙手法。但是,如果让你脱离IDE编写事件处理方法,你就很快能明白这个道理,而且也知道怎么用于实践。IDE能提升生产力,不过它却不能凭空创造生产力,本源的生产力还是来自开发者的知识与技能。
面向对象编程已经流行多年,然而还是有无数的入门者在入门阶段就走错路子,抱着错误的观念、用错误的方式开发着意大利面般一团乱麻的程序。入门不简单,对于初学者如此,对于有经验的开发者,更该回头检讨自己在面向对象编程领域的经验是否根本就是错误或细枝末节的经验。本书作者开发和培训经验丰富(一位是NASA开发工程师,一位是大学教师和对象技术专家),理解面向对象程序员可能
|
|
此评论对你有用
没用
|
| |
|
发点勘误!
- 202.106.160.*
|
对于使用C#的OO出学者来说,这确实是难得的好书。我是抱着重新梳理一下OO知识的心态来看的,虽然到目前(刚看完第五章)还没遇到什么特别精彩的文字,但是层层推进的写作风格和出色的翻译还是把该讲到的知识点都讲到了,而且还对易混淆的地方做了重点解释,比如override和overload。 但是今天看书的过程并不是太愉快,因为发现了几处比较严重的错误(严重=颠倒了事实,对初学者很不利),在这里贴出来,有些也可能是我理解错了,还请译者和读者甄别: 1.P59,正数第8行 原文: “引用变量的名称遵循方法和attribute的命名惯例,即使用Pascal命名法。” 修改后:“引用变量的名称遵循方法的attribute的命名惯例,即使用Camel命名法。” 严重程度:★★★★★ /把本来要说明的问题说得更混乱了,很严重! 2.P93,代码里MoneyOwed()方法的第三行注释 原文: “即便它们没声明为私有” 修改后:“即便它们声明为私有” 严重程度:★★★★★ /把关键的话说反了,很不应该! 3.P108,从4.5.3行开始数,第8行 原文: “可以在客户代码中修改” 修改后:“可以在提供服务代码中修改” 严重程度:★★★★★ /把关键的话说反了,很不应该! 4.P130,倒数第10行 原文: “继承常常指出两个类之间的“A是B”关系” 修改后:“继承常常指出两个类之间的“IS A”关系” 严重程度:★★★★ / 结合上下文,B派生于A,这里应该是“B是A”才对。 5.P145,倒数第6行 原文: “重要提醒:C#中这样做是可以的!!!” 修改后:“重要提醒:C#中这样做是不可以的!!!” 严重程度:★★★★★ / 为了这个重要提醒,我还特意做了实验,没弄明白怎么就可以了呢?!况且在P144页里也明确说了C#不支持多重继承,那么这个重要提醒是什么意思呢? 以上都是我个人认为比较严重的错误,既然是给初学者看的书,就要考虑初学者的容错能力!
|
|
此评论对你有用
没用
|
| |
|
|
书不错
- 222.191.176.*
|
|
2天就看完了,比较快,书写的不错很通顺,而且例子也明白
|
|
此评论对你有用
没用
|
| |
|
IDE是工具,c#也是工具,能解决问题就行
- mcs51a 财富等级:
|
'脱离IDE,手写一个简单的WinForm程序(例如包括布局整齐的两个文本框和三个按钮、点击按钮弹出消息框显示文本框内容),然后在命令行编译运行'. 知道你想考的回调(委托),不过有这个必要吗? 呵呵? IDE是工具,c#也是工具,能解决问题就行.
|
|
此评论对你有用
没用
|
| |
|
C#的好书
- 58.49.249.*
|
少有讲解如此清晰的书~如果多数书都有这么清晰的思路,我就买一堆回来,是一种享受!
通俗易懂,非常适合学习和提高。
|
|
此评论对你有用
没用
|
| |
|
内容还可以
- minister 财富等级:
|
|
书中虽然有错误,但内容还可以,看的时候需要一定这方面的知识,才能看出并纠正错误,再细细品读一下.
|
|
此评论对你有用
没用
|
| |
|
|
勘误
- 61.235.102.*
|
《Beginning C# Objects从概念到代码》 今天刚拿到书,很高兴,谢谢韩老师翻译这么好的书,连续看了几十页,有些错误,请过目。
p9: statioid==>static p10:bla h==>blah p12:foobarl==>foobar!
|
|
此评论对你有用
没用
|
| |
|
|
|
|
|
Beginning C# Objects中文版——概念到代码
- yyxxll521 财富等级:
|
|
我的最爱,就应该有概念才有代码,非常不错,给学者很不错哦,
|
|
此评论对你有用
没用
|
| |
|
|
|
|
|
|
|
|
|
Beginning C# Objects中文版——概念到代码
- hdzdw 财富等级:
|
|
不错。不过如果源代码有中文注释就好了
|
|
此评论对你有用
没用
|
| |
|
|
|
|
|
|
|
|
|
广告已经很多了
- hy_lihuan 财富等级:
|
|
可读性相当高的一本书,入门读物;翻译的也很好,叙述风格我很喜欢;就是内容相对浅了一些,可能比较适合没有项目经验却有语法知识的学生族;面向对象是描述的重点,而介绍了需要使用到的语法;因此在有了语法知识看这本书能够学到更多;
|
|
此评论对你有用
没用
|
| |
|
|
|
|
|
不错的书
- b136364111 财富等级:
|
|
面向对象是目前很流行的话,到底什么是面向对象,本书结合C#深入浅出地阐述面向对象理论的基本内容,即从对象基本概念到对象建模,到C#代码的整个学习过程,非常值得阅读。
|
|
此评论对你有用
没用
|
| |
|
|
|
|
|
同感
- lizhizhe2000 财富等级:
|
|
这本书正适合我。当大多数编程书籍依赖于读者“阅读代码例子的言外之意”去解释复杂的理论时,本书则胜在提供清晰、易读、易懂的解释。我尤其喜欢书中第一个部分中关于对象和类、对象之间的交互,以及有关C#面向对象编程语言特点的讨论。
|
|
此评论对你有用
没用
|
| |
|
同感
- lizhizhe2000 财富等级:
|
结论: 1. 这是到目前为止我看过的最好的一本面向对象的书. 2. 我更喜欢意译这样的风格,只要能把概念讲清,不必在意用的是哪个术语. 3. 第二部分对我来说有点虚, 自己水平有限怪不得别人. 4. 有一些印刷错误, 但即使是初学者,也可以自己悟一悟知道错误的原因是: 印刷错误还是书本身的错误或是翻译的问题. 5. 给五星.
同感
|
|
此评论对你有用
没用
|
| |
|
|
|
123
- hwgo 财富等级:
|
结论: 1. 这是到目前为止我看过的最好的一本面向对象的书. 2. 我更喜欢意译这样的风格,只要能把概念讲清,不必在意用的是哪个术语. 3. 第二部分对我来说有点虚, 自己水平有限怪不得别人. 4. 有一些印刷错误, 但即使是初学者,也可以自己悟一悟知道错误的原因是: 印刷错误还是书本身的错误或是翻译的问题. 5. 给五星.
|
|
此评论对你有用
没用
|
| |
|
|
|
好书
- jjjjj102310253 财富等级:
|
|
不过一定要顺序的看完,才有最后的效果。而且后面的题目要认真的做(这点我没做到),希望学校能用它作为教材,别为了一点回扣好、给学生看那些烂书(我是受害者)
|
|
此评论对你有用
没用
|
| |
|
|
|
初学者的绝对经典
- 218.77.111.*
|
我是初学者,已通读全书, 我觉得本书讲得最好的地方是: 1. 第5章对象(类)之间的三种关系: 一般的关联,聚合,继承 但是如果聚合单独作一大节会更好,我在这点上反复'悟'了很久,特别是p64,p125,p168三个地方,其实本质上就是在讲聚合(has a),但是三个地方用了三个词: 合成, 聚合, 包装, 让人根本没办法将这三个地方联系起来. 如果翻译时注明一下会让初学者更好理解. 2. 第5章覆载, 多载 3. 第5,7章虚方法, 抽象方法, 接口 以前也接触过这些词, 但这本书让我真正分清了这些词的意思, 理清了思路. 4. 第6章对象群集 用最少的话讲清了最基本的概念 5. 第7章和第13章的一些基本概念 简单明了. 结论: 1. 这是到目前为止我看过的最好的一本'面向对象'的书. 2. 我更喜欢意译这样的风格,只要能把概念讲清,不必在意用的是哪个术语. 3. 第二部分对我来说有点虚, 自己水平有限怪不得别人. 4. 有一些印刷错误, 但即使是初学者,也可以自己悟一悟知道错误的原因是: 印刷错误还是书本身的错误或是翻译的问题. 5. 给五星.
|
|
此评论对你有用
没用
|
| |
|
很有帮助
- xxxcyy 财富等级:
|
|
主要介绍了C#语言各方面的知识以及使用C#进行开发的原则与实践,结合C#深入浅出的阐述面向对象理论的基本内容,入门是看也很有帮助
|
|
此评论对你有用
没用
|
| |
|
|
|
|
|
好书
- gxmrich 财富等级:
|
|
听说这本书不错,有一个同学向我力荐.我一定要买 一本,呵呵......好书,得抢着买 ,呵呵
|
|
此评论对你有用
没用
|
| |
|
|
|
|
|
|
|
|
|
|
|
30页有个错误
- andeaker 财富等级:
|
书整体翻译不错,至少是比较通顺的,看到30页,发现一个错误:
在30页1.14.1这个小节,第一句“使用Console.Write()时,....”应为“使用Console.WriteLine()时,....”……
|
|
此评论对你有用
没用
|
| |
|
eeeeew
- hand9898 财富等级:
|
|
他指出了我们的失误,实际上是对我们工作的促进和帮助。在下次印刷时,这些错误将得到修正。同时,我也要向所有读者致歉;无论如何,
|
|
此评论对你有用
没用
|
| |
|
aaaaaaaaaaaa
- netcellsoft 财富等级: 
|
http://club.book.csdn.net/book/108337.html 这本书我找了好久了,现在终于找到了,太好了,感谢党,感谢人民,感谢组织。哈哈哈,,,这本书我找了好久了,现在终于找到了,太好了,感谢党,感谢人民,感谢组织。哈哈哈,,,
|
|
此评论对你有用
没用
|
| |
|
鄙视韩磊的面试八股
- 124.248.97.*
|
|
这本书要不是他把'对象集合'翻译成'对象群集',把'创建实例'翻译成'创建实体',我差点就买他了
|
|
此评论对你有用
没用
|
| |
|
好书啊!!
- 211.137.206.*
|
这本书我也看了,讲得非常通俗易懂,适合初学和有一定基础的人看。翻译的也比较符合原著。总之很棒。
不知道什么时候出后续,热切的期待中。
|
|
此评论对你有用
没用
|
| |
|
|
|
|
|
看看写的如何
- dingzq 财富等级:
|
|
看了:孟岩、韩磊畅谈C#你入门了没有,然后找到了这本书,看看写的如何,才刚入门,不知道有没有收获。
|
|
此评论对你有用
没用
|
| |
|
|
|
|
|
孟岩、韩磊畅谈C#你入门了没有
- 58.48.141.*
|
|
http://live.csdn.net/Issue41/livePlay.aspx
|
|
此评论对你有用
没用
|
| |
|
一点小意见
- 219.131.182.*
|
|
今天拜读了韩磊的译作,确实不失为一本好书,好的就不多说了。就这些错误而言,我觉得很不应该。我个人认为,做为商业出版物,尤其是面向初学者的读物,在大量印刷出版之前,作者或译者是否可以作为第一个读者,先自己读一遍,这样这些错误应该是可以避免的。不要说没时间,作为一本60多元的书,先自己读一遍,完全应该吧,才对的起读者的60多元吧!
|
|
此评论对你有用
没用
|
| |
|
《Beginning C# Objects中文版》勘误
- bookread 财富等级:
|
转自韩磊Blog:http://hanlei.name/ 有热心读者在Dearbook上贴出这本书中的一些错误,我一一作了回复,整理转贴如下:
对于使用C#的OO出学者来说,这确实是难得的好书。我是抱着重新梳理一下OO知识的心态来看的,虽然到目前(刚看完第五章)还没遇到什么特别精彩的文字,但是层层推进的写作风格和出色的翻译还是把该讲到的知识点都讲到了,而且还对易混淆的地方做了重点解释,比如override和overload。
但是今天看书的过程并不是太愉快,因为发现了几处比较严重的错误(严重=颠倒了事实,对初学者很不利),在这里贴出来,有些也可能是我理解错了,还请译者和读者甄别:
1.P59,正数第8行 原文: “引用变量的名称遵循方法和attribute的命名惯例,即使用Pascal命名法。” 修改后:“引用变量的名称遵循方法的attribute的命名惯例,即使用Camel命名法。” 严重程度:★★★★★ /把本来要说明的问题说得更混乱了,很严重!
韩磊按:原文:Names for reference variables follow the same convention as method and attribute names: i.e. they use Pascal casing.而举例则是使用Camel命名法。按照C#命名惯例,引用变量应遵循Camel命名法(和attribute一样)、而方法名遵循Pascal命名法。显然,原书此处有误,应改为:Names for reference variables follow the same convention as attribute names:i.e. they use Camel casing。译文:引用变量的命名遵循与attribute一样的命名约定,即,使用Camel命名法。
2.P93,代码里MoneyOwed()方法的第三行注释 原文: “即便它们没声明为私有” 修改后:“即便它们声明为私有” 严重程度:★★★★★ /把关键的话说反了,很不应该!
韩磊按:P93,public double MoneyOwed()方法注释,原文:We can access attributes of this class (totalLoans and tuitionOwed) -- even they are declared to be private! -- without using dot notation. 译文的确有误,把“声明为私有”错误地译作了“没声明为私有”,回想起来,应该是受了那个without的影响,不可原谅啊!
3.P108,从4.5.3行开始数,第8行 原文: “可以在客户代码中修改” 修改后:“可以在提供服务代码中修改” 严重程度:★★★★★ /把关键的话说反了,很不应该!
韩磊按:原文:its private data structure and/or its accessor code -- can change without affecting how and object belonging to that class gets used in client code。译文应为“可以修改其私有数据结构和/或其访问器代码,而不会影响到使用该类的客户代码中的对象”。
4.P130,倒数第10行 原文: “继承常常指出两个类之间的“A是B”关系” 修改后:“继承常常指出两个类之间的“IS A”关系” 严重程度:★★★★ / 结合上下文,B派生于A,这里应该是“B是A”才对。
韩磊按:严格来说,在上下文中的确应为“B是A”。
5.P145,倒数第6行 原文: “重要提醒:C#中这样做是可以的!!!” 修改后:“重要提醒:C#中这样做是不可以的!!!” 严重程度:★★★★★ / 为了这个重要提醒,我还特意做了实验,没弄明白怎么就可以了呢?!况且在P144页里也明确说了C#不支持多重继承,那么这个重要提醒是什么意思呢?
韩磊按:的确应该为“在C#中是这样做是不可以的”。
我由衷感谢这位读者,他指出了我们的失误,实际上是对我们工作的促进和帮助。在下次印刷时,这些错误将得到修正。同时,我也要向所有读者致歉;无论如何,中文版中出现这样的错误,都是译者的责任。
|
|
此评论对你有用
没用
|
| |
|
C#面向对象编程最好的一本书
- 58.49.251.*
|
这是我读过的关于C#面向对象编程最好的一本书。很多此类书都侧重于对理论的描述,但在这里,作者不但给出了代码来解释那些实际操作中的概念,还细致地解释了如何使用这些代码。 ―Amazon读者评价
这本书正适合我。当大多数编程书籍依赖于读者“阅读代码例子的言外之意”去解释复杂的理论时,本书则胜在提供清晰、易读、易懂的解释。我尤其喜欢书中第一个部分中关于对象和类、对象之间的交互,以及有关C#面向对象编程语言特点的讨论。 ―Amazon读者评价
|
|
此评论对你有用
没用
|
| |
|