大概是耐心所至的缘故,我那几篇冠以“深入浅出
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
回过头来看上面的文字,自己把自己吓了一跳――竟然有这么多!仔细想想,可能是有些很久就积累在心里东西都倒出来了吧。真心希望对于初学者很能有一点帮助 ――特别是那些还在大学校园里的同学们,衷心希望你们能多学些东西、找份好工作。说真的,扎扎实实学些东西、找份薪水不错的工作并不难,也许就是从轻轻松松读一本书开始。当你拥有藏宝图和攻城炮后还缺什么呢?我认为是“勇气”,那种勇于探索、不懈追求的勇气!
带好你的藏宝图,牵上你的攻城炮,拿出你的勇气来――你就是一个征服者,你将会是一个富有的人!
恭祝每一个阅读此文的人早日成功。
本文出自 “上善若水 润物无声” 博客,转载请与作者联系!