早几天,笼统地就经典感慨了一番,接着来个逐一点评,算是有始有终了。经典是用来阅读而非膜拜的道理,自然是明白的,虽然我是属于比较推崇经典那一类的。阅读大致就是一个和作者交流的过程,有兴致时无妨感慨点评一番,算是对作者的一种致敬吧。
1 Steve McConnell - Code Complete: A Practical Handbook of Software Construction
感言:二获Jolt Awards,算得上众望所归了,印象中,国内书商有炒作过第二版。作者主持过SWEBOK工作,所以写起书来也明显带有百科全书式的味道。我对SWEBOK一类百科全书式的东西,一般是不太感冒的,但这本书是个例外。作者学识渊博,却并无丝毫学究气,文笔洗练朴实,众多话题娓娓道来,处处透着一股举重若轻的味道。并不太关注各编程语言之趣向,直面编程之实质性内容。Coding之外,软件开发其它过程均有所涉及。有闲时,寻一寂静处,一边品茶,一边就着此书做些梳理功夫,慢慢地自然而然可收洗髓伐毛之功了。如此一来,也就不太适合初学者了。
2 Elisabeth Freeman, etc. - Head First Design Patterns
感言:二名作者属于不怎么出名那一类的江湖高人,后来还整了一本HTML的书,影响就远远无法和这一本相比了。为这本书作序的一堆高人中,前二个就是GOF之二,GOF作为Design Pattern之父,当时有一位已仙游走了。我相信读过第一章后对Strategy Pattern以及OO Principle仍然觉得没有啥感觉的,应该是不太可能发生的事情。如果有人如此不幸,我估计有二种可能,第一可能是英文太糟糕了,第二可能是买错书了。此书并无甚原创性,属于阐释Design Pattern一类的著作,但是写的太精彩了,不仅绝顶高手好评如潮,更难得的是由初级向高级突破进阶时尤其给力。
3 Steve McConnell - Rapid Development
感言:作者是排名第一那本作者同一人,的确是太有才了。如前面提到的,作者主持过SWEBOK工作,比较有意思的是,这本讲软件开发过程的著作有很浓的敏捷开发味道,我一直很好奇,一位软件工程权威组织的专家居然整了一本富有敏捷精神的书?而且好几年后,Agile Development这个词才出现。
4 Erich Gamma,etc. - Design Patterns: Elements of Reusable Object-Oriented Software
感言:此书在编程语言之外为OOP开辟了一片独立的天空, 影响之深远,江湖上可谓无人不知。OO修炼过程中,知易行难的感慨向来颇多。如果把OO理念比作九阴真经,那Design Pattern就是降龙十八掌了。九阴真经太玄妙,降龙十八掌却是一招一式清清楚楚毫不含糊,一个个Design Pattern恰如降龙十八掌之各掌, 妙用各有不同,却处处体现同一个OO之理念。由此,Design Pattern打开了践行OO的方便之门。原著用的是C++,但一招一式无疑都是跨越语言的。另外,原著还采用了早期的UML,3年后,UML正式成为标准。
5 Bruce Schneier - Applied Cryptography: Protocols, Algorithms, and Source Code (2nd Edition)
感言:未读过。
6 Robert C. Martin - Agile Software Development: Principles, Patterns and Practices
感言:作者是OO领域的大师,敏捷开发先驱之一,XP鼓吹者。书名有一定误导,除了敏捷开发之外,精华其实是OO和TDD践行部分。实战性强,而且所举例子均是很常规的企业应用。此书先出的Java版,后出的C#版。印象中,作者并未讳言其早期对XP的疑惑,而附录中竟转载了一个不太出名的高人关于Coding就是Design的高论,对传统软件工程阵营的冲击无疑是颠覆性的,即使在敏捷社区内部,这个观点也是很激进的。一个早已名扬天下的大师,在根本立场上居然发生了180度的大逆转,令人感慨的已经不是大师个人的勇气,而是软件行业仍然是多么年轻。
7 Joel Spolsky - Joel on Software
感言:典型地美式实用主义文风,擅长铺垫,于平淡中自然演绎出自己的观点或感受。不是一本谈具体Coding的技术书,也不是系统谈Process的,类似于专栏文章的选集。印象中,作者本是技术高手,曾主持过早期MS Excel VBA项目。近几年比较火的技术社区stackoverflow.com,作者是主要策划人之一。
8 Tom DeMarco, Timothy Lister - Peopleware: Productive Projects and Teams (2nd Edition)
感言: 就好像是推崇所谓人本主义管理那一套的专家,无意中发现了软件开发领域种种愚蠢+恶心的搞法,激愤之下忍不住出手相助,于是整出了这一类书。早些年读的时候,着实觉得很感动,现在我觉得这类书的作用主要就二个,一是为媒体提供了一些可以没完没了炒下去的话题,二是让聪明的管理者变得更虚伪或更开明,让自以为是的管理者变得更……。
9 Frederick P. Brooks - The Mythical Man-Month, Anniversary Edition (2nd Edition)
感言:作者是Turing Award获得着,不过这绝不是这本经典长盛不衰的原因。Intel的摩尔定律都已经失效了,而这本经典里面那个著名的断言依然继续着它淡淡的叹息。所谓“朝闻道,夕死可矣”,如果一生只能读一本软件开发方面的书,我愿意选这一本。我个人认为应该排第一。
10 Martin Fowler - Refactoring: Improving the Design of Existing Code
感言:Martin Fowler的书,相信很多人和我一样,每本必读。这一本是OO实践中从初级向高级突破的必读经典。早读早受益。
11 Mike Cohn - Agile Estimating and Planning
感言:未读过。
12 Alistair Cockburn - Writing Effective Use Cases
感言:作者是敏捷开发先驱之一,思想富有原创性,哲理性很强。不过这本书实在看不出来,我一直奇怪这本书为何如此出名?有意思的是,如今Use Case风头已经不如User Story了。
13 Bertrand Meyer - Object-Oriented Software Construction (2nd Edition)
感言:作者是OO先驱之一,大师级学者。此书属于OO早期的经典,影响深远,学术性较强。由于和OO实战有一定距离,如果不是特别喜欢追溯思想源头,建议不要浪费时间,因为可以替代它的更贴近实战的经典不少。如这个清单里面Robert Martin和Martin Fowler的著作。
14 Steve McConnell - Software Estimation: Demystifying the Black Art
感言:作者是排名第一那本作者同一人,的确是太有才了。未读过。
15 Mike Cohn - User Stories Applied: For Agile Software Development
感言:未读过。
16 Donald E. Knuth - The Art of Computer Programming, The, Volumes 1-3 Boxed Set (2nd Edition)
感言:被媒体反复炒过。作者是大师级计算机科学家,也是Turing Award获得者。尝试读过,实在读不下去,多少有点后悔年轻时没多下点功夫。
17 Martin Fowler - Patterns of Enterprise Application Architecture
感言:我个人认为这是企业应用领域的圣经。如果是从事企业应用开发的,建议读至少3遍,如果是架构师,至少6遍。并不是暗示难懂,恰恰相反文笔朴实自然,犹如清澈小溪一般通透,主要是内容太丰富了。
18 Jeffrey Friedl - Mastering Regular Expressions
感言:未读过。
19 Andrew Hunt, David Thomas - The Pragmatic Programmer: From Journeyman to Master
感言:二位作者均是敏捷先驱。典型的实用主义至上视角,文笔很好,基本上不提具体的代码,均是由实战中得来的真知灼见。年头久了点,但可读性仍然很好。The Pragmatic Programmer作为一个系列,也出了不少精品。
20 Karl E. Wiegers - Software Requirements (2nd Edition)
感言:读过部分章节,坦白说,没有啥感觉。有一点可以肯定的是,很多需求模板,特别是Use Case模板,被广泛借用。
如果坚持读到这里,估计会有人和我一样对上面的排名有不同意见。这个排名并不是来自某个特权威的机构,而是来自一个名不见经传的博主http://www.noop.nl/2008/06/top-100-best-software-engineering-books-ever.html,我借用一下不是为了偷懒,而是觉得他的工作干得很漂亮,唯一的遗憾是没有找到最新的更新。