软件工程师的核心竞争力
软件工程师的核心竞争力,不是单一能力的体现,而是几种能力和价值的合集。学习能力、解决问题能力和影响力构成了软件工程师的核心竞争力。
- 编程语言、框架、工具,这些都不是软件工程师的核心竞争力,能快速学习掌握编程语言、框架、工具的学习能力才是软件工程师最基础的核心竞争力。
- 软件工程师日常开发工作的核心还是在发现问题、分析问题和解决问题,在这里统称为解决问题的能力。
- 影响力不是一朝一夕能形成的,但却是一个软件工程师最核心的价值体现。你需要通过一点点技术成长的积累,需要通过一个个成功项目的积累,需要通过一篇篇技术文章分享的积累,需要通过一次次帮助其他人成长的积累。而一旦形成足够的影响力,就会变成软件工程师职场发展最牢固的护城河。
如何提升学习能力?
首先需要在一个技术领域深耕
- 每个人精力其实很有限的,一开始专注在一个技术领域容易在短时间取得成绩,同时也相当于建立起了最初的知识体系,在未来的知识森林里种下的第一棵大树,这样当你开始学习新的技术的时候,已有的知识就可以直接借用,相当于这棵大树可以帮助新的知识树的成长提供很好的养分,快速培养出新的大树。
- 如果一开始就同时涉猎多个领域,每个领域的知识又没有掌握好,这样的知识是没法共享的,就相当于你种的只是一片知识的灌木,最终只能收获像灌木丛的知识体系。
只有一个领域的知识你真正吃透,才能有效地共享到其他领域,构成一个知识领域的森林。
然后往相近的领域逐步横向拓展
- 当在一个技术领域达到一定深度后,可以开始横向扩展。最好是往相近的领域扩展,因为这样你之前的知识有很多是可以共享的,容易快速取得成绩。
- 当然横向构建知识体系,也一样不是一个轻松的过程,因为以前你在某个领域取得的成就和经验,反过来也会成为一种阻力。因为以前你熟悉的知识,已经变成了你的舒适区,你会天然地不愿意走出舒适区,不愿意到挑战区或恐慌区去学习新的知识。
- 但是,当你迈过去,掌握了新领域的知识,就会感觉整个知识体系一下子扩展了很大一块。相当于让你的知识体系,从一棵树,逐步变成了一个小树林,最终会成为一个森林。
- 快速掌握新技术的秘籍,就是要构建属于你的知识体系,让你在学习新知识时,能借用已有的知识,加快学习速度。
自动化测试
自动化测试,分为三类:
- 小型测试,主要针对函数或者类进行验证,不调用外部服务,执行速度快;
- 中型测试,主要验证两个或多个模块应用之间的交互,可能会调用外部服务,尽可能让所有测试能在本机即可完成,执行速度比较快;
- 大型测试,对服务整体进行验证,执行速度慢。
写好单元测试代码,基本结构就是:准备、执行、断言和清理;基本原则就是:
- 要验证正确性;
- 覆盖边界条件;
- 验证是否有异常和错误的处理。
自动化测试,一定要配合好持续集成,才能最大化发挥其效用。
对于自动化测试的实施,开头是最难的,因为需要花时间选择自动化测试框架,需要针对自动化测试框架搭建环境,甚至要去搭持续集成环境。但搭建持续集成和搭建自动化测试环境,并且保证持续更新维护自动测试代码,这个技术投资,一定是你在项目中最有价值的投资之一。
搭建持续集成环境和集成自动化测试框架的事情,要作为一个正式的项目任务去做,当作一个很重要的任务去推进。
源代码管理工具
- 源代码管理工具也叫版本控制系统,是保存文件多个版本的一种机制,可以记录文件的历史版本。
用好源代码管理工具,有三个简单可行的原则:
- 原则一:要频繁的提交;
- 原则二:每次提交后要跑自动化测试;
- 原则三:提交的代码要有人审查。
基于源代码的开发流程,要保证好两点:
- 有一个稳定的代码分支;
- 在合并分支之前,对代码有审查,自动化测试要能通过。
用好源代码管理工具,设计好开发流程,保证好代码质量,你的协作才能更高效。