如何成为 10 倍软件工程师
沟通创造价值,分享带来快乐。这里是程序员日报,每天和你分享读书心得,欢迎您每天和我一起精进。
今天要分享的是前 Netflix 和 Amazon 主管 Michael Lin的心得笔记,我从中学到不少软技术的能力,它甚至比技术本身更加重要,希望你读完会有所收获。
初级工程师常犯 3 个错误,你在做吗?
10x 工程师是事实,最好的工程师比普通工程师好 10 倍。就像一支单人军队一样,他们自己提供的价值比一支初级工程师团队加起来的速度更快。
在我担任 Netflix 和 Amazon 的工程主管期间,我曾与两位刚毕业的实习生一起工作,一直到首席工程师(亚马逊的 L7 及以上),我可以证明确实存在 10 倍工程师。我也可以自信地说他们并不具备:
- 打字速度快 10 倍
- 工作 10 倍的时间
- 编写 10 倍以上的代码
事实上,10 倍工程师可能会以一半的速度打字,一半的工作量,并花更多的时间删除代码而不是编写代码。
10x 工程师往往也更擅长 LeetCode,但这并不是让他们与众不同的地方。
最好的工程师和初级工程师之间的区别归结为心态问题。他们使用正确的工具,提出正确的问题,并且知道如何确定优先级。
最好的工程师与普通工程师的区别在于非技术技能。
在本文中,我讨论了初级工程师常犯的 3 个常见错误,以及高级工程师如何以不同的方式解决相同的问题——从而导致截然不同的结果。
1. 对工具的研究不够
亚伯拉罕·林肯曾经说过:“如果我有 8 个小时砍树,我会花 7 个小时磨斧头。”
初级工程师将花费 8 个小时用钝斧砍伐。高级工程师花了一个小时挑选合适的电锯,5分钟后砍树。
我看到初级工程师犯的一个常见错误就是:他们一头扎进编码中。他们只坚持使用他们知道的工具,并尝试使其适应各种情况。
如果一个普通工程师只知道如何使用锤子,他们也会用它来挖洞。
他们几乎没有花时间研究其他替代方案——或者是否有可能完成编写 0 代码的工作!
使用正确的工具是:工作数周与在几分钟内完成任务之间的区别。这就是产生 10 倍差异的地方。
- 任务示例:建立网站
最近,我有幸与一位初级工程师打赌:谁可以更快地建立个人网站。
新毕业生用了 2 周时间,写了 1000 多行代码。两周后她甚至没有完成!我花了 1 天时间,写了 0 行代码,甚至没有流汗。
当我请初级工程师解释她是如何处理这个问题时,很清楚为什么她花了这么长时间才完成:
“嗯,我在学校学会了如何制作 React 应用程序,所以我只是用它从头开始创建了一个网站。但是很难让图像和 CSS 正确。而且我也不知道如何部署它。所以我想我必须在 AWS 上编写一个自定义部署脚本,但对控制台有点困惑。微型实例和大型实例又有什么区别?”
请注意这位工程师的方法遗漏了几个关键点。首先,他从未讨论过:
- 需求——没有提及搜索引擎优化、评论或预建模板是否重要。
- 替代工具——他们只知道 React + AWS 并坚持使用它。
想象一下尝试从头开始开发评论,并做SEO,每一块工作量都无比巨大,难怪他没有说完!
2.不寻求帮助
这是一个非常简单的问题,很容易修复,但造成了太多的时间浪费。
一些初级工程师有这样的误解,认为高级工程师就像一个孤独的天才。如果他们坚持解决问题,他们最终会得到解决方案,但这是一种相当幼稚的思维方式。
因此,他们不只是寻求帮助,而是在代码库上苦苦挣扎,一遍又一遍地查看相同的代码行,哪怕向队友提出 5 分钟就会立即解决问题!
一个知道如何寻求帮助的初级工程师总是会击败一个从不寻求帮助的更有才华的工程师。
有时很明显,需要额外的上下文信息才能开展工作。例如,不清楚:
- 为什么代码库的结构是这样的?
- 调用哪个 API?
- 如何展开部署工作?
在这些情况下,您最好寻求帮助而不是进一步挖掘代码库,不要害怕寻求帮助!
3. 没有提供商业价值
10x 工程师首先是投资者。
他们明白工作是一项投资——必须讲究投资回报比。我们必须了解:花费在一个功能上的时间意味着失去开发另一个功能的时间。
工程师必须权衡机会成本——“在所有功能中,这个功能是否最能利用你的时间?”
他们需要明白代码是达到目的的一种手段——业务目的。如果他们可以在没有代码的情况下实现他们的目标,那就更好了!编写的工作量更少,维护的代码也更少——这是一个双赢的局面。
我看到很多新工程师忽略了这些业务目标,我们来举一些例子:
- “这项新技术真的很酷。让我们花 5 天时间将其整合到网站中”(与产品不对齐)
- “呃,我不喜欢代码的结构方式。让我们花在下一个 spring 重构上”(机会成本——可以把这段时间花在构建创收功能上)
- “这个平台太老了——让我们迁移到一个新平台吧”(迁移是否可以帮助您显着加快迁移速度,还是只是渐进式改进?)
正是这个思维方式导致了10 倍的工程师。
如果一个初级工程师花 2 小时处理一个不会增加收入的复杂功能,但一个高级工程师花 1 小时进行一个简单的副本更改,收入增加 5 倍,那么我们的工作效率就会提高 10 倍:
一半的时间花在产生 5 倍收入 = 10 倍交付价值的功能上。
最后
非技术技能(“软技能”)是高级工程师和初级工程师之间的区别。
工程化比作死要难得多,不要因为你的自我而让你的努力付诸东流,永远记住:
工程师必须首先交付价值。
我的阅读体会:
本文从逆向进行思考,没有提出方案,但是从逆向提出可能影响程序员效率的问题,我个人觉得都是大问题。不注重工具研究,不寻求帮助都是在浪费时间,不能交付商业价值是在做无用功。
我很喜欢作者把工作当做一种投资,工作是一种商业行为,必须要讲究投资回报比,否则是非常危险的,当然有时候你不知道这种回报是对的还是错的,那是另外一个话题了。
以上就是我的翻译和阅读体会,如果你有新的想法,欢迎你给我留言,希望对你有所帮助!
原文地址:跳转