写给新毕业的软件工程师

写给新毕业的软件工程师

这是您毕业后的第一天工作。

您穿过办公室入口向接待员打招呼,暗中松了一口气。有人高兴地向您打招呼,然后跟着他们到您的办公桌前,新团队中的每个人看起来都全神贯注于工作。您可以放心,这是您一直期待的机会。

接下来的几天变得模糊不清,伴随着您可能会忘记的内容密集的入职演讲,以及与公司各个团队所无法比拟的更多同事的咖啡聊天。您最终会适应常规,与您的团队每两周进行一次冲刺,建立新功能,与您的团队成员进行一对一互动,等等。

最终,您开始自问:我实际上如何在这项工作上取得成功?

作为一名新的研究生工程师,刚开始我会喜欢的是一份具体的清单,列出了我本可以专注于提高工作效率和发展速度的不太明显的方面。考虑一下您最喜欢的RPG中的辅助任务,完成这些辅助任务后,您会获得经验,金币,也许还有特殊物品。

在这篇文章中,我概述了一些想法,作为我可能会给自己年轻的自我的建议。

第1课:了解端到端服务架构

在最初的几周内,您可能会承担构建新功能和修复一些错误的任务。很有可能,这项工作将仅限于一项或两项服务。此外,您可能会不知所措,需要收集大量信息以正确开始为团队做出贡献。

我认为,您可以获得的最有价值的学习内容之一就是所有现有服务的强大心理模型。在总体依赖性图中学习每个人的高水平操作,以及彼此之间如何交谈。了解每项服务背后的理念和他们要达到的目标。然后,在遇到使用服务的机会时,更深入地研究实现细节。像埃隆·马斯克(Elon Musk)运用知识所做的那样有助于思考。

如果您在小型创业公司工作,这样做会容易得多。服务的规模和复杂性通常与团队规模密切相关。如果您在Big Tech工作,请对您的工程部门或部门执行此操作,并将范围限制为您的代码将影响的直接面向客户的产品。

