加载中…
个人资料
rfk_fly
rfk_fly
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,389
  • 关注人气:2
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

教师的标题党——《浮现式设计》

(2011-10-16 06:27:41)
标签:

杂谈

分类: 书评

一、他山之石
首先,让我们先到Amazon网站上看看同行对这本书的看法:Emergent Design
我在这里做了一个小结:
总评分:★★★★☆,看着不错
其中:括号中为评论人数。
  • ★★☆☆☆(2)
  • ★★★☆☆(1)
  • ★★★★★(6)
我们从少到多看看他们的评论内容:
★★☆☆☆:
1. nothing new 8人看过7人觉得有用(by Chris:这哥们评论过三次,对DDD的评论是5分。)
毫无新意

This book rehashes the Gang of Four's design patterns and standard recommendations about XP/test-driven development. There is a lot of filler and nothing new. Read the originals; they're classics. 

本书“手洗”了GOF的设计模式和有关XP/TDD的标准建议。内容不少却毫无新意。去读原著吧;那才是经典


For a real epiphany about emergent design, I highly recommend Eric Evans' "Domain-Driven Design: Tackling Complexity in the Heart of Software".

若想真正领悟涌现式设计,我强烈建议Eric Evans的《领域驱动开发》

2. Emergent Design -- nothing new here other than title 4个人看过4个人觉得有用(By D. Raymer:这哥们只评论过一次)
涌现式设计——这儿只有书名是新玩意。

I've just completed reading "Emergent Design: The Evolutionary Nature of Professional Software Development" by Scott L. Bain; I found the author's writing style to be engaging which made for an easy read. However, from my perspective (someone who has been in the trenches of software development for the past 20 years) I found nothing new in this book for the seasoned professional.
 
我刚读完《涌现式设计》;我发现作者这种让人身临其境的行文风格使阅读变得很轻松。可是,我
(已经在一线奋斗了20年的老手)的看法是,我发现这本书对于身经百战的专业人士来说毫无新意。

If you are just starting out, I would recommend this book; if you call yourself a programmer, I would recommend this book. However, if you are a trained software professional, and already understand that the phrase "software as an engineering discipline" is an oxymoron, then I would recommend you spend your time elsewhere. This book simply puts into written words what we already know -- waterfall development doesn't work for systems where the requirements aren't well understood or are subject to change during the development effort. The author adequately discusses the importance of patterns and their importance to modern software systems, the importance of paying attention to the details not found in the software, and the fact that you need to get over fear of change. In my opinion, the author does not offer any new insights. 

如果你刚刚起步,我会推荐这本书;如果你自称程序员,我会推荐这本书。但是,如果你是一个训练有素的专业人士,并且已经晓得“软件即是工程纪律”这一矛盾的比喻,那么我就会建议你还是把时间花在其它事情上吧。这本书只是把我们已经知道的东西变成了铅字——对于需求未得到充分理解的系统,或者开发过程中需求发生变更的系统,瀑布开发会失效。作者充分讨论了模式的重要性,他们对现代软件系统的重要性,关注软件中没有发现的细节的重要性,以及你需要克服对变化的恐惧这一事实。在我看来,作者没有给出任何新见解。


Again, if you are just starting out, or have no exposure to object-oriented theory/practice, patterns and iterative-and-incremental development, this book is a good introductory text. If you are looking for advanced knowledge, in my opinion, its not here. 

重申一下,如果你是新手,或者还没接触过面向对象理论/实践、模式以及迭代增量式开发,本书都有不错的介绍。如果你在找寻高级知识,在我看来,这里没有。

★★★☆☆
1. Good practices but does not live up to its title 36人看过34人觉得有用(By Bas Vodde,这哥们发表了173条评论,而且每篇都洋洋洒洒的一堆字)
实践不错,但文不对题

Emergent Design by Scott Bain is a interesting book. The title is very promising, when I first heard about it, I got very excited! Finally a book about how designs emerge, how designs emerge from multiple people and how designs evolve over time compared to specifying. After reading the book, I felt the book was good, but disappointing. It did not cover the topics I would like to have seen. 

《涌现式设计》是本有趣的书。题目很有“气势”,当我第一次听说时,我无比兴奋!(原以为)终于有书讲设计涌现的方法了,以及设计如何从多个人中涌现出来,还有与指定相比,设计是如何随时间涌现的。但当我读完,虽然我觉得这书还行,但却颇为失望。
它压根没有涉及我想要看的东西

