`
piperzero
  • 浏览: 3549903 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

入门不简单

阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

(《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月出版)



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=643678


分享到:
评论

相关推荐

    mysql入门很简单

    数据库系统不仅仅是数据库本身,还包括数据库管理系统、应用系统以及应用开发工具。应用系统需要数据库来管理数据,而应用开发工具用于开发应用系统。 SQL语言是数据库管理系统用来管理数据库中的数据的工具,它由...

    《入门很简单丛书:C语言入门很简单》

    本书《入门很简单丛书:C语言入门很简单》旨在帮助读者轻松踏入C语言的世界。 首先,C语言的基础知识包括变量、数据类型和常量。变量是存储数据的容器,可以是整型、浮点型、字符型或指针类型等。数据类型决定了...

    c语言入门很简单

    c语言入门很简单, 从入门到精通 ,学习c语言不在难

    Swift入门很简单试读

    "Swift入门很简单试读"显然是一个引导初学者了解Swift编程语言的教程,由清华大学出版社出版,这通常意味着内容会严谨且适合教学。 在Swift的学习过程中,有几个关键的知识点是初学者必须掌握的: 1. **变量与常量...

    Android编程入门很简单

    在进入Android编程的世界之前,首先理解“Android编程入门很简单”这一标题所蕴含的含义是非常重要的。这表明Android编程并不是一个遥不可及的技术高峰,而是对初学者友好且易于上手的。Android是一种开源的操作系统...

    oracle入门很简单06.zip

    "Oracle入门很简单06.zip"这个压缩包显然旨在帮助初学者快速理解和掌握Oracle数据库的基础知识,特别是关于字符型数据类型及其处理方法。 在Oracle数据库中,字符型数据类型主要包括VARCHAR2、CHAR、NVARCHAR2和...

    MySQL入门很简单

    通过学习上述内容,并结合"MySQL入门很简单.pdf"这份文档,初学者可以快速掌握MySQL的基础知识,为后续的数据库开发和管理打下坚实基础。不断实践和深入学习,你将能够熟练运用MySQL解决实际问题,成为数据库领域的...

    MySQL入门很简单(数据库)

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中被广泛应用。对于初学者来说,了解和掌握...在阅读《MySQL入门很简单(数据库)》这本书时,结合实际操作,将有助于更好地理解和应用这些概念。

    oracle入门很简单07.zip

    "Oracle入门很简单07.zip"这个压缩包文件显然聚焦于介绍Oracle数据库中的数值型数据类型及其处理方法,这通常是初学者掌握Oracle基础知识的关键部分。 在Oracle中,数值型数据类型主要包括以下几种: 1. **NUMBER*...

    C语言入门很简单

    ### C语言入门很简单 在IT领域,特别是编程技术的学习与应用中,C语言因其高效、灵活及广泛应用的特点而备受青睐。对于初学者来说,“C语言入门很简单”这一观点既是对学习态度的一种鼓励,也是对C语言特性的一种...

    springboot的简单入门

    在本教程中,我们将深入探讨如何使用SpringBoot进行简单的入门实践。 1. **Spring Initializr**: Spring Initializr 是一个在线工具,用于生成初始的Spring Boot项目结构。你可以选择项目类型、语言、Spring Boot...

    MySQL入门很简单PPT

    这份"MySQL入门很简单PPT"旨在为初学者提供一个快速理解MySQL基础知识的平台,帮助他们轻松进入数据库管理的世界。 首先,PPT可能会涵盖MySQL的基本概念,包括数据库、表、字段和记录等。数据库是存储数据的容器,...

    VB超简单入门教程

    **VB超简单入门教程** Visual Basic(VB)是微软公司推出的一种面向对象的、可视化编程语言,它以其直观易学的特性,深受初学者和专业开发者的喜爱。本教程是为那些想要踏入编程世界,尤其是对VB感兴趣的初学者量身...

    单片机入门教程简单单片机入门教程简单单片机入门教程简单单片机入门教程简单单片机入门教程简单

    学习单片机并不需要太多先前的知识基础,但掌握基本的C语言编程是必要的,因为许多单片机编程都是基于C语言进行的。此外,对器件的理解和操作是学习单片机的起点,所有人都可以在相对平等的基础上开始学习。 在硬件...

    小学入门数独100题(简单)精编版.pdf

    小学入门数独100题(简单)精编版PDF 小学入门数独100题(简单)精编版PDF是一本专门为小学生设计的数独学习资源,旨在帮助小学生学习和掌握数独的基本概念和解决方法。本资源包含100道数独题目,涵盖了数独的基本...

    linux入门很简单

    Linux入门确实很简单,尤其当你手握一本诙谐幽默、内容丰富的入门图书时,学习过程将变得轻松愉快。《Linux入门很简单》这本书显然以其独特的风格吸引着读者,让你在轻松的氛围中逐步掌握Linux操作系统的基础知识。 ...

    linux入门很简单系列.zip

    Linux入门很简单系列,这是一份专为初学者设计的指南,旨在帮助你快速熟悉和掌握Linux操作系统的使用,特别是Ubuntu这一流行的发行版。Ubuntu,源自非洲祖鲁语,意为“人性”,象征着社区和共享的精神,这正是开源...

    C++入门程序代码,很简单的文件

    也可能有一些更复杂的程序,如计算两数之和、查找数组中的最大值或者实现简单的排序算法。通过阅读和理解这些代码,初学者可以逐步掌握C++的基本语法和编程思想。 总之,C++入门程序代码是学习编程的良好起点。它...

Global site tag (gtag.js) - Google Analytics