本书英文版《The Effective Engineer》 出版时间是 2015 年,中文版出版时间是 2022 年的 7 月 1 号,是一本很新的书。用 Effective 命名的图书大多都是经典之作,个人成长类的像是《The Effective Executive》、《The 7 Habits of Highly Effective People》,编程类的像《Effective C++》、《Effective Objective-C 2.0》,本书也不例外。
作者 Edmond Lau 早期在 Google 担任搜索质量软件工程师,后作为 Quora 的初创成员之一,领导工程团队致力于用户增长,并为新入职软件工程师制定入职培训和指导计划。他热衷于帮助工程团队建立强大的文化,这本书是他关于如何成为卓有成效的工程师的职业感悟和个人总结。
本书主题是如何成为卓有成效的工程师,即作为工程师如何提供工程效率。对于工程效率给出了一个杠杆率的概念:
杠杆率 = 产出的影响 / 投入的时间
高效的工作方式应该是致力于做高杠杆率的事情。全书主要分为三个部分,第一部分是从制定目标说起,我们应该如何更好的设定目标。第二部分为如何优化我们执行的方法,第三部分是把时间维度拉长,去投资哪些长期价值高的事情。
杠杆率还可以用时间的投资回报率(ROI)来类比,追求高杠杆率时,通过公式我们可以得知高杠杆率的事情应该是:
所以增加工作时间并不符合高杠杆率的目标。当我们感觉可以通过增加时间来完成某件事情是正确的做法时是忽略了时间是有限资源,在这里投入了更多时间意味着我们会在其他事情上可利用的时间被占用了。
除此之外还有一个方式是停止手头的内容,转向杠杆率更高的事情。这三种方式可以引申出三个问题用来评估我们正在进行的工作:
本书的核心思想就是围绕这几个点展开的
在调整优先级之前,我们应该先有一个地方能够看到我们当前在做的事情有哪些,这需要一个任务清单去管理我们所做的事情。
有了任务清单我们还需要一个工具帮助记录时间的使用,它可以帮我们衡量自己在事情安排和时间使用上有哪些不足。番茄工作法一个非常好的尝试,它可以把时间有序的划分成不同的块,这种有起始和结束时间的区间更利于我们意识到时间的存在。比价高效的是一天会有 10-14 个番茄时钟用于处理重要的事情。
当任务列表被填充内容过多时我们应该警惕是否忽略了优先级问题。调整优先级不是一件容易的工作,和大多数技能一样,它需要不断实践。对于什么事更有价值的事情,有两个方面可以考虑:关注直接创造价值的工作,以及关注重要但不紧急的工作。
同时为了保持工作的高效,有几个方法可以用于借鉴:
在经济学里有复利的概念,一旦利息被加到存款本金中,就会在未来产生复利,复利又会带来更多的利息。
从以上两条对比的复利曲线可以看出,复利是一条指数增长曲线,前期看着会比较慢,但后面的增长速度是非常快的。复利开始的越早,就会越早进入高速增长区。即使利率差比较小,经过漫长的时间之后收益也会产生巨大的差异。
学习和理财一样,前面的学习会为后面的学习打基础,越早对学习方式进行优化,产生的复利效果就会越明显。与之相反,如果我们把时间花在缺乏挑战的工作上时,不是保持原地踏步那么简单,同时我们还在浪费着时间。Palantir 公司的联合创始人斯蒂芬科恩在斯坦福大学的一次客座演讲时强调,「当公司为一份轻松的、毫无挑战的、朝九晚五的工作向你支付薪水时,他们实际上是在付钱让你接受更低的智力增长率。等你认知到智力投资会产生福利效应时,已经为错失长期复利付出巨大的代价。他们没有让你获得一生中最好的机会,而是得到另一件可怕的东西:安于现状。」
投资时间到学习上是最容易产生复利效果的一件事情,我们可以采取这些方式:
关于第三点,如何寻求一个利于学习的工作环境,有这六个因素可以考虑:
这几点因公司和团队而异,不同职业时期各个因素的重要性也会发生变化,但不论怎样,在工作中我们还可以充分利用工作中的资源以提高学习效果:
这里可以补充一些我在抖音的工作感受,这里是一个完全符合「利于学习的工作环境」的地方。抖音在研发效能的多个方向上还处于探索期,有很多想法可以尝试。这给我提供了很大的自由空间,我可以选择自己感兴趣的方向去尝试,可以最大限度的自主设计这些功能,并能得到多方资源的支持。
字节整体的培训是很完善的,内部也叫 Bootcamp,时间跨度为 6个月,大的主题有工程师文化讲解,小的有各个技术专题的内部分享。分享教程从初阶到高阶,有完整的知识图谱进行对照。抖音内部每周还会有一个技术分享,邀请其他部门优秀的同学,或者内部人员分享。同时其他部门也有类似分享,在这里只要想学,可以搜索到无数的资料。
字节最不缺的应该就是聪明、有才华的人了。和这些优秀的人一起工作,本身就是一件幸福的事。
再说回工作节奏,整体工作节奏略高,一般会有一个长线任务和手头维护任务。工作内容的验证周期很短,不会因为繁琐的流程导致拖延。个人权限比较大,你基本可以看部门内部任意一个代码仓库。
附一个招聘信息😁:抖音iOS基础技术-研发效能岗位,详情点击:抖音 iOS 基础技术 - 研发效能方向内推
Twitter 平台工程前副总裁 Raffi Krikorian 会不断提醒团队:如果某个任务必须手动做两次以上,那么第三次就去编写一个工具。工具是一个倍增器,它使我们能超越工作时间的限制,扩大自己的影响力。
日常工作中,像是本文编辑器、IDE 和浏览器这些高频使用的工具,代码导航、代码搜索、格式化等这些高频的编程习惯,哪怕花费一个小时去记住一个快捷键或者设计一个自动化功能去提高这方面的效率,长久来看都是非常有价值的。
扩展到团队层面,优化 DevOps 流程、优化编译速度、优化调试流程都是在致力于拓展团队的效率。而且这些事情越早处理收益越明显。
有一些行之有效的建议可以采纳:
关于自动化工作流程,我在日常工作中有这些尝试:
在调试一个程序时会频繁的查看它的产物内容,因为这个功能是嵌到另一个项目中的,所以它的层级目录很深,每次误关闭 Finder 都需要点击多次才能找到目的位置。这可以利用 Alfred 的 Default Results 功能,为这个目录配置一个替身,当我要打开该目录时直接搜索替身名即可。
类似的还有通过路径打开 Finder 对应位置,直接运行一段脚本,通过快捷键用Xcode/VSCode/PyCharm打开指定文件或文件夹等等。
当原本需要三个或更多步骤才能完成的事情缩短为一个步骤时,这边便捷感会让我们的工作流程更流畅,更聚焦,这种行为是高效能的直接体现。
Peter Drucker 在《The Effective Executive》中指出「如果你不能衡量它,你就无法改变它」。
以谷歌搜索为例,输入一个查询,可能对应的结果就有数十亿条,算法会计算出将近200个指标,然后返回前十条结果。那么如何衡量给出的这十条结果对用户来说是最优的呢?谷歌给出的衡量是用户愉悦感,让用户最舒服的结果就是最好的,衡量愉悦感是用「长点击」测量的,就是当一个人点击了一个搜索结果,没有立即范围搜索页,就表明用户对搜索结果是满意的。好的度量指标能推动我们不断优化工作结果。
有时因为系统复杂性的原因,很难通过单一指标去衡量它的运行状况,这时可以引入监控系统,从多个方面衡量起健康和稳定。
与此同时,还需要确保你的数据是可靠的,「数据都正确」比没有数据更糟糕。特别是数据指标建设早期,我们应该多方便去衡量数据指标的正确性,比如广泛记录日志以备用,尽早检查采集到的数据,通过多种方式计算同一指标,交叉验证数据准确性,尽早分析有问题的数据,以找到指标变动的原因。
工作成果需要借助于度量来改进,同时我们的工作效率也是可以引入度量系统的。有时数据层面反应的问题,会比事情本身更有价值。
我最近发现了一个宝藏 App:Session,它同时满足了我任务记录、反思、度量这几个需求。我通过查看自己过去半个月的记录情况发现,我最高效的一天是完成 7 个番茄时钟;遇到最多的问题是任务规划不合理导致很多任务超时和中途被打断;第二周的番茄数量相比第一周有所下降。这里完整反应了我对时间的使用情况,并且可以根据这些数据做出针对性调整。
在做项目,尤其是大型项目时,花费一小部分精力用来搜集数据,验证目标可行性是非常值得的投入。它们可能会增加我们10%的开销,但也有可能提前暴露问题,节省 90% 的精力。这是一种通过搜集尽可能多的信息来预见结果的提前反馈机制。现代项目基本都会引入 DevOps 流程,这也是一种为了加快验证代码效果以建立反馈循环的机制。
除了项目整体,作为个人在项目开发过程中也需要尝试建立我们与外部的反馈循环。即使你更喜欢独立工作,如果能把工作概念化为团队活动,并建立反馈循环,你就会更有成效。
通常我们会遇到这种场景,在实际工作中我们必须独立完成一个项目,它减少了外部沟通成本的成本但却增加了反馈阻力。如果这期间遇到某个实现被卡主,会很让人沮丧。我们可以尝试这些策略用于建立一个反馈循环:
「这个功能大概多久能做完?」这是每个程序员会经常面临的问题,针对估算,Steve McConnell 甚至写了一本书《软件估算的艺术》。一个好的估算能够对项目的实际情况提供足够清晰的视角,使项目负责人能够就如何控制项目以达到目标做出正确的决定,而一个差的估算,会让自己陷入紧张的情绪和无休止的加班,甚至会引起依赖业务方的连环 Delay。
准确的估算是很难做出的,但我们可以采用一些策略让估算尽可能地贴近真实值:
在项目开始之前我们还应该为意外留出一些预算(Buffer),因为除了工作我们还会有 bug 修复、面试、团队会议、回复邮件等等。一天有 8 小时用于工作,并不表示我们可以用这 8 个小时完全去做这个项目。
除此之外我们还可以设定一些具体的项目目标和可度量的里程碑。明确我们到底要解决什么,有助于我们确定哪些工作在范围之内,哪些在范围之外。很多时候我们在开发一个功能时会发现一块代码需要重构,且这块重构会不知不觉导致我们投入很多时间。这时关键目标就可以帮助我们确认,这个重构是否值得。
当我们被问及某个项目的进度时我们通常会说完成了 50%、90%。这个估算是很主观很模糊的。一种比较好的方式是为目标建立一些里程碑,作为项目进展的检查点,中间阶段应该是完成了某个功能、达到了什么效果、对指标优化了多少等等。
但项目在进行到某个阶段之后,我们可能意识到已经出现了 Delay 风险,这时大部分人考虑的是加班。对待加班一定要慎重,因为增加工作时长并不意味着一定能赶上发布日期。亨利福特在 1922 年制定了每周 40 小时的工作制度,因为多年的实验表明,这可以提高工人的总产出。低于这个时间或者高于这个时间,都会导致产出降低。加班冲刺还很容易产生大量技术债,这些技术债很可能会成为我们以后得麻烦。
尽管加班有种种弊端,可能经过深思熟虑之后,我们确定可以通过一小段时间的加班赶上最终的进度。在开始之前,需要告知每个人都了解进度落后的原因,并制定更切实可行的项目计划和时间表,如果某个阶段发现还是会延误,那么就修改原定任务或者放弃冲刺吧。
软件质量可以通过严格的 CodeReview、单测、代码覆盖率、自动化检测流程保证,但这些繁琐的流程会导致项目不够敏捷,过于敏捷又不利于控制代码质量。所以软件质量是一个需要权衡的问题,回到杠杆率上,我们应该去关注长期价值,我们追求的是什么。在衡量这两者时,有这些方法可以尝试:
招聘应该是工作中非常重要的一件事情,所以设计一个有效的面试流程是一件高杠杆率的事情。为团队添加一名实力强劲的工程师所带来的额外产出,远远超过你可以做的其他许多投资的产出。
为招聘投资可以从两方面考虑,一个清楚需要招聘什么样的人才,不断迭代优化面试流程。一个是设计一套高质量的入职培训,让新员工更快速的融入公司。
招聘流程优化:
Quora 的入职流程:
另有两点能够体现团队价值的事情:
好的工程师文化能够吸引优秀的人才,不好的工程师文化会导致优秀的工程师离开。关于什么是卓越的工程师文化,它们具有这些特点:
我们既可以寻找这种工程师文化的团队,也可以自己把团队往这个方向塑造。
本文发布于:2024-02-04 18:47:06,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170714014758504.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |