在软件行业中,一名优秀的工程师不仅是代码编写者,更是系统设计和业务价值的创造者。以下内容基于我三年的后端开发经验,融合个人思考,和大家分享我认为的成为优秀工程师的路径。
我们的通过聚焦一个核心问题:程序员和软件开发工程师有何本质区别? 得出最终的进阶之路。
下面我是我的思考以及我个人过去的踩坑案例和分析。
核心差异:程序员 vs. 工程师
- 程序员:注重将思维转化为高效代码,目标是编写优雅、高性能的程序。但代码仅是工具,而非终点。
- 软件开发工程师:关注系统整体设计、架构权衡和业务匹配。如 Martin Fowler 在《重构》中所言:“代码好坏不在于风格,而在于是否适应上下文。”工程师的核心能力是实现 Trade-off(权衡决策)——即在时间、成本、可维护性间寻求平衡。
例如:在设计系统时,工程师会选择用缓存牺牲存储空间以换取响应速度;在产品迭代时,他们会评估是否引入设计模式(如策略或观察者模式)以降低未来成本。若忽略 Trade-off,易导致过度设计或短视决策。
个人案例:过度设计的教训
我比较幸运,毕业入职就是有自研系统的中场,领导也愿意让我去试错,让我自己设计实现一个内网邮件系统。我那会儿刚学完设计模式,拿着锤头就找钉子,见什么都想用。整个系统里充斥着单例、工厂、责任链、模版、观察者、策略模式。代码写的极其复杂,一个简单的邮件收发系统两个人整整做了快一年。同时代码的后续维护也很难一个简单的功能要绕好多类才能找到具体实现,并且哪些留下的扩展性接口大部分都没有再被使用,只有几个在后续的扩展中起到了作用。
这其实是一个典型的过度设计,没有考虑 trade-of 的案例。对于一个邮件系统来说满足基本的收发展示,以及适配业务的分类改造后其实就没必要更加复杂了,其后续的改动不会很多,前期的编码大可以速度更快。如果现在再让我设计实现这个系统,我可能只用花两个月。
我认为这上面的经验实际上是我作为工程师的价值所在,是跳槽后涨薪的关键,而不完全是我的技术。我认为其实一直以来技术都是重要但没那么重要,尤其以目前 AI 的发展趋势,它完全能按照你的指令写出一份大体不错的代码,你只需要做一些微调。但工程师 trade-of 的洞察力是 AI 无法替代的。
有些兄弟会说,但我入职的是小厂,没有那么多给我试错的机会。你没有试错的机会但前人有,你可以翻看一下你们公司代码的历史变更记录和相关迭代文档,从这里面吸收之前人踩坑犯下的错,去思考为什么要从 A 改成了 B。还有些兄弟会说我们是做外包的,做完就交付了。那你还可以从开源的项目或者面试的八股中去思考。
下面我会给出我思考出的工程师提升路径,大家可以参考下。
- 深入理解你的业务,站在客户和产品经理(公司)的角度去分析问题,尽可能的和产品经理多沟通。将这些与你的观点做对比你会发现一些不同,从而去理解产品之前为什么要这样设计,进而在未来你才能设计出符合公司和客户需求的产品。
- 读一些技术以外的书,去理解里面的思想,下面是推荐
- 《人月神话》
- 《黑客与画家》
- 《人件》
- 《代码整洁之道》
- 《软件工程》
- 《重构》
- 保持技术的更新,你的公司可能用不上分布式、微服务、函数式编程、大模型之类的技术,但你一定要了解;在了解的同时你要思考对于我们公司或者我手头的项目有哪些是可以改造的,有哪些是没必要改造的?为什么你可以下这个判断?
- 多看面试八股,去思考八股为什么存在
- 我答案是八股的背后其实就是一份问题的总结。前人一定在这个地方踩过很多坑才会总结出来这些问题来问你。
- 背八股的同时去探寻这个问题背后的技术原理,去找到是什么东西导致了这个问题的发生。
- 在合适的时候落地新技术
- 合适的时候 = 上级支持 + 你对技术有深刻的理解 + 同事愿意配合 + 这是一个新模块
结语:工程之道的本质
好了,这就是我的一些思考,让我们再总结一下成为一名优秀工程师,不是堆砌技术栈,而是在不确定性中做出平衡决策。正如贝尔实验室的 Ken Thompson 所言:“编程是 10% 写代码,90% 思考你该做什么。”
欢迎大家在评论区分享自己踩坑的故事和你的想法。让我们一起变得更强。
文章首发 gzh【破茧 plan】,欢迎关注。