TIP
原文地址:20 Things I’ve Learned in my 20 Years as a Software Engineer
原文作者:Justin Etheredge
译者:千浔
译者前言:地方
前言 
更新: 9/25/2025 字数: 0 字 时长: 0 分钟
你即将阅读到一篇包含大量建议的博客文章。
向前人学习是我们成功的重要因素,但是我们经常忘记一个重要的前提————任何的建议提出都是有背景,有其使用环境的,但是很少有建议在提出的时候会包含这些。
"你只需要收取更多的费用!",这句话来自一个已经经营 20 年的公司,而这家公司恰恰是靠着"收费少"这个优势去吸引客户并取得成功的。
"你所有项目的架构都应该是微服务!",又有一家公司提议道,而这家公司是先构建一个单体项目,靠此获取数千客户,之后才在他们的扩展项目中应用微服务的。
不了解建议提出的背景,这个建议对我们来说就毫无意义,甚至会误导我们。如果提出建议的这些人在他们创业的早期就按照这些建议去执行,那么他们肯定会吃苦头。这个陷阱确实很难避免。我们过往的所有经历才成就如今的自己,但是我们提建议时却只看到了当前的自己。
所以,给我的建议说明一下背景————即简单的介绍一下我自己,是很有必要的。在我职业生涯的前半段,我是作为一个软件工程师活跃在各种小型企业或者初创企业。之后我进入了咨询行业,并在一家非常大的公司中任职。随后我创建了Simple Thread,我们的团队由最初的两人发展为如今的 25 人。10 年前我们主要与中小型企业合作,现在我们的合作对象大型、小型企业都会包括。
我的以下建议来自一个:
- 几乎一直在小型、精英的团队中,我们必须做到用很少的精力做到最多的事情
 - 重视工作软件而不是特定工具
 - 一直在启动新项目,同时还要维护多个系统
 - 将工程师的生产能力视为第一要素
 
我过去 20 年的经历塑造了我对软件开发的看法与感悟,这些看法与感悟是我产生了下面这些我视为信仰东西,我希望他们对你有用
一. 我会的还不够多
你怎么不知道BGP?你连Rust都没听说嘛?我们当中的绝大多数人可能经常听到类似的言论。我们投身于软件开发行业的一个原因是我们是一个终身学习者,在软件行业中,无论你具体从事的是什么职位,知识的广度与深度都在与日俱增着。这意味着即使你在你的岗位上深耕数十年,你与另一个与你工作年限差距不大、工作性质类似的人在知识层面上,可能仍有巨大差距。你越早意识到这点,你就可以越早摆脱生有涯而知无涯的沮丧感,可以尽早的将精力投身于向他人学习以及给予他人帮助上面。
二. 软件最难的部分是构建正确的东西
我知道这个说法有些陈词滥调,但是大多数工程师不相信它的原因是他们认为合格说法贬低了他们的工作价值。我个人认为这是无稽之谈。相反,它凸显了我们工作内容的复杂性和不合理性,这加剧了我们面临的挑战。你可设计一个技术难度非常高的项目,但是没有人愿意体验它。设计软件是一个倾听的动作,除了要作为一个软件开发工程师之外,我们还必须成为一个巫师,成为一个人类学家。投身到这项设计工作中去,无论是作为专门的用户体验团队成员还是仅仅通过自我学习,
三. 最好的软件工程师要像设计师一样思考
优秀的软件工程师十分关注他代码的用户体验性。他们可能并不十分外部 API、编程 API、用户界面、协议或者其他接口等这些专业的术语,但是他们会思考什么使用使用它、如何使用它、怎么去使用它,以及对客户来说,痛点是什么。时刻牢记用户需求始终是提升用户体验的核心。
四. 最好的代码是无代码,或者是不需要维护的代码
我要说的是:程序要是要编码的。任何职业的人都会在他们的专业领域犯错,这是人之天性。在非技术解决方案不明显时,大多数程序员都会在编写代码时犯错。这种情况也发生在那些你不需要维护的代码。开发小组通常倾向于重新造轮子,即使这些轮子早已经存在。这是一种平衡行为,提升你自己能力的理由有很多,但还是要小心 NTI 综合症(在编程领域,“NIH 综合症”通常是指因为认为公司内部的开发总是会比现成的成果更安全、更适合公司、维护成本更低而去重造轮子即重复发明已经发明了的东西的倾向)
五. 软件是达到目的的手段
软件开发工程师的一项主要工作是提供价值。但是很少软件开发人员理解了这点,将其内化的就更少了。真正理解这点并内化后,你将会获得一种全新的解决问题的方式和看待你手头工具的视角。如果你真的相信软件对结果有决定作用,那么你就会真正找到“适合这项工作的工具”,而它可能根本不是软件
六. 有时候你必须停止磨锯,直接开始切割狗屎
