Hadoop in 360——专访360系统部总监唐会军
在前不久的Hadoop in China 2011大会上,360系统部总监唐会军接受了InfoQ的专访,谈到360公司内部对Hadoop的使用,并对Hadoop项目和HBase面临的挑战提出了自己的看法。以下是采访实录。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Arnon Rotem-Gal-Oz 译者 李剑 发布于 2007年8月4日
十多年前,被人称之为“四人帮(Gang of Four,GoF)”的Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides出版了他们这本划时代的著作:“设计模式:可复用面向对象软件的基础”。这本书曾被认为是整个软件模式发展的先驱,但最近却被人质疑已经与时代的发展脱节,书中解决问题的方式已经可以由新的语言来更好的处理,而且还增加了不必要的复杂度。
这一切都是由7月的早些时候,Jeff Atwood(Code Horror)对GoF的这本设计模式进行批评而引起的。Jeff说道,虽然他认为每一个程序员都应该读一下这本书,但是他仍然认为书中存在两个很大的问题:
1. 设计模式是复杂性的一种表现形式。我宁愿看到开发者在直接拿一张复杂的设计模式处方来用之前,先把注意力集中在寻找更简单的解决方案上。
2. 如果你发现自己常常需要写上一大堆设计模式的样板式代码(boilerplate code)来处理“经常重现的设计问题”,那设计思路本身就是有问题的——这也是一个表示你所使用的语言的基础结构出现问题的信号。
Jeff还在文中引用了Mark Dominus的话。Mark的看法是GoF的设计模式一书实际上阻碍了Christoper Alexander等人思想的传播——他们编写了“A Pattern Language - Towns, Buildings, Construction”这本描述建筑架构的著作,该书被公认为激发了计算机科学领域内的设计模式运动。
Steve Rowe也认为模式应当被作为优秀设计和原则的示例加以应用,而不是被当作一本参考书来翻阅,但是他同时也指出Jeff的说法是偏离主题的,因为Jeff指责的不是人们错误的应用设计模式的方式,而是设计模式的概念。他最后总结说,模式应当被当作优秀设计的示例,而非教条:
当我们学习设计模式发挥作用的方式来帮助我们创建相似的模式时,设计模式是好的;但是当我们直接把它们拷贝过来用时,它们就是坏的。如果有人翻开GoF的书,他就会发现作者常常都会为每一种设计模式都给出一些略有不同的示例。而且他或许也会发现在书中有大量的关于OO的讨论,这些讨论最终的结果就是模式。
Cedric Beust(Otaku)在一篇名为“为设计模式而辩(In Defense of Design Patterns)” 的文章中对Jeff和Mark的批判做出了回应。Cedric认为Jeff(以及在他之前的Mark)对GoF一书进行批判但没有给出替代方案的做法是错误的。还有一个问题就是把Alexander的建筑设计模式和软件设计模式放在一个层面上比较:
很明显,我们应当把Alexander的设计模式和GoF的设计模式分离开来,其原因在于:软件工程的发展要远远落后于建筑工程。我们目前还只是处于做一些螺母和螺栓的阶段,无论什么时候启动一个新的软件项目,我们都不能保证一年之后它不会因为自身的重量而垮掉。换个视角来看,我们不妨想像一下这样一个世界:当一个建筑(比如说一座大桥)开工时,这个项目中雇用了什么样的工程师和工人,这座桥就会有什么样的未来……
Cedric说,建筑的发展要比软件领先的多(在可预测性和稳定性方面)。我们现在还是在地基上努力奋斗,我们也应该把精力集中在这里。
Aristotle Pagaltzis却在Cedric的博客上留言表示Mark的看法是有理有据的:
Dominus的意思是可以把设计模式看作是一个信号,它表示了一门语言在设计模式所用来解决问题的领域内的欠缺。换句话说,在Java中用到的访问者(Visitor)模式就说明了Java在访问列表方面的不足:“Map”和“Filter”这样的语言构造不得不使用冗长的面向对象咒语才能模拟出来。
他不是说像这样用设计模式不对。他只是说它们表示了语言的不足。
看上去大多数人(如果不是全部的话)都认为设计模式作为软件工程的工具是很有用处的,人们的分歧只是聚焦于GoF的书在今天的价值而已。你的意见是什么?你觉得GoF的设计模式是永不褪色的珍宝,还是已成明日黄花?
查看英文原文:Gang of Four Design Patterns - Does it stand the test of time?
译者 李剑 李剑──ThoughtWorks高级咨询师,在持续集成、重构等领域具有丰富的经验;多次为国内大型企业敏捷组织转型提供咨询和培训服务。
QClub(广州站)——移动应用开发经验交流(2月25日 免费报名中!)
Netflix高级软件工程师Jason揭秘Cassandra应用
非常同意“他不是说像这样用设计模式不对。他只是说它们表示了语言的不足”这个说法,我一直就认为“C->C++->Java->Groovy”就是不断地将各种设计模式添加到语言本身去。
设计模式中的大部分模式都是为静态语言C++和Java创立的,而面向对象的鼻祖smalltalk,现在流行的ruby等等都是动态语言,凭什么还称是可复用面向对象软件的基础呢?那些bridge\template\singlten\factory在这些动态语言里边全都用不到。。
个人感觉,除了少数几个模式给人一点启发外,其它模式都无用
个人感觉,除了少数几个模式给人一点启发外,其它模式都无用
事实上不是无用,而是能够深入了解并在实际中应用的不多。
当然我们所说的两种情况很难区分 :P
我倒想问一下,你觉得给你启发的模式是什么?没用的模式又是什么?为什么没用?
其实我觉得这本书主要的还是讲的如何更好的用接口与与类之间的关系来解决一些程序耦合的问题,这应该是本质的问题吧……
在前不久的Hadoop in China 2011大会上,360系统部总监唐会军接受了InfoQ的专访,谈到360公司内部对Hadoop的使用,并对Hadoop项目和HBase面临的挑战提出了自己的看法。以下是采访实录。
在前端开发工作中,受语言和架构所限,我们通常会开发类库或工具来解决一些常见的问题。但是这些工具往往不能很好地与系统集成,增加了工程师学习和使用的成本。针对这些问题,百度实现了一个完整的自动化构建系统。此次演讲将与大家分享这套自动化构建系统的思路和实践。
在Java多线程并发编程中,synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深入分析能帮助我们正确的使用Volatile变量。
随着国外的facebook、twitter以及国内的人人、新浪微博等SNS及内容分享平台的逐步流行,如何从上亿的海量用户中自动挖掘兴趣圈子成为了一个有趣也非常必要的工作。本文讲述了在SNS平台下,如何对海量数据自动进行兴趣圈子挖掘。
当你为MongoDB schema-free的特性欢欣鼓舞时,却苦于无人运维;当你看到网上MongoDB性能评测相当优越,却在应用中不尽人意;当你使用MongoDB顺风顺水,心里正在窃喜不已,却被一场事故把数据搞的一塌糊涂。希望本次的分享能够解决你的一些后顾之忧。
本次演讲视频录制于QCon杭州2011。
飞信开放平台是一个内容合作型业务,核心是通过OPEN API开放汇聚内容服务的Feed,包括微博、SNS,视频,电商等等。在一个多合作伙伴并存的开放环境中,飞信开放平台采取了多样性的资源控制策略为合作伙伴提供可控范围的服务,并优化用户体验。
本次演讲视频录制于QCon杭州2011。
随着3G/4G等宽带无线网络的大规模部署,全球用户对移动互联网的访问以及相关的业务流量已呈现迅猛增长趋势。从运营的角度看,采用高性能、可扩展的分布式平台,通过对移动宽带海量流量数据的深入建模分析,挖掘,获得相应知识以应对上述挑战的需求是非常迫切的。同时,该分析的结果还可以为运营商在网络资源合理分配,网络高效管理,资费套餐差异化定制,甚至是商业智能决策领域提供帮助。
6 条回复
关注此讨论 回复