如何成为一名成功的软件工程师
原文:How to be a successful software engineer,作者:Zhia Chong
对于那些刚开始职业生涯的年轻、聪明的软件工程师来说,这里有一些我作为软件工程师读到或收到的最好的建议。
这里的大部分建议都是针对软件工程人群的,但我相信有很多建议是适用于任何职业的。
简而言之,我最好的建议是:
少承诺多做事,做的成果大于预期
完美是优秀的敌人
坚持下去
尽早收集反馈意见
先自己探索再寻求帮助
简化
少承诺多做事,做的成果大于预期
低估完成一项功能所需的工作量,在新手中,甚至在有经验的工程师中,都是极其普遍的错误。
如果你看看那些超出预算和/或延迟交付的项目的数量,你会感到非常惊讶。这是一个疯狂的数字,大约是50% 。
让我们考虑一下这个数字。50%的项目不是超预算就是延迟交付。
这意味着在每1000个项目中,有500个,或其中的一半,是延迟交付或超预算。这让我很困惑。
我清楚地记得在我的第一个技术项目中,我被赋予了领导开发的自主权。这意味着我是一个能写出技术设计文件的人,详细说明开发整个功能需要多少时间,我们需要多少工程师,等等。
作为一个热心的、年轻的工程师,我严重低估了完成工作所需的时间。实际完成需要了2-3倍时间的样子。
当时我对自己相当失望。结果是,我和一些同事的关系也很紧张。
后来我的经理让我坐下来,给我一些改变生活的建议。他对我说:少承诺多做事,做的成果大于预期。
这意味着你应该保守估计,为你的估计提供足够的缓冲,以应对各种事情出错(因为 任何事情都会可能出错的),并争取提前/低于成本交付你的项目。
好处:
给你充足的时间来开发和重构。功能开发总是需要很多的时间,可以回去修复一些你(或你之前的团队)多年来积累的 技术债务。
允许有时间找出最好的设计,而不仅仅是一个工作设计。
在功能开发过程中,有很多事情会出错。同事休假、你生病、开会、你的孩子生病、你的车被撞......这样的事情不胜枚举。认识到事情可能出错是很重要的,你要确保你的日程安排中有一个缓冲区。
由于第2点,你能够持续地产生高质量的工作,由于第3点,你能够每次都按时交付,你现在被认为是公司内部的高绩效者,知道你在说什么,并且可以被信任。这就是双赢。
你可能会说,承诺不足的坏处是,别人会认为你在偷懒,因为你估计了10周的工作,而这些工作本来可以在2周内完成。
说实话,我也曾为此纠结过一段时间。然而,我后来意识到,只要你在整个过程中与利益相关者开诚布公并保持一致,你就会没事。
你是负责提供资源的人,因为其他人依赖你的专业知识。他们知道你是对代码库最熟悉的人,他们相信你能提供一个最佳猜测。在功能开发过程中会发生各种事情,只要你开诚布公,一切都会好起来的。
完美是美好的敌人
作为一名软件工程师,你往往会发现一个项目在交付前缺少这个或需要那个。一个项目可能是一个编码项目,或者只是一个你需要写的技术设计文件。
经常发生的情况是,随着你对项目的深入研究,你开始发现有更多的东西是你没有考虑到的。于是,你卷起袖子,把目光投向了事物的底部。你决定在接下来的几个小时里进行研究,并试图把所有的事情都解决掉。
十个小时过去了,实际上什么也没做,你堆积了比以前更多的工作。
如果这对你来说听起来很熟悉,并不是你一个人这样。
这种情况发生在每个人身上--而且发生在我们最好的人身上。我相信,我们从小就被灌输了一个条件,那就是要做出完美或完整的作品。
我们生活在一个充满约束的世界里,我们所做的每一个重要决定都是有代价的。
这里的关键是认识到我们并不了解一切。你可能没有意识到,但你所做的大多数决定背后都有无数的选择。
例如,作为一个计算机科学专业的学生,大学毕业后的第一份工作应该怎么做?除了为创业公司或大型科技公司工作外,你还可以在海外做自由职业者、开一个Youtube频道、在 Udemy上教计算机科学、开一个博客,或者开自己的公司。选择的清单是无限的,你今天做出的决定将基于几个关键标准。
你最终会做出一个对你来说最好的决定,而不一定是客观上最好的,因为每个人都是独特的,没有一刀切的情况。
在这种情况下,我们能做的最好的事情是收集尽可能多的信息,承认我们不知道的东西的风险,并从中做出最佳决定。
失败的概率
我思考的方式是,我为最坏的情况分配一个概率,并将其用于我的决策过程。这是我从一本叫作 Ray Dalio的《原则》的书中学到的,这是一本我强烈推荐的好书。
如果发生可怕错误的概率在统计学上是显著的:
寻找一个更好的解决方案
找到减轻风险的方法,使其不再具有统计学意义
当做出决定,我就执行它,然后继续前进。
对于我遇到的每一个问题,我都是如此重复。我在解决这些问题的过程中找到了乐趣,在某些方面,生活的乐趣在于解决不同程度和复杂性的问题。
决策框架
坚持下去
功能变更是一个自然想到的反例。
你一直想要添加更多功能,因为你觉得当前的功能看起来像是从90年代的万维网下载的。你觉得它还没有准备好。你认为没有人愿意使用你的产品。
然而,请注意,所有这些事情都是在你自己的脑子里进行的。这些都没有得到验证。 你不知道人们想要什么,直到你把东西放在他们手中。
你的目标应该是在项目开始时设定一个固定的目标,无论如何都要努力实现它。
其好处有两方面:
这可以减少功能变更,并迫使你专注于。关于这一点,很多书都有记载,我不会用具体的细节来烦扰你。无论你在什么位置,保持注意力聚焦是至关重要的。
我们人类喜欢即时的满足感。 如果你能在两周内发布一些东西,那就去做吧!提前计划你的项目在2周内应该能够实现的目标,然后把它交到你的用户手中!这是非常令人满意的。这是一种非常令人满意的感觉,即使它真的惨遭失败,至少你坚持了你的目标,你现在已经收集了有价值的反馈来进行迭代。
这使我想到了我的下一个观点。
尽早收集反馈意见
我个人认为,我们应该始终以尽早发布、经常发布为目标,并尽快收集反馈。
当然,我承认这主要是对软件项目来说是可能的。但请听我说。
经常发布和尽早发布可以让你尽早收集反馈。拥有一个健康的反馈循环是一个非常重要的,甚至是最重要的,你的项目的方面。
产品的反馈
你应该在产品开发的早期就纳入一个反馈,这样你就知道你是在为正确的人开发正确的产品,有正确的约束。
同样重要的是要注意,提前发布并不意味着发布一个坏的产品。一个破损的产品对任何人都没有用,这是对用户的不尊重。
你应该想出并提供一个最小可行的产品(MVP),这意味着你的产品应该以最低的方式来满足需求。
有一点需要注意的是,收集反馈并不意味着需要从每个用户那里获得反馈。
考虑对你的用户进行细分。获取一小部分用户,最好是来自不同背景的用户(而不仅仅是朋友和家人)。让你的产品在他们手中,这样,如果你搞砸了,至少你的其他用户还没有意识到,你就有时间来解决这个问题。
先自己探索再寻求帮助
很多年轻的工程师倾向于提出问题,而不试图自己去寻找答案。当他们遇到以前没有遇到过的事情时,他们的第一直觉是问高级工程师是怎么做的,如何完成某件事。
在问别人之前,自己先找答案,对你有很大的好处。原因有两个方面:
深入探索使你能够探索你以前可能从未探索过的领域。它让你有机会接触并熟悉不同的代码库。
当你升到一个更高的位置时,人们会依赖你的指导。随着时间的推移,你将成为小组中的高级人员。人们向你寻求帮助,无论如何你以后都需要学习这种技能。
许多开发人员开玩笑说,他们的大部分时间都花在 Google 和 StackOverflow上。我完全同意这一点,但不是因为你可能认为的原因。
为模棱两可的问题寻找答案的能力是一种非常令人羡慕的技能。随着时间的推移,互联网已经发展成为一个容易获取的信息宝库,你可以在任何时间、任何地点、任何设备上使用。
然而,提出正确问题的能力要比回答问题的能力更难获得。
随着你的职业生涯的发展,你会开始意识到,弄清正确的问题将是你需要学习的技能,如果你真的掌握了它,它将为你带来奇迹。
简化
在你的工作和生活中努力追求简单。
很多时候,我看到初级开发人员在一个编码项目上工作,他们会使用抽象、继承、接口和一些非常有趣的框架。然而,尽管有这些花哨的东西,他们却在写新的代码,增加了不必要的复杂性。
维护这些代码的人在大多数情况下不会是写代码的人。任何额外增加的复杂性都会使新的工程师更难加入。
当你成为一名成熟的软件工程师时,你会意识到写代码不仅仅是性能优化的问题,也是为人优化的问题。写出别人可以轻松推理的代码也同样重要。
这就是代码可读性和代码组织发挥作用的地方。
除非性能是一个真正的问题,否则总是选择更简单、更干净的方法。
我相信简单性也会延伸到工作以外的生活。保持你的生活不受干扰。减少你生活中不必要的物品的数量。专注于对你重要的事情。优化你的生活,以获得经验而不是财产。这些是你在生活中要牢记的一些事情。
我读过的书和我喜欢的资源
Principles by Ray Dalio — ? 这是我一段时间以来读到的最好的书之一。作者谈到了我们在生活和工作中都可以应用的原则。我把他的解决问题的框架纳入我的日常生活中。
How to win friends and influence people — 关于建立和管理人际关系的经典书籍?这本书帮助我了解了如何在工作场所管理自己的关系。
The Senior Software Engineer — ? 这本书很好,有关于如何成熟为一名软件工程师的行动项目。我就是在这里学会了先自己探索再问别人。
Crucial Conversations — 关于如何在高风险情况下与人打交道的好书。非常适用于生活的不同方面。无论是为获得更高的薪酬进行谈判,还是解决与配偶的沟通问题,这本书都有一些解决这些问题的好建议。
Lean Startup — 这是一本关于如何在进一步投资之前使用最小可得产品(MVP)来测试一个想法的好书。我过去曾用它来测试几个创业的想法。
Purple Cow —? 很喜欢这本书。我主要用它来测试我心中的不同创业想法。它谈到了如何推销你的创业公司,以及如何使它从其他公司中脱颖而出。
Evernote — 这是我用过的最好的记事应用程序。我曾经使用过。强烈推荐它!
Moleskin notebook — 我真的很喜欢这个人。它的质量非常高。价格略高,但由于我每天都在使用它,我认为这是一项很好的投资。每天拿着一本漂亮的笔记本,让我更有动力去写更多的笔记。
Pilot G2 (Black) — 这是我使用过的最好的笔,也是我唯一会使用的笔。我从亚马逊大量购买这些笔,走到哪里都带着它们。我的背包里有一支,办公室里有一支,我的家庭办公室里也有一支,这样我身边总是有一支笔。它写得很好,墨水流动顺畅,我喜欢用它写字的感觉。再加上Moleskin,有时我只想拿起G2在上面随意写写画画,因为这两样东西在一起是如此完美。
关注我在 Twitter, Facebook, 和 LinkedIn。加入 我的邮件列表, 我定期发送技巧、窍门和行业知识。
如果你喜欢这篇文章,请在下面评论:你对软件工程师的第一大建议是什么?