软件工程能力之思:工程能力漫谈
本文是《软件工程能力之思》这个系列中的第二篇文章,将谈谈对工程能力的理解。作为一个安全研发工程师,不仅要懂网络安全原理与技术,更要懂软件研发的工程能力。但是非常遗憾的是,国内安全产品的工程质量、工程能力都还有待提升。很多安全工程师在写代码、做程序方面,基本都是“demo”型选手。这主要还是因为,搞安全的同学和搞开发的同学的思维理念存在很多的差异。在安全工程师来看,他们认为程序跑起来了,打印结果的就行,在客户那就能运行可用了。但是,对研发工程师来讲,可远远不止于此啊。产品开发是一个系统性工程,可不仅仅开发完了就行,从软件工程的流程来看,编码仅仅是其中一小部分而已。
笔者在默安实习期时就遇到研发总监贵哥以及其他几位资深老同事的帮助和指导,在软件开发方面,还是很重视对工程能力素养的关注和培养。所以,本文也是从一个懂安全的研发工程师的角度,谈谈工程能力。在此结合行业大佬的经验总结,抛砖引玉,望共同探讨交流。
一、工程师的工程思维
作为一个优秀的研发工程师,应该具备三种重要的思维能力:产品思维、技术思维和工程思维。所以在细谈工程能力之前,笔者想先讲讲研发工程师的工程思维。众所周知,工程思维是一个面向过程的,其起点是流程。流程的背后是科学理论,所以,通过既定的步骤、阶段性的分工协作去完成产品的价值创造,通过对过程的控制机制以确保产生预期的功能效果。
流程的核心是确保每个分工(即每个工程师)的工作质量和效率在预定的条件下完成。而工程师的工作质量和效率,不只在于定义、工具化、编码、测试等内容,而是要结合工程师的日常习惯,将流程与工程师的客观条件做到无缝结合。而这个建立“丝滑“结合就体现在了流程中的各种case与工程师的专业素养和价值观念结合。
而控制机制,就是通过对待解决问题的需求分析,用一种稳定成熟的模式去解决同类问题。机制应体现出工程化的特点:系统性,而非“头痛治头,脚痛治脚”。系统性一般并不是从开始就被深入全面的考虑到,而是在流程的演讲过程中被逐步发现和完善,所以需要工程师在工作中不时回顾并付诸实践去落实到位。另外,控制机制的另一个重要目的是为了风险控制。而风险控制是建立与系统性机制和质量可靠之上的。
二、为什么要重视工程能力
上面讲的工程思维,提出了几点要点,即:流程、系统性、可控机制。简单理解,流程即项目的管理过程,系统性即软件自身存在的复杂性,而可控机制核心关注的还是人。所以不难看出,要想做出大型的质量可靠的软件产品实现商业价值,工程能力必不可少。而随着当今软件产业的竞争加剧、成本上涨、产业升级等因素,软件迭代的效益很难跟上业务的发展。
而从软件开发者个人而言,996的疯狂加班也抵不过35岁的中年危机,何况在这个软件开发模式快速变化的内卷潮流中。日常开发中,我们经常听到工程师抱怨:业务太忙,没时间加强工程能力,现在项目很急,先确保功能上线能用,工程能力先降低要求或后面再加强。
根据我作为研发Leader的经验,工程能力会直接影响产品的交付和质量,尤其是在创业公司中。因为工程能力会直接影响对产品、对业务的理解,决定了产品能否可靠交付。对研发的效率、质量和成本都有很大的影响。总结下来,功能能力就是研发团队的生存能力。这一点在创业公司走非常重要,一方面低劣的产品质量在客户侧影响非常大,对研发内部的打击也容易让大家丧失信心,另外,对于有追求的工程师,等到技术栈学到差不多了就会选择跳槽去更好的团队中,而且有技术情怀的工程师也会因为团队工程能力差而放弃offer。
三、什么是工程能力
一个错误的观念是工程能力==写好代码。工程能力不仅仅是一个人写好代码这么简单。上面讲过,工程是一个团队协作的过程,所以工程能力反映的是团队的整体综合素质。这些素质,不仅仅是工程方面的自然科学,也会涉及到人文/社会科学方面。所以每当有新成员加入,都会有一个磨合的时间段,而这个磨合期,不仅仅是技术上,还有每一个工程师的个人习性。
这里引用《百度软件工程能力定义》的定义如下:
使用系统化的方法,在保证质量的前提下,更高效率达为客户/用户持续交付有价值的软件或服务的能力。
基于上面的定义可以看出,研发的目的是:提供价值和实现价值的持续交付。其方法论是:系统化和科学的方法。其强调的是:质量第一和持续提升的研发效率。
那在现实的软件开发过程中,老板、工程师或其他相关的人是不是这样理解的呢?显然不是。我们常看到的现象是,软件开发人员习惯从技术的角度去思考问题,他们喜欢钻研高深而复杂的技术问题。在进行系统设计和编码实现时,往往追求技术而忽略工程能力。最后再强调一句,软件研发的目的是提供价值。这就要求工程师站在(甲方)客户的角度,从客户需求和商业价值的角度思考产品的意义。同时,也要站在老板的角度,建立成本意识,学会计算投入产出比。
本篇博文从一名研发工程师的视角,客观、理性的对工程能力的定义进行了清晰明了的讲解。下文将继续探讨工程能力的核心要义。推荐阅读百度章淼老师的相关博文以及百度技术培训中心的相关课程。
推荐学习资料:
百度技术培训《代码的艺术》:http://bit.baidu.com/productsBuy?id=26
章淼老师翻译书籍:《软件开发中的201个原则》