我在这个事情上,花了无数的精力希望打造一个“具备凝聚力”的团队,试图降低这种流动性。但是无论如何努力,技术团队还是会“维持”着某个流动率,所以我意识到,如何降低人员流动对工作的冲击,才是一个必须要做的事情。我们知道,软件开发的交接,不是一个简单的事情。因为软件开发的文档、代码、工作关系,甚至很多工作的经验,都是以一种智力形式存在的。这种智力产品,如何从一个人的大脑迁移到另外一个大脑,如果不借助任何工具,无异于师徒传授技艺,是一个效率很低,结果非常不确定的过程。所以我认为,技术知识在团队内的共享,必须要有一些强而有力的技术工具来保障,才能成功。
人员流动、项目进度控制、软件质量提升,是我在管理技术团队中,碰到的最多也是最大的三个挑战。在深刻的思考和做了大量的管理实践后,我深深的认识到,作为一个技术团队的管理者,最需要的往往不是所谓的“管理能力”,而是对软件开发这个行业,更专业的技术能力。这些技术能力,大体包含了所谓的“软件工程”知识,以及大量的软件开发工具以及最佳行业实践的经验。所以我认为认真的去研究、实践、开发这些,能有效提高技术团队开发效率、准确掌控项目进度、降低人员流动性影响的技术,是具有非常重要的意义的。我在这里所说的这种“技术”,具体包含些什么呢?概括一下,无非有这几类:软件模式知识、开发工具和实践、需求领域知识。
软件模式知识,主要是来自软件工程类,包括如何写出可读性好的代码,面向对象或者结构化编程的知识,设计模式、架构模式等等。其中最基础也最重要的,就是“编写可读性好的代码”,与其说这是一种知识,还不如说是一种态度。无可否认大多数工科、理科出身的程序员,对于写文章的训练都比较少,所以也不难理解为何对此没有“感觉”。其实要编写可读性好的代码,最简单的方式就是重视“命名”。顾名思义是人类最简单的阅读体验,代码中的变量、函数、类的名字如果是“有意义”的,那就会大大提高代码的可读性。但是,怎样才能定义一个有意义的名字,而不是仅仅根据技术功能实现的需求来设计名字呢?我知道我们都爱循环变量int i,但那是因为我们都熟悉它的这个含义。对于可能阅读代码的人来说,还有什么是确定大家都会比较熟悉的呢?肯定就是业务领域的内容,因为要接触这份代码,肯定就是那些要在这个业务领域工作的人,所以使用业务领域的内容词汇是最好的。但是,由于我们的代码往往会有很多层的抽象和封装,所以在某些层次也许无法找到业务领域词汇去对应,这确实需要一些想象力和抽象能力,但是不管这种想象的是否合理,一定会比不假思索的用Controllor或者Manager这样的名字来的“有意义”。
网友评论