The general idea of the book is that software should grow better over time instead of decay over time and that the optimal design will emerge. An idea I strongly agree with. The author links this to software development needing to change to become a profession. If SW development is a profession, then people will use proper practices and design will emerge. The practices (in a broad sense) are principles of design, patterns and disciplines. After the first couple of chapters the book was having a good start, though I started wondering if the author didn't bite of more than he could chew. Those are huge topics by themselves! 

本书的基本观点是,软件应该随时间变得更好而不是腐烂,以及最佳的设计是逐步涌现的。对此想法我深表赞同。作者将其与软件开发需要改变从而成为一个专业联系起来。如果软件开发是一个专业的话,那么人们将会使用恰当的实践,而且设计将会涌现出来。实践(广义上)是设计原则、模式和纪律。本书开始的几章开局不错,而后我就开始琢磨,作者这家伙是不是有点贪多嚼不烂。毕竟这些个主题本身都很大。

From chapter 7 to chapter 14 the author just describes good practices. He starts with qualities of code and qualities of designs. He moves to unit-testing, refactoring and then Test-Driven-Development. He ends with the pattern chapter. The last chapter puts all things together in a case study. Scott does a reasonable job in describing all practices. There are a couple of weird things, like the recommendation that every class has exactly one test class. The TDD chapter also seems to have very little TDD in it :) 

从第7章到第14章,作者只是描述好的实践。他从代码质量和设计质量开始,一路走到单元测试、重构以及测试驱动开发,最后以模式收尾。最后一章用一个案例来把所有这一切联系起来。Scott在描述所有这些实践上做的可圈可点。但也有若干奇怪之处,比如建议每个类只能有一个测试类。而TDD这章似乎甚少涉及TDD:)

As a catalog of best practices, this book perhaps does the best of all the current agile related books. Great job by the author. 

在最佳实践的整编上,本书可能是目前(注:2008年)所有敏捷相关书籍中做的最好的。作者做了件了不起的工作。

However, there are some things that personally bothered me. The book seems to be very pattern focused. Scott seems to be of the opinion that patterns is what hold everything together (probably everything in the world). Though, I agree that patterns are an important concept in modern software development, I wouldn't put so much pattern focus in e.g. a chapter on test-driven development. Maybe the title of the book would better be "Scott on SW design and patterns". 

然而,有几件事让我如鲠在喉,不吐不快。本书似乎过于关注模式了。Scott似乎认为模式是要把事事维系在一起(大概是世间的一切)。虽然,我赞同模式是现代软件开发中的重要概念,但我不会在TDD这类的章节中过分地关注模式。本书的题目如果是《Scott讲软件设计与模式》大概会更好。

That brings me to another issue with the book, the title. Emergent design is an immensely important topic. How does a design start with the first requirement. How does it evolve. How do multiple people work with the design. How can the overall architecture evolve. What about items that evolve difficult, like different programming language usage etc. So much to talk about and the book doesn't do this. It misses a huge opportunity to talk about emergent design & architecture and instead (although important) decides to talk about design principles, patterns and practices. (in that sense, the book is similar to Bob Martin's "Agile Software Development: Principles, Patterns and Practices", which I would recommend over this book). 

这使我想到本书的另一个问题,就是它的题目。涌现式设计是个无比重要的概念。设计是如何由初始的需求开始。它如何演变。多人如何从事设计工作。整体架构如何演进。那些难以演进的事项怎么办,比如使用不同的编程语言,等等。有如此多的东西要谈而本书却没涉及。它丢下探讨涌现式设计和架构这个巨大的机会,反而决定聊(虽然也重要)设计原则、模式和纪律。(在这个意义上,本书类似于Bob大叔的《敏捷软件开发:原则,模式和实践》,与本书相比,我推荐Bob大叔的书)。

But again, the content of the book is good and useful and normally I would go for a 4 star rating, but I decided to go for 3 stars. This is because the book IMHO contains things that really turned me off. 
One of the examples is the talk about professionalism. Don't get me wrong, I do agree with the author on this subject. The point is, we are not alone. In fact, IEEE has been working on certification for many years. In 1999, Steven McConnell wrote a book called "After the Gold Rush" with the subtitle "Creating a True Profession of Software Engineering". Scott talks about finally making a profession out of SW development, but he seems to have not done any research on this topic and seems to not be involved in other attempts to make it a profession. It would have increased his credibility a lot if he would have said "the earlier attempts are different because ..." or something similar. 

