两年微软工作经验,我学到了这 5 件事
21小时前
神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。
编者按: 从走出校园的那一刻,无论我们走进什么行业,我们都能在自己的职业生涯中获得一定的经验和教训,这些对我们来说都是宝贵的财富。这篇文章,原标题是5 Things I Learned After Two Years as a Software Engineer at Microsoft,作者Ojasvin Sood在文中分享了自己在微软印度公司工作两年后的五条经验教训,希望对你有所启发。
作为一名软件工程师,我已经在微软印度公司工作了快两年时间了。自然地,我该反思一下,过去两年来我到底学到了什么。
从印度理工学院古瓦哈提分校(Indian Institute Of Technology Guwahati)毕业之后,我就直接加入了微软公司,这也是我第一次进入这个行业。两年下来,我成长了很多,也获得了很多新的经历,积攒了不少有用的经验。
通过这篇文章,我希望回顾并总结自己这两年的反思,分享我自己所学到的5件关键的事情。
1. 研究,研究,还是研究
今天的一般事实都是昨天研究的结果。
——邓肯·麦克唐纳(Duncan MacDonald)
谈及研究,我主要指的是两方面事情。
其一,通过研究找出问题的根本原因。
我很早就意识到,人们很容易养成一种不好的习惯,不去探究问题背后的种种细节,或者不去发现问题背后的真正原因。
如果你不知道导致某个问题的确切原因,当你几乎解决这个问题时,它几乎总是会反咬你一口。 这句话里面的“几乎”是一个非常重要的词。
其二,通过研究找到解决手头问题的最有效方法。
值得注意的是,我们必须明白,我们的目的并不只是想解决问题。同等重要的是,我们必须以最有效的方式解决问题。这就是优秀的工作与普通工作的区别。
要想出类拔萃,就需要花些时间去学习和了解这种心态,而不仅仅是完成工作。能认识到这一点,你就能获得很大的进步。
每个人都知道,无论是什么情况下,做背景研究或相关功课都是非常重要的,但问题在于,我们很难彻底完成,尤其是当你正在解决多个问题而不是单个问题时。
当你脑子里有很多事情时,你就很容易选择妥协,不会去深究所有事情背后的问题,或可能会直接忘记某些事情。因此,我们一定要时刻谨记这个问题。
彻底的背景研究,不仅可以帮助我们有效地看待问题、找到最佳的解决方案,还可以能让我们始终保持大局观全局观认识。
总之,最重要的是,我们获得报酬,不是为了快速解决问题,而是为了准确而完整地解决问题。这就需要研究,研究,以及不断的研究。
2. 墨菲定律,你也应该知道!
根据墨菲定律:
任何可能出错的事情都会出错。
两年的工作经验,我对这条定律有了深刻的认识理解。这的确就是事实!在所有的项目中,我一次又一次地发现,情况总是如此。而不知道这条定律的人,一定会经历惨痛错误过后才会理解。
因此,我们必须首先将一个大的解决方案拆分成非常小的独立部分。
随后,在这些独立部分上投入足够的时间,确保自己已经检查了可能存在的所有异常或错误。
同时,还要了解这些部分整合在一起过后又会怎么样,在这一交互过程中又会出现什么异常或错误。
总之,关键就是要有远见。
然而,当你提升你的远见时,你会做什么呢?你创建了许多制衡机制,来事先发现这些异常或错误问题。
许多后期可能会出现的问题,实际上可以在早期通过所谓的单元、集成和性能测试来解决。就技术方面而言,我所学到的关键之一,就是要编写具有适当测试覆盖率的代码,这也是我进入这一行业才学到的。
这不仅对我有帮助,而且对将来会接手我的工作并进一步拓展的整个团队也有帮助。
为了捕捉我们测试中遗漏的问题,我们还有一个被称为预推出环境的基本框架。设立这一框架的目的,是去模拟事物在真实环境中的运行情况,也就是推出环境,并确保代码段在预推出环境中能运行一段时间。
即使经过这些流程之后,事情仍然可能出错。
这个时候,最重要的事情,就是要从这些问题中汲取教训,也不必因此而自责。更重要的是,不要让这些错误再次发生。
3. 一切都好解决。但问题是,先解决什么?
在这个行业工作,我还认识到,我们总是有太多问题要解决,但问题在于,时间是有限的。
因此,团队或个人的成功关键,就在于恰当的优先级划分和精准的评估。由于我们不是独立解决所有问题,我意识到所有的问题最终都可以解决,但重点在于衡量问题所需的时间以及其重要性。
为了了解问题的重要性,我们会给一项任务标注优先级,具体而言,就是一个表示其重要性的数字。除此之外,我们还会标注另一个数字,表示我们估计解决问题所需的时间天数。
事实上,这两个数据都非常重要。一方面,在大多数情况下,利益相关者并不只有一个,而是多个。因此,它有助于建立全面的沟通。
另一方面,这些数据还可以帮助你在有限的时间内,以最优方式安排自己的工作。
这就是我们对这个重要问题的回答,即首先要解决什么问题?
4. 事故管理,让你实现大幅进步
事故是指,使用产品或服务的客户遇到的突发性中断问题。
事故管理,实际上强调的是一个过程,具体包括写日志、记录和尽快解决事故,以恢复正常的业务流程或服务。
当我在大学时,我总是想象,我未来的工作就是通过编写代码来解决手头的问题,这也就是一个创造过程。但在过去的两年里,我意识到,减少产品导致的事故,也是我工作中一个非常重要的部分。
为了管理这些事故,我们的团队成员会轮流负责整个产品。因此,当事故发生时,它可能与我之前创造的内容毫无关系。
那么,我从这些事故中学会了什么呢?
过去发生的此类事故让我意识到,了解其他人在做什么也非常重要。
这不仅让我养成了在创造过程之初就了解解决方案并发现问题的习惯,而且还从这些解决方案中获取灵感,并在我自己的解决方案中重复使用其中的关键部分。
这些事故会对我们的客户或利益相关者造成重大干扰,因此,快速解决这些问题,往往是当务之急。
通过这些事故,我们认识到了解事情重要细节的重要性。这样,你就会深入理解问题。
对事故优先级的认定,还可以促进快速思考,并教会你快速提出简洁、可靠的解决方案来扫除客户的障碍。
通常,在解决此类事故的同时,我们还会面临更大的问题。相对的,这也有助于我们了解以下这两个问题:
我们的产品中还缺少什么?
未来我们应该解决哪些问题?
5. 总是假设别人的意图是好的
无论任何人说什么或做什么,都要假设他的意图是好的。你会惊奇地发现,自己对待一个人或一个问题的整体方法变得非常不同。当你假设他人的意图是不好的,你就会生气。如果你抛掉愤怒,凡事从好的角度去思考假设,你会看到巨大的不同。
——百事公司前执行长英德拉·努伊(Indra Nooyi)
团队协作非常重要,它也能体现出个人工作的重要性。
只有在一个专业的环境中,我才了解到,一群具有独特优势和经验的人在处理和最终解决一个问题过程中所扮演的角色。
当你试图找到解决问题的方法时,一个新的视角也总是有帮助的。
因此,面对挑战,顺畅的团队协作非常重要。
在微软工作期间,团队协作并不仅仅意味着跟办公室里的同事合作,还包括与来自不同大洲和时区的人合作。
那么,我们该如何提高团队协作能力呢,尤其是当你与素未谋面的人合作时?你既不认识这个人,也不知道他所面临的挑战。
值得一提的是,由于新冠疫情暴发所构成的大流行病,我们团队的每个成员都不得不在家工作,这也是千载难逢的场景。在此期间,我们的团队规模大幅增长,许多同事都是以远程的方式加入了我们的组织。
在这些情况下,我学到的最重要的事情,就是无论什么情况下,处理事情的最佳方法是,始终假设别人的意图是好的,并始终对他们身边出现的问题保持警觉。
在这些时候,表现出耐心和信心,有助于建立良好的团队精神和积极的企业文化。随着时间的推移,这也有助于提高团队的工作成效。
写在最后
在我看来,软件工程的核心就是解决问题。掌握和理解技术细节相对容易,而更困难的是,在面对问题时,如何保持正确态度,提出正确观点和有效解决方案。
我这篇文章的目的,是希望能强调很多我们一直都知道、但却一次又一次忽略的事情。是否能够把这些观点牢记于心,是区别专业和新手的核心所在。过去的两年间,我就实现了这种转变。
译者:俊一
本文来自翻译, 如若转载请注明出处。