A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 自笃行者 中级黑马   /  2014-6-26 13:27  /  950 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我之前写过一篇叫《加班与效率》的文章,从概念上说了一些我对“效率”的认识,但是那篇文章趋于概念化,对于一些没有经历过这样的环境的同学来说,可能会觉得太抽象了。很早以前就想写一篇更具体一点的,可执行的文章与《加班与效率》这篇文章相辉映,并再把我两年前在杭州QCon上的那个“鼓吹工程师文化”的《建一支强大的小团队》(新浪微盘)的观点再加强一下。

但是我遇到了一些思维方式上的麻烦——我讲的总是从我的经历背景出发,没有从其它人的经历背景来讲。这就好像,我在酷壳里说了很多东西(比如:专职的QA,Code Review很重要,编程年龄,创业的,Rework的……),有好些人觉得是不可能甚至太理想,其实我说的那些东西都是实实在在存在的,也是我所经历过的。于是,不同的经历,不同的环境,不同的眼界,造成了——有些人不理解我说的,而我也不能理解他们所说的。

所以,过去的这段时间我一有机会就找一些人交流并观察一些身边的事情,并去试着跟从和理解那些我不能理解的东西。现在觉得差不多了,所以,写下了这篇文章。(但越是去理解对方,我就越坚持我的观点,所以这篇文章可能还是会出现鸡同鸭讲的情形,无所谓了)

本文不讨论任何业务上的效率问题,只讨论软件开发或是软件工程中的效率问题。虽然产品和业务上的效率问题是根本,但是因为本文不是拉仇恨的,我也不想混在一起谈,所以请原谅我在这里先说开发团队的,以后重新开篇文章专门谈产品和业务的。

我下面会罗列几个非常典型的开发方式——软件开发中的“锁”,接力棒式软件开发,保姆式软件开发,WatchDog软件开发,故障驱动式软件开发。


软件开发中的“锁”
如果你搞过并发编程,你一定知道什么是“锁”,锁就是用来同步和互斥。我发现有好些开发部门里的各个开发团队间存在很多锁。比如:

技术能力上的锁。有一个项目需要在不同的地方做开发,这些模块用到不同的技术,比如:Java, C/C++, Python,Javascript,但是,这个团队里的每一个开发人员就只懂一门语言,于是,需要配合,需要任务排期,同步互斥锁就很多,于是,一个本来只需要2个人干3周的的工作变成了8个人干两个月。
负责模块上的锁。同理,不同的人负责不同的模块,于是一个项目要动好多模块,那么你就需要把这些模块的人找过来,和上面一样。每个人都有自己的时间安排,人越多,锁越多。于是,一个来来只需要2个人干2两周的事,变成了7、8个人干一个多月。
我上面并非瞎扯,这都是事实。我们可以看到,

时间锁、进度锁。这堆有不同技能或是负责不同模块的开发人员有锁,有锁你就要等,他们有自己的安排,所以,要协作起来,你就需要排期,去同步。而参与的人越多,你的锁就越多。你协调他们的时间就更复杂。
沟通锁、利益锁。而且,最恐怖的事情是,他们之间的沟通成本巨大。他们会花大量的时间在讨论,一个功能是实现在你那边,还是我这边,每个人都有自己的利益和算盘。无形中增加了很多推诿、官僚和政治上的东西。
有时候,我们会觉得分工和分模块是产生效率的前提,但是实际情况并不是这样。我们也可以看到,所谓的“分工”被彻彻底底的滥用了。他们把“分工”当成了永远只干一件事的借口。

【解决方案】
一个程序员应该能够掌握多个语言,也能够负责多个模块甚至不同的职责。如果一个程序员觉得多学习一门语言,多掌握一个模块是件很困难的事,那么这个程序员本质上是不合格的。

“接力棒式”软件开发
在有各种“工作锁”的软件开发团队里,一般都无法避免“接力棒式”的开发。也就是说,底层的C程序员干完了,交给上层的Java程序员,然后再交给更上层的前端程序员,最后再交给运维人员。这就是接力棒式的开发。

而且,更糟糕的是,如果在引入了软件流程下,这种“接力棒的方式”真是会把你搞崩溃的。比如下游团队开发一个月,交给QA测试一个月,再交给运维分步上线一个月,然后,上游团队拿到下游开发的API后开发一个月,再交给自己的QA测试一个月,然后再交给自己的运维上线一个月,于是,半年就这样过去了。这是一个由一个一个小瀑布叠出来的一个大瀑布。

哦,你会说,这个好办啊,上下游不会先商定好接口么?然后做并行开发么?是的,这是其中的一个优化方式,但是需要很好的接口设计。但是,在实际过程中,你会发现(这时我并非信口开河,我说的都是事实),

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马