• 故事一:
    我与一个人讨论SVN分支合并管理策略。

    我:SVN分支合并是每个开发人员都应该掌握的技能。
    对方:我担心,让每个开发人员操作太危险。
    我:那就找个人来专门做。
    对方:我担心,这个人成为瓶颈,效率太低。
    我:那你说怎么办?
    对方:……,我也不知道。

    故事二:
    同样是SVN分支。一个负责产品版本管理的人与我讨论版本合并的问题。

    我:这个问题可以用SVN的分支解决。
    对方:但是,SVN分支有问题。
    我:有什么问题?
    对方:我们公司负责SVN支持的人说有问题。
    我:有什么问题?
    对方去打听了一下,得到回答是,70%是人为操作失误。
    我给他演示了一下版本合并的功能,没有任何问题。
    对方:听说你们同事也在那边,你可以问一下。

    我给同事打电话。
    我:听说你们那边SVN分支有问题。
    同事:你听谁说的。
    我:我们这边的人,说70%是人为操作失误。
    同事:我告诉你吧!不是70%,是100%。他们把两个不同源的东西往一块合,不出错才鬼了呢!

    在我的全程陪护下,他们完成了第一次版本合并,没有任何问题。

    故事三:
    JavaEye上有个帖子:我总觉得XP带着一种不太切合实际的浪漫主义

    发贴人长篇大论了一番,然后抛出一个“惊人”的结论。gigix问了一个问题,你做过没有?得到答复是没有。

    小结
    很多问题不是靠想就能解决的。没能力解决问题不是你的错,出来吓唬自己和别人就不对了。

  • 这个周末开始翻译《Programming Scala》。

    大约一个月前,小刀问我,是不是有兴趣翻译书。什么书?有两本可以选择,重构的Ruby版和一本Scala的书。都是挺有趣的书,不过,相对来说,我更感兴趣Scala的书。

    个人而言,一直对程序设计语言有着偏好,对JVM上的语言更是有着很多关注,Java从语言本身上,表现力实在是有限。JVM上的资源非常丰富,所以,我对于JVM上语言最初的关注点就在于这些已有资源。当我了解到Groovy时,我对JVM语言的期望值发生了改变。Groovy告诉我们,Java也可以反过来利用新语言的资源,因为Groovy的类从字节码上是可以对应成Java的类,这样,对一些Java应用而言,在不大动干戈的情况,让一部分代码先“富”起来成为可能,简而言之,把Groovy当作语法更简单的Java用。

    最近一年,我做了一些咨询工作,对于语言的认识又有了些新的看法,对于传统型的大团队,静态语言或许是个更好的选择。因为在这样的团队里面,成员的整体素质不是很高,开发习惯也不是特别好,动态语言对他们来说,实在有些勉为其难。我就是在这种情况下开始关注Scala的。

    除了与Java互操作和静态类型之外,Scala实际上还给我们提供了更多,尤其是函数式编程。随着多核时代的到来,函数式编程已经越来越多的关注。而我们也越来越多从函数式编程中发掘出一些广泛适用的编程法则,比如,编写无状态函数。Scala尝试着把面向对象和函数式编程整合起来,这是两种风格的整合,也是一种有益的尝试。对于普通开发人员而言,即便忽略函数式编程,仅仅把它视为简化代码一种方式也是好的。

    断断续续的了解了Scala,我一直想相对全面的认识一下Scala,除了做项目,翻译也是个不错的选择。当年学习Ruby时,就是通过翻译《Ruby Hacking Guide》了解Ruby的运行机理。想了一下,今年还没有好好学哪门语言,就把Scala当作我今年要系统学习的语言吧!

    我并没有太多的翻译经验,只是玩票一般参加过《ThoughtWorks文集》的翻译。好在还有小刀,作为InfoQ中文站的编辑和几本书的译者,他的翻译经验堪称丰富。有他和背后的编辑,我的英语应该不会造成太大障碍。

    开了个Scala的头,今后,可以多一些关于Scala的讨论。

  • 这是一篇欠帐,因为Away Day是上个周末的事情了。

    我很喜欢Away Day,因为:

    • Away Day是放松,我们可以逃离办公室
    • Away Day是学习,有各种各样的session等着大家
    • Away Day是聚会,外国同事千里甚至万里迢迢来参加,出差在外的同事也会回来
    • Away Day是交流,不同人不同思想在一起碰撞
    • Away Day是……

    遗憾的是,去年因为经济的原因,Away Day取消了,一年之后,当Away Day再次有机会重现江湖的时候,我充满了期待。不同于两年前在办公室里“Away”,这次我们真正意义上的Away。

    Away Day中一个重要的安排当然是一大堆的session,这是一个非常好的学习机会。我的immersion同学Ola Bini这次来到中国,参加Away Day,他的session是关于下一代JVM,也就是JDK 7的一些发展和变化。对于经常关注业界新闻的人来说,语言层面上的东西没有太多新鲜的内容,倒是Ola对低层实现方面的一些讨论,让人可以更系统的了解JVM的发展。徐X一个关于Scala的session居然听不出和Scala有什么关系,实在是有些过份。徐X借着这次机会,表达了一些他对几种程序设计语言的喜爱,比如Smalltalk,Haskell等等。倒是结束之后,我和我们CTO麦罗聊了一会Scala,我建议他弄个Scala的项目,让大家感受一下。

    这次个人感觉收获最大的一个sesion来自我们的老大郭晓,他的主题是关于认知偏见的。我开玩笑的把这个session总结为,如何防止被忽悠以及忽悠别人。自从开始成为咨询师,我就开始对心理学感兴趣,这个session中所讲的东西,我可以很好的映射到我的咨询工作之中,所以,内心会产生出极大的共鸣。事实证明,这不是个别现像,我们后来玩杀人游戏的时候,这些内容左一次右一次的出现在我们面前,于是,杀人游戏又变成了这个session的延续。

    好久没有见到我们创始人Roy了,不过,一般情况下,Away Day他都会出现的,这次也不例外。更大的惊喜是,他的老母亲也出现在北京。我们几个同事在交流咨询经验的时候,Roy走了过来,加入了我们。我们把自己之前的一些工作告诉给他,饶有兴致的听完我们的介绍,他认为我们的工作很有趣,建议我们写一本书,把这些经验介绍出来,同时,也建议我们写一个介绍,发给其它办公室的ThoughtWorker,让有兴趣的人也加入到中国这边的咨询工作中来。

    Away Day的狂欢出现在我们盛大的Party。这些平时已经很能出彩的家伙还是能玩出更多花样。恶搞了很多人“专业”视频;一群新ThoughtWorker表演《唐伯虎点秋香》;把最喜闻乐见的pair拿出来展现反模式;让Sponsor和Sponsee体验默契;用十分钟创作一个小节目……

    Away Day总是让人快乐的!

  • 2009-10-09

    十一读书行

    八天,最长的一次公共假期。回了趟家,幸好飞机上有书做伴,旅程才不显得那么漫长。

    书,是很沉的东西,所以,随身带的书轻薄为好。这次陪我回家的是《卓有成效的管理者》。

    这本书的英文名字是《The Effective Executive》。把Executvie译成“管理者”,虽不是错,却阻碍了我对这本书的接近,因为我从来不是管理者。其实,这本书是讲如何做事的。对我而言,Executive译成“执行者”或许更贴切一些。

    看一下这本书的目录:了解自己的时间用在哪里,考虑自己对外界的贡献,善于利用人的长处,懂得要事优先。这些内容对于非管理者,也是相当有价值的。对于许多自命不凡,却因为得不到赏识而郁闷的程序员来说,这本书会告诉你“到底差啥”。

    这本书很薄,一共不到200页,值得从头到尾读一下。如果没时间,抛开第六、七两章关于如何做决策的部份。如果还没时间,就读读第一章和最后一章,因为它们概括了书中的内容。如果还没时间,那真是活该忙死。

    回程的路上,在机场遇到了李开复的自传《世界因你不同》,买了一本,继续高空阅读。李开复的文章和书,我是读过好多,在我心目中,他一直是一个良师的形像,所以,很有兴趣了解一下他是如何成长的。

    从这本自传,我读到了,一个人的高度,很大程度上决定于他遇到了怎样的人。李开复之所以是现在的李开复,因为他一路上遇到了好多境界很高的人,包括他的父母、导师、在苹果、SGI、微软、Google的各位老板,甚至是帮他打官司的律师。想成长的更好,就要接触更多比自己优秀的人,不只是认识,而是真正的深入接触,比如一起工作。实在没有机会,就读读这些人写的东西吧!

    这个十一长假是真正意义上的不虚此“行”。

  • 当Kent Beck、Dave Thomas和Fred George确定参会,我就对这次大会充满了期待,有机会聆听这些世界级的程序员对软件开发的理解,本身就是一件很难得的事情,更何况,还可以做一些面对面的交流。

    Kent Beck这次演讲的题目是《实效的理想主义》。客观的说,单从演讲技巧而言,Kent Beck并不是特别好,而且这次演讲的内容确实有些太哲学化。在听演讲的过程中,不断听到有人在小声的问,他到底要讲什么。对于他演讲内容,我的理解是,一方面,作为软件开发者,我们应该是一个理想主义者,有了一个目标,我们才能不断的提高和进步,另一方面,现实的情况可能会让我们无法一步到位到达理想状态,我们就要以具有实效的工作方式,向理想逐渐靠近。

    我早就说过我很期待Dave Thomas的《程序员修炼之道,十年之后》。原本我期望得到的是十年之后的新东西,可大部分篇幅都是在讲十年之后依然适用的部份,比如破窗户、自动化等等。真正提到的新东西非常少,只有动态语言、分布式版本控制和云计算,而且几乎是一笔带过。Dave是一个性情中人,演讲的时候,脱了鞋子站在了讲台之上,他是一个爱家之人,让全场为他老婆高呼“生日快乐”。

    Fred George曾经也是ThoughtWoker,所以,对我而言,他也显得格外亲切。在这个到处喊“敏捷”的年代,Fred关于超人的话题把思绪牵回到对人的关注上。很多公司都在努力改造过程,却忽略了对人的关注,Fred告诉我们,想做好软件,人是最大的可挖掘潜力。这是个让我心潮澎湃的演讲。当我以咨询师身份出现时候,客户们都试图了解敏捷“如何做”。这个演讲让我终于彻底想明白,不注重人,再好的方法都收效甚微。所以,敏捷宣言把人放在了第一条。

    参加这种大会,很重要的一点就是交流,这也是让我觉得收获极大的原因。遗憾的是,Kent Beck第一天早上讲完,中午就离开了,幸好还有Dave Thomas和Fred George。通过他们的话语,我们可以清楚看到他们对于软件开发的那种热爱,以及对于软件开发技能的重视。第一天晚上的交流活动,我在台下听着他们回答别人的问题是一个很过瘾的环节,对于那些问题,我会有自己的答案,听他们的回答,对比自己的想法,是一个很好的学习思考的过程。

    私下里的交流也很有趣,我问了二位同一个问题,《程序员修炼之道》建议我们每年学一门新语言,他们的新语言是什么。Dave的答案是Clojure,我问起他Scala,他说也许是下一门,不过,他说不知道为什么,他并不喜欢Scala的语法。至于Fred,他说自己是个鸽子,会追随Kent Beck、Dave Thomas和Martin Fowler这样的人物,表现得像个十足的追星族。Fred在我眼里,就是个老顽童的形像,可惜,他已经离开了ThoughtWorks,否则,和他结对一定会很有趣。

    除了几个主题演讲,能引起我极大兴趣的不多。因为很多演讲是在讲自己如何实施敏捷,我不大需要他们告诉我敏捷是什么,以及如何来做,我甚至可以透过他们的说法发现一些他们在实际操作中存在的问题。不过,我想明白一点,这次大会更多的传达一个信号,越来越多的企业已经开始敏捷了,而且已经有了不错的成效。至于敏捷到什么程度,并不重要,敏捷本来就是为了不断向好的方向前进。

    有一个演讲在我看来是最特别的,就是夏洁的《新成员如何快速融入敏捷团队》。这是我第一次听到关于软件开发中“软”技能的演讲。软件开发这个圈子太过注重“硬”功夫,却忽视了软技能。这二者犹如智商和情商的关系,仅仅有高智商并不能带人到达很高的程度。其实,这也是我今年开始逐渐关注的一个话题,因为做咨询的关系,对于“软”技能要求一下子就提高了。曾经和夏洁聊过很多次“软”技能的话题,所以,在我看来,曾经身为ThoughtWorks中国区HR Manager的她是非常合适来讲这样一个话题的。

    从大会的内容来看,很多是我以为的常识。不过,当Dave讲那些已经记载《程序员修炼之道》上的内容,有些人如获至宝,当Fred讲起一个函数平均应该只有几行,一片惊叹。我知道,我高估了许多人。

    敏捷之路,还很漫长!