11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

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

  • 2022-06-28
  • 本文字数:2455 字

    阅读完需:约 8 分钟

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

编译 | 辛晓亮


谷歌浏览器的一位高级工程经理,分享了他在谷歌工作十年时间里学到的一些软技能,下文为部分经验摘录。 

批判性思考并提出合理的论点

 

批判性思维是使用认知技能独立思考以做出深思熟虑的决定的能力。投资于这项技能,以提高你的思路清晰。

 

作为工程师,我们有时会急于立即解决问题,因此感觉就像我们正在取得进展,或者看起来我们正在对利益相关者做出响应。如果我们没有充分考虑原因和后果,这可能会带来风险。换句话说,批判性思维是有目的地思考并形成自己的结论。这种以目标为导向的思维可以帮助你专注于根本原因问题,从而避免未来因不牢记原因和后果而出现的问题。

熟练掌握“可转移”技能

 

可转移的技能指的是可以从一个项目带到另一个项目的技能。

 

基本原理是任何软件工程工作的基础。它们有两个层面——宏观和微观。宏观层是软件工程的核心,微观层是实现(例如技术栈、库、框架等)。

 

在宏观层面上,你学习的编程概念在很大程度上是可以转移的,不管是什么语言,语法可能有所不同,但核心思想仍然是相同的。这包括:数据结构(数组、对象、模块、哈希)、算法(搜索、排序)、架构(设计模式、状态管理)甚至性能优化(例如缓存、延迟加载等)。这些都是你经常使用的概念,对它们进行逆向了解会有很大的价值。

 

