入门不简单(《Beginning C# Objects中文版》书评)

由于工作性质的关系,我常常需要为公司面试程序员。通常,我会首先要求应聘者做两件事:第一,口头说明虚方法、抽象方法、接口之间的异同和使用场景;第二,脱离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开发工程师,一位是大学教师和对象技术专家),理解面向对象程序员可能进入的误区和面对的挑战,他们知识与经验的总结,形成了这么一本用心良苦、循循善诱、深入浅出的C#面向对象开发指南。每一位C#开发者,无论有经验还是没经验,都该读读这本书。入门不简单,你真的入对门了吗?


(本书将由电子工业出版社于2006年5月出版)

入门不简单(《Beginning C# Objects中文版》书评)》有31个想法

  1. rad的入门简单,oo的入门不简单,而市面上的书多是讲述本不需要讲述的rad的入门,结果就是培养了大量的不懂oo的rad人才

  2. IDE也给初学者提供了一个快速入门的机会,在这个浮躁的环境,真正能静下心来研究的年轻人,真的很少。

    讲太基础的东西,不见得能如那些“X天精通”的书受欢迎!

  3. 第一个题目说不清,本来程序员是不擅长表达的,我更是差;

    第二个题目可以,因为会win32汇编,有ml和link不用makefile就行,用随便什么写文本的东西写消息事件处理和rc文件

    C#呢,刚接触,在写webform的项目,没啥感觉,有IDE不用,才是浪费;底层的东西要等我把肚子填饱才能去关心。。。汗

  4. 来撒点热血,但看起来各位都是冷静无比的样子,让我显的很不好意思.一下子我就变成肤浅无比的人啦.

    不过要恭喜你出那书哦,只是鄙人对于此类书籍真的是…….就不在市场上支持你了,在精神上支持你一下.吼吼.

  5. 一直潜水,也没联系韩大哥,看到这篇文字想说几句,现在的社会有太多的浮躁,很少有人能真正静下心来做点思考、研究,我觉得是态度的问题。

    ——继续潜水

  6. 看来和硬件差不多。好的HW engineer要求最好有过产线的经验,做过测试和量测信号,要有耐心做BOM。否则不但不知其然,连所以然都不知道。

    其实还是教育的问题,现在教育出来的人才都经常觉得什么都是简单的。不肯下苦功。

  7. OO确实精深,我用了两年多时间,从两年前在RAD里当组件搬运工到现在基本认识了OO思想。感觉越进去觉得越深奥呀。不过我还在用DELPHI:第一题应该差不多,OO思想是一样的,不过DELPHI里的虚方法分虚拟方法和动态方法,不知道C#里有动态方法吗。也许还真有,因为。NET架构不就是原来在BORLAND做VCL架构的那两个大牛被MS挖去后做的吗,呵呵。第二题吗我也准备用DELPHI的DCC32。EXE试试:)

  8. 你做你的广告也可以,不要一批就批到一大片好不好

    整的这本书好象有划时代的意义一样

    会不会引进原版啊,我对译的不放心,

  9. 这本书的内容我还没看,只看了一下目录,我也没有说这本书不好,只是觉得你们说的有些过了,把以前的书都说的快一无是处了

    象James W.Cooper 的C#设计模式,Matt Weisfeld的面向对象的思考过程,Charles Petzold的Microsoft C# Windows 程序设计等书我中英文对着都看过,我说的对译的不放心并不是对老师们的英语有看法,而是好多译者在翻译过程中加入了自己的理解,虽然我水平一般般,但有些我总觉得中文版里译者所说的和原作的意思不一致

    还有就是有些书老师接了翻译任务后,几个老师分译,或分给自己的研究生们译,读起来前后层次感很强.

    个人看法

  10. 韩磊先生:
    您给的网址不能下载
    顺便问一下:着本书到底何时出版,已经等了近两个月了!

  11. 究竟什么时候才能出来呢…

    ..
    .

    已经出版,请留意您所在城市的书店——韩磊

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注