但同样,本书的内容不错而且有用,我本打算评4星,但我还是决定给3星。这是因为,以我的拙见,这书有些内容真的让我退避三舍。
其中之一就是对专业化的论述。不要误解我,在这个主题上,我完全赞同作者。问题的关键是,我们并非孤军作战。实际上,IEEE已经从事了多年认证工作。Steven McConnell在1999年曾写过一本叫“淘金热之后”的书,其副标题是“建立真正的软件工程专业”。Scott谈到最终要从软件开发中建立一个专业,但他看起来在这方面没有进行任何研究,而且似乎也没有尝试使之成为一个专业。如果他说“早前的尝试是不同的,因为……”,或类似的什么,那会提高他的可信度。

Another item that was a huge turn-off was the constant promotion of Net Objectives. The book, at times, almost felt like a commercial. Personally, I didn't need to know about what courses Net Objectives teaches, I want to know about Emergent Design! 

另一个让人避之不及的东西是不断的拔高Net Objectives(注:作者所在的培训公司)。这书有时候让人感觉完全是处于商业目的。个人而言,我根本无需了解Net Objectives教什么课,我要了解的是涌现式设计!

Anyhow, all these negative points aside, Emergent Design is a good introduction to modern agile development practices. Especially if you are not yet familiar with topics like Refactoring, TDD and patterns, this book is certainly worth reading. Next to that, Scott's writing style is funny and easy to read. So, if you belong to that group of people, recommended! Otherwise, skip it. 

无论如何,把所有这些不好的方面搁到一边,《涌现式设计》很好地介绍了现代敏捷开发的实践。特别是当你尚不熟悉诸如重构、TDD和模式之类的主题,本书特别值得一读。其次,Scott的文风诙谐、易于阅读。因此,如果你尚不熟悉敏捷实践,建议阅读。否则,忽视它

★★★★★
接下来让我们看看那些5星评论,由于有6条,限于篇幅以及我的翻译能力和耐心,我们就看投票最多的前两条:
1. lots of commonsense advice 22人看过19人觉得有用(by By W Boudville 这人超夸张,有4825条品论,我看了其中前60页,每页10条评论,其中只有3条评论给了电子产品,1条给了视频教学的DVD,其余都是书评,而且都是规规矩矩写的。不管你有没有觉得太夸张,我觉得这哥们绝对是隐藏在人群中的Clark Kent

这引起了我的好奇心,岔开一下:
我们来粗略的计算一下,假设他评论的概率平均,那么他看了4825*(600-4)/600=4792.8,也就是他看了4793本书。我看书最快是半天,最慢的1个月,我们平均一下,3天看完并写一篇评论。那么我搞定这些书评要39年。

我又随机抽了一批数据,2009年1月份读的书,他一共看了32本书,除了一本无法查到页数,姑且认为是100页,那么他总共看了9937页,我们假设每本书有10页左右的内容不必看,而且一天3个小时看书,那么(9937-320)/(31*4)=103.4页/每小时。每分钟看1.7页。这里我忽略了每页字数的多少。但每分钟1.7页的话还是合理的,我看泡菜剧里说,哈佛看书的要求是每分钟12页。

我们再回国头来看看:4792.8/32/12=12.5,也就是说,以每个月32本的速度搞定这些书,需要12年。所以我谨慎第怀疑这是集体智慧的结晶。我浏览了一下他的个人介绍:他开了反网络攻击的公司,本人是加州理工的博士。看来博士真的是第三种存在:上帝,人,博士。另外,我准备编一个爬虫分析Amazon的书评,回到我们的主题)

诸多常识性的意见

Bain's book is a graceful read. At least compared to some texts on "heavy" methodologies like CMMI. He addresses the professional programmer. At some level, there is an introspective feel to parts of it. Can the profession be more professional, in reducing bugs and bad coding practices? More pertinently, can you do this? In expanding on the possible answers, he takes us on a recap of decades of progress in programming. 

Bain的书读起来很舒服。至少与讲那些“厚重”方法论(如CMMI)的书比起来是这样的。他面向的是专业程序员。一定程度上,一些部分给人自省的感觉。通过减少bug和糟糕的编码实践,专业人士可以变得更专业吗?更为贴切地,你能做这些吗?在逐步展开可能的答案的过程中,他带着我们回顾了几十年来编程方面的进展。

One big innovation was the rise of object oriented programming, compared to earlier procedural efforts. Hence C++, Java and other OO languages. Another key idea to remember is that of patterns. Even if you can't remember all the patterns he discusses, at least being aware that such exist is a good step forward in your abilities. 

相比于早先过程式编程的工作相比,面向对象编程的兴起是一个巨大的创新。因此才有C++、Java和其它面向对象语言。另一个要记住的关键想法是模式。即使你无法将他探讨的模式都记住,至少也要意识到这些东西是迈向你能力提高的很好的一步。

