需要构建自己的技术体系,有广度、有深度,下能撸代码、改 Bug,上能出方案、搞架构。
1)负责一个领域的技术,能定义该领域的核心问题,有思考规划能力和迭代演进,提供具有行业竞争力的技术方案落地,具备一定的技术深度和广度。
什么是技术体系,举个例子,你说自己会 MySQL 数据库,但是除了日常写 SQL 进行 CURD 的业务开发外,你还知道 MySQL 的运行架构、主流存储引擎的区别、主从同步、主从复制、锁机制、分表分库、事务控制,围绕着技术名称的中心点,能像蜘蛛网那样扩散出去,形成有条理的网状结构,就形成了自己的技术体系。
然后是技术广度 + 深度。
广度上要熟悉 MySQL、Redis、JVM 原理、并发编程、高并发、设计模式、Spring 全家桶系列、消息队列、分布式原理、配置中心、注册中心、微服务、RPC 等等,甚至还需要了解架构设计三原则(合适、简单和演化原则),DDD,CAP 理论,Docker,K8S 等等。
深度方面比如 JVM,各种垃圾收集算法得了解吧,遇到 outofmemory 、YGC、 FullGC,可以速度定位到问题吧。遇到某一个 SQL 忽然不走索引了,得能分析出具体什么原因吧。应用服务器 CPU Load 突然增长到原来的几十倍,你需要具备第一时间定位问题的能力。
2)跨 1 到 2 个技术栈开发和方案设计能力,具备良好的技术自驱力和业务思考力。了解整个系统,具备核心模块的编码能力,有很强的分析和解决问题的能力,是关键问题终结者。
这里其实主要体现对系统的方案设计上,具备多领域知识,我们解决问题的思路和办法会开阔很多,然后我们负责的系统所有的技术难题都可以快速解决,妥妥的扛把子!
3)能针对复杂问题和多样环境设计良好的技术架构,对于一类业务/技术问题具备良好的扩展性和鲁棒性,具备很强的数据分析意识。
这里就体现较强的系统、架构设计能力,比如抽象共性、化繁为简、模块和组件化等。小的来说,缓存集群挂了系统不会挂,立马故障转移;大的来说,一个机房挂了,照样不影响正常业务运转。
4)业务发展背后思考技术策略和洞察技术需求,形成对应的技术产品支撑系统,驱动业务的持续发展。
据我所知,绝大多数的公司技术都是支撑公司业务发展,技术驱动公司业务是极少数。