• 两年前的今天,我成为了一个ThoughtWorker

    两年的时间,我对软件开发有了更加清晰的认识。同Darwin聊过,我们都有相似的感觉。加入ThoughtWorks之前,我们虽然都写很多年的代码,但是对于软件开发的理解依然非常模糊,准确的说,有很多东西是我们想不清楚的,比如,为什么要写一大堆没有人会看的文档。曾经有一次,当时的公司在推广CMMI,部门的技术负责人给全部门讲解相关的东西,我就抛出类似的问题,得到的答复是,过程要求。在ThoughtWorks做开发,我很少考虑这些问题,一切就是那么顺其自然。当我有机会给别人敏捷的时侯,我突然意识到,软件开发原来并非不可理喻,敏捷是一种顺应人性的开发方法,需要智慧的工作,尊重人性可以更好的发挥人的作用。

    这两年的开发,我学会了价值分析。价值分析,用通俗的话解释就是,挑重要的事做。这包含了两方面的含义,一是做的事要有价值,二是当一堆事摆在面前时,挑价值大的。这是敏捷软件开发中非常重要的一个观点,我最初接触到这个观点是在Story分析上,所以,我最初只以为它是用于指导Story分析的方法。但随着接触的人和事越来越多,我发现,价值分析适用于很多方面。价值分析已经成为了许多ThoughtWorker做事的指导方针,每当我们开始做一件事,我们都会问一句,这件事的价值何在。比起曾经的那种“别人怎么指挥,我就怎么干”的工作方式,这样的工作方式让我们做事的目的性更强。

    在《高效开发的敲门砖》中我写道,读《Productive Programmer》给人带来的思考,怎样提高自己的工作效率。在ThoughtWorks的工作,我学会有意识的提高自己的工作效率。一方面,同别人的结对开发时,我会观察别人一些好的习惯,争取化为己有,另一方面,寻找开发中一些让人不爽的地方,改进它,提高开发效率,“写个脚本”成了很多ThoughtWorker遇到反复进行麻烦事的第一反应。这样的观察为咨询工作奠定了一些基础,要知道,咨询需要发现问题的本事。

    有时侯,追求很简单,每天高高兴兴的做好工作,在ThoughtWorks,我至少经历过这样的软件开发。

  • 2009-04-27

    非喜欢项目

    在ThoughtWorks工作,有机会接触到很多不同的项目,于是,自然会有喜欢的和不喜欢的。

    大约5个月前,有人对我说,你出差吧!可我不喜欢出差。但我还是去了,毕竟我从来没有做过咨询项目。接下来的四个月里面,我成了一名咨询师。
    大约两个星期前,有人对我说,你培训吧!可我不喜欢培训。但我还是去了,毕竟我没有当过老师。于是,我真的讲了几天的课。
    今天,有人对我说,你做新项目吧!可相比之下,我谈不上很喜欢这个项目。

    5个月后,我知道了咨询和开发之间的差异,也得以重新认识自己,我发自内心的感谢这样的机会。
    两个星期后,我为学员们打开了一扇通向敏捷开发的门,他们快乐的编码,深入的思考让我觉得很成就感。
    这个项目下来会是什么样子呢?

    两年前,我以为的低谷时,我知道了明白了一件事:对我而言,喜欢是很重要的;不喜欢的,只要去做,也会有收获。

    有经济大环境的影响,加上公司的一些因素,让我最近不得不去做一些自己并不是特别喜欢的项目。所幸,所做的这些给我了一些不错的回馈,甚至影响到自己很多看问题的根本观点。于是,对于那些自己不喜欢的项目,我也不像从前那么从打心眼里讨厌。

    当然,我最想做的还是自己喜欢的项目。

  • QCon的名气很好很强大,当QCon来到中国,我心向往。

    时间刚刚好,上海的飞机一落地,北京的QCon就开始了。本来三天的QCon,因为公司的事务,错过了第一天,也就错过了老马的演讲。去年的Agile China也因为家里事错过了老马的演讲,也就是说,迄今为止,一次老马的演讲都没有听过。

    从安排上来看,我对QCon北京的预期高于其他国内的一些技术大会,但低于QCon在其他地方的会议。高,是因为InfoQ和QCon的名头;低,是缺少足够的技术话题,硬货比较少。

    两天的会议中,给我印象最深的是,洪强宁关于豆瓣架构的介绍。他按照时间线将豆瓣的架构介绍了一番,每一步发展会遇到怎样的问题,做了怎样的调整,达到怎样的效果。思路非常清晰,听着很过瘾。FreeWheel的CTO Diane Yu也给我留下了很深的印象,她的观点“架构也是需要演化的”深得我心。我还特意问了一下,FreeWheel如何做架构演化,当我得知他们会将一半研发力量投入其中时,我也吃了一惊。西门子的李伟为大家展示了另类软件开发,机场、生态城市等方面的建设,以我的理解,这么大的系统工程,远远超出了我们常规理解的软件开发。

    有很多人,本身做的事情应该很不错,但话题的组织或本身的演讲能力着实一般,作为一个听众,我很难捕捉到一条主线,跟上演讲的思路。淘宝的演讲据说因为有些东西因为涉及到一些所谓的内部信息,被拿掉了,影响了思路的连续性。有道的演讲,像是所有内容都拿掉了,临时拼凑出来一些别的东西。

    适当的降低期望是有好处的,捧得越高,摔得越狠。比如,当一个人顶着大师的光环出现时,人们会巴不得他说出来的句句是箴言,但结果,他用无数的比喻在真正的问题外面兜一个大圈子,又摆出一副高处不胜寒的样子信口雌黄的指点一番江山。你会怎么想。除了怀疑给予大师名头的人头脑有问题,剩下的就是想骂人了。

    如果我们敏捷了,是不是就可以像你们公司一样,冰箱里面装满食物,随心所欲的吃呢?(有关系吗?)
    我是一个学生,能不能从哲学的高度探讨一下模式?(代码写好了吗?)

    作为听众,如果我们能够问出更有档次的问题,QCon会更好。

    总而言之,QCon北京开了一个头,希望以后可以继续办下去。

  • 项目后期,有人问过这样一个问题,怎样才算理解敏捷。我给出的答案是,当你可以向别人解释敏捷的时侯,才算理解敏捷。

    我的日常工作就是以敏捷的方式进行着,而且前前后后,我读过很多关于敏捷软件开发的资料,所以,我一直以为自己很懂敏捷。但每次面对客户时,却总有一些问题是出乎我的意料。比如,我认可TDD,那我一次把所有测试用例写出来,然后再写代码如何。正是这些出乎意料的问题,迫使我不断思考,思考诸多敏捷实践和敏捷理念的内在联系。几个月的咨询生活,我对敏捷软件开发有了一个更加清晰的认识。准确的说,不仅仅是敏捷,而是软件开发。那些曾经散落的珍珠,逐渐的连成了一串。

    按说,拿着客户的钱,应该扮演的老师,但却丝毫不妨碍我偷偷的演译着学生的角色,默不作声的汲取营养。

    与人打交道并不是我的强项,但是作为咨询师,我必须与人打交道,我得到了很多与人近距离工作的机会,于是,我看到了很多人身上优秀的一面。有的人思路清晰,有的人雷厉风行,有的人风风火火。当然,也有让我怒火中烧的。也因此就有机会品位不同人身上的特点,欣赏别人的优点。

    ThoughtWorks最有价值的部份是ThoughtWorker。出来做咨询的人,相对来说,都是经验丰富的。和这样的人一起工作是幸福的。客户说,每个ThoughtWorker都是独特的。每个人身上都有着其他人不俱备的东西,当所有这些东西放到一起时,有时是迸发,有时是冲突,每个人都需要更多的思考,于是,一个个解决方案在这个过程中,日益完善起来。思考和做事的能力在这样的过程中经受着锤炼。

    感谢我的客户,是你们给了我这样的一个成长机会。按照一个客户的说法,经验值上升了。

    写下这些文字的时侯,我正在高空之中,在上海回北京的飞机上。四个月的咨询项目告一段落,这是一个改变了我很多认识的项目,我从中学到了很多,对很多问题有了全新的理解,对人对事。我相信,这个项目得到的很多东西会让我受益终生。

  • 今天,Darwin和我接到客户公司另一个部门的邀请,同他们交流敏捷。

    由于资源有限,我们只能投入到一个部门,所以,和我们交流的这个部门并没有我们的投入。他们几个负责人参加过我们先行的几个同事在这里所做培训,自己也从书上和网上了解了敏捷的一些理念和实践,另外,他们也和我们投入的部门进行的一些交流,并把一些成果引入到他们的团队中,比如单元测试的方案。他们的敏捷之旅就这样开始了。

    看上去很美的一切,在真正投入到实践中之后,变成了种种的困惑和疑问。撞了南墙的他们选择了在今天找到了一个和我们交流。

    “让我们把问题列一下吧!”,他们的负责人说。

    “需求分析不完整”,“TDD不好做”,“单元测试框架不好用”,“Review大家都不愿意做”,“没有勇气做重构”,……

    终于有了机会把憋了许久的怨气一下释放出来,大家你一句我一句,白板上一会就写满了各种各样的问题。一时间,空气中有一种剑拔弩张的氛围。

    “首先,让我们放下敏捷,这些问题里面,有哪些是用你们原来的工作方式可以很好解决的。”,Darwin站在白板前问了这样一个问题。

    “我觉得ST那条我们可以做好”,一个人指着其中一条ST测试不完整的问题说道,“我们原来都有很好的指导书。”

    “那为什么不用原来的方式呢?”,Darwin问。

    “不是要敏捷吗?”,这个人显然没有想到Darwin会问出这样的话,回答的口气明显没有刚刚那样强硬。

    “OK,我们做敏捷,追求的是有效的工作方式,既然原来的方式很好,那我们继续做就好了。”,Darwin这样回答。

    我坐在下面,暗自观察了其他人表情,刚刚那种准备挑战的表情明显开始转变了。

    一个好的开头,让我们有了很好的讨论基础,于是,我们就着他们提出的问题一个一个进行解答。随着讨论逐渐的深入,我看见大家频频在那里点头,这也增强了我们的信心。

    讨论的过程中,一个人说出了一个给我留下深刻印象的词,“伪敏捷”。在他看来,他们所做的只有敏捷的架子,而其他的一切还是按照旧有的套路。和我们的讨论,让他发现了很多彼此在考虑问题思路上的根本差异,这给了他们一个在日后改进工作打下了一个很好的基础。

    后来,和Darwin聊天,我说,我喜欢这样有了一定基础的客户,他们自己尝试吃了亏,和我们交流时,才能真正体会到我们说的那些东西。