以前也思考过团队多人协作的问题,但最近在团队协作面临了一些问题,再次对这个问题作了认真的思考和反思。以下是对思考后的总结:
大家先思考一下两个问题:
1.如何保证多人团队的开发质量?
2.如何提高团队的整体开发效率?
我们先说两个大家比较熟悉的现象:
流水作业:工业革命之后,生产效率得到了极大的提升,产品的质量得到了保障。归功于社会化大生产,机器取代人力,进行流水作业生产。
要法治不要人治:大家应该都会有一个共识,发达国家的社会效率要比中国高的多,我认为这点不仅仅是科技上的差距,也与完善的法制有很大的关系。完善的法制规范的人的行为,大家按照制定的规则去做事情,工作效率明显高于法制不完善社会。
对于上面提出的两个问题,通过“流水作业”、“要法治不要人治”就可以得到答案。
体现在软件工程中,实现流水作业,就是通过架构师根据产品需求创建出许多组合产品的模版,再有工程师进行组装实现。这也是项目工程需要架构的原因。
法治在软件工程中的体现,那就是框架与开发规范。开发人员按照框架和开发规范按照模版实现功能,效率会有很大提升,避免产品功能因人员能力、编码习惯、技术参差不齐等因素的导致产品质量差异化很大。还有很重要的一点,通常一个功能会有多人实现或者一个功能的后期维护并不是开发者本人,代码结构太多的差异化,导致其他人接手困难,维护成本高等问题。
大家经常说产品要打磨,不仅仅是产品功能上的打磨,也是项目结构与具体代码实现上的调优。软件工程,重在“工程”二字。既然是工程,就要做到精细。什么样的结构才算精细,如何才能做到精细?
精细就是代码可控、高度复用,有良好的组件颗粒度,组件间可插拔,可进行接口测试、单元测试,即高度解耦;整体结构都要建立在设计好的框架之上,所以做到精细直接由整体框架决定。
具体如何做到精细,就要从面相对象、面相切面说起。面相对象的核心是代码复用与封装。复用即相同业务功能统一处理,让上游更高效的获取与处理数据;封装即对业务功能进行抽象,分对象对属性与函数的封装、接口与实现类的封装两种方式,让下游能屏蔽数据的获取细节。就拿项目设计经常使用的分层架构来说,代码复用与封装的颗粒度直接决定分层架构实现的好坏。
以上都是理论,如何将精细很好的应用到项目中去呢。说实话,很难,特别是在多人的开发团队中就更难了。
首先要有熟悉业务的架构师或项目负责人搭建框架、划分业务模块、解耦各个基础组件等,将大厦的根基与结构搭建好,这是精细的基础。
其次,制定开发规范,即制定规则。开发规范既不能太宽泛、粗放,否则等于没有规范,又不能太细,否则就失去灵活性。拿开发Android来说,结合java开发规范,执行到正确使用组件层面即可。更通用一点,可以参考阿里的Java开发手册。
最后是开发人员的执行层面,也是最难的最不可控的,毕竟每个人的理解不同、想法不同、处理问题的思维方式也不同。但对于有自我约束、自我革新、善于融入与学习的技术开发人员来说,又是相对容易处理的,一般程序员都是擅于模仿、学习的。在模仿中现实超越。这毕竟是理想状态,一般团队的人员参差不齐,特别是有些开发人员在处理问题或维护代码时,喜欢头痛医头、脚痛医脚,随着时间的推移,有些结构或功能就变得结构紊乱、可读性差,难以维护。这时团队沟通就显的尤为重要了,尽量使团队的所有成员的步调一致。