领导力大挑战
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Dave West 译者 池建强 发布于 2010年7月15日
“如果我们现在回头看一下面向对象这个思想是从哪来的,如果以基于消息传递机制的Smalltalk-80的特性来衡量现在的状态继承和面向对象的使用方式,我们不禁要问,我们是不是已经走错路了?”这是在2010伦敦QCon大会采访中提给Joe Armstrong和Ralph Johnson的一个公开问题。Joe Armstrong是Erlang语言的早期开发人员,而Ralph Johnson则长期从事Smalltalk、面向对象编程和模式等领域的研究。受访者都表明目前我们都已经在这条“错路”上了,但这是由于实现上的缺陷导致的,并不是面向对象的思想本身有问题。Ralph Johnson的原话是这样的:
事实上这样的事情总在发生,你有了一个好的想法,并把它公布了出去,但对于大多数人来说,它总是显得很激进。很多人不愿意全盘接受这套理论,他们总是采用其中的一部分,这样,你就会看到很多相似的东西出来。
甚至是Smalltalk,被很多人奉为面向对象语言的典范,也只是在向面向对象这个理念无限逼近。Johnson博士为Smalltalk提了两个具体的问题:
... 我想Smalltalk犯了一个根本性的错误。我觉得让那些不用Smalltalk编程的人去理解Smalltalk是非常困难的,但是如果你在使用Samlltalk进行编程和调试,你会发现你是在调试整个系统。
而且
在Smalltalk中你可以从映像中得到任何你想要的对象。但你没法对新旧对象的版本进行跟踪 ... 还有,复杂度总是一个问题。你构建了一个系统,只有少数人能够维护它,而且Smalltalk并不是总能工作的很好。
事实上,把所有的东西(你的应用类,开发和调试工具和库)都放在“映像”中一直是Smalltalk的问题,即使是对这门语言的崇拜者来讲也是一样。但是,这并不妨碍人们去构建大型的关键任务的系统,例如Cargill Lynx项目。Lynx是全球的粮食贸易系统,该系统支持的用户超过1500,在全美有150多个站点,而且已经运行了十多年了。在Lynx项目的生命周期内,有超过一百名程序员对其进行开发维护,全版本控制,健壮性测试和调试。类似Lynx这样的巨型项目,并不能消除Ralph Johnson的质疑,当然他们也没有否认Smalltalk是一个有缺陷的面向对象的实现。他们只是从不同视角提出了自己的观点。
什么样的特征能够让一门语言具备面向对象的特性,这个问题在90年代进行了广泛和激烈的辩论。在伦敦QCon大会的采访中,Joe Armstrong's的论文导师的话被引述之后,同样引发了争论:
我开始想知道面向对象编程到底是什么,而且我认为Erlang不是面向对象的,它是函数式编程语言。那我的论文导师就说了:“你是错的,Erlang是完全面向对象的”。他说面向对象的语言其实不是去面向对象。我在想,虽然我不能确信是不是能相信这句话,但Erlang可能是唯一的面向对象语言,这时因为Erlang具备面向对象编程的三原则:基于消息传递机制,对象分离和多态。
Armstrong博士表示,他并没有被他的导师的论点说服,但似乎认为Erlang“可能是唯一的面向对象语言。” 除了之前提到的三个特征,单继承和动态类型也被引用为面向对象语言的“绝对需求”。
在这次采访中,Johnson博士和Armstrong博士都表示,面向对象的思想在过去和现在都是非常重要的。Armstrong博士花时间分析了Erlang是如何试图实现面向对象的思想和语言的特性。Johnson博士则花了更多的时间批判以前的试图实现面向对象思想的实践,特别是Smalltalk。这有点奇怪,因为长期以来他一直是Smalltalk和面向对象思想(Johnson博士合著的设计模式的书的标题包含了面向对象)的倡导者,但是Ralph Johnson的论点并不孤立。
Dave Thomas是另一个对面向对象和Smalltalk有相近观点的人。他的团队为Digitalk's Method(第一个PC上的Smalltalk应用)创建了第一个“Goodies Packs”,他是该公司的创始人和CEO,他们的成果最终成为了IBM的VisualAge Smalltalk,而且他的团队开发了非常流行的工具Eclipse(本来是为Smalltalk写的)。Thomas博士被引用的话包括“面向对象是个错误”和“我是国家罪人。” 这些描述当然是为了增加戏剧效果,但同样也指出了Smalltalk在实现对象思想时的“错误”──例如,只关注状态,在类和基于映像的语言里缺乏良好的并发模型和消息机制。
Alan Kay最先提出了“面向对象”词条,他和Dan Ingalls以及其他在Xerox PARC共事的人发明了重要的Smalltalk语言。在最近的澳大利亚计算机世界的采访中,他谈到:
我确实创造了这个词条(而且现在看来这是个糟糕的选择,因为它并没有强调消息传递的重要性)。现在其中一部分思想仍然存在(在几个系统中)。考虑到所有的有效虚拟机的通讯都能通过消息进行交互,我们其实可以建立一个更为全面的理论基础。这样的基础可以提供更好的伸缩性,是我的研究社区的虚拟版本,ARPA-IPTO(美国国防部研究机构的信息处理技术办公室)已经开始构建大规模网络,同时具备强大的“代数”属性(类似多态性)...... 然而,我并不是Smalltalk的粉丝,虽然至今Smalltalk仍然比其他大多数编程系统更好用(我不喜欢其中任何一种,而且至今我也不认为它们适合解决真正的编程问题,无论是对系统还是对终端用户)。
最近对Smalltalk的批评使我想起了在旧杯垫歌曲中重复的那句歌词,Charlie Brown唱到:“(为什么每个人都针对我)。” 当然,Johnson、Armstrong、Kay和Thomas都没有“针对我(Smalltalk)” 。在伦敦QCon大会采访中,其他相对低调一点的批评者提出,正如Johnson博士所言,好的思想总是“对大多数人显得很激进”,那么什么程度的思想才能够被任何程序语言实现呢?
这很可能是因为编程语言无法直接通过定义和结构去描述面向对象的思想。在澳大利亚计算机世界的采访中,Kay博士指出:
对我来说,采用真实对象语义的好处之一就是它们是“real computers all the way down (RCATWD)”──这意味着真实对象保留了全部的能力,可以描述任何事物。用旧的方式虽然可以快速获取数据和过程,但它们不是电脑,延迟优化和分析某些行为是否合理的能力会突然丢失。换句话说,总有真实对象保留着能力去模拟你想要的东西,并把它发送到周围环境中...... 而且RCATWD还提供了两个方向上的完美保护。我们能够从网络(可能是工作中唯一真正面向对象的系统)的硬件模型中了解这种思想。你只需要简单的接受消息格式的约定,就可以免费获得语言的扩展性。我在70年代的想法是,我们一起在互联网上工作并进行个人计算,这是一个非常好的可扩展的设计,而且我们还可以通过虚拟机构建虚拟网络,通过硬件机器进行缓存等。非常糟糕的是这些想法并没有得以实现。
如果‘真实对象’是RCATWD,那么就可以使用编程语言以最恰当的方式实现每个对象的内在特性,这将为‘多语言编程’赋予新的含义。
查看英文原文:Object Oriented Programming: The Wrong Path?
译者 池建强 池建强,多年软件从业经验,先后在洪恩软件和用友集团任职。目前在瑞友科技IT应用研究院任副院长。
发送消息和函数调用是有本质区别的。
www.infoq.com/interviews/johnson-armstrong-oop
值得认真思考:What is Object-Oriented Programming?
俺也没有答案 :-(
函数调用适用于构建对象的内部实现, 而不适合作为对象间交互的方式,因为函数内部逻辑会持有调用线程,并且同时会被多个线程调用, 进而破坏封装.
Joe Armstrong 说他的导师曾他说过,“Object oriented languages aren't object oriented”!
语言只是工具,而人类只要有了新思想就可以改造或创造更多更好的新工具!
OOP 思想的本质是封装稳定的抽象!!!
在 OOPL 流行的今天,真正的大师们仍在有关思考 OO 的问题!
而使用 OOPL 的程序员在做什么?
继续用面向过程的思路编写一个个匪夷所思的类、构建所谓的 n 层架构、模式的滥用作为炫耀的资本?!
没错,这个程序员就是“我”,一名 C# 程序员!
Smalltalk,Erlang,Ruby,Java,C# 等等 OOPL 仅仅是工具,而非 OO!
OOPL 编写出的程序,并未展现 OO 的众多优点,相反,Bug 不断,代码如一团乱麻,难以维护!
我开始寻找解决办法,拜读大师们的著作,从中寻求答案!
直至今天,我认识到“OOP 思想的本质是封装稳定的抽象”,它与实现语言无关!
同意。
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
论道WP第三篇专栏,以应用程序栏的使用为中心,包括了软键盘带来的问题、应用程序栏介绍、如何绑定应用程序栏的属性等几个方面的具体话题,为开发者顺利使用应用程序栏开发提供了具体指导。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
7 条回复
关注此讨论 回复