从古到今,成为人上人几乎是我们每个人的追求;一名普通的工程师和一名卓越的工程师之间到底有哪些区别呢,一下面我们起探讨一下这个主题,纯属个人理解,有不对的的地方欢迎指正,有遗漏的部分恳请各位大佬及时补充,谢谢!
一、团队协作能力
之所以把这个能力放在第一位,是因为我认为这是一个工程师的安身立命之本。软件研发这个领域,几乎99.99%的公司都是协作开发,即便你再牛逼,也不可能一条龙(项目立项->需求分析->概要设计->详细设计->研发->测试->部署->交付->运维) 面面俱到,能在其中某一个领域独当一面已经是很牛逼了,所以协作就显得尤为重要;就算我们就是一个很基础的研发人员,最起码要和身边的其他同事协作、产品和测试沟通吧;而高效的沟通是编写高质量代码的基础,所以一个优秀的工程师团队协作的能力一定是很棒的。
二、需求分析能力
对于一个工程师而言,只要充分的理解需求才能写出高质量的代码,毕竟技术存在的价值就在于它能快速的解决问题,脱离业务谈技术纯粹是耍流氓。
这里面有个比较重要的点在于,提需求的人(客户、营销人员、产品)大部分是不懂技术的,所以他们很难提出完整和清晰的需求,作为一个研发人员,我们不光应该理解表面的需求,还要挖掘隐含需求(举个最简单的例子:客户说我要一个知识库,能查就行)。隐含需求就是这些信息的维护,说的是select,实际上至少是一套CRUD。另外还有一些性能上的需求。
三、文档编写能力
好的文档和清晰的流程图是一个系统的灵魂,它的价值在一开始似乎体现不出来,但是随着时间的推移,需求的不断变更以及各种个性化需求特殊处理的加入,业务逻辑变得越来越复杂,随着时间的推移,这个复杂度是至数倍增长的。相信部分人可能有过系统重构的经验,一个按钮的显示逻辑可能要梳理两三个小时,对于一些重要的功能(和钱相关),是不能出半点差错的,那个时候你一定会想:要是有个文档该多好。 所以个人强烈建议:自己负责的每一个功能,出一个比较详细的流程图和维护文档。
四、标准化代码编写能力
大体上遵循业内标准,细节上遵循公司标准。
编码规范的价值在业界有着广泛的共识,因为一个成熟稳定的产品一定是无数次迭代的产物。标准化代码应该具备以下几个基本条件:
1、比较完善的注释和日志
2、规范的变量名、规范的格式(缩进、方法长度小于40行)
3、尽可能少的冗余(能封装的就封装)
4、良好的可读性性和可维护性
5、良好的扩展性(这点初次编码可以不考虑,优化的时候做),个人经验(过于追求完美是人生的一大悲哀)
五、抽象思维能力
这个能力和第一个能力一样,其实不光在研发领域使用,它使用于生活的各个领域。生活中我们解决复杂问题的时候,最常用的一种方式就是:先找到几个关键点,把主要流程定下来。然后在这几个关键点的驱动下完善细节。软件领域亦是如此,分析需求的时候先出一个大概的流程图,抽象出整个需求中几个重要的角色。然后在设计细节。
抽象的能力直接决定了代码的健壮性、可读性。 抽象思维能力是面向对象设计领域最重要的一个能力。
六、单元测试能力
一个合格的开发要对自己写的代码尽可能的做全方位的测试,尽可能测试可能出现的每一个问题(当然时间允许的情况下)。我们一定要坚信,只要不断地重复这个过程,慢慢的我们写出来的代码bug会越来越少,因为全面的考虑已经成为一个习惯。
七、持续学习和总结能力
持续学习:这一点,相信不用做过多的解释。工程师这个职位之所以平均工资高于其他行业,很重要的一个原因就是在客户需求、市场需求的驱动型,技术的迭代非常之快。三年前找工作,会个hibernate ssm就可以找到一份不错的工作,现在随便打开一个招聘网站,都要求了解微服务、分布式、高并发、云端开发等相关技术。因此只有不断的学习、与时俱进,才能保证自己可以持续过的很好。
总结能力:只有不断的总结才能把已经掌握的知识连贯起来,如果连贯不起来,很快就会忘记,更主要的就是无法提高生产力,不总结就不会用,不会用就是没用,就是没学,就是浪费时间。这也是 为什么我们读懂了很多道理却依然过不好生活的本质原因。
未完,待续......