有些程序员只做最基本的工作: 编写满足需求的代码。然而,伟大的软件工程师知道他们的工作不仅仅是编写代码。如果你想成为一个伟大的工程师(并在你的职业生涯中取得成功) ,了解所有的“隐藏”工作会让你的工作变得更好。
事实上,对于大多数顶级工程师来说,编写代码只是他们整个工作的一小部分。不幸的是,当您学习编码时,这些工作中的大部分从未正式教授或讨论过。这是一个遗憾,但在这篇文章中,我将向你展示伟大的工程师们所做的所有“隐藏的”工作,以建立令人敬畏的产品和职业生涯!
软件开发人员通常分为两类: 程序员和工程师;
程序员喜欢编写代码,有时他们很擅长!给他们一个问题和足够的时间,他们会给你写一些代码来解决你的具体问题。工程师也喜欢编写代码,但他们大多喜欢为人们构建有用的东西!给工程师一个问题,他们会立即问你问题为什么存在,你已经尝试了什么,如果有任何其他相关的问题可以一次性解决。
- 编码人员非常适合于有限的任务集,但他们往往忽略了大局。
- 工程师总是先着眼于大局。一旦他们理解了问题空间,他们就会编写代码。
伟大的工程师能做什么大多数程序员不能做的呢?
1: 发现特性背后的需求
通常,为应用程序构建新特性需要的不仅仅是添加一个按钮或一些逻辑。产品经理不可能知道所有的技术细节,所以伟大的软件工程师的工作就变成了发现需要解决的潜在技术挑战: 这个新功能是否需要我们向数据库添加一个新的表或列?我们应该使用 JavaScript 在前端完美地构建这个特性来解决这个问题,还是应该更新 API 来全面地支持这个新功能?当规划一组特性时,它们应该按什么顺序开发,有什么任务会阻碍其他特性?优秀的工程师有成百上千种方法帮助发现需求,并确保这些需求得到满足,以便团队能够更快地规划和发布更好的特性。
2:思考边界案例并测试它们
大多数公司都有针对新代码的测试标准。为了进行合并,新代码必须满足一定的覆盖阈值。优秀的程序员将组合一组快速测试,检查需求中指定的路径的工作情况。优秀的工程师会考虑边界情况和更大的场景,在这些场景中代码可能会产生意想不到的结果。最好的工程师编写真正健壮的测试(他们经常练习测试驱动开发)。
3:考虑到用户体验(UX)
设计师和产品经理不可能预见到新特性的每一个细节。在许多情况下,需求会被遗漏,或者设计可能会排除一些细节。在这些情况下,一个好的工程师经常需要对特性的意图和用户应该期望什么做出判断。也许是一个缺失的按钮,一个提示用户的对话,一封确认邮件,处理一个特定的错误… … 当你开发一个新功能时,你通常是第一个看到它完全工作的人。作为一个优秀的工程师,你有责任在每一步考虑用户体验,并解决任何设计团队没有预见到的问题。
4:架构师的部署和采用策略
也许你对于如何解决工作中棘手的技术挑战有一个绝妙的建议ーー解决问题,完成工作,对吗?别急!伟大的工程师不只是想出解决方案,他们还会考虑如何采用、部署和维护这些解决方案。对于一个体面的想法,一个精心策划(采用策略)比一个完美想法的拙劣执行要好得多。
5:解决现有代码中的技术债务
伟大的工程师会让代码比他们发现的更干净。此外,当工程师遇到一段代码或体系结构选择不再符合对产品应该如何工作的更大理解时,工程师能够向公司的团队和利益相关者解释问题及其含义。注意: 一个好的工程师不会在大型重构工作中胡作非为。在没有征求意见的情况下进行大规模重构是一个自负的程序员的明确标志。相反,优秀的工程师会讨论这个问题,制定计划,并与团队一起确定重构的优先级。
6:阅读和编写文档有关代码
如何工作的文档对于共享信息和招募新的开发人员非常重要。伟大的工程师理解文档的价值,并为他们所从事的项目编写文档。什么是好的文档?很好的变量、函数和类名,可以清楚地表明代码在做什么。为事物命名是软件工程中最困难的部分之一。内联、函数、类和文件级注释和文档字符串,这些注释和文档字符串解释了代码的工作方式。README 和其他内部文档,它们解释了更大的概念和项目外部文档中的用法,比如 API 文档、公共包和帮助文章。好的文档不需要很长或者很复杂!事实上,伟大的工程师知道最好的文档是简洁明了的。
7:审查其他工程师的代码
代码审查是工程师工作的一个重要组成部分!在代码审查期间,伟大的工程师寻找: 这个代码是否满足需求?它在技术上是否正确并能处理错误案例?在保持灵活性的同时,实现是否尽可能简单/直接?是否有良好的测试覆盖率,测试用例是否反映了实际使用情况?新代码是否包括良好的命名、文档字符串、注释和类型提示?成为一名优秀的代码评审员有助于为您的团队设定一个质量标准。当然,伟大的工程师应该在他们打开的请求中满足他们自己的标准!更重要的是,代码审查是指导其他开发人员和扩展他们的思维/技能的一个很好的机会。优秀的工程师在他们的代码评审中提供富有同情心的、可操作的反馈。
8:面试候选人
了解整个软件开发生命周期的工程师更愿意面试候选人加入团队。他们明白,如果一个优秀的程序员不具备良好的团队合作精神,那就不值得雇佣他。出于同样的原因,如果一个较弱的程序员表现出潜力,他们愿意在这个人身上看到希望。招聘是很困难的,面试官需要很高的情商。成为一个好的面试官只是伟大的工程师以隐蔽的方式为他们的团队做贡献的另一种方式。
9:指导初级工程师和结对编程
程序真正伟大的工程师想分享他们的知识!他们帮助团队中的其他人更好地利用代码构建有用的产品。有时这意味着结对编程。其他时候,是一对一的指导。甚至代码审查注释也可以被视为一种指导。指导团队中的其他成员并在工作中进行合作是工程师工作的重要组成部分。虽然这意味着工程师没有花时间开发新功能,但是指导可以更好地促进整个团队的工作。尽管个人的吞吐量可能略有下降,但当工程师之间共享最佳实践时,整个团队的吞吐量会得到改善。
10:应对突发事件
工程师尽最大努力彻底检查和测试代码,但事件和错误仍然可能出现在客户面前。编码人员也许也能对事故做出反应,但工程师们的反应更进一步。伟大的工程师们会问: 为什么事故会首先发生?我们在单元测试、 QA 过程、代码审查标准中缺少了什么?还有谁可能受到这次事件的影响?其他客户可能遇到同样的问题吗?其他服务是否依赖于受影响的组件?如何记录事件、其解决方案和后续步骤?如果将来发生类似的事情,我该如何简化找到解决方案的过程?(事故及时复盘)
总结:工程师远不止编写代码。伟大的软件工程师每天都要做很多隐藏的工作。希望这篇文章能够对成为一名真正伟大的工程师有所帮助。然而,这当然不是一个明确的名单。软件工程师承担的任务更多!把这篇文章作为一个挑战:来关注所有与编码相关的工作,并且这些工作同样重要!在工程师的隐藏工作中取得卓越成就,可以让你在创造伟大产品和在职业生涯中取得成功,你可以脱颖而出。