There is also lots of advice about littler details. Like having names for classes, methods and variables that are as descriptive as possible. Doesn't matter what language you're using. You should always strive here, so that the code is as self documenting as possible. Though Bain is careful not to go to the extreme of suggesting that no comments are possible. Another key note is that automated unit testing is a great thing. Sure, it takes time to run the unit tests. The payoff in code maintenance makes it all worthwhile. 

还有许多更细节性的建议。像为类、方法和变量命名要尽可能使其具有描述性。不管你使用的是什么语言。你应该始终在这方面努力,代码本身尽可能起到文档的作用。而Brain也小心不要走到另一个极端:建议尽可能没有注释。另一个关键点是,自动化测试是一个伟大的事物。当然,跑测试是要花时间的。在代码维护上的回报使这一切都值得。

Much, if not all of what is written has appeared in other texts. But Bain provides an easy to read and unified treatment. Well suited for a junior programmer.

本书写的很多——但不是所有——东西在其它文章书籍中都有所探讨。但Brain提供了统一处理并易于阅读。非常适合初级程序员。

2. A Gold Mine of Wisdom  15个人看过13个人觉得有用(By T. Anderson 他有385条评论)
智慧的金矿

This book is a gold mine of wisdom. 

这本书就是一个智慧的金矿。

This book contains a ton of wisdom that has come out of the software engineering field over the years. It brings together a lot of software development best practices that can be found in other resources and puts them together under the umbrella of Emergent Design. 

本书智慧爆棚——均出自多年来软件工程领域。它把在其它资源中可以找到的许多软件开发最佳实践汇聚到一起,并将其放在涌现式设计的羽翼之下。

He covers patterns, principles, processes, and practices by presenting the best of each that has been proven to work again and again. The common sense communicated out of this book is priceless. 

他把那些已被证明可一次次工作的最好的东西展示出来,从而涉及了模式、原则、过程和实践。本书传达出来的常识是物价之宝。(说实话,翻译到这里我都快吐了……)

The author has a presentation that touches on a lot of the content found in the book. It can be viewed by Googling for "EmergentDesign_12_11_2007".

 作者的一篇演讲触及了本书探讨的许多内容。可以通过Google搜索EmergentDesign_12_11_2007来查看。

Forward thinking is something that I find lacking in a lot of the environments I am exposed too, especially development environments. This book nails how to do forward thinking when it comes to software design and development. You will end up making your solutions more valuable with each change, instead of degrading them with each change if you follow the advice in this book. 

我发现我所处的许多环境中缺乏前瞻性思考,特别是开发环境。本书表明如何在软件设计和开发中进行前瞻性思考。如果遵循本书的建议,你最终会通过每次变化使解决方案更有价值,而不是使其变糟。

If you do development, this is a must read. I would advise all team leads to get rid of anyone who has not read this book by the end of the year.

如果你做开发,这是必读书籍。我会建议所有的团队领导把年底之前还没读本书的员工都开除。

其它的评论还有,
A fine choice for software engineers who would streamline their efforts(1/1)
想要提高工作效率的软件工程师的好选择

The Dawning of a New Era(1/1)
新纪元的曙光

Software Engineering(1/1)
软件工程

THE Book to read for developers whose code changes(1/3)
进行代码编程的开发人员应该读一读

至此我们做完了同行评审,那么我们总结一下:
优点:
  • 适合入门
  • 行文风格轻松诙谐(英语啊)
  • 有实践,有建议
缺点:
  • 内容毫无新意
  • 没有高级知识
  • 不适合训练有素的高手
  • 文不对题,没谈涌现式设计
二、今年是2011年!

本书是2009年的Jolt大奖得主,国内的IT人员对这个奖很熟悉,能得这个奖的书通常来说都有两下子。但这里我们要考虑一个问题,就是一个物品(知识)随时间价值的变化。这有三种情况:
  • 变大
  • 不变
  • 变小
但技术书籍也不例外:
  • 变大(重构,现在越来越多的人开始学习重构,正因如此人邮又再版了本书。)
  • 不变(应该是变化不大,比如操作系统恐龙书, tanenbaum的计算机网络,每次都有新版,但受众相对稳定)
  • 变小(过时的技术书,从China-pub的赠书里你可以找到很多这样的书)
书籍价值的变化实际上反映的是其内容,也就是其探讨知识的变化。今天敏捷开始在国内热起来,自然带动了相关书籍的出版,但从2008年到2011年的3年中,敏捷圈子里的技术和经验已有了不小的发展,各个领域有新的好书出版,而且当年看似新鲜的东西,如今也基本是常识性的知识。