出于多种原因,这很重要。

  • 它有助于将您的工作最终将如何影响最终用户。
  • 它增进了您对产品工作原理的理解。
  • 这对于进行高层架构讨论很重要。
  • 这将使您能够推动多个团队之间的变化。
  • 方便的是,工程团队通常围绕服务边界来组织,因此这可能是一个很好的助记符,可以帮助您了解各种服务。当然,可能很难内部化,但是具有方框图和连接箭头的确有帮助。在每晚入睡之前,请一位高级工程师为您绘制一个并凝视它。

    过去一年来,我一直对此感到遗憾。我应该在入职过程中立即完成此操作,但由于当时没有必要,我将其取消了。认识到知识会随着时间的流逝而复合,并且拥有一个完整的服务体系的强大思维模型对于更好地了解工程组织的工作方式至关重要。

    我为过去的成长深表歉意。

    第2课:了解您的技术基础知识

    正如大学所教的那样,您只需要了解如何从空中稀薄地编写代码和构造神奇的数据结构和算法,就可以轻松完成工作。实际上,这主要是公司在软件采访中测试的内容。但是,构建系统所涉及的不仅仅是编写代码。考虑一下运行生产级代码所需的时间。

    这是我最想知道的清单。 日志记录,机密,度量标准,容器,服务器,数据库,负载均衡器,队列,服务间通信,持续集成,部署等。

    不幸的是,其中大多数都是您在大学中永远不会学到的东西,至少如果您修读了传统的美国计算机科学课程。没关系。您将迅速掌握工作中的必要技能,并立即学会使用这些新颖,功能强大的工具。

    但是,我认为,不仅仅是“从略读示例中了解如何使用工具X”,而是“通过阅读在线文档,博客文章和代码来了解工具X或语言Y的内部结构”,这是非常有价值的。

    例如,知道如何使用gRPC有很大的不同-“哦,这让我们可以在不同的服务中调用类型化的函数吗?太酷了!”,并且奇怪的是基础实现利用HTTP / 2并维护客户端和服务器之间的持久连接。根据经验,我花了一些时间阅读有关gRPC内部的文档和博客文章,这使我能够做出更好的体系结构决策并快速调试系统中的故障模式。此外,由于通常很少有人这样做,因此您将成为公司技术堆栈中特定领域的专家。人们最终会带着礼物来找你,以换取你的圣贤建议。

    这可以概括为您的工程组织使用的各种技术。当然,在学习上投入太多时间会减少收益。您仍然有一份日常工作,倾向于创造业务价值。我经常使用的一项出色的石蕊试纸,就是了解我能够向他人解释一项技术的优点和缺点的程度。您应该渴望能够走到一位随机工程师的位置,并开始进行长达5分钟的对话。

    现在,继续阅读贵公司的日志记录基础结构。

    第3课:快速行动并改善事物

    您可能已经听说了硅谷现在著名的 价“ 快速移动并打破事物 ”。长话短说,尽管想要编写代码和发布大量功能的所有被压抑的毕业后兴奋,您都不想体现这种精神。尽管“突破性的事情”可能是夸张的-除非Zuck确实希望Facebook的工程师来打破事情-但这确实灌输了一种心态,即只要您快速行动,就可以发布突破性的变更。

    我更喜欢“快速移动并改善事物”一词。这里的潜台词是,系统首先已经可以运行,即没有任何问题,以便您可以改进它们。我认为,作为经过6英尺高采访栏的工程师,我们已经期待着快速行动和正确做事。

    另一方面,使事情变得更好是更多的后天技能。首先,您必须注意到某些东西丢失了;根据我的经验,这只能伴随您的经验。原谅diacope。其次,您需要主动与其他工程师沟通这一差距,或者分配资源(时间,精力)来自己解决问题。第三,也是最后,需要向关心它们的人宣布这一变化。因为嘿,如果一棵树落在森林中 ……您便明白了。改进工作并非难事,特别是如果这些问题与您的冲刺目标无关。但是,其他所有人将感谢您使他们的生活更轻松。

    在过去的一年中,我已经做了足够的工作,以至于我脑海中浮现出一个低挂,高投资回 改进的想法。请仔细阅读:

  • 开发人员工具(linting,第三方程序包版本)
  • 监控(指标,警 ,日志记录)
  • 接口重构(提高代码的可读性和可维护性)
  • 我想帮助我管理这样一个列表的一个技巧是维护待办事项的积压工作(使用优先级队列),您可以在阻塞主冲刺工作时从中进行选择。我会在这里放置非紧急的生活质量改进和错误修复。当然,项目工作会优先进行这些所谓的“改进”。

    同样,标题为“完成并让事情变得聪明”的博客文章过于冗长,使就寝时间变得更好。

    第4课:了解流程是必不可少的

    我们在这里不讨论进程的操作系统概念。正如字典中所引用的那样,过程是“为了达到特定目的而采取的一系列行动或步骤。”从概念上讲,它是抽象的,直到我开始全职工作时,我才对其进行完全内部化。

    我不是流程的忠实拥护者,当我刚开始工作时,他们对流程更不屑一顾。他们讨厌官僚主义-或一整天穿着西装的人都会这样做-并且与诸如快速移动和快速迭代之类的工程价值相对立。实际上,令我感到高兴的是,我坚信与我共事的每个人都对流程抱有类似的鄙视。

    但是,我已经意识到,流程对于确保长期业务价值非常重要。它们不仅确保可以完成并改进一组通常完成的任务,还可以最大程度地减少大型团队在执行这些任务时的差异。流程可确保执行的一致性,这是必需的,因为与软件不同,人员在移动经常出错的零件。

    的确,它们将摩擦和复杂性引入到完成更具体的事情中,但是我已经意识到,流程是必不可少的复杂性。实际上,流程是随着组织的成长将组织结构整合在一起的要素。如果一个由50人组成的团队中的每个工程师都使用游击战术来发布功能,但是每个人都喜欢,那么请想象一下会发生的混乱情况。

    流程可以采用多种形式,包括以下内容。

  • 为大型项目编写技术规范。
  • 记录系统的未知部分。
  • 对所有生产问题进行验尸。
  • 发送消息以将任何重要更改传达给系统。
  • 精明的读者可能会注意到所有这些方面的共同点:他们涉及将有关某事的信息传达给团队中的其他人。不过,这里有一线希望,那就是沟通过度从来都不是坏事。除非您正在使用机密信息进行秘密项目工作,否则不交流总是比交流更糟糕。

    第五课:写更多文献资料

    具体来说,您作为工程师的工作是解决业务问题并为公司创造价值。这种实现主要涉及编写代码和交付功能,但是通常还有更重要的任务。正如前面所暗示的,其中之一就是编写文档。

    文档可能采用多种形式:代码注释,提交消息,电子邮件,谷歌文档,Wiki条目,自述文件等。格式取决于使用信息的环境。例如,电子邮件是一种广泛的,永久的,可搜索的文档格式,应用于非紧急内容,例如重要的公告或进行长期的异步对话。

    这是文档提供的两个不太明显但至关重要的目的。

  • 它们减少了您团队的公交车因素。
  • 它们充当了不可避免的时态背景的永久档案。
  • 您编写的文档越多,则越好,更快。不可避免地,技术写作是整个职业生涯中不可或缺的一项宝贵技能,没有比现在更好的开始时间了。它是信息传播最可扩展的方法之一(与语音和即时消息等更短暂的方法相比),并且随着组织的发展而变得越来越重要。现在,您想改善事物吗?去写一些文档,然后发送给您的团队。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2019年11月14日
    下一篇 2019年11月14日

    相关推荐