在脸书和ins做软件工程师4年,我学会了这4件事

全文共3353字,预计学习时长9分钟

图源:unsplash

2016年9月6日,我进入Facebook开始做软件工程师。如今已经过去四年了,借此机会,我想回顾并分享我在过去收获的最重要的经验。我还有很多东西需要学习,但我希望这次的分享可以为你提供一些的参考。

首先澄清一下,我写这篇文章不是因为我打算离职,而是想通过写作内省,这是我消化吸收自己的知识和成长经验的最佳方式。这里充斥着来自不同背景的最优秀的人才,能和他们共事,我感到十分荣幸。

最开始,我加入了门罗公园的Messenger团队。六个月后,我们的团队解散了。我调到纽约,加入Instagram搜索开发团队并担任iOS工程师。我选择纽约是考虑到行业的多样性(你遇到的人不都是科技行业的)、美丽的四季和充满活力的城市生活(旧金山和门罗公园所没有的)。

我在Instagram工作了3年半,致力于探索、开发、搜索、位置页面、标签页、位置/标签/贴纸故事、保存、收藏、关键字搜索、完整性和隐私性,以及最近负责的购物板块。

下面是我在Facebook和Instagram的4年中学到的4件最重要的事。

杀死你的心血

我从斯蒂芬·金的写作回忆录中发现了这句话:杀死你的心血,杀死你的心血,即使这么做伤了你这个以自我为中心的小涂鸦者的心,也要杀死你的心血。

它描述了将情感从写作中分离出来的过程,即以减法代替加法的艺术。

作为一个在快节奏环境中工作的软件工程师,你构建的功能,不管耗费了多少时间和人力,或者在计划过程中看起来多么有前景,它总是有可能在完成之前被杀死、在完成后却没有发布,或者在发布后被下架。

为客户创建成功产品的最佳方法是尽可能快地迭代,并从测试和数据中学习。Thrash就是这种产品开发方法自然产生的积极副产品。

在职业生涯的早期,我对自己所的构建的功能感到非常自豪,但还没有学会将结果从过程中分离出来。你做好每件事,打造出完美产品,但却发现你的客户不太喜欢它,或者根据公司优先级要与其它不可协商的指标进行权衡。

可以为自己构建的产品感到自豪,但是要把情感和自身从产品中分离出来。对结果的情绪化反应,反映出不成熟和做决定时的不理性。如果没有从项目中学到任何经验,或者没有获得对产品和用户有价值的见解,那么失败的项目就只是失败。

关注问题,而不是解决方案。杀死你的心血,不要让你的自负妨碍了团队/公司。把结果从过程中分离出来,把情感从经验教训中分离出来。

奥卡姆剃刀/先做简单的事情

图源:unsplash

从工程的角度来看,奥卡姆剃刀的理念是:“最简单的解决方案通常是正确的解决方案”。我不断在实践中发现这条原则多么重要。当提出的架构或解决方案中存在极其复杂的问题时,我总是想退后一步,重新评估我们真正试图解决/构建的内容,并思考是否有更简单的方法可以实现相同的目标。有时你会意识到:

· 你要解决的问题实际上不是真正的问题。

· 复杂的解决方案与解决根源问题相比,实际上需要更多的时间。

· 如果将解决方案的范围缩小到仅此问题,构建的内容可能会更加简单。

· 复杂性实际上是不必要的依赖关系,应将其分别封装和分离。

我在工作中大量使用的编程范例是:单独的正确源文件、不变性、单向数据流,单一责任等级和封装。它们都遵循相同的原则,即通过减少变量和依赖性来简化事情。

世上没有完美的架构,但是我发现如果架构的所有层都遵守这一原则,那么构建的系统就会变得更加坚固、易于理解、可扩展/可删除。重构(Refactoring)是我一直以来最喜欢的编程书,它教会了我许多这样的概念。

从产品的角度来看,Instagram的核心价值观中,“先做简单的事情”一直是我最能与之产生共鸣的。与主要的Facebook应用程序相比,我喜欢Instagram应用程序中的简单性,没有臃肿的功能。我相信这也是Instagram产品理念的这一核心特征带来的结果。

