曾经我认为,敏捷的各种实践,只要有了标准化的动作,加上一点点定制,加上PDCA/SDCA,就能做好。迈向敏捷之路,是可以唯一定义并且重复实施的。比如说持续集成,大师说 “在自己的计算机上启动一个自动化build”是重要的──我们把它叫做“本地构建”。做不好本地构建,提交构建失败率就会高,对持续集成的信心就会失去。这个问题,和它的解决方案,都是确定且可重复的。

可是这个团队让我吃惊了。他们一直没有真正意义上的本地构建。但他们真的相信持续集成──不仅仅是几个领导,是整个团队,真的相信:如果每天发现的小问题不能及时解决,那么到版本上线时一定会被客户骂得狗血淋头。他们不想被骂,他们也不想同一个战壕里的战友被骂,所以他们就把持续集成做好了。尽管没有真正意义上的本地构建,就靠着原始简单的代码评审,更认真的态度,他们就真的把持续集成做好了。

这个团队颠覆了一些正在我脑中渐渐成型的东西,让我想起了一些原本印象深刻但被渐渐遮掩起来的东西,比如敏捷宣言的第一条:个体与交互 重于 过程和工具。

面对巨大组织时强烈的无力感、无助感会让“敏捷推行人”们(包括我自己在内)不自觉地选择把自己的定位拔高──也许真是想帮助更多的人,也许只是想从残酷的现实中逃开,抑或两者兼而有之。但这些人不会做高层面的事情。于是离开低层面、离开具体事务的结果就是不知道该做什么,就是把敏捷推行简化为过程和工具的推行。

有一个敏捷推行人对我说,我负责几十个项目的改进,如果每次只到一个项目去做具体的事,对整体的帮助很小。我对她说,也许你救不了所有的鱼,但被你救的这一条鱼,它会在乎 ,它会得救。在反复思考如何拯救所有鱼的过程中,其实你什么也没有做,没有一条鱼真的得救。

敏捷的改变,最终是一个一个的改变。过程和工具会帮助你。但如果把敏捷简化成过程和工具,你就在一步步远离敏捷,因为你已经违背了敏捷宣言的第一条原则。

不做小叮当

July 14th, 2010

ZD亲热地搂着我的肩膀说:“还是你有本事啊,这次才看到你的能力有多强。”我苦笑着说:“我的英名早晚要毁在你手上。”

他是我的客户,也是老乡,而且常常配合很默契。

第一次,二百多人的团队分散在两个城市五个办公地点。ZD对我说,那个产品,发货量巨大,是整个公司最赚钱的部门,客户遍布全球,要是把它搞定了,意义重大。(当时ZB在旁边热情澎湃,被我俩联手泼了一盆冷水。那是我第一次发现,和ZD配合有不需准备的默契。)我沉吟良久,说它真的风险太大,我真的不敢做。但最后我还是去了,因为一个不能让ZD知道的理由。

第二次,一支孤零零的团队正在被一个巨兽客户折磨得要死要活。ZD对我说,这次能让客户感受到我们的变化,要是把它搞定了,意义重大。我又沉吟良久,说它真的真的风险太大,我真的真的不敢做。但最后我还是去了,又是因为一个不能让ZD知道的理由。

我跟他说,其实只是运气好。他笑笑,不信,或者说是装着不信。

小熊说,每个问题解决者都有多拉A梦情结,而康夫每次痛扁技安之后灿烂的笑容便是对小叮当最好的褒奖,是他继续从口袋里掏出法宝的源动力。我不得不承认,挑战一下自己并且挑战成功(不论这成功的原因是什么)的感觉是很爽的。我想ZD一定也知道我的爽感,所以他笑而不语。

所以,尽管真的很想亲眼看到这个大雪球轰然滚下的最后一刻,尽管真的很嫉妒 小熊的博客 比我写得更有料并且更有文采,还是应该抽身了。让自己沉浸在小叮当帮助康夫破涕为笑的愉悦之中,这不是我想要的。

何况,ZD你懂的,我不能等到英名真的毁在你手上的那一天。

出新意于法度之中

July 12th, 2010

周末去看了 邱志杰的展览 。对他的 舞蹈课 很是喜欢。

创新不得和以前重复,这是艺术界的游戏规则;创新会越来越难,这是艺术史的规律;在早期,更多的事不用多加思索的本能选择,游戏越往后,组合、颠覆等可以开发创意就越来越经常被依赖;而是否被认可为创新,这是由之前已经出现过的现象以及众人的裁定所决定的。

在很大程度上,艺术家并不像传说中的那样自由,相反,自由和个性要通过艰难的开发才最终会获得。因此,你必须去研究整个系统,你必须形成一种能够开发创造力的工作机制。

缺乏创意或是坐井观天,如果一定要选的话,究竟哪一个更糟?和Miya说,想一想,如果有一天我也变成这样,以为自己看见的一个小圈就是整个天空,挺可怕的。何况,井里的创意,又能有什么好玩的。

Cygwin的包管理器

July 8th, 2010

apt-cyg : install tool for cygwin similar to debian apt-get

需要先安装wget、bzip2、tar和gawk。

现在就可以体面地找软件和装软件了。

apt-cyg find gcc

apt-cyg install gcc

对象训练营:简介

July 1st, 2010

对象训练营是 ThoughtWorks 历史悠久的入门培训课程,而其中谈到的对象原则和实践历史就更悠久。面向对象的思想明显地分为两个阵营:

  • Rational。强调建模,推崇UML和形式化方法。这些人最初使用ADA为军方开发软件,系统本身并不复杂。软件正确性非常重要,因此重视对设计的评审。
  • Tektronics,一家电子设备测试工具制造商。强调示波器的可插拔性。使用新的编程语言Smalltalk,因为它的灵活性。这支团队中涌现了Ward Cunningham、Kent Beck、Sam Adams等敏捷世界的大师。使用Smalltalk,他们在设计和编码之间快速切换,这也是现在Agile的基本工作方式。

80年代中期Tektronics团队解散,Sam Adams加入KSC咨询公司,当时在IBM负责与KSC接口的Fred George从他那里学到了Tektronics的对象思想。后来Fred George加入ThoughtWorks,并开创了对象训练营。因此本课程是基于Tektronics的对象思想,而不是Rational的。

本课程采用苏格拉底式教学法,简单说就是学员自己教自己。我们会用问题来引导你,但不会手把手地教你正确答案。你会受阻,但这是好事。正如Fred Brooks所说:“好的判断来自经验,而经验来自糟糕的判断。”记住受阻的时刻,并从中学习,这些经验会成为未来良好判断的基础。

本课程至少3/4的时间会用来给学员自己动手练习编程。如果你喜欢编程,这些练习会很有趣。我们会针对练习中写出的代码展开讨论,所以每次讨论都会把某个pair的代码用投影展示出来供大家讨论。一开始也许你不好意思展示自己的代码,但是请大胆展示。被批评是最好的学习机会。

课程内容分为两大部分:(一)对象原则与敏捷实践,(二)设计模式。