• 2011-03-29

    意外的开始

    期望是个有趣的东西,期望越大,失望就越大,反之,期望低,则可能会有意外收获。这个项目就是。

    开始前,我以为这是个普通的不能再普通的Web项目,期望值压得很低。我踏上了征程。

    今天,当我走进客户的公司,我被眼前的一切震住了,这是一个比ThoughtWorks还ThoughtWorks的工作环境:开放的工作环境,各式各样奇怪的Token,满眼的卡片墙,高高挂起的CI监视器,还有那用投影仪打出的系统运行状态监控。做咨询的时候,我试图给客户描绘的工作场景,就在眼前。

    与客户的架构师讨论技术方案,我才知道,在我心目中那个普通得甚至让我觉得有些土的项目,原来背后还有这么多东西,这个架构师心目中的蓝图是如此宏伟,实现这个蓝图,想想都是一件令人兴奋的事。

    要在EC2上搭一个环境,我得到了一份指南,把指南上仅有的几条命令敲进去,一个环境就搭好了。我对人说,这是我搭环境最省事的一次,此乃惊喜。人家摇摇头,这还不够,我们要做的是一键式,一个命令就搞定。所谓“DevOps ”。

    与同事们一起交流,我知道了,这个公司并不是那种“我只要功能”的公司,他们对于软件技术本身的关注不在ThoughtWorks之下,所以,才有了我眼见的一切。也正是因为他们做得很好,许多新东西不断的从中产生出来,据说,他们为开源社区贡献了好多。

    亲见了,我开始理解gigix说的东西 。一个值得我们好好学习的客户,可遇不可求。

    这个项目会挺有意思的,希望如此。

  • 徐昊 被拉了过来,没别的说,压榨,于是,两天都在让他给大家上课。

    培训的内容之一是OO训练营,这是ThoughtWorks内部的一个传统培训项目,我也曾做过讲师。之前的训练营,更多的是为了介绍一些基础的概念,比如面向对象,比如设计模式。这个训练营是改造过的,面向的主要是ThoughtWorks内部员工,这些人都有基本的概念,所以,侧重点要调整一下。

    确实,当侧重点一调整,问题就暴露出来了。参加这次培训的多是一些毕业生或是加入公司时间不长的同事,之前都看过不少书,这次训练营在一些他们以为懂了的地方给了他们下马威。

    • 封装

    面向对象最基本的特征是封装,说起来,大家都明白。真的懂了吗?代码写出来就是一大堆getter,内部细节换了个面孔全都暴露出来了。许多设计原则都是与封装紧密相关,比如SRP,比如OCP。封装不好也是一种坏味道,可以指导着我们向着好代码前进。我承认,识别封装的坏味道比识别重复要求高。

    • 重构

    重构不是老马的书,不是IDE上的菜单。重构需要不破坏测试的小步前进。说到重构,其实,很多人脑子里想的是重写。一对pair中死在了在“重构”的路上:时间到,他们的代码没有到达“重构”的终点,又退不回来。于是,接下来的演示,徐昊重构了他们的代码,每一步都很小,不会进退两难。他的演示让我看到,有时我的步子还不够小。

    • 划分任务

    TDD简单得令人发指,红——绿——重构。但这真的就是TDD的全部了吗?这只是形。知道了TDD节奏,却依然下不了手的,大有人在。解决问题的方案,说白了,就是拆。把需求拆解成更小的任务,何愁无解。多大的任务算小,可以测试。把问题分解成小任务,才会能做到心里有数,才不会让“剩余的10%”和“前面的90%”用同样甚至更多的时间完成。大事化小是需要能力的,这是很多人过不了TDD这关的真正原因。只是,大多数人连划分任务的习惯都没有。

    • 模式

    模式俨然已是大路货,不知道模式都不好意思和人打招呼。但什么时候使用模式却不见得人人知晓。现实问题和书上总有差异,当问题摆在面前,狼烟四起的坏味道告诉我们,许多人对此视而不见。有时,嗅觉,比招式更重要。

    因为有先发优势,徐昊在训练营里讲的大多数东西,我是心里有数的。在别人忙着用左脑思考的时候,我在用右脑做着综合,思路得到了一次清理,也看到自己在日常工作中还有许多能够提高的细节。

    被培训可比培训感觉好多了。

  • 7年了,又blog了一年。

    对于这个blog而言,最大的变化是我申请成为了VIP用户,只是为了去掉blog里面的广告。至于年限,我选择了5年,因为我在这里blog的时间已经超过了5年。如果坚持下来,我就是一个有10+年blog经验的人了。

    最近公司不断在鼓励一些经验稍浅的同事写blog,于是,我也借此总结了一下自己写blog的经验。

    初涉blog之际,我从未考虑过为谁去写,没有想过所谓的风格。随着写得越来越多了,才逐渐的形成了自己的一个大方向,小方向也无数次的变过。

    如果说我有设想过我的受众,那就是我自己。我会自己写给自己看,自己给自己挑毛病。我自己喜欢了,肯定会有人喜欢:

    • 我不喜欢读大段的文字,所以,我的blog都是一个个小段落组成的;
    • 我不喜欢那些高屋建瓴的指导,所以,我会用尽可能平实的语言;
    • 我喜欢循序渐进的推理,所以,我会争取让推导过程变得清晰;
    • 我喜欢简单,所以,我会研究一些东西,写出一篇能体现出我以为核心的“Hello,XXX”。
    • ⋯⋯

    我跟很多人聊过,他们不写或写得少,很重要的一个原因是,怕别人嫌没技术含量。

    敢写blog,就不需要担心别人的议论。有人议论,说明有人关心你写的东西,这是好事;有人赞扬,说明有人认同你的观点;有人批评,至少可以让我们从多角度更仔细考虑;实在有的批评让人觉得受不了,忽略它吧!好的评论者会告诉你一二三,只有那些不负责任的才会抛出只让人生气的观点。

    定期写blog是很重要的。比如我基本上是一周一篇。坚持一段时间之后,一旦不写,就会觉得缺少些什么,所以,总会逼得自己去做。

    这就是习惯的力量。

  • 2010-10-14

    喘息中的回忆

    漫长的出差,终于有了喘息的机会。

    今天是敏捷中国 开始的日子,不过,因为校园招聘的缘故,我又错过了,也就错过了和许多老朋友见面的机会。我曾开玩笑说,我只参加双数届的敏捷中国,因为各种原因,我总会错过单数届的大会,纯属巧合。

    在外出差的时候,心里是非常疲惫的。有很多东西该写下来,却没有做。有机会坐在办公室,我也会尝试回忆一下曾经发生过的种种,on beach的日子总是让我向往的。

    刚好最近黄亮 也在办公室。虽然是同一个办公室的同事,但各自奔波在不同的城市,彼此也差不多半年没有见到了。他尝试在内部发起一个新的计划,给未来有志于投身咨询事业的同事打一个基础。

    这个计划有个前提,就是要把之前我们在不同咨询项目所做的内容总结出来,给他们做一个参考。他极力怂恿我在其中贡献内容。这也刚好给了我一个机会,总结曾经发生过的那些事,与我的想法也算不谋而合了。于是,我也乐得去贡献一些内容。

    写这些内容就像在写回忆录一样,曾经发生的一幕幕又浮现在眼前。回想着自己一路走来,从对咨询完全没有概念,到如今改变不少团队对于软件开发的认识,这何尝不是一种乐趣,尽管这并非我所预期的改变。

    还在继续写,继续回忆曾经的故事。

  • 面前坐着一个开发人员,他马上就要开始一段新的开发任务,而我,一个咨询师,要通过他了解一下开发状况。
    我:你了解要做的东西吗?
    开发人员:知道,就是一个查询。
    我:具体如何做呢?做过任务分解吗?
    开发人员:没,我也是刚接触这个部分,不是很清楚。
    我:这个Story估计只有一个点?
    开发人员:不是我做的估计。
    我:那我们一起做一下任务分解吧!
    开发人员:好。

    分解出来的任务还是有些让人困惑的地方。
    我:这个地方,你知道怎么做吗?
    开发人员:不太清楚。
    我:问过分析的人吗?
    开发人员:还没。
    我:那就去问一下吧!
    开发人员:人家忙着吧?
    我:他们总会很忙,去吧!否则,就堵在这了。

    和“忙碌”的分析人员聊过,开发人员显然有了谱,我和他继续分解工作。
    我:这个地方是什么意思?
    开发人员:方案要调整一下。
    我:那它作这个Task的一部分合适吗?这可能会牵扯到很大的一个调整。
    开发人员:你说的有道理,那我们把它单独拿出来作为一个Task。
    我:现在你还觉得它是一个点的Story吗?
    开发人员:一个点肯定不够。

    开发即将开始,我们真的理解了要做的事情吗?