专业技术+技术赋能业务能力=立身之本
一、专业技术能力
拿 Java 开发工程师来说,日常你能用 Java 编程,会使用编程的工具,比如 Eclipse,还会一些 Linux 命令,知道后端开发三大中间件(MySQL、Redis、MQ)的 API 如何调用,可能你还能遵循公司的编码规范和稳定性要求……这些都是看得见的能力。
还有更多看不见的能力藏在冰山下边。还有很多 JVM 原理,数据库原理等等很多知识和能力需要具备。
不管你们有多敬业,加多少班,在面对烂系统时,你依然会寸步难行,因为你大部分的精力不是在开发需求,而是在应对混乱。
------《代码整洁之道》的作者罗伯特·C·马丁
如果一个技术人只把注意力放在冰山上面,那极大概率成为 “搬砖” 的两种情况:
- 很快陷入成长瓶颈。
- 定制的螺丝钉。
后端开发:难的是网络通讯、存储、消息中间件、系统设计、故障排查等这些更底层的经验积累。
前端开发:交付的是用户的使用体验,而使用体验的核心在于交互。要多花时间去了解交互以及背后的渲染,理解底层 CPU、GPU 的渲染原理,弄清标准化端容器(如浏览器这类)的工作原理。
因此,我们需要更关注冰山之下的技术,得“往下沉”。
怎么往下沉呢?还是以 Java 开发工程师为例,往 3 个方向:
- 语言深钻:底层以及高级玩法
- Java 至少了解下 JVM 原理,知道一些 Java 系统的调优方法
- 周边服务:与你日常工作息息相关的底层服务原理
- 熟悉三大中间件的原理(MySQL、Redis、MQ)
- MySQL,至少要了解透彻数据库引擎、事务、索引等等的底层原理;
- MQ,你也得清楚底层实现,了解市面上几种通用的 MQ,在做技术选型时知道什么场景应该选什么……
- Redis...
- 熟悉三大中间件的原理(MySQL、Redis、MQ)
- 系统设计:常见设计原理、应用、经典场景的设计
- 相应设计原理
- 经典场景的设计思路
- 了解高可用系统架构设计的原理和实践
- 主动思考自己做的模块强依赖哪些服务?弱依赖哪些服务?如果需要做降级,应该怎么去设计?
二、技术赋能业务能力
2.1 技术和业务的关系
业务研发的价值绝不仅仅是你的代码写得多好、没有 Bug、你做的接口 TPS 多么厉害,还要看你到底用技术解决了多少业务问题,带来多少业务增量,给客户创造了什么价值。
在完全不了解业务情况下,空谈技术,那就是耍流氓,也是空中楼阁,没办法长久。
已定义业务,只需Coding填坑:
工作要求被定义得非常清晰,这是公司的高层和各级管理者定义好的。比如一个做电商商家端的团队要找一个 Java 工程师,那么电商系统的划分,比如用户、交易、商家端等框架划分,还有整个系统具体要承接的功能、解决的问题,甚至解决问题的方式以及对这个岗位的考核,都是提前定义好了的,只是需要人来“填坑”。
到了一定年龄,给企业带来的价值更多是在一些不确定的、不清晰的事情上,去定义什么是有价值的,从而定义自己的工作。
2.2 如何做到技术赋能业务?
- 了解业务:就是你要理解商业价值,比如清楚当前业务的重要指标,要达成这些业务指标需要解决哪些问题,哪些可以通过技术手段解决?如果你的企业用 OKR 做技术管理,那就是业务重要的 O。
- 定义问题:当你找到要解决的问题,就要把这个业务问题转化为技术问题。
- 解决问题:这一步是技术人相对擅长的,用技术手段去解决问题。
- 数据回证:提前做好数据埋点,通过数据统计论证最开始的设想,检验是否真正解决了问题?有哪些收益?
三、总结
从职业发展角度来说,专业技术能力和技术赋能业务能力,这两个硬技能是我们在技术岗安身立命的根本,是我们更好发展的基础。抛开这些,技术能力还帮我们历练了非常好的抽象能力,以及极其务实的精神。
如果说互联网是把真实的世界搬到线上,那这个“搬”其实是靠技术人把真实世界抽象成线上的一个个数据结构、一个个对象、一个个模块,一个个系统来实现的。我们做系统设计、写代码的过程,就是在历练从具体世界的“现象”中抽丝剥茧,提炼本质的能力。
代码的世界来不得半点虚头巴脑,一个手抖写错一个字符,就可以让庞大的系统轰然倒塌。在这样要求极度精准的工作磨炼之下,大多数技术人都非常务实,能静得下来,能扎得进去,能啃得下硬骨头。这种抽象复杂事物本质的能力以及极其务实的精神,都会是我们职业发展之船能航行更远的燃料。