谷歌工作十年,我总结了这些工程师必备软技能


谷歌工作十年,我总结了这些工程师必备软技能

文章插图
 
编译 | 辛晓亮
 
谷歌浏览器的一位高级工程经理,分享了他在谷歌工作十年时间里学到的一些软技能,下文为部分经验摘录 。
批判性思考并提出合理的论点 
批判性思维是使用认知技能独立思考以做出深思熟虑的决定的能力 。投资于这项技能,以提高你的思路清晰 。
 
作为工程师,我们有时会急于立即解决问题,因此感觉就像我们正在取得进展,或者看起来我们正在对利益相关者做出响应 。如果我们没有充分考虑原因和后果,这可能会带来风险 。换句话说,批判性思维是有目的地思考并形成自己的结论 。这种以目标为导向的思维可以帮助你专注于根本原因问题,从而避免未来因不牢记原因和后果而出现的问题 。
熟练掌握“可转移”技能 
可转移的技能指的是可以从一个项目带到另一个项目的技能 。
 
基本原理是任何软件工程工作的基础 。它们有两个层面——宏观和微观 。宏观层是软件工程的核心,微观层是实现(例如技术栈、库、框架等) 。
 
在宏观层面上,你学习的编程概念在很大程度上是可以转移的,不管是什么语言,语法可能有所不同,但核心思想仍然是相同的 。这包括:数据结构(数组、对象、模块、哈希)、算法(搜索、排序)、架构(设计模式、状态管理)甚至性能优化(例如缓存、延迟加载等) 。这些都是你经常使用的概念,对它们进行逆向了解会有很大的价值 。
 
在微观层面上,您需要学习这些概念的实现 。这可能包括:你使用的语言(JAVAScript、Python/ target=_blank class=infotextkey>Python、Ruby 等)、你使用的框架(如 React、Angular、Vue 等)、你使用的后端(如 Django、Rails 等)以及技术你使用的堆栈(例如 google App Engine、Google Cloud Platform 等) 。其中涉及的细节对于获得有效的专业知识可能很有价值,但并不总是可以转移的 。
专注于用户,其余的将随之而来
从用户体验开始,倒推你需要的技术
 
史蒂夫乔布斯曾经说过一句名言:“你必须从客户体验开始,然后再回到技术 。你不能从技术开始,然后试图弄清楚在哪里销售它” 。
【谷歌工作十年,我总结了这些工程师必备软技能】 
作为工程师,我们太容易从想要使用特定解决方案的地方开始--无论是由于流行、开发者经验还是个人偏好--并试图找到一种方法来合理地使用它们 。相反,我们应该专注于我们是为谁建立的,他们有什么问题,以及目前可用的选项是如何落空的 。
 
伟大的用户体验来自于两个观点的结合--客户和技术 。向人们展示你认为他们想要的东西,并注意他们所反馈的内容 。企业的成功取决于客户的满意度,而客户的满意度往往转化为软件的用户体验 。
打造技能的深度与广度 
我非常喜欢 T-Shaped 工程师的想法 。这些工程师在一项或少数几项技能方面是深度专家(T 的竖条),但他们对构建和运行产品所需的许多其他技能(横条)也都有基本了解 。有些团队喜欢通过一系列不同的专业来轮换团队成员,以建立更多的 T 型团队成员 。我还发现,在中等规模的团队中,拥有某个领域的专业技能和技能、多才多艺、善于合作的人,在必要时可以替代其他人,这是很有效的 。
通用代码与特定代码 
为手头的问题编写专门的代码,但要努力发现那些你可以负担得起的地方,使其成为一个小的通用的代码 。
 
通常情况下,我们试图把代码写得尽可能的通用,最终却使那些有效的代码不能帮助完成问题 。相反,专门为这个问题而构建,但试图发现可以让它变得更通用的地方,这完全消除了未来没有考虑到这一点导致不得不再次重构的情况 。
 
https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it
 
https://ronjeffries.com/xprog/articles/practices/pracsimplest/
在维护项目中学习 
在处理旧系统中的遗留代码时,任何高级工程师都应该尽量理解留下的代码和舍弃的代码之间的区别 。软件行业已经到了一个阶段,许多项目都在处理旧的或遗留系统的维护和迁移问题 。部分软件工程师对修改生产中的代码持谨慎态度,因为他们担心会引入一个错误 。但不要假设现有代码是完全可靠的,随着时间的迁移,节省时间的做法可能会成为维护的噩梦 。


推荐阅读