而且正如上面的书评所说,本书只适合入门阅读,而且其涉及的领域,如TDD,模式,重构等等,“去读原著吧;那才是经典。”而且作者作为一个模式的培训讲师,过分地强调模式的重要性,很像Golden Hammer。其实一个优秀的软件包含三个层面:
  1. 好的架构
  2. 好的设计
  3. 好的实现(代码)
而这三个层面其实并不搭界,也就是说,好的架构不表示你就有好的设计,而好的设计不表示你的代码质量高。虽然作者已悄悄偷换了概念——他强调模式的作用在于对设计的启发性,但过分强调模式容易让人忽视更为基本的原则和实践,虽然作者也有涉及,但都是蜻蜓点水。这方面大概还是Bob的两本书讲的比较全面,辅之以Head First OOA/D和Head First Design Pattern。说白了,如果没有过硬的设计功力和经验,任何方法都帮不了你,TDD不是神迹,演进式设计也不是。

那么什么是涌现式设计呢?很可惜,作者没有告诉我们答案。是否我在日常的开发中按照作者的建议,做好各方面的实践即使涌现设计了?可惜并非如此,只是实践的堆积,即便是好的敏捷实践可能也无法达到预期的效果。遗憾的是,本书没有可操作的建议,甚至想法都没有……。只有诸如此类武断式的话语:“软件要演进,而TDD为演进准备的测试……”

还有一点让我非常不爽的地方是作者过分的谦虚,你经常会发现作者拼命贬低自己的智商来烘托牛人的高大,比如,“我一开始没有认识到……”,“我开始对TDD的看法是……”,这样的话很多,听的多了就让人烦了。中国有句话是,“过分的谦虚就是骄傲。”Bain兄,我们没必要跪着来反衬牛人的伟大。

正因如此,本书在2011年已算不上一个4星书籍,由于技术的快速普及,本书阅读的价值降低,目前看来也就3星。而我更建议读者看看作者推荐的书籍,在这方面我和作者有共同点,就是对Adams的TheHitchhiker's Guide to THe Galaxy的推崇,我们都是了解宇宙和一切终极意义的人。

三、如何毁掉一本书

本书的译者需要批评而非夸奖。一本技术书籍的翻译需要三方面的功力:
  1. 英语阅读(读懂)
  2. 母语表达(传达)
  3. 技术背景(准确)
当然还需要一些宽泛的知识面和责任心。可惜,我没有从本书的翻译中看出来这些来。

译者2008年参与技术书籍的翻译,而且翻译了若干经典的面向对象书籍,但作者的学习和反思的能力确实让人质疑。在China-pub和Amazon中国的网站上有评论作者翻译的东西难读、拗口,而今天这本书依然只能基本的把意思说清楚(当然这点还是值得表扬,如果与更烂的书籍比),语言依然不太顺。由于本书的译者已有14年以上的软件从业经验,我们的要求自然应该严苛,尤其是把“loop”翻译为“回路”,将What you hide you can change (encapsulation)翻译成“隐藏的可以改变”,若有基本的面向对象素养,也知道封装的目的在与”隐藏(或隔离)变化“。第7章的代码看都没看就说“检查反转后的单词……。

干掉一本经典的方法要么译烂他,要么解释他。所以为了IT界,希望译者能定下心来好好磨练自己的功力,多学习,多反思,如果不能把书译好,就先放一放……

最后,我引用料理鼠王中评论家的话,翻译就是烹饪,希望能有更多的好书出版。


在许多方面 评论家的工作很轻松,我们不怎么需要冒险,却能享受比那些提供自身作品供我们评判的人高出一等的地位。我们热衷于批评别人,写者和读者都觉得有趣,但我们批评家必须面对的苦涩事实是: 总的说来
任何普通的垃圾食品都可能比我们对它的批评来得更有意义。

但有时 评论家真正需要冒险的是发现和呵护新生事物。这世界对新天才 新创意常常太过刻薄,这些后起之秀需要朋友。昨晚我品尝了某道全新的、由一位奇特而又出乎意料的厨师制作的美味佳肴。那道美味和它的制作者同时挑战了我对美食的偏见。

我的看法太保守了,他们彻底颠覆了我的观点——过去我毫不隐晦地蔑视Gusteau主厨的名言“人人能烹饪”,但直到现在我才真正理解他的意思:不是每个人都能成为伟大的艺术家,但伟大的艺术家可能来自任何地方。很难想像还有比Gusteau餐馆的天才厨师出身更为卑微的,这位厨师在我这个评论家看来是全法国最顶尖的大厨。我很快将再次光临Gusteau餐馆 期待更多美味佳肴。


0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有