先说.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带给我们的美妙感觉。