2008年11月12日星期三

不同的思考方法

前几天产品发布,项目经理“Jez.谦虚” 同志要求我们审查一下2.0版本中有没有添加不能用于商业目的类库。因为类库很多,并且有很多的更新,删除,添加操作,很难一下找出到底在新版本中添加了那些文件。

于是我和哈达写了这样一个shell:

hg log -r 4281:tip --template '{node}\n' localivy |xargs -I % hg glog -p -r % | grep -A 1 '.*diff.*jar' | grep -B 1 'new file mode' > ~/Desktop/newlyAddedJars.diff

哈达和我都很欣赏使用shell来解决问题的方式, 所以写这段代码的时候,先想到了利用管道,以及grep过滤出所有在上次发布后和最新版本间添加的所有jar文件并把它们输出到文件中。

同时克里斯也在解决这个问题, 他把代码首先更新到上一个发布版本,然后利用meld将两个版本的ivy文件比较,人肉分析添加了哪些文件。 这个方案很简单,速度也很快。克里斯关注点在快速解决问题上,而不是“自动化的解决问题”


同组的李教授看到我们这么热闹,也饶有兴趣参与进来,他最近一直在研读mercurial宝典,对各种tip烂熟于心,他看到我们的解决方案后,写了另一段shell

hg log -r v1.0:tip --template '{file_adds} is added at revision {node}\n' localivy

这段shell充分利用了mercurial在template中定义的关键字做到了简单而强大,它可以打印出所有从上一个发布版本到最新版本间添加的文件以及相应的版本号。

解决这个问题的过程让我觉得很有兴趣, 同一个问题,由于解决者所关注的点以及知识域的不同出现了千差万别的解决方案。这些方案间的成本和收益也有着巨大的差别。

在日常工作中,我们都希望“简单而强大”的解决方案,单凭自身不断的宽展知识面是不够的,因为我们面临的问题多种多样,个人精力有限,个人的兴趣也限制了对于某些问题的深入研究,敏捷方法中的结对编程是一个很好地解决方案,更多拥有不同知识领域的人可以来共同解决一个问题,增加了我们找到“简单而强大”解决方案的几率,而开放空间可以让更多的人有机会参与到讨论中,贡献他们的聪明才智。爱凑热闹的李教授就是一例

没有评论: