大概是耐心所至的缘故,我那几篇冠以“深入浅出C#”的文章在网络里被广泛转载——这当然是好事!有更多的朋友通过我的介绍认识并喜欢上了C#这门可爱的语言。广泛转载的Side Effect就是我的邮箱时常被网友们热情的来信所填满(现在没人写信了,不然我还可以用“读者来信如雪片般纷至沓来”这类我上小学时的作文常用词汇自吹自擂一下),大多数来信的内容都差不多——是初学者向在下询问如何系统而又有效地学习C#语言程序设计。特别是在书籍阅读方面,一定要我推荐出一些书来才算心满意足。另外,最近有一些友人开办的培训机构邀请我去讲些C#开发基础课程并参与.NET开发的课程设置改革,也询问到我选用什么教材进行教学、让学员们能够快速、正确地踏入Microsoft .NET Framework开发领域这一问题。二事并一事,其实核心问题都集中在一点上,那就是“C#语言的初学者应该读什么书”。
在我看来,推荐读书是一件非常困难的事情。第一,每个人的理解能力和阅读风格都不一样,正所谓“众口难调”。同一本书A同学读了说好,B同学可能就感觉一般般,搞不好到了C同学眼里就成了垃圾(阿猛怎敢冒“推荐垃圾”之恶名耶?);第二,正如人无完人一样,书也没有完美无缺的,不是有“尽信书不如无书”的古训吗……可是作为初学者(特别是没有任何编程经验的初学者),尚无对一门知识的辨别能力,怎么可能知道哪里是正确的、哪里有不足呢?结果往往是书的思想没抓住、精髓没领会、重点被忽略、被书中败笔带来的疑惑搞得彻夜难眠、书中的错误也就此埋下祸根(此君不骂阿猛“误人子弟”才叫见鬼)。如此一来,推荐好书本来是一件功德无量的好事,结果却扛回一块“推荐垃圾、误人子弟”匾额,实在是划不来。
那么,到底怎样的书才能算得上是一本优秀的入门书籍呢?以在下几年来的教学和开发经验来说,它应该具有这样几个特点:
· 全面性:有人认为入门教材就是给被学者看的,反正初学者什么也不懂,那些高深的内容就不必提了。此言谬矣!一本入门书,最重要的一点就是让初学者对一门学科有全面的了解,知道自己学的是什么,学了之后能用它做什么——最简单能做什么、最高深又能做什么。不然的话,只可能越学越迷茫。
· 正确性:这点自不必多言,一本高阶书中有错误,至多书被人一把火烧掉了事;一本入门书中有错误,很可能就把一个人才付之一炬了。
· 权威性:权威性意味着可信度。光给出一个正确的结果不算难事,还要有权威的诠释才算完整、才能展示一个人的“功力”。“苹果为什么会从树上掉下来?”牛顿告诉我是因为万有引力,我侄女告诉我说是因为它不想在树上呆着了,呵呵。另外,技术也是有雅俗之分的,权威的发言往往是很雅致的——那是有深度的象征。
· 有深度:优秀的入门书不是“平”的,它会把该深的地方讲深,读者暂时理解不了的地方点到为止(全面性决定了它不可能只字不提)。一本优秀的入门书读下来,给人的感觉应该是在缓和的低山小丘间漫步,而不是在广场上溜达。有句话说的很好:你把学生当什么来教,那教出来的就是什么。推广一下,你把读者当*、写的内容一点儿深度也没有,那到最后读者对这门功课的理解就会像*一样——书和作者的价值也就不言而喻了吧。
· 有脉络:这是一本入门书的精髓之所在。一门知识摆在一个好学者面前,时间有限,精力有限——从哪个角度介入这门知识最妥当?沿什么样的路径学习最合乎逻辑?知识怎样组合才能让学习者坚持到最后?对高级内容应该怎样留有接口以方便后续的学习?怎样与实践结合最能激发读者的兴趣?……要考虑的东西太多了,但绝不能不考虑,不考虑这些的书是一本没有灵魂的书,最后的结果是让初学者学完之后云里雾里、糊里糊涂。
· 可读性:如果没有这一点,以上诸点恐怕都要作废了。要达到可读性强,往往不是作者一个人就能做到的。一本好书,不但有作者的智慧凝结在里面,还凝聚着编辑们的辛劳(很多书比较有意思,编辑的功力比作者本人还牛!),如果这本书是译文版,那还凝聚了翻译、校审、译文编辑们的辛劳——译文不准确、新文字排版不科学,一样会影响可读性。所以,选入门书的时候不妨看看作者、译者、编辑、出版社都是哪些。(补充一点:是不是书里的例子越多越好呢?那可不一定。代码实例是要看质量的,应该力求恰到好处,过多则有用花括号骗稿费的嫌疑;过少又会给人纸上谈兵的感觉。)
现在是笔者喝茶时间,10分钟后继续……
上面说了这么多,那么究竟哪些书作为C#程序开发的入门书籍比较好呢?
考虑到权威性的问题,我们把选择的目光放在Amazon的打榜书上,因为这些书可以说是经得起世界级考验的书。在这些书中,本人喜欢的出版社有四个,分别是Microsoft Press、Apress、O’Reilly和Wrox(Wrox的发展历史可谓是一波三折,感兴趣的朋友可以看看这篇文章[url]http://blog.csdn.net/aaahts/archive/2004/08/18/77757.aspx[/url])。有意思的是,虽然这四家出版社出版的书各成体系,但给书起名字的时候也会有“撞车”的时候。还有时候,英语版的名字并不撞车,但到了中文译名却撞上了(特别是“XXXX技术内幕”,混乱得很~~~),所以大家在买书的时候一定要问清是哪个出版社的(源社、译社)和作者译者。
下面说说这几家公司出版图书的特点:
· Microsoft Press:.NET技术的老家啦~~~权威性是最高的。但个人感觉文笔一般,出的书吗,深的太深、浅的太浅(看MSDN就行)。不过也难怪,人家微软是卖软件的,不是卖书的,呵呵。对于MS社的书,高深度的书我是极力推荐的,入门书吗,如果你打算在巴士上恶补点什么的话,可以阅读它的Step By Step系列,带图解的,不坐在电脑前也能学习。
· Apress:我的最爱,书的质量很高、很细致。Apress一般不出大而全的书,每本书的目的性都很强。比如,针对C#,它并没有推出一本全面描述C#的书,而是把C#与ASP.NET、SQL Server、电子商务、面向对象、自动化测试工具开发等专题结合起来,一样出一本。如果一门知识层次拉的比较开的话,它会出一本Beginning XXXX和一个Pro XXXX。Apress的书很好认——黑底黄条,一目了然。可惜的是,Apress的书,中译本比较少,可能是进入中国的时间还短吧。Apress的书,国内出版社中博文视点出版社译的是最多的、投入人力物力也是最大的。去年我买的那本《Beginning C# Objects——概念到代码》,读了一年,依然爱不释手。每当读博文视点出的书时,我都会想起韩磊老师在年会上说的那句话——出书就要一本是一本。看来,在这一点上,Apress和BroadView两家公司倒是蛮相似的。
· O’Reilly:IT出版业老牌劲旅。权威到一塌糊涂——不光出微软系列的书,Java系列、开源系列等等,样样拿得起放得下。O’Reilly出的书,系列也是最全的:
o XXXX In Nutshell:一门知识(往往是新知识)的概览。
o Learning XXXX: 一门知识的专项入门书籍。
o Programming XXXX:一门知识的全面入门书籍,一般比Learning系列要深、要广,书也会厚不少。
o XXXX Cookbook: 有些人不喜欢看文字的东西,喜欢通过读代码学习知识(特别是那些有经验的编程老手们,更懂得从代码中见微知著),OK,这个系列的书就是为他们准备的。
o XXXX Definitive Guide:权威指南系列。这套书更像是词典,用到什么知识的时候可以到里面按条目来查。
· Wrox:就是我们说的大红皮系列拉。我的VB.NET和C#入门都是用的这套书——那是02、03年的事儿了,那时家乡的书店里只有大红皮这一套书。大红皮系列也是进入中国最早的.NET系列图书,因此培养了巨大的读者数量。Wrox的书一般分两个层次,Beginning XXXX和Professional XXXX,中译本分别为《XXXX入门经典》和《XXXX高级编程》。
从上述众多系列中,我们可以选出两个系列,作为大家的C#学习教材。
· O’Reilly:Programming C#àC# CookbookàProgramming ASP.NETàASP.NET Cookbook
· Wrox:Beginning Visual C# 2005àProfessional Visual C# 2005àBeginning ASP.NETàProfessional ASP.NET
这两个系列的书,再配以MSDN做参考、Apress的书作为实战指南(Apress的书非常注重与实际项目的结合),基本上就没问题了。还有,在如今Web开发大行其道的情况下,上面的系列没有包含Windows开发。从找工作的角度上来考虑,学习Web开发比Windows开发更好找工作。
现在到了问题的核心:一个初学者应该怎样使用这些书呢?
我的建议是:《C#入门经典》和《Programming C#》这两本书手头都要有。说到这儿,阿猛有一个好消息要告诉大家——以前我只能推荐一本书给大家,那就是《C#入门经典》,因为《Programming C#》这本书是没有中文版的(网上有它的英文版,但学生们都不太乐意看),就在前几天,我从博文视点的编辑那里得到消息——Programming C#第四版(中译本)经过历时近一年的精心翻译和三遍校对,在8月底就要面世了!这两本书终于可以“双剑合璧”用于教学了。
前面说过,书无完书。《C#入门经典》这本书虽然很不错,但也有很多让我头疼的地方。举个例子:它的第27章,英文原版是Attribute,也就是“特性”,在中译本中译为了“属性”,这就让初学者搞不清什么是Property、什么是Attribute——其实这两个东西的概念非常好分清的。就这个问题而言,困扰了我的整个初学阶段,同时也给广大读者带来了不小的麻烦。现在面试的时候,我一般会问“Property与Attribute”的区别这道题,似乎凡是看过《C#入门经典》的应聘者都答不清楚——这就是译文硬伤给读者带来的“后遗症”。
书中有错是在所难免的,以前的问题在于世面上只有一本《C#入门经典》权威的入门书籍可供初学(而且又被冠以“经典”——其实人家原书没有“经典”二字吗……),现在这个问题随着Programming C#中译本的到来将不复存在了。Programming C#中译本的出现,一大价值在于让初学者们多了一种选择,另一大价值就是能够与《C#入门经典》配合起来、互相印证,打破了原来“一家独大”的垄断局面。可能你会问:《Programming C#》里面就不会有错了?我的回答是明确的——书无完书,错误一定是会有的,但我们有多种措施可以把错误带来的影响减小的最低。我们可以拿它与《C#入门经典》对照来读,两本书中孰对孰错自然会浮显出来;我们可以查看出版社的更正列表;当修订达到一定数量后,出版社还会释出新版或者修订版……
插播一个小花絮:前几天我听说《Programming C#第四版(中译本)》已经定稿之后,问小编能不能搞几个样章出来。小编在MSN上的留言倒也非常痛快:Mission Impossible。我心想,算了,那就等书出来再说吧,后来我就没再惦记这事儿……没想到,就在几个小时前,小编打来电话说他用一顿大餐从老编那儿帮我换来了几章的样张!于是我基本上是冲到工位上、打开附件一口气读完了样张。感觉很不错!顺手又打开英文原版,对照了一下:译文的质量也称得上是上乘(可惜我手头只有那么几页,要是多一些就好了)。不过话又说回来,毕竟是两种文字、两种文化的转换,不可能100%转换过来的,我也就不那么吹毛求疵了,只要没有硬伤、不误导初学者就行了。
《Programming C#》中译本我就看了那么几页,没什么发言权,书的质量还是留给日后大家去评说吧。这本书的英文版我已经看过多遍了,从中,我汲取了不少的营养。在这本新书即将上市之际,还是让我们更多地来关注这本书的内容和使用方法吧。
先说使用方法:
· 找一本《C#入门经典》来对比阅读。按照我们对一本优秀入门书籍的评价,这两本书都是够格的——至少英文版是够格的。
· 安装上MSDN,作为知识库
· 最好买一本《C# Cookbook》的中译本做上机练习
· 找到这两本书的英文版,对照阅读。对照阅读的作用很大:
o 可以得到“原汁原味”的内容,特别是对于技术名词
o 可以避免陷入翻译时引入的歧义或错误
o 可以学习纯正的英语(现在稍微好一点的企业面试的时候都要求英语)
再说说内容:
· 比起《C#入门经典》来,这本书更适合作为教师的教材和学生自学的课本。为什么呢?如果大家使用电骡下载一套AppDev讲授C#编程的视频(应该是8CD)就会发现国外的大型培训机构选用的教材就是这本书《Programming C#》
· 两本书在基础内容上大同小异,但在高级内容上有所不同。《C#入门经典》补充的是GDI+和Network编程,《Programming C#》补充的是与COM交互和CLR相关知识。在面试题中,CLR相关知识比较多;开发与VC++兼容的软件(比如自动化测试工具)方面,与COM交互的内容比较多。想让你的软件变漂亮,GDI+是必学的,想编写像QQ一样的软件,Network编程必不可少。因此,两本书可以算是各有千秋。
· Amazon上的评分——两本书都是4星,打个平手。
· 这本书的营养很丰富——我很多文章的灵感就是来自这本书,只不过用一篇文章来解释这些事情会更细致(一本书是不可能每个知识点都解释那么细致,不然厚度准会超过1米)。
· 这本书是一张藏宝图:读这本书一定要配以MSDN。如果把MSDN看成一个埋藏着宝藏的海岛,把一个学习者看作是一个勇于探索的寻宝人,那么《Programming C#》这本书绝对可以称得上是一张能指引你准确挖到宝藏的“藏宝图”。
· 这本书是一门攻城炮:并不都是所有的面试官都是伯乐、能因为你的潜质而把你收于帐下,并不是所有的公司都有资金用于培训新人(就算有,也希望优先选择有更高基础的应聘者),所以,在你成为一名高手、能与面试官在面试桌前“华山论剑”之前,绝大部分的面试都会是一场相当“惨烈”的攻城战。面试时是被虐待,还是跟面试官开炮对轰,决定于你的真实技术水平。如果允许我为《Programming C#》这本书改个名字,那我一定给它改成《C#面试宝典》,为什么呢?我给大家截张样张的图(但愿不算泄密)就明白了——在半页书中,密集地出现了如此多面试官喜欢提问的问题,真的很难得。
OK,今天先写到这儿吧:D
回过头来看上面的文字,自己把自己吓了一跳——竟然有这么多!仔细想想,可能是有些很久就积累在心里东西都倒出来了吧。真心希望对于初学者很能有一点帮助 ——特别是那些还在大学校园里的同学们,衷心希望你们能多学些东西、找份好工作。说真的,扎扎实实学些东西、找份薪水不错的工作并不难,也许就是从轻轻松松读一本书开始。当你拥有藏宝图和攻城炮后还缺什么呢?我认为是“勇气”,那种勇于探索、不懈追求的勇气!
带好你的藏宝图,牵上你的攻城炮,拿出你的勇气来——你就是一个征服者,你将会是一个富有的人!
恭祝每一个阅读此文的人早日成功。
本文转自 水之真谛 51CTO博客,原文链接:http://blog.51cto.com/liutiemeng/49513,如需转载请自行联系原作者