领导力大挑战
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Werner Schuster 译者 胡键 发布于 2009年2月1日
Clojure是Lisp语言家庭中的新近成员,运行于Java平台之上。它于2007年面世,并已获得了广泛关注。原因之一在于Clojure解决并发问题的方法是建立于软件事务性内存(STM)之上的。
Stuart Halloway是《Programming Clojure》(由Pragmatic Programmers出版社出版)一书的作者,该书目前尚处于beta版阶段。我们和Stuart就Clojure、STM、工具等内容进行了交谈。
InfoQ:Clojure使用STM来实现并发;你能对STM进行一番简明扼要的介绍吗?
STM是一个更大故事的一部分:针对可变状态的明确API(explicit APIs for mutable state)。通过将代码分成纯函数层和可变层,你可以得到2个极大的好处:
* 你的纯函数代码更容易测试和重用
* 你可以选择符合你的并发性和伸缩性需要的明确可变API(explicit mutable API)。Clojure为不同状况提供了4种不同的API:refs和STM、agents、vars和atoms。此外,你总能向下再深入一层,使用Java并发API。
InfoQ:另一类对Clojure感兴趣的是已经熟悉Lisp的程序员;在尝试使用Clojure时,他们有什么需要注意的?
我对Lisp使用者的建议是“一开始要有耐心。”Clojure是自由的Lisp,不存在和其他Lisp向后兼容的问题。这意味着在实际过程中有很多东西是不同的。一旦你在Clojure上花了些时间,你可能就会同意Rich的设计决策,认为其动机是非常不错的。
Clojure网站已经有了一份文档来说明它和很多其他Lisp的区别。Clojure的创造者Rich Hickey提供了一些幻灯片(PDF链接)来向Java开发者讲解Clojure,以及反过来从Lisp使用者的角度来讲解Clojure。
InfoQ:对于Java使用者,或更普遍的,使用OOP的开发者来说,有什么习惯是他们在使用Clojure时需要抛弃的?
不象其他新的VM热门语言,Clojure*不是*面向对象的。这一开始可能会把人给吓住:“没有对象,我该怎么来设计一个系统?”
但是Clojure*的确*提供了很多你想从OO中得到的东西:
* 封装(通过名字空间、私有定义和闭包)
* 强大的多态(multimethods)
* 函数重用比继承更胜一筹。(函数和不可变状态组合比继承层次更优。)
Clojure和众多OO语言的区别在于:OO语言提供的是套餐,选择有限;而Clojure提供的则是散餐,可照单随意选择。
InfoQ:对于Lisp的初学者,你有什么资源可推荐的(当然,除了你的书之外)?
Clojure和很多好思想联系紧密。除了《Programming Clojure》之外,我会推荐
* Seibel的《Practical Common Lisp》很适合想尽快提高Lisp的人
* Graham的《On Lisp》有助于了解Lisp的宏
* Goetz等人所写的《Java Concurrency in Practice》讨论了并发性
* O'Sullivan等人所写的《Real World Haskell》可帮助了解函数编程
* Abelson和Sussman的《Structure and Interpretation of Computer Programs》,因为每个人都应该读一读它
附注:这些书大多数同时还是可在线免费获得的:《Practical Common Lisp》、《On Lisp》、《Real World Haskell》和《SICP》。
InfoQ:Clojure开发者应该避免哪些旧的Lisp模式/实践?(如,不要到处都使用list,取而代之尽量优先使用Clojure的数据结构,如maps、vectors等?)。
你真是说到了这个问题的点子上。在Clojure中,list主要是用于代码。至于数据,则要根据不同情况选择合适的结构,拥抱sequences库。不要害怕直接调用Java API。
InfoQ:Clojure的库生态系统怎样?
对于任一已知需求(Web开发、数据库存取、测试、BDD)都有3到4个即将面世的Clojure库。这本书中“Clojure in the Wild”一章对它们进行了简要的介绍,并进一步提供了使用test-is测试框架和Compojure的例子。
在Clojure的邮件列表中,Rich Hickey最近要求Clojure库的维护者报告他们正在开发的库。在GitHub中的Clojure语言分类下可找到大量的Clojure项目。
InfoQ:你愿意看到一个多平台的Clojure(不只是针对于Java平台的Clojure)出现吗?
不愿意。Clojure和Java的紧密集成是其动力的关键。当然,我很高兴看到与.NET平台有关的实用Lisp——但它不应该是Clojure。
InfoQ:你使用什么工具来进行Clojure编程?
我使用Emacs,偶尔再加上SLIME。但我已经是一名Emacs使用者了,因而上述选择显而易见。另外,还存在针对于vi、Eclipse、IDEA和NetBeans的插件。
支持Clojure的一些IDE/编辑器的例子是:clojure-dev(Eclipse)、clojure-intellij-plugin(IntelliJ)、enclojure(NetBeans)。Gorilla(VIM),它类似SLIME(Emacs)(Bill Clementson已经写了一篇在Emacs和SLIME中配置Clojure环境的指南)。
由于很多这些工具都需要完成类似的工作,已经出现了关于在这些工具的一个公共后台之上进行合作的呼声。一种选择是采用类似SLIME和Gorilla的做法,即运行一个Clojure实例,然后通过查询它来完成文档查看(Clojure符号将它们的文档字符串作为元数据携带),代码查看、名字空间浏览等工作。
InfoQ:你现在会在复杂的商业项目中使用Clojure吗?
如果身处一个敏捷团队,有好的测试套件,我目前会毫不犹豫的将Clojure用于产品环境之中。
InfoQ最近报道了一个将Clojure应用投入生产环境的例子。(InfoQ上更多关于Clojure的内容)。
你会考虑Clojure吗?Clojure的哪方面最让你感兴趣——它的Lisp血统、STM或其他?
查看英文原文:Clojure Brings STM, LISP to the JVM
译者 胡键 热心开源技术,《开源技术选型手册》作者,《SOA实践指南》译者。目前致力于Groovy/Grails的研究和推广。
在实施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概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
2 条回复
关注此讨论 回复