1.3 怎样提升工程能力
本节简要说明软件工程师在工作中如何提升工程能力。
1. 工程能力的素质要求
在《百度软件工程能力定义》中,将工程能力分解为公司能力素质、团队能力素质和个人能力素质三类,每类都列出了所需的素质要求,如图1.2所示。
图1.2 工程能力的素质要求
2. 人是工程能力的根本
在提升工程能力的过程中,很多组织只重视工具和平台的建设,而忽视了对“人”的关注。
“人”是工程能力的根本。“人”对工程能力的重要性远远超过工具。“优秀的人+一般的工具”在研发效率上要远远超过“一般的人+优秀的工具”。
随着软件工具的增强,人与人之间在研发效率上的差距会进一步扩大。而软件工具的增强,使得软件研发团队的小型化成为普遍趋势。考虑到软件研发项目中沟通成本随着人数增长而呈指数型增长的规律,小规模优秀工程师团队的研发效率要远高于大规模普通工程师的团队。
伟大的系统和产品一定来自优秀的人和团队。在“人”没有改变的情况下,团队规模的增加、劳动时间的延长,都无法从根本上改变软件的品质。无论是对于组织还是个人,都应该在培养“人”方面投入更多的资源。
3. 工程能力提升源于自我驱动
有些人希望通过简单的考核手段来提升工程能力,也有人将自身工程能力没有得到提高归结于“没有得到所在团队领导的支持”。
对于提升工程能力,工程师的自我驱动力是最重要的。在工程师没有充分理解和认可工程能力的情况下,考核可能只会引起一些表层指标的变化,但是很难让工程能力发生本质性改变。
我一直秉持一个观点:如果一个人知道什么是高效而正确的方法,那么他(她)一定不会继续使用低效且错误的方法。相比于依赖指标考核,不如通过教育和培训让工程师了解什么才是正确的方法。在这之后,优秀工程师的自驱力会发挥非常大的作用。
对于那些不认可工程能力的人来说,考核也不会起到真正的作用。一名优秀的工程师,一定不是依靠考核来驱动的。考核只能起到识别和鼓励的作用,而无法使一个人从一般变为优秀。
4. 个人能力的素质要求
在图1.2中,对个人能力的素质要求列出了10条,似乎有些多。为了更易于掌握,我常常强调以下三点:
写好代码(对应编码能力),写好文档(对应需求把握和系统设计),做好项目管理。
而在代码、文档和项目管理三者中,我认为其重要性可排序为:
项目管理 > 文档 > 代码。
对于这个排序,可以做如下解读。
(1)没有好的管理,有再好的技术也没有用。
(2)好的代码,首先来自好的设计。
(3)需求分析先于系统设计。
针对目前现实中的情况,建议读者加强对项目文档的重视,加强对需求分析的重视,以及加强对项目管理的重视。相关内容在后面的章节中将有详细介绍。