在我看来,Instagram成功地以减法代替加法在其中扮演了非常积极的角色。它通过不断下架不相关的功能来简化用户体验和代码库,简洁使你走得更快。

被低估的软技能

编码技能是一名优秀软件工程师的基础。据我观察,最好的软件工程师往往同时拥有编码技能和非常强大的软技能。

工程不仅仅是建造东西,还需要知道什么是正确的,并说服其他人。特别是在Facebook,工程师们被期望在项目的引领和推动中起重要作用。

你不仅要和不同团队的其他工程师一起工作,还要与设计师、内容、产品、研究、管理、其他团队的人员等一起工作。通常情况下,对构建内容进行协调比实际构建更具挑战性。你需要用软技能来确保你所构建的东西能够真正地成功发行。

当提出一个想法并希望获得认同时,我认为最好的工程师会快速地将一个原型组合起来,并将其交到其他人的手中去试用。推销想法应该是“做起来容易说起来难”而不是“说起来容易做起来难”。上手试用比看到一个模型和听解说的吸引效果至少强烈10倍,黑客马拉松(Hackathons)是锻炼上述能力的好方法。

当你想发布一个功能时,你不仅需要构建它,还需要说服一屋子的利益相关者和团队成员,为什么你的功能在发布时还需要用户体验的叙述、强大的数据支持和领导层的支持。

软技能也不仅仅是口头交流。我相信写作技能是生活中最被低估的技能,它要求我们能够简洁、清晰地抓住要点,并在被问到问题之前写下笔记/文件来回答问题。写作是一项关键技能,在这个交流越来越异步而非实时的世界里更是如此。

(极端)所有权

在我们的团队/组织中,有一个名为“DRI”的宣言——“直接负责的个人”。这样做的目的是让工程师从计划到启动,对一个项目拥有完整的端到端所有权。目标是赋予个人权力、建立责任感、减少依赖。

我们避免依赖管理员来告诉团队该做什么并增加对团队的依赖,而是自我组织并指出下一步该做什么。一个成功的DRI会让管理者在分配完项目所有权后发现自己不再被需要。

图源:unsplash

我的一位管理员曾向我介绍过乔科·威林的《极端所有权》(Extreme Ownership)一书。这本书很好地阐述了这一理念,并帮助我在工作和工作之外获得了极大的发展。一个关键的概念:发生在你身上的事情并不总是你的错,但是你的全部责任。

· 有人犯错导致了一个程序漏洞,这不是我的错,但我有责任思考——我如何更好地构建我的组件,从而在一开始就不可能导致这个错误?我可以通过什么样的预警或测试来尽早捕获回归?

· 我的这个项目由于x、y、z而失败,这并不是我的错,但我的责任是尽我所能提前发现它们,从而解决或阻止它。

· 一个队友努力了却没能达到预期的水平,这不是我的错。但比起因为项目的失败而责怪他们,我还可以思考如何创造一个更激励人的环境,或者为他们减少阻碍,等等。他们的失败即是我的失败。

· 团队的优先项与我职业发展的优先项不一致不是我的错,但我有责任向上管理和明确沟通,以确保我的职业发展和团队需求得到满足。

· 我的生活方式如此,这不全是我的错,但让它变成我想要的方式全是我的责任。

对你的代码库,你的项目,你的事业,你的正念和你的关系采取极端的所有权,你和你周围的每个人都会变得更容易。

任职Facebook期间,对我来说最重要的一条经验是:最有价值的事情不在于你做了什么,而是你让别人能够做什么,这是提升你的能力、扩大你的影响和控制力的最佳方法。这些经验不仅对我的职业生涯有所帮助,而且对工作以外的生活也产生了巨大影响。

我无法通过几个要点来涵盖我过去四年所学到的所有知识,但是我想简洁明了地提出自己的建议。我还有很多要学习的和要成长的地方,但我希望这些个人经验能对你有所帮助。

留言点赞关注

我们一起分享AI学习与发展的干货

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

上一篇 2020年9月10日
下一篇 2020年9月10日

相关推荐