作为一名高级工程师是什么样子的?

2020-08-26 13:25:13

当我刚从大学毕业开始在微软工作时,编程就是我的生活。编写代码是构建我的大脑所能想象到的任何很酷的东西的最简单的方法。当我想着我的余生想要做什么的时候,我想我只是想继续编码。

在接下来的11年里,我成为了微软的一名高级工程师,然后转到谷歌工作,后来又在斯利普工作。在这些更高的级别上,我仍然可以进行构建,但是我使用了一套非常不同的工具来完成这项工作。当你从三年级到四年级时,需要一个巨大的心态转变。编写代码成为这项工作的次要部分。

有没有造过没人用过的工具?我有过。太差劲了。在高级级别,您的大部分时间都花在确定需要构建什么以及如何构建上。你必须研究一下问题是什么样子的。你与其他人交谈,让每个人就需要做的事情达成一致。

刚走出大学校门的你会得到一些任务,而正确的答案是相当简单的。除了代码评审中的偶尔反馈之外,在做什么方面没有太多分歧。

随着你经验的增加,你的问题就会变得更加模棱两可。这条路看起来很朦胧。你可以选择多种路线,但每条路线都藏着自己的龙。这不再是编码的问题了。你的大部分工作都是用来做研究的,你不能在谷歌上搜索答案。

研究可以采取多种形式。它通常涉及阅读代码、阅读文档和与人交谈的组合。是的,是真人。事实上,那里是您需要的大部分信息被锁定的地方。你见过夏洛克·福尔摩斯用搜索引擎吗?

通常没有一个人知道你需要的答案。五个不同的人可能会拿着你正在组装的拼图的五个不同的部分。你不知道那五个人是谁。他们不知道你需要哪一件。

你必须找到他们。找到他们,问正确的问题来筛选他们的大脑,发现你需要的金块。

在Google Cloud Platform,客户在遇到问题时通常会联系技术解决方案工程师寻求帮助。这些TSE挖掘问题并解决了它们。

我的经理有了一个想法:“如果我们可以使用人工智能来自动化这个过程,那不是很棒吗?”我们完全不知道该怎么做。甚至不知道这是否可能。见鬼,我们甚至不确定客户寻求帮助的是哪种类型的问题。但这就是我的经理提出的挑战。

现在,任何针对这类问题的人工智能解决方案都需要大量数据。人工智能需要看到许多破碎的环境才能了解它们的样子。当我四处搜索时,我意识到我们没有这些数据,这些数据都被锁在那些TSE的大脑里。你不能用这个训练人工智能。

谢霆锋:“这要看情况。根据问题,我们将查询一个或另一个数据库。然后我们就会找到别的地方,我们继续挖掘,直到找到问题所在。那我们就把它修好。“。

没有关于他们解决了什么问题的可靠数据。没有可重复的方法来修复它们。我已经准备好放弃了。

如果我改变了问题呢?也许我不需要马上解决那些客户问题。如果我帮助TSE更快地调试问题,会怎么样?我可以自动运行他们可能运行的数百个查询,并建议“嘿,这个结果可疑。也许可以在那里挖得更深一些?“。这是TSE可以避免的大量调试工作。

我甚至可以将其扩展到收集实际人工智能系统所需的数据。这是有潜力的!谢霆锋夫妇都很兴奋。我的团队很兴奋。我的经理很兴奋。我们开始编写代码。

对于模棱两可的问题,再也没有唯一正确的答案了。可能没有任何答案。你所拥有的是一个痛点。这可能是你的客户的痛苦,你的团队的痛苦,甚至是你自己的痛苦。这种痛苦的存在就是问题所在。你的工作就是在不引入更大痛苦的情况下消除这种痛苦。

模棱两可的问题有一个有趣的地方:他们没有明确的正确答案。每种解决方案都有一定的好处,也有一定的缺点。你发现的东西越多,你就越能更好地平衡你必须做出的权衡。需要考虑的一些常见权衡:

对于这些模棱两可的问题,有时最好的答案可能是“继续做我们一直在做的事情”。这是一个很难学到的教训。

