无意中看到一篇文章《21 Lessons From 14 Years at Google》,作者是Addy Osmani,分享了他在Google工作十四年以来在技术、团队管理和职场发展方面的种种收获。虽然我目前已不在技术一线工作,但看完仍然深受触动。
Addy Osmani,现任Chrome Cloud AI方向的高级工程总监,一位IT技术领域的知名人物。早期刚加入Google时,主要负责Chrome浏览器的前端开发和性能优化,后来转向云与生成式AI团队,致力于帮助企业和开发者利用Gemini、Vertex AI 等技术,探索 AI 辅助编程的未来趋势。
下面是他这篇文章的中译内容,我根据自己的理解对中译内容做了适量调整和润色,分享给大家。
原文链接:https://addyosmani.com/blog/21-lessons/
1、最好的工程师总是痴迷于解决用户问题。
对工程师来说,沉迷于一项技术并找到机会实践,这件事无疑充满了诱惑。但如何能够创造最大的价值,却需要工程师逆向思考:深度思考用户反馈的问题,解决方案会从你的思考过程中自然浮现。
如何理解深度思考用户反馈的问题?简单来说就是泡在支持工单里,观察用户遇到的问题并与用户沟通,不断追问到底。
真正理解业务和问题的工程师最终会明白,优雅的方案往往以最简洁的方式出现。但如果先定方案再寻找问题,问题的复杂性往往呈指数级增长,就像拿着锤子四处找钉子。
2、“证明自己是对的”很容易,但达成共识才是最难的,也是最终目的。
唯技术论很容易分出高下,但在具体项目里技术的优先级往往靠后。如果做项目都要争论技术的正确性,那争论的负面影响会在项目落地过程中不断出现,具体表现如“执行层面莫名其妙出问题”,以及“团队成员莫名其妙的对抗”。
在做具体的项目时,核心不在于争论“对不对”,而是带着问题进行讨论并达成最终一致,给别人留出冗余空间的同时,也要时刻对自己“绝对正确”的观点保持怀疑。
时刻谨记,在不确定性下做出的决定,不应该与自己的岗位和Title绑定。
3、快速构建、快速发布,总好过追求完美。
你可以开发一个糟糕的页面,但不能交付一个空白的页面,追求完美最终会让人瘫痪。
工程师很容易陷入“唯技术论”的陷阱,比如争论一个还未构建出的完美架构或者方案。事实的真相是,完美的方案大多来自于落地实践,而非凭空想象。
比较好的方式是先做出来,再做正确,最后不断做得更好。
比如写出凌乱的设计文档初稿,发布略显简陋和让你感到尴尬的MVP版本。你从一周时间里落地实践反馈中学到的东西,比一个月时间的纯理论讨论多得多,行动远胜于讨论。
4、逻辑清晰明了的代码和注释,才能证明你是一名资深的工程师。
很多工程师会标榜自己要写出“优雅”的代码,因为从某方面来说这样可以证明自己的能力。
但从软件工程的角度出发,项目落地需要其他工程师参与协作,且真正运行起来仍需要一段时间。在实际工作中,逻辑清晰的代码和明确的注释,比所谓“优雅”更重要。
软件工程的核心在于风险可控,你要明白你的代码相当于一份备忘录,如果出现问题且你不在线时,需要其他接手的人可以一眼看懂。
5、频繁的技术创新是一种技术负债。
虽然项目开始时都会做技术选型,但技术选型时不宜引入太多的新技术/新工具。每引入一项明显非标准的技术,都是一种潜在的风险。
并非是杜绝“创新”,而是当新技术/新工具有明显优势和独特回报的时再引入。除了必须要引入新技术的部分,其他部分默认选择过往成熟的方案即可,因为成熟的方案意味着风险已知且可控。
新技术不代表最合适,合适的技术/工具往往具有普适性,在大多数项目和场景里都适配,这样运维成本也会低很多。
6、你的代码不会为你代言,但在同事和上级印象里的你会为你代言。
努力工作认真干活很多时候并不意味着你会获得真正的收益,再好的代码也只是躺在仓库里,能决定你是否参与重大项目的权利,在你的上级手中。
所谓“小事开大会,大事开小会,重要的事不开会”,大公司里的很多决策发生在没邀请你的会议里,谁来做怎么做往往取决于会议纪要,以及参会的少数人。如果你不在场,没人知道你的技术能力和影响力。
所谓的职场影响力,就是让你的能力和价值对所有人可读可见,包括你自己。
7、最好的工程代码,一定符合“奥卡姆剃刀原则”。
奥卡姆剃刀原则说:如无必要,勿增实体。
在软件工程文化里,我们常常为“创新”喝彩,至于由“创新”所引入的新代码可能潜藏的风险,却无人在意。
逻辑上来说,不定时的优化(删减)代码,会比新增代码能让系统变得更健壮,但几乎没有人是因为对系统进行了工程级别的优化(删减)代码而升值。
8、在大规模复杂场景中,任何问题都会有人碰到。
我们都知道,当一个系统的用户和场景足够多且复杂时,会出现各种预期之外的问题,且这些问题都会被人碰到。
从工程师的整个职业生涯角度,可以得到这样一个洞察:兼容性并非仅是“后期维护”的边角料工作,而是产品本身的一部分。如果某个设计被废弃,要将它当成一次功能迁移来处理,给予足够的时间和工具支持,以及同理心。
9、效率低的本质,是团队层面的协作没有对齐。
当项目出现延期的可能,很多人的本能是责怪执行层,比如不够努力、技术选型不对,或者投入的研发资源不够多。这些都是借口,而非问题的根源。
在大型组织里,团队是高效执行的最小并发单元(可以理解为一个线程)。但如果团队数量增加,则协调成本也会成几何级数的增长。大多数情况下低效的原因有两点:1-做错了事;2-没协调好。
很多资深工程师的工作日常,大多数时间精力并非用在写代码,而是沟通协调(方案、接口文档和优先级排期)。
10、专注于你能控制的,忽略那些你无法控制的。
企业的规模越大,对个人来说不可控的因素就越多。比如市场波动、管理层决策、公司方向转变、组织结构调整。
对个人而言,可以忽略上述几种因素,把注意力集中于自己能影响到的范围。比如高效响应、持续学习,以及写出高质量的代码。
面对不确定性,最好的方法不是被动接受,而是对问题进行拆解,找到自己可以采取的具体行动。
11、抽象设计并不会移除问题本身的复杂性,只是将复杂性向后推迟。
每一次抽象设计都像是一场赌博,赌你或者团队其他人不需要理解表象背后的逻辑和底层的东西。但当问题出现时,你(和你的团队成员)必须知道面临的具体问题是什么。
通往资深工程师的道路并不仅仅是丰富自己的技术栈,同时还需要持续学习更底层的知识,比如操作系统、通信协议、各种算法。这样做的好处是当抽象设计推迟的问题出现时,你可以使用你掌握的知识来解决它。
12、写作可以强迫你理清思路,最快的学习办法是教中学,事上练。
有经验的工程师应该都有类似的体验:当你尝试对别人解释一个概念或者为什么如何设计时,最好的方式是将它们写出来,比如设计文档、演讲PPT,甚至Code Review的评论。
编写的过程中,你会发现自己之前遗漏的部分,同时你的思路也会越发清晰完善。在技术领域内,这种方法是大体成立的,教中学、事上练是一种利己且利他的学习成长捷径。
如果你能用通俗易懂的方式将一个概念或技术讲清楚,那说明你大概率真的掌握了。如果你卡壳了,那说明卡壳的地方正好是你理解不到位的地方。
13、为其他工作创造环境和可能性的工作是无价的,但它们通常被人忽视。
编写文档、流程改进、团队协调甚至是搭建测试环境,对项目成败的影响至关重要。但如果你一直做这些“粘合剂”似的工作,那只会让你的技术成长停滞,并疲于奔命。
比较好的解决办法是,让这些“粘合剂”工作流程化、标准化、自动化,即从抽象变成具体可量化产出的事情,比如文档、模版、CICD流水线。
背后默默付出却没有可量化的产出,是职业生涯最危险的现象。
14、如果每次讨论都以你胜利告终,那你大概率在积累无声的抵抗。
简单来说,如果工作中每次讨论都以你的观点为主,通常说明这里存在问题:没有异议,就意味着其他人放弃了与你当面争执,异议会表现在具体的执行层面。
听取他人意见,吸纳团队反馈,站在他人的视角看待思考问题,和而不同才能拿到长期的更有价值的成果。
15、一旦度量成为工作目标,那它就不再是度量本身。
人类天生会为可以被度量的东西做各种看似有效的改进和优化,比如代码行数,比如千行代码bug率。
度量只是辅助决策的一种工具,但绝不能成为目标和决策本身。一旦有人对度量指标进行优化,那得到的就是不断内卷和为了指标优化而做的各种表面工作。
度量的目的是为了洞察是否存在问题,而非监控人或者事。
16、承认自己的无知,比假装知道更能让你内心踏实。
承认自己的无知,本质是在传递一个信号:你也可以承认自己不知道。
如果假装自己什么都知道,带来的影响就是人人假装都是懂王,没人提出问题,没人针对问题进行质疑,其他人都选择沉默,问题被掩盖,直至被引爆无法收场。
17、人脉往往比所谓的一份工作更长久。
在职场不能只埋头工作,还要学会在公司内外持续经营关系,这样你可以更早知道一些机会,比如被推荐到更好的岗位,甚至和具有多年信任的同事一起创业。
18、很多时候系统性能的提升来自于做减法,而非做加法。
当系统响应变慢时,很多工程师的下意识选择是做加法,比如加缓存、串行改并行,或者加入更好的算法。这些做法有时候确实存在明显的效果,但本质上问题并没有被解决,只是被推迟了。
更好的方法是:做加法/减法之前先问问自己,问题到底是什么?这样做是否真的有必要?优化的目标是否真的需要优化?
19、流程是为了减少不可控因素,而非单纯的纸面记录。
好的流程可以提高协作效率,降低出故障带来的影响。不好的流程则是用来甩锅和定责任。
如果你说不清流程是怎样提高效率或者降低风险的,那这个流程大概率是个面子工程(比如很多公司做CMMI认证,产出一堆文档和记录,认证完资料锁柜子了,然后一切照旧)。
20、时间比金钱更重要。
大多数人生涯早期为了生存,都会选择用工龄换钱,早起这样做确实没问题。
但长期来说,你要意识到时间是不可再生资源,特别是在职场的黄金年龄阶段,特别是当你解决生存问题以后。
从整个职业生涯的角度来说,拓展视野、提升认知、锻炼能力、经营人脉,比追求升职加薪重要的多。你要明白自己在用什么来交换什么,并有意识的去交换你要的东西。
21、人生没有捷径,成长依靠复利。
任何专业能力的提升,都来自于日复一日的刻意练习。
今天比昨天做的更好,在挑战区不断练习,定期复盘,重复这个循环。
刻意练习会不断给你带来全新的选择,而不仅仅是知识。比如练习写作,不要追求阅读点赞,而是为了梳理思路;比如养成复盘总结的习惯,以此得到经验和最佳实践路径。
借用巴菲特的长坡厚雪理论:职业生涯规划就是找到足够长的坡和足够厚的雪,剩下的就是往前走。
最后总结
以上二十一条总结看似很多,归根结底用几个词就可以概括:保持好奇心,持续积累能力,构建自己的人脉圈子,养成刻意练习和复盘总结的习惯,并持之以恒。
不要担心犯错,人生的容错率很大,即使你犯了很多错误,最后也可以走得很好。
声明:来自老张的求知思考世界,仅代表创作者观点。链接:https://eyangzhen.com/7412.html