每当有候选人来我这边应聘高级开发岗位,我第一时间考察的,都是复杂系统的技术架构设计能力。
这是我认为最重要的一项能力。
因为在我看来,高级开发和普通开发之间,真正的区别,不是技术栈会得更多,也不是工作年限更长,而是有没有能力独立负责一个大型复杂项目。
不少人理解的高级开发,是技术更全面。
- Spring 会。
- Redis 会。
- MySQL 会。
- 消息队列也会。
- 等等技术点技能。。。
这些当然重要,但它们只是工具。
真正能够拉开差距的,是面对一个复杂项目时,你有没有能力把这些工具组织起来,设计出一套合理的系统。
所以,我考察架构设计,并不是想知道你会不会某一种架构。
而是想知道你的思考过程。
当业务目标确定以后,你会如何拆解问题?
- 为什么这样设计,而不是那样设计?
- 数据库为什么这么建?
- 模块为什么这么划分?
- 同步还是异步?
- 事务边界放在哪里?
- 哪些地方需要考虑扩展性?
- 哪些地方应该保持简单?
- 哪些地方需要考虑降级?
- 哪些是最核心的模块,必须保住?
- 哪些地方,一定要做好监控,一有告警,必须立刻介入处理?
每一个设计背后,你是否都有自己的思考和取舍。
因为软件开发,从来都不是寻找唯一正确答案。
更多时候,是在多个方案之间做权衡。
而这种权衡能力,恰恰是高级开发最重要的能力之一。
除此之外,我还会特别关注一点。
那就是,当设计方案落地以后,遇到各种问题,你有没有能力继续把项目往前推进。
大型项目一定会遇到各种意料之外的问题。
- 需求会变。
- 性能会出问题。
- 线上会出现 Bug。
- 系统之间会存在兼容问题。
高级开发并不是不会遇到这些问题,而是能够快速分析问题、定位问题,并找到解决问题的方法。
如果一个项目,每遇到一点困难,都需要别人告诉他下一步怎么做,那很难说已经具备了独立负责大型项目的能力。
所以,在我看来,高级开发的核心价值,从来不是代码写得有多快,而是能够独立承担责任。
从需求讨论,到方案设计,到技术实现,再到最终上线,整个过程中,大部分事情都能够自己思考、自己推进、自己解决。
领导需要做的,是讨论关键决策,而不是替你完成思考。
因此,如果让我用一句话总结高级开发应该具备哪些能力,我的答案始终都是:
能够独立主导设计,并高质量落地一个大型复杂项目。
因为当你具备了这样的能力,架构设计能力、技术方案能力、问题分析能力、系统思维以及项目推进能力,都会自然包含在里面。
而这些,才是真正把高级开发和普通开发区分开的地方。