1. 面试场景还原:一个普通程序员的特殊表现
那天下午三点,会议室里的空调嗡嗡作响。我面前坐着一位38岁的应聘者,简历上写着"Java开发工程师,10年经验"。说实话,这份简历在技术栈描述上实在平平无奇——Spring Boot、MySQL、Redis,都是基础配置;项目经历也都是些常规的电商后台、OA系统开发。按照常规筛选标准,可能连技术面都进不了。
技术面开始后,情况也确实如我所料。问到JVM调优时,他只说了些-Xms、-Xmx的基础参数;问分布式事务,回答停留在"用过Seata"的层面;算法题虽然解出来了,但时间复杂度不是最优解。正当我准备礼貌结束面试时,随口问了句:"你觉得自己最大的技术优势是什么?"
他沉默了几秒,说:"其实我这十年没做过什么高并发大项目,但我经手的每个系统,上线后从没因为代码质量问题出过生产事故。"这句话让我放下了手中的笔。
2. 为什么这句话打动了我
2.1 程序员行业的现状痛点
现在技术圈有个怪现象:很多人热衷于追新框架、刷算法题,却忽视了最基础的代码质量。我见过太多简历上写着"精通微服务"的候选人,连基本的参数校验都写不完整;号称"全栈开发"的工程师,提交的SQL连索引都没加。
这位应聘者提到的"零生产事故",在日均PV过亿的系统可能不算什么,但对于普通业务系统而言,需要的是:
- 每个if-else都考虑边界条件
- 每次数据库操作都评估事务隔离级别
- 每个接口都做好幂等设计
- 每次上线都严格走完测试用例
2.2 十年如一日的工程素养
当我追问他是如何做到的时,他的回答更让我意外:
- 坚持代码Review制度,哪怕团队只有他一个人
- 所有SQL语句必须通过explain验证
- 日志打印遵循"故障时可诊断"原则
- 接口文档永远保持同步更新
- 每周固定半天专门处理技术债务
这些都不是什么高深技术,但难在十年如一日的执行。就像老木匠说的:"好家具不是靠高级工具,而是每个榫卯都严丝合缝。"
3. 中年程序员的核心竞争力
3.1 技术深度 vs 工程经验
现在很多35+程序员焦虑于"技术不够前沿",但其实企业真正需要的是:
- 能准确评估技术方案风险的人
- 能写出运维同事看得懂的代码的人
- 能在需求变更时保住系统底线的人
- 能带新人养成良好编码习惯的人
这位应聘者展示的正是这种"工程直觉"——知道在什么地方必须坚持原则,在什么地方可以适当妥协。
3.2 从CRUD到风险控制
他给我讲了个例子:有次业务方要求紧急上线个促销功能,要求三天完成。他评估后发现:
- 涉及资金结算的流程改动
- 测试环境没有真实账户数据
- 风控规则需要同步调整
最后他的方案是:
- 先上线非资金相关的功能模块
- 资金变动走线下人工核对
- 两周后再补全自动化流程
这种决策能力,不是刷几道LeetCode就能获得的。
4. 给技术人的职业建议
4.1 建立你的技术信用
在技术社区看过一个比喻:程序员的职业生涯就像在写一个永不停止的PR(Pull Request)。每个项目、每段代码都是你的commit记录。那位应聘者最聪明的地方在于,他用十年时间证明了自己是个"可靠的提交者"。
具体可以这样做:
- 在代码注释里留下决策依据
- 为每个bug写根本原因分析
- 定期整理技术决策文档
- 公开分享踩坑经历
4.2 技术人的长期主义
我最后录用他的原因是:在所有人都追逐"颠覆式创新"的时代,更需要有人守住技术的基本盘。就像他说的:"我不保证能解决所有问题,但我能保证我经手的东西不会成为别人的问题。"
这让我想起Unix哲学里的那条准则:"程序员应该知道什么时候不写代码。"有时候,克制比炫技更需要勇气。