当我还是个小家伙的时候,我大学毕业四年,有人要求我想出一种方法来降低数据库升级的风险。该团队将手动检查所有计划中的更改,以确保它们是安全的,但偶尔会出现错误,寻呼机响起的声音会充斥整个房间,因为每个人都在疯狂地试图修复它。

“我们能造出一种工具来捕捉这些危险的变化吗?”我的经理问我。哇,这是一个超级开放式的问题。甜!。我下定决心不让他失望。这需要深入研究数据库升级最佳实践(我甚至从头到尾阅读了整本书)。我整个寒假都在辛勤工作,开发一款可以安全升级的原型机。而且成功了!算是吧。

当我向我的经理展示我的创意时,他很担心:“你知道吗,让我们坚持我们现在的做法。”

这是关于风险管理的艰难一课,但他做出了正确的决定。我的工具中的一个漏洞可能会使我们的整个服务瘫痪。不值得冒这个险。

失败也没关系。如果你从来没有失败过,那么你就不是在伸展你自己。

要获得反馈,沟通是至关重要的。在你构建之前告诉人们你要构建什么,并让他们在你踏入陷阱之前警告你任何陷阱。如果我在建造它之前与我的经理分享了这个设计,我们就会在几周前取消这个项目。我会有一个轻松的寒假。

但是,收集反馈需要一项软技能:移情。你能理解人们为什么不同意你的观点吗?他们对什么有不同的评价?

你可能并不总是同意反馈,但你必须理解它。只有这样,你才能带着每个人都能落后的新愿景前进。

随着你的项目变得越来越大,获得反馈并就计划达成一致变得更加重要。

你可能一开始只需要让你的经理同意(他就是那个给你那个模棱两可的任务的人)。但是,您需要与团队其他成员建立共识,甚至需要与团队外的与您的工作有利害关系的人达成共识。

有一次,我的任务是创建我们的下一代内部数据库管理系统。这是许多团队所依赖的,我们当前的解决方案将在一两年后停止扩展。我的团队有七个不同的人,他们对系统应该是什么样子有八种不同的意见。包括我的经理和跳跃级别。好的。

第一步是与他们所有人交谈,真正了解他们的关切和优先事项。但我还想听到另一个声音:我们的客户!这是一个给其他工程团队的系统,我怎么能在不了解他们的问题的情况下为他们建立一个解决方案呢?甚至需要一些挖掘才能弄清楚这些用户是谁。这需要另一种软技能:找到你需要交谈的人的艺术。

最后,我和他们一起进了一个房间。在那里,他们抛出了重磅炸弹:“我们真的不能证明迁移到任何新系统的工作是合理的。目前的情况对我们来说已经足够好了,我们有更紧迫的问题需要解决。“。我和三个不同的团队交谈,每次都得到相同的答案。该死,如果没有人使用,构建解决方案还有什么意义呢?

迁移势在必行,很快,当前的系统将不再符合我们的可靠性标准。有几条前进的路线:

政治:让我的管理层说服他们的管理层迫使团队迁移。讨厌。

说服:教那些团队为什么几年内不会感觉到的痛苦比他们今天面临的痛苦更需要解决。这是一件很难证明的事情,我们必须向很多很多球队证明这一点。这不是很好的伸缩性。

还有第三个选项:更改约束。如果我对要求我添加的某些功能说“不”会怎么样?除去这一点,我可以用一种我们可以自动迁移所有客户的方式来设计系统。他们将不需要做任何工作就可以迁移。我们会把引擎换成还在高速公路上疾驰的汽车。

这个更可口。通过强调我们用户的反击,我说服了其他利益相关者也改变这些限制。

这是你在高层工作的任何项目的一般流程:你研究问题,收集碎片,更好地理解世界。您可以设计解决方案,收集反馈,并根据需要调整课程。然后开始实施。

那么,你是如何学习所有这些技能的呢?经验。跳出鸟巢,拍打你的翅膀。如果有机会出现,就抓住它。你不会觉得准备好了,没有人会这样做,但这就是让它成为一种学习经历的原因。

寻求帮助。听听你得到的答案。继续试。在项目结束时,征求反馈意见,并利用它来更快地改进。你只有通过练习才能学会这些技能。

这是一个高层的新世界。你还会继续建造。但是有了新的工具,你会比以前建造得更大更好。