InfoQ 重磅内容产品《中国卓越技术团队访谈录》上新啦! 了解详情
写点什么

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

  • 2022 年 6 月 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 年 6 月 28 日 15:3915409

评论 3 条评论

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

手把手带你玩转LiteOS Ping组件

华为云开发者联盟

协议 LiteOS ping 组件 数据包

令人不悦的–requests.exceptions.ProxyError

老表

Python Error 11月日更 ProxyError

短视频个性化Push工程精进之路

百度Geek说

后端 软件架构

月薪3万的大厂测试工程师裸辞3个月,送外卖谋生背后的真实感悟

六十七点五

程序员 程序人生 软件测试 软件自动化测试 测试工程师

企业如何选择合适的低代码平台?这6点不得不考虑!

J2PaaS低代码平台

低代码 低代码开发 低代码平台 企业数字化

Apache APISIX 社区周报 | 2021 11.1-11.14

Apache APISIX 中国社区

云原生 API网关 社区周报 Apache APISIX

一文详细分析公式树开源库

华为云开发者联盟

算法 数据 公式树 变异

千万级学生管理系统的考试试卷存储方案

Steven

架构实战营

Scrum Master是什么?Scrum Master的职责是什么?和PM又有哪些区别?

PingCode

敏捷开发 PM Scrum Master

数据分片的原则和经验

编程宝库

系统架构 数据分片 编程宝库

软件架构治理 之 如何识别和定位架构问题

码猿外

微服务 架构设计 软件架构治理

混合云的概念以及优势劣势简单介绍-行云管家

行云管家

云计算 混合云 多云 云管平台

彻底搞懂Spring状态机原理,实现订单与物流解耦

Tom弹架构

Python代码阅读(第58篇):压缩列表

Felix

Python 编程 列表 阅读代码 Python初学者

uni-app技术分享| 10分钟实现一个简易uniapp视频通话

anyRTC开发者

uni-app 音视频 WebRTC 实时通信 视频通话

【高并发】通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程

冰河

Java 并发编程 多线程 高并发 异步编程

极光笔记丨关于数据大屏一比一还原设计稿这件事

极光JIGUANG

大前端 数据可视化

直播带货系统都有什么功能?如何搭建?

风行无疆

实战 | 超详细的Kafka集群操作

五分钟学大数据

11月日更

Vue项目优化打包——前端加分项

CRMEB

河南等保测评公司都有哪几家?都在哪里?

行云管家

网络安全 信息安全 数据安全 等级保护

CSS布局之display:flex(二)

Augus

CSS 11月日更

一招教你通过焱融 SaaS 数据服务平台+ELK 让日志帮你做决策

焱融科技

云计算 分布式 SaaS 公有云 文件存储

基于OneData的数据仓库方法论

大数据技术指南

11月日更

架构训练营模块七作业 - 设计消息队列存储消息数据的 MySQL 表

李焕之

前端服务框架调研:Next.js、Nuxt.js、Nest.js、Fastify

智联大前端

node.js Vue 服务端 React

软硬一体的算法实践,阿里云如何以算法实现场景 “再创新”?

阿里云视频云

阿里云 算法 视频超分 视频云 异构计算

在 Spring Boot 中使用搜索引擎 Elasticsearch

信码由缰

Spring Boot Elastic Search

研究综述 | AI -自动化机器学习

索信达控股

机器学习 自动化机器学习 机器学习算法

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