深入理解C#:第2版(资深C# MVP扛鼎之作,提升C#编程功力的首选)
基本信息
编辑推荐
资深C# MVP扛鼎之作
深入理解,探求本源
提升C#编程功力的首选
内容简介回到顶部↑
作译者回到顶部↑
本书提供作译者介绍
Jon Skeet Google软件工程师,微软资深C# MVP,拥有近10年的C#项目开发经验。他是C#社区和新闻组中非常活跃的技术专家,回答了数以万计的C#和.NET相关问题。他还在个人网站上撰写文 章,阐述C#和.NET最难理解的问题。他还著有另一本畅销书Groovy in Action。
译者简介:
周靖 资深译者,微软MVP,在计算机行业浸染近20年,从事微软相关技术翻译工作十余年。早期痴迷于硬件,曾多次被《微型计算机》杂志聘为特约作者。继而潜心 钻研程序设计,并在这方面积累了丰富的经验。代表译著有《Window.. << 查看详细
译者简介:
周靖 资深译者,微软MVP,在计算机行业浸染近20年,从事微软相关技术翻译工作十余年。早期痴迷于硬件,曾多次被《微型计算机》杂志聘为特约作者。继而潜心 钻研程序设计,并在这方面积累了丰富的经验。代表译著有《Window.. << 查看详细
目录回到顶部↑
《深入理解c#:第2版》
第一部分 基础知识
第1 章 c#开发的进化史 2
1.1 从简单的数据类型开始 3
1.1.1 c# 1 中定义的产品类型 3
1.1.2 c# 2 中的强类型集合 4
1.1.3 c# 3 中自动实现的属性 5
1.1.4 c# 4 中的命名实参 6
1.2 排序和过滤 7
1.2.1 按名称对产品进行排序 7
1.2.2 查询集合 10
1.3 处理未知数据 11
1.3.1 表示未知的价格 12
1.3.2 可选参数和默认值 12
1.4 linq 简介 13
1.4.1 查询表达式和进程内查询 13
1.4.2 查询xml 14
1.4.3 linq to sql 15
1.5 com 和动态类型 16
1.5.1 简化com 互操作 16
第一部分 基础知识
第1 章 c#开发的进化史 2
1.1 从简单的数据类型开始 3
1.1.1 c# 1 中定义的产品类型 3
1.1.2 c# 2 中的强类型集合 4
1.1.3 c# 3 中自动实现的属性 5
1.1.4 c# 4 中的命名实参 6
1.2 排序和过滤 7
1.2.1 按名称对产品进行排序 7
1.2.2 查询集合 10
1.3 处理未知数据 11
1.3.1 表示未知的价格 12
1.3.2 可选参数和默认值 12
1.4 linq 简介 13
1.4.1 查询表达式和进程内查询 13
1.4.2 查询xml 14
1.4.3 linq to sql 15
1.5 com 和动态类型 16
1.5.1 简化com 互操作 16
译者序回到顶部↑
Manning有许多图书都以X in Action命名,如著名的Ajax in Action、专门介绍LINQ的LINQ in Action,以及jQuery in Action、PHP in Action等。这些书偏重基础,包含大量的代码示例,即使是初学者,读起来也会十分轻松。我们一般称这种书为入门书,图灵公司在引进的时候,也给它们起了一个恰如其分的中文名——实战,如《jQuery实战》。
然而,本书则不同,它的英文名不是C# in Action,而是C# in Depth,有何区别呢?
很多C#程序员在有了一定基础之后,会出现一个成长的瓶颈。他们觉得似乎了解了C#的基本语法和各种语言特性,但对于这些特性的演变以及它们之间的关联却知之甚少。他们会在代码中使用泛型集合,但是对于类型推断的规则还很模糊。他们经常使用foreach语句,但却不会自己编写迭代器。他们知道C# 3中增加了很多非常酷的语法糖,但却不知道它们实际上都是为了更酷的LINQ准备的。他们为C# 4提供了动态类型而欢欣鼓舞,但却不了解DLR如何实现动态绑定,并且往往会滥用dynamic。这时候,他们不需要C# in Action,因为他们已经熟悉了字符串和整型,已经会编写接口、类、方法、属性和字段,甚至能说出引用类型和值类型的区别。他们需要的是一本进阶书,一本深入讲解C#的书,而本书正是这样一本书。
现在你明白两者的区别了吧!
本书没有任何关于.NET平台和CLR的内容,也不会指导你如何创建WPF或ASP.NET应用,它将全部注意力都放到C#语言本身,着重解析了C#各个版本的进化和演变。它面向中高级.NET 开发人员,如果你只是初学者,那可能需要一本更基础的书辅助阅读。本书第1版一经问世,就得到了业界诸多大牛的肯定和推荐。当图灵公司邀请我翻译第2版的新增内容时,我毫不犹豫地答应下来。
相较于第1版,第2版更为详尽地讲解了C# 2和C# 3的特性,对迭代器和LINQ等内容进行了修订,并添加了更多实用的代码示例。尤其值得注意的是,第2版新增了三个大的章节,分别介绍了C# 4的新增特性和代码契约。
感谢周靖和朱永光两位老师,他们为第1版的翻译付出了艰辛的劳动,在他们打下的良好基础之上进行工作,我倍感踏实。感谢编辑刘美英和李静,与她们的交流探讨让本书的译文更为准确可靠。特别感谢赵劼为本书进行复审,他的修改意见让本书增色不少。
最后要感谢的是我挚爱的妻子张玉。在我翻译期间,她身怀六甲,并且由于体质不好一直需要卧床静养。但她没有要求我的照顾和陪伴,而是一直默默地支持我,在此向她表达我深深的愧疚。
我要把本书献给我的宝贝女儿珧珧。在我交稿后的第10个小时,你就呱呱坠地了。你和你的母亲将是我今后人生的全部动力。
姚琪琳
2011年11月4日凌晨
然而,本书则不同,它的英文名不是C# in Action,而是C# in Depth,有何区别呢?
很多C#程序员在有了一定基础之后,会出现一个成长的瓶颈。他们觉得似乎了解了C#的基本语法和各种语言特性,但对于这些特性的演变以及它们之间的关联却知之甚少。他们会在代码中使用泛型集合,但是对于类型推断的规则还很模糊。他们经常使用foreach语句,但却不会自己编写迭代器。他们知道C# 3中增加了很多非常酷的语法糖,但却不知道它们实际上都是为了更酷的LINQ准备的。他们为C# 4提供了动态类型而欢欣鼓舞,但却不了解DLR如何实现动态绑定,并且往往会滥用dynamic。这时候,他们不需要C# in Action,因为他们已经熟悉了字符串和整型,已经会编写接口、类、方法、属性和字段,甚至能说出引用类型和值类型的区别。他们需要的是一本进阶书,一本深入讲解C#的书,而本书正是这样一本书。
现在你明白两者的区别了吧!
本书没有任何关于.NET平台和CLR的内容,也不会指导你如何创建WPF或ASP.NET应用,它将全部注意力都放到C#语言本身,着重解析了C#各个版本的进化和演变。它面向中高级.NET 开发人员,如果你只是初学者,那可能需要一本更基础的书辅助阅读。本书第1版一经问世,就得到了业界诸多大牛的肯定和推荐。当图灵公司邀请我翻译第2版的新增内容时,我毫不犹豫地答应下来。
相较于第1版,第2版更为详尽地讲解了C# 2和C# 3的特性,对迭代器和LINQ等内容进行了修订,并添加了更多实用的代码示例。尤其值得注意的是,第2版新增了三个大的章节,分别介绍了C# 4的新增特性和代码契约。
感谢周靖和朱永光两位老师,他们为第1版的翻译付出了艰辛的劳动,在他们打下的良好基础之上进行工作,我倍感踏实。感谢编辑刘美英和李静,与她们的交流探讨让本书的译文更为准确可靠。特别感谢赵劼为本书进行复审,他的修改意见让本书增色不少。
最后要感谢的是我挚爱的妻子张玉。在我翻译期间,她身怀六甲,并且由于体质不好一直需要卧床静养。但她没有要求我的照顾和陪伴,而是一直默默地支持我,在此向她表达我深深的愧疚。
我要把本书献给我的宝贝女儿珧珧。在我交稿后的第10个小时,你就呱呱坠地了。你和你的母亲将是我今后人生的全部动力。
姚琪琳
2011年11月4日凌晨
前言回到顶部↑
距离我为本书第1版写前言似乎已经过去很长时间了,但实际上只有两年半而已。在这段时间内,无论是我个人还是整个技术领域,都发生了相当大的变化。
就我个人而言,我非常荣幸地成为了Google的一名软件工程师,不过却无法像以前那样经常使用C#了。我对Stack Overflow 上瘾了,它是一个开发者问答论坛。本书第1版出版时,我的小儿子只有两岁大,而现在已经快上学了。我非常荣幸能在伦敦、奥斯陆、哥本哈根等地作关于C#的演讲,这种演讲以后会越来越多。所有这些,我都乐在其中,尽管偶尔略显忙碌。
技术世界依然日新月异。我是在一台上网本上撰写本书的,而上网本的概念在我写第1版时还没出现。那时最智能的智能手机在今天看来相当原始,而我如今的笔记本电脑已经堪比台式机了。不过在我看来,软件方面的发展反而不那么令人振奋,尽管现在已经成为主流(如并行扩展)的项目在当时还处于初级阶段。Silverlight仅仅是成为了一门完全托管的语言,而ASP.NET MVC仍然还很年轻,并且短时间内不会发布1.0版本。当然,C#本身仍然在不断变化,否则也没有必要撰写第2版了。
尽管一切都在改变,但本书所关注的角度依然不变。我仍然致力于帮助人们熟悉C#。因为新的框架层出不穷,同时也因为我们需要以更快的速度掌握这些东西,所以打造扎实的基础就显得尤为重要。我们至少应该能够有把握地指出,哪个是泛型方法调用,哪个是属性访问,哪个将Lambda表达式转换为委托,等等。
实际上,我认为掌握一门语言的一般标准一直在提高。令我惊喜的是,很多开发者很好地理解了LINQ,虽然对另外一些人来说,它依然神秘莫测。不可否认,这些观察结果主要来自Stack Overflow,这是个只有部分开发人员参与交流的网站,从中得出的观点具有一定的片面性。但即便如此,我仍然有理由对自己的观点持乐观态度。我希望本书第1版对这种标准的提高起到了一定的作用,希望本版亦然。
我一直打算真正地学一门新的语言。我已经对F#和Python有所涉猎,也答应自己要学习Erlang和Haskell。我也一直说要看看Ruby到底有什么稀奇的地方。但C#又把我拉了回来,每次都是这样。它并不完美,但它能让我简单明了地表达自己的想法,这对一门语言来说,或许应该是最重要的特性。总有一天,我会设法让自己远离C#,真正使用另外一种语言来思考问题。但在此之前,我希望能通过本书向你传达我对C#的满腔热忱。
就我个人而言,我非常荣幸地成为了Google的一名软件工程师,不过却无法像以前那样经常使用C#了。我对Stack Overflow 上瘾了,它是一个开发者问答论坛。本书第1版出版时,我的小儿子只有两岁大,而现在已经快上学了。我非常荣幸能在伦敦、奥斯陆、哥本哈根等地作关于C#的演讲,这种演讲以后会越来越多。所有这些,我都乐在其中,尽管偶尔略显忙碌。
技术世界依然日新月异。我是在一台上网本上撰写本书的,而上网本的概念在我写第1版时还没出现。那时最智能的智能手机在今天看来相当原始,而我如今的笔记本电脑已经堪比台式机了。不过在我看来,软件方面的发展反而不那么令人振奋,尽管现在已经成为主流(如并行扩展)的项目在当时还处于初级阶段。Silverlight仅仅是成为了一门完全托管的语言,而ASP.NET MVC仍然还很年轻,并且短时间内不会发布1.0版本。当然,C#本身仍然在不断变化,否则也没有必要撰写第2版了。
尽管一切都在改变,但本书所关注的角度依然不变。我仍然致力于帮助人们熟悉C#。因为新的框架层出不穷,同时也因为我们需要以更快的速度掌握这些东西,所以打造扎实的基础就显得尤为重要。我们至少应该能够有把握地指出,哪个是泛型方法调用,哪个是属性访问,哪个将Lambda表达式转换为委托,等等。
实际上,我认为掌握一门语言的一般标准一直在提高。令我惊喜的是,很多开发者很好地理解了LINQ,虽然对另外一些人来说,它依然神秘莫测。不可否认,这些观察结果主要来自Stack Overflow,这是个只有部分开发人员参与交流的网站,从中得出的观点具有一定的片面性。但即便如此,我仍然有理由对自己的观点持乐观态度。我希望本书第1版对这种标准的提高起到了一定的作用,希望本版亦然。
我一直打算真正地学一门新的语言。我已经对F#和Python有所涉猎,也答应自己要学习Erlang和Haskell。我也一直说要看看Ruby到底有什么稀奇的地方。但C#又把我拉了回来,每次都是这样。它并不完美,但它能让我简单明了地表达自己的想法,这对一门语言来说,或许应该是最重要的特性。总有一天,我会设法让自己远离C#,真正使用另外一种语言来思考问题。但在此之前,我希望能通过本书向你传达我对C#的满腔热忱。
序言回到顶部↑
世上有两类钢琴家。
一类钢琴家弹琴并不是因为他们喜欢,而是因为父母强迫他们上钢琴课。另一类钢琴家弹琴是因为他们喜欢音乐,想创作音乐。他们不需要被强迫,相反,他们陶醉其中,时常忘记什么时候要停下来。
后一类人中,有人是把弹钢琴当作一种爱好。而有人则是为了生活,因此更需要投入、技巧和天赋。他们有一定的灵活性来选择弹奏哪些音乐流派和风格,不过这些选择主要还是由雇主的需要或者听众的口味来决定的。
后一类人中,有人主要就是为了钱,但也有一些专业人士即便没有报酬,也愿意在公共场合弹奏钢琴。他们喜欢运用自己的技巧和天赋为别人演奏音乐。在这个过程中,他们能找到许多乐趣。如果同时还有报酬,当然更是锦上添花。
后一类人中,有人是自学成材的,他们演奏乐曲是不看谱的。这些人有极高的天赋和能力,但除非通过音乐本身,否则无法向别人传递那种直观的感受。还有一些人无论在理论还是实践上都经过了正统的训练,他们能清楚地理解作曲家是用什么手法得到预期的情绪效果,并相应地改进自己的演绎手法。
后一类人中,有人从来没有打开钢琴看它的内部构造。还有一些人则对钢琴的发声原理好奇不已,最后发现是由于杠杆装置和绞盘在音锤敲击琴弦前的瞬间,牵引制音器的擒纵器,他们为弄明白由5 000~10 000个运动机件组成的这个乐器装置而感到高兴和自豪。
后一类人中,有人会对自己的手艺和成就心满意足,对它们带来的心灵上的愉悦和经济上的收入感到非常满意。但是,还有一些人不仅仅是艺术家、理论家和技师,他们会抽时间以导师的身份,将那些知识传授给其他人。
我不知道Jon Skeet是哪一类钢琴家。但是,我与这位微软C# MVP有多年的电子邮件交流,并经常看他的博客。我本人至少3遍逐字读完他的这本书,我清楚地知道Jon是后一种软件开发者:热情、博学、天资极高、有好奇心以及善于分析——是其他人的好老师。
C#是一种极为实用和快速发展的语言。通过添加查询能力、更丰富的类型推断、精简的匿名函数语法,等等,一种全新风格的编程语言已出现在我们的面前。与此同时,它代表的仍然是一种静态类型的、面向组件的开发方式,C#取得成功的立足之本没有变。
许多新元素会让人有矛盾的感觉。一方面,它们会显得比较“旧”(Lambda表达式可以追溯到20世纪上半叶计算机科学奠基的年代)。与此同时,对于那些习惯了现代面向对象编程的开发者,它们又可能显得太新和太不熟悉。
Jon掌控了一切。对于需要理解C#最新版本“是什么”和“怎么做”的专业开发者,本书是理想的选择。此外,如果开发者还探索语言“为什么”要这样设计,从而加深他们对语言的理解,那么本书更是独一无二的。
为了利用语言提供的所有新能力,需要以全新的方式思考数据、函数以及它们之间的关系。这有点儿像经过多年的古典乐训练之后,开始尝试演奏爵士乐——或者相反。不管怎样,我期待下一代C#程序员能够“谱写”出优秀的乐章。祝你“谱曲”愉快,并感谢你选用了C#这个
“主调”。
Eric Lippert
微软资深软件工程师
一类钢琴家弹琴并不是因为他们喜欢,而是因为父母强迫他们上钢琴课。另一类钢琴家弹琴是因为他们喜欢音乐,想创作音乐。他们不需要被强迫,相反,他们陶醉其中,时常忘记什么时候要停下来。
后一类人中,有人是把弹钢琴当作一种爱好。而有人则是为了生活,因此更需要投入、技巧和天赋。他们有一定的灵活性来选择弹奏哪些音乐流派和风格,不过这些选择主要还是由雇主的需要或者听众的口味来决定的。
后一类人中,有人主要就是为了钱,但也有一些专业人士即便没有报酬,也愿意在公共场合弹奏钢琴。他们喜欢运用自己的技巧和天赋为别人演奏音乐。在这个过程中,他们能找到许多乐趣。如果同时还有报酬,当然更是锦上添花。
后一类人中,有人是自学成材的,他们演奏乐曲是不看谱的。这些人有极高的天赋和能力,但除非通过音乐本身,否则无法向别人传递那种直观的感受。还有一些人无论在理论还是实践上都经过了正统的训练,他们能清楚地理解作曲家是用什么手法得到预期的情绪效果,并相应地改进自己的演绎手法。
后一类人中,有人从来没有打开钢琴看它的内部构造。还有一些人则对钢琴的发声原理好奇不已,最后发现是由于杠杆装置和绞盘在音锤敲击琴弦前的瞬间,牵引制音器的擒纵器,他们为弄明白由5 000~10 000个运动机件组成的这个乐器装置而感到高兴和自豪。
后一类人中,有人会对自己的手艺和成就心满意足,对它们带来的心灵上的愉悦和经济上的收入感到非常满意。但是,还有一些人不仅仅是艺术家、理论家和技师,他们会抽时间以导师的身份,将那些知识传授给其他人。
我不知道Jon Skeet是哪一类钢琴家。但是,我与这位微软C# MVP有多年的电子邮件交流,并经常看他的博客。我本人至少3遍逐字读完他的这本书,我清楚地知道Jon是后一种软件开发者:热情、博学、天资极高、有好奇心以及善于分析——是其他人的好老师。
C#是一种极为实用和快速发展的语言。通过添加查询能力、更丰富的类型推断、精简的匿名函数语法,等等,一种全新风格的编程语言已出现在我们的面前。与此同时,它代表的仍然是一种静态类型的、面向组件的开发方式,C#取得成功的立足之本没有变。
许多新元素会让人有矛盾的感觉。一方面,它们会显得比较“旧”(Lambda表达式可以追溯到20世纪上半叶计算机科学奠基的年代)。与此同时,对于那些习惯了现代面向对象编程的开发者,它们又可能显得太新和太不熟悉。
Jon掌控了一切。对于需要理解C#最新版本“是什么”和“怎么做”的专业开发者,本书是理想的选择。此外,如果开发者还探索语言“为什么”要这样设计,从而加深他们对语言的理解,那么本书更是独一无二的。
为了利用语言提供的所有新能力,需要以全新的方式思考数据、函数以及它们之间的关系。这有点儿像经过多年的古典乐训练之后,开始尝试演奏爵士乐——或者相反。不管怎样,我期待下一代C#程序员能够“谱写”出优秀的乐章。祝你“谱曲”愉快,并感谢你选用了C#这个
“主调”。
Eric Lippert
微软资深软件工程师
媒体评论回到顶部↑
“阅读一本单纯讲解语法的书会让人痛苦不堪,幸运的是,我们有了Jon的这本书。它以独特的方式讲解C#,值得每一个C#开发人员细读和体味。对于想在实际开发中应用C#,而不仅仅是了解必需语法的中高级开发人员,本书绝对不容错过!”
——Sam Shaw,得克萨斯州大学达拉斯分校.Net用户组副总裁
“第2版新增了动态类型、代码契约和其他一些新特性,是Jon延续第1版辉煌的力作。我对本书推崇至极,.NET社区的读者早就开始争相预订了。如果你对C#感兴趣,还等什么呢?”
——Kirill Osenkov,微软公司
“我向所有关注C#的读者推荐本书,不论是高级开发人员还是初学者都能从中各取所需。只要Jon继续关注C#,我们就能‘站在巨人的肩上’一窥究竟。”
——Ferdinando Santacroce,DZone评论
——Sam Shaw,得克萨斯州大学达拉斯分校.Net用户组副总裁
“第2版新增了动态类型、代码契约和其他一些新特性,是Jon延续第1版辉煌的力作。我对本书推崇至极,.NET社区的读者早就开始争相预订了。如果你对C#感兴趣,还等什么呢?”
——Kirill Osenkov,微软公司
“我向所有关注C#的读者推荐本书,不论是高级开发人员还是初学者都能从中各取所需。只要Jon继续关注C#,我们就能‘站在巨人的肩上’一窥究竟。”
——Ferdinando Santacroce,DZone评论
评论交流
共有11人开贴评论 13人参与评论 1人参与打分 查看
发表于:2012-1-29 17:25:00
先说.NET开发人员,我认为本书和CLR via C#是两本.NET程序员必读的书,这两本书有着不同的倾向。
CLR via C#更加倾向于来用C#剖析CLR的原理和行为,而本书相对来说更加实用,把C#1.0到4.0中“先进”的特性婉婉道来,更关键的是,这本书不仅仅是简单地罗列C#中每一项特性,而是会阐述每一项特性的发展史。我们知道,需求是发展的最大动力,那么我们从这本书可以很清楚地看到,微软是怎么样一步步地提高.NET程序员的生产力,怎么样让语法变得越来越优雅,怎么样越来越容易上手。C#3.0的LINQ是创举,我们在社区中体会到了万物皆为LINQ的神奇,而在我看来C#4.0的并行库更是把并行编程封装得几乎完全傻瓜化了。
大概在两年前,我就一直在致力于提倡语义化编程,当编程语言发展到完善程度的时候,一个产品工程师不需要了解任何语言的内在细节,只需要像平时说话一样来写代码,然后点下运行,喝一杯茶,看着产品发布。当然,需要做到这一点还有很长的路要走,微软的天才架构师们当然也会认识到这一点,那他们要做的第一步,也是很多编程语言都致力于的方向,就是尽力去降低“产品工程师们”的门槛,让他们更多关注业务逻辑,从而把“计算机科学”和“软件工程”这两门学科彻底分开。
说到这里,顺便说一个被扯了好多年的话题:“数学到底是不是程序员的必备学科”。在我看来并不是。有这么一种观点说,我们可以把程序员分成建筑学家和数学家,那么产品工程师-->产品架构师的职位应该是建筑学家。那么建筑学家该做的事儿是什么?是设计一套完善的架构,定制一套属于自己产品的设计模式的组装。但是话又说回来,我一直说,设计模式的产生其实是为了弥补面向对象语言天生的不足,那么当语言彻底“完善”之后,设计模式其实可以逐渐被舍弃掉,那么作为产品工程师和产品架构师,我觉得其实必备的技能是“会用最直接的语言说话”,其实也就是,怎么样把产品的逻辑说清楚,这也是我认为产品工程师所需的最基本素养,没有之一。
说了这么多题外话,回到这本书,我之前说这是一本.NET程序员所必读的书,可是我题目说的是“值得所有开发人员看看的书”,没错。在我看来,C#实在是当今所有语言中发展最迅猛的语言,做Java程序员的乐趣是用成熟的框架解决各种各样的业务问题,做Python程序员的乐趣是用简短漂亮的代码来写下一个个函数和模块,而作为一个.NET程序员最大的乐趣就莫过于跟着微软的步伐一步步地体验那些酷炫的语法特性,从委托,事件,匿名方法到之后的LINQ,dynamic,并行库还有声明式编程。再到5.0可能会提出的“编译即服务”的概念。然后感觉到,原来代码还可以这么写。那么作为一个其他语言的程序员,即使不想依附于Windows这个平台,但是学一学C#的语法特性,然后当我们在写着其他代码的时候,然后脑子转一下,想到,其实C#可以这么写非常简单,然后再来考虑本语言是否有这样的方式来实现这样的问题。岂不妙哉!
但是,不得不说的一点是,作为译作,这本书的翻译我觉得不是足够流畅,有的话我确实需要关掉音乐,静下心来大声读两三遍才能读懂,但是,相对于我看英文的龟速而言,这个的性价比也是足够高的。这也是我给本书四星而并非五星的理由。
还是引用我之前第一章说的话,有人说C#就像.NET程序员的初恋情人,即使有那么一天,你在其他平台的身体上折腾来折腾去,但是你依旧不会忘记,并且愿意时常幻想,曾经.NET带给我们的美妙感觉。
CLR via C#更加倾向于来用C#剖析CLR的原理和行为,而本书相对来说更加实用,把C#1.0到4.0中“先进”的特性婉婉道来,更关键的是,这本书不仅仅是简单地罗列C#中每一项特性,而是会阐述每一项特性的发展史。我们知道,需求是发展的最大动力,那么我们从这本书可以很清楚地看到,微软是怎么样一步步地提高.NET程序员的生产力,怎么样让语法变得越来越优雅,怎么样越来越容易上手。C#3.0的LINQ是创举,我们在社区中体会到了万物皆为LINQ的神奇,而在我看来C#4.0的并行库更是把并行编程封装得几乎完全傻瓜化了。
大概在两年前,我就一直在致力于提倡语义化编程,当编程语言发展到完善程度的时候,一个产品工程师不需要了解任何语言的内在细节,只需要像平时说话一样来写代码,然后点下运行,喝一杯茶,看着产品发布。当然,需要做到这一点还有很长的路要走,微软的天才架构师们当然也会认识到这一点,那他们要做的第一步,也是很多编程语言都致力于的方向,就是尽力去降低“产品工程师们”的门槛,让他们更多关注业务逻辑,从而把“计算机科学”和“软件工程”这两门学科彻底分开。
说到这里,顺便说一个被扯了好多年的话题:“数学到底是不是程序员的必备学科”。在我看来并不是。有这么一种观点说,我们可以把程序员分成建筑学家和数学家,那么产品工程师-->产品架构师的职位应该是建筑学家。那么建筑学家该做的事儿是什么?是设计一套完善的架构,定制一套属于自己产品的设计模式的组装。但是话又说回来,我一直说,设计模式的产生其实是为了弥补面向对象语言天生的不足,那么当语言彻底“完善”之后,设计模式其实可以逐渐被舍弃掉,那么作为产品工程师和产品架构师,我觉得其实必备的技能是“会用最直接的语言说话”,其实也就是,怎么样把产品的逻辑说清楚,这也是我认为产品工程师所需的最基本素养,没有之一。
说了这么多题外话,回到这本书,我之前说这是一本.NET程序员所必读的书,可是我题目说的是“值得所有开发人员看看的书”,没错。在我看来,C#实在是当今所有语言中发展最迅猛的语言,做Java程序员的乐趣是用成熟的框架解决各种各样的业务问题,做Python程序员的乐趣是用简短漂亮的代码来写下一个个函数和模块,而作为一个.NET程序员最大的乐趣就莫过于跟着微软的步伐一步步地体验那些酷炫的语法特性,从委托,事件,匿名方法到之后的LINQ,dynamic,并行库还有声明式编程。再到5.0可能会提出的“编译即服务”的概念。然后感觉到,原来代码还可以这么写。那么作为一个其他语言的程序员,即使不想依附于Windows这个平台,但是学一学C#的语法特性,然后当我们在写着其他代码的时候,然后脑子转一下,想到,其实C#可以这么写非常简单,然后再来考虑本语言是否有这样的方式来实现这样的问题。岂不妙哉!
但是,不得不说的一点是,作为译作,这本书的翻译我觉得不是足够流畅,有的话我确实需要关掉音乐,静下心来大声读两三遍才能读懂,但是,相对于我看英文的龟速而言,这个的性价比也是足够高的。这也是我给本书四星而并非五星的理由。
还是引用我之前第一章说的话,有人说C#就像.NET程序员的初恋情人,即使有那么一天,你在其他平台的身体上折腾来折腾去,但是你依旧不会忘记,并且愿意时常幻想,曾经.NET带给我们的美妙感觉。
| 我要写评论 |
| 查看所有评论交流(共11条) |







点击看大图





加载中...