在微观层面上,您需要学习这些概念的实现。这可能包括:你使用的语言(JavaScript、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/

在维护项目中学习

 

在处理旧系统中的遗留代码时,任何高级工程师都应该尽量理解留下的代码和舍弃的代码之间的区别。软件行业已经到了一个阶段,许多项目都在处理旧的或遗留系统的维护和迁移问题。部分软件工程师对修改生产中的代码持谨慎态度,因为他们担心会引入一个错误。但不要假设现有代码是完全可靠的,随着时间的迁移,节省时间的做法可能会成为维护的噩梦。

设计文档的重要性

 

设计文档不应该是事后的想法,而应该是软件工程过程中的一个组成部分。

 

设计文档可以帮助你从同行或者对接团队中获得共识,来自他人的反馈能使你找出差距并改善设计。设计文档还能帮助未来新加入团队的工程师更好的理解当前系统。

拒绝的力量

 

说“不”比过度承诺更好。在涉及更多工作的情况下,我们大多数人都不善于说“不”。一方面是大家没有意识到“不”是一种选择,一方面是我们喜欢这种挑战。然而,过度承诺是一种责任,而且可能会造成项目延误。让对方知道你已经在做什么,并提供一个合理的估计(需要多长时间)是一种尊重的表现。

技术债务

 

Titus Winters 将技术债务定义为“我们今天拥有的代码和系统与我们希望拥有的代码和系统之间的差异”,某些类型的债务比其他类型的影响更大。有些债务可能是由于没有及早发现的错误(疏忽),有些是由于事后了解到的情况,有些是由于技术系统环境的变化(背景)。

 

坚持优先处理技术债务有时是很难的,因为你不可能总是量化那些没有表现出来的错误或没有发生的故障。如何防止债务积累?除了构建新功能外,技术主管还应定期在 Sprint 周期中投入时间进行清理和偿还债务。审稿人应该意识到推动短期速度实际上可能会导致进一步的问题。经理和主管应该注意批准与现有项目重叠的新项目,除非你确定权衡是值得的(例如,解决现有系统的债务与建立新的东西相比不值得)。最后,监控项目的健康状况非常重要。

工作与生活的平衡

 

过度工作并不是良好职业道德的一部分,你永远不可能比世界上的每个人都更努力。许多公司将过度劳累的员工作为“标准”,错误地认为这是良好的职业道德。成功来自许多因素,不仅仅是过度劳累。

 

时间管理上,优化自己的日历,留出时间,专注于深度工作。深度工作是无干扰、高度集中的工作,可以在短时间内创造大量价值。同时,一个人的时间是有限的,与其试图寻求更多的时间,不如消除不必要的任务。

 

最后,你的健康和家庭至关重要,它会促进整体幸福感,精疲力竭也会影响到你的工作,也会使你的团队精疲力尽。保持良好的工作和生活平衡对于各个级别的工程师来说都至关重要。

 

原文链接:

https://addyosmani.com/blog/software-engineering-soft-parts

2022-06-28 15:3916022

评论 4 条评论

发布
用户头像
需求为导向,让专业工具更通用化一些。
2022-10-03 13:20 · 北京
回复
用户头像
大环境还不允许WLB
2022-08-04 04:13
回复
用户头像
工作与生活的平衡点,感觉越来越难掌握了,特别是在家办公这几年。
2022-07-02 23:43
回复
用户头像
其实就是一个工作手册,肤质疑你我,耗费精力放在哪里!
2022-07-02 10:23
回复
没有更多了
发现更多内容

第一个 Go 程序

escray

学习 极客时间 Go 语言 4月日更 Go100

ES9的新特性:异步遍历Async iteration

程序那些事

JavaScript ecmascript 程序那些事 es9

算法突击营毕业总结

韩儿

Windows 下 搭建 Flutter 环境

U+2647

flutter 4月日更

面试官:Java中线程是按什么顺序执行的?

华为云开发者联盟

Java 线程 执行顺序 多线程并发

智慧公安重点人员管控系统搭建,实现重点人员动态管控

13828808769

智慧公安

GaussDB(for openGauss)让数据“存得下、算得快、算得准”

华为云开发者联盟

GaussDB(for openGauss) 华为云数据库 数据分布方式 计算下推 数据强一致

Spring Boot 启动时,让方法自动执行的 4 种方法!

Java小咖秀

springboot 启动方式

ConcurrentHashMap源码深度解析(二)(java8)直呼Doug Lea是真的细(带你参透扩容机制)

徐同学呀

ConcurrentHashMap Java源码 JUC

【LeetCode】打家劫舍 II Java题解

Albert

算法 LeetCode 4月日更

python 实现类属性的懒加载装饰器

一代咩神

Python 懒加载 类属性 描述器

ConcurrentHashMap 源码深度解析(java7)原来如此简单(写的真好,建议收藏)

徐同学呀

ConcurrentHashMap Java源码 JUC

区块链食品安全追溯系统,区块链溯源优势

13530558032

区块链特色农产品溯源平台解决方案

13828808769

溯源 #区块链#

修电脑、脱发、格子衫?程序员拒绝标签化,这才是真正的他们

华为云开发者联盟

程序员 女朋友 标签 格子衫 单身狗

聪明人的训练(十五)

Changing Lin

4月日更

VueRouter源码解读:三大核心模块构成

梁龙先森

源码分析 大前端 vue-router

他人方寸间,山海几千重

清秋

随笔 4月日更 1 周年盛典 我和写作平台的故事

一直做着行业最“新”的尝试:NA(Nirvana)Chain受邀出席共为·创新大会并办展

区块链第一资讯

ConcurrentHashMap源码深度解析(一)(java8)不可不知的基本概念(助你拿下源码事半功倍)

徐同学呀

ConcurrentHashMap Java源码 JUC

TcaplusDB君3月17日的行业新闻汇编

数据人er

数据库 nosql 技术 TcaplusDB

被应用商店下架的应用,该如何下载?

彭宏豪95

效率 App 苹果 4月日更

数据库存取策略对比

小舰

4月日更

初识GaussDB(for Cassandra)

华为云开发者联盟

数据安全 GaussDB 华为云数据库 GaussDB(for Cassandra) 分布式云数据库

超详细 PowerDesigner 入门教学(项目数据库设计标准)

若尘

数据库 数据库设计

Linux pwd 命令

一个大红包

Linux linux命令 4月日更

openLooKeng V1.2.0 发布

openLooKeng

大数据 数据 Bigdata

智慧平安社区整体解决方案,智慧安防小区建设

13530558032

Python OpenCV 图像处理之直方图的应用,取经之旅第 26 天

梦想橡皮擦

Python OpenCV 4月日更

一加9pro联名哈苏了!这可能是你能买的平替哈苏

Geek_4a453c

直播 | 如何使用Ranger增强权限管理?

openLooKeng

大数据 数据分析 数据 Bigdata

谷歌工作十年,我总结了这些工程师必备软技能_语言 & 开发_Addy Osmani_InfoQ精选文章