卓有成效的工程师
作者:碳水怪兽👾 发布于:2025/12/29
卓有成效的工程师
第一部分 树立正确的态度
聚焦高杠杆率工作
使用杠杆率衡量工作成效
以Quora刚创立时,工程师们在有很多其他工作的前提下还花费很多精力指导和培养新人为例,告诫我们要把精力投入到杠杆率更高的工作上面,杠杆率 = 产生的影响 / 投入的时间,即时间的投资回报率(ROI),将有限的时间投入到最有价值的工作上。
提升杠杆率的三种方式
- 减少完成每项工作所需要的时间
- 增加该工作的产出
- 转向杠杆率更高的工作
将精力投入杠杆点,而为易于完成的工作
不要将高杆杆率的工作和易于完成的工作混为一谈,许多高杠杆率的工作也需要持续很长的时间才能有较大的成效
精益求精,优化学习方式
培养成长型思维模式
思维模式决定了人们看待努力和失败的态度,采用固定型思维模式的人坚信“人的能力上先天注定的”,上后天无法改变的,而哪些采用成长型思维模式的人们相信,通过后天的努力可以培养、提升自己的智力和技能,他们起初可能会在某些领域缺乏能力,但是他们把挑战和失败视为学习的机会,因此,他们在通往成功的道路上不会轻言放弃。 作为工程师,我们所采取的思维模式极大地影响着自己上奋力学习并成长还是任由自己自身技能水平停滞不前。
提升学习效率
复利效应:一旦利息被加到存款的本金中,就会在未来产生复利,而复利又会带来更多的利息。 学习和理财一样,也会产生复利效应
- 知识为我们奠定了基础,是我们能够学习更多知识,例如对递归概念的理解会为你理解其他概念提供基础,比如树和图的搜索算法。
- 越早对学习方式进行优化,我们的学习就有越长的时间产生复利
- 由于存在复利效应,即便学习速率只有微小的变化,从长远来看也会造成很大的差异
将时间投到培养新技能的任务上
我们应该抽出20%的时间对自己的成长投资,抽出20%的时间钻研自己的钻研领域和专业工具
- 学习公司里面最优秀的工程师编写的核心抽象代码
- 编写更多的代码(如果编程是你的弱项)
- 研读内部可以获取的任何技术和学习资料
- 请公司里最严格的人审查你的代码
- 主动参与感兴趣的设计讨论,不要被动等待
- 用于学习自己不熟悉的代码
持续学习
我们学习的某些技能可以是跨专业的(音乐、艺术、体育、写作、或者手工),有些技能可能不会直接转化为软件工程上的收益,但采取成长型思维模式让我们成为更好的学习者,更愿意跳出舒适区,这本身就是一种高杆杆率的投资,此外,这还有一个好处,对积极心理学的研究表明,持续的学习与幸福感的提升密不可分。
- 学习新的编程语言以及开发框架
技术领域变化的相当快,如果不持续学习,你的技能可能会变得陈旧和过时,此外,新技能也会扩展你的思维,教你以不同的方式思考。
- 学习市场需求旺盛的技能
学习市场需求旺盛的技能会为你带来更多的机会
- 阅读
通过阅读可以了解世界运转的方式,阅读为我们提供从别人的经验和教训中学习的方法,而不必重头开始,这是一项高杠杆率的投资
- 加入讨论小组
凝聚团体智慧,系统的提升自我
- 为教学而写作
通过写作向他人传授知识和技能时,我们会对熟悉的内容产生更加深刻的理解(费曼学习法)
- 扩展兴趣项目
即便与软件工程无关的兴趣项目也会为我们提供进一步磨练技能的机会,将其他兴趣项目的想法和软件工程结合起来时,创造力就产生了
- 培养业余爱好
将漫无目的的消极时间替换成业务爱好的积极时间上,请把时间花在健康的爱好上,让这种爱好成为激发你学习和成长的动力
定期挑战优先级
将脑力用在调整工作的优先级和解决工程问题上,而不是用在记住需要做的每一件事情上,是更有成效的做法
简单易用的待办事项清单
无论你是多么资深的专家,一份精心设计的审查清单都能显著提高你的工作效率。
工程师也能从审查清单中获益,对优先级排序的第一步是列出可能需要完成的每一项任务。
人类的大脑擅长处理信息而不是存储信息,
代办事项清单应该有两个主要特性
- 它是工作的规范话描述
- 方便查看
关注直接创造价值的工作
我们花费的时间和精力不一定与所创造的价值成正比,而且许多工作“并不能直接贡献有用的产出”,比如撰写报告、整理工作、回复低优先级的邮件等,这些任务与创造价值只有微弱而间接的联系
因此对高杆率工作进行优先级排序的第一个启发式方法是关注直接创造价值的工作。
交付了一项创造价值的变更后,再去找下一个能创造价值的任务,优先考虑那些以最小成本创造最大价值的任务,一旦这样多做几次,你就更容易识别那些任务是有价值的。
关注重要但不紧急的工作
在优先完成直接创造价值的工作的同时,我们还需要优先考虑那些能够提升我们能力,在未来创造更多价值的投资,简单来说就是关注重要但是不紧急的事情,这是第二种启发式方法。
守护创造者日程
与其他专业人士相比,软件工程师需要更长、更连续的时间快来提升工作效率,如果我们能保持“心流”状态(一种毫不费力的专注状态,以至于失去对时间、自己、和问题的感知),就能显著的提升效率,心流需要集中注意力,而突发事件会打破心流
如果可能的话,尽量在日程中保留较大的专注时间块,把必要的会议安排在连续的时间段或者是一天的工作开始或结束的时候,而不是分散安排在一天中
限制同时进行的任务数量
将注意力分散到多个不同的任务上,只会降低整体的工作效率,阻碍我们在任何任务上取得实质的进展
培养挑战优先级的习惯
上面制定的那些策略能够帮助我们专注于正确的事情:完成杠杆率最高的任务,一旦沉浸在这些任务中,我们可能会掉入另一个常见的陷阱----忽略重新调整优先级。
第二部分 执行,执行,再执行
投资迭代速度
迅速行动,快速学习
扎克伯格提到了迅速行动的重要性,迅速行动能使我们开发更多的东西,更快的学习知识,大多数公司一旦成长起来,发展速度就会大大放缓,因为与行动缓慢导致错失良机相比,他们更害怕犯错。
投资节省时间的工具
如果某个任务需要手动做两次以上,那么第三次就去编写一个工具,工具上一个倍增器,它是我们能超越工作时间的限制,扩大我们的影响力
熟悉掌握编程环境
编程的时间除了在集成开发环境写代码外,还有很多时间用在代码导航、代码搜索、文档查找、代码格式化等,鉴于我们在编程环境花费了大量时间,熟悉编程环境对提升我们的效率大有裨益
正确度量改进目标
用指标推动进展
度量指标是我们评估自己的工作效率和确定工作优先级的有力工具,《卓有成效的管理者》中提到“如果你不能衡量它,你就无法改进它”
- 好的指标可以帮助我们专注于正确的事情
- 好的指标有助于防止问题重现
- 好的指标可以推动进步
尽早且频繁验证想法
寻找验证工作成果的低成本方法
在做项目,尤其是大型项目时,我们应该不断的问自己,是否可以花一小部分精力来收集一些数据,验证当前的工作是否可行。
用A/B测试持续验证产品变化
当心“一人团队”
在很多情况下,我们必须独立完成一个项目,虽然从事单人项目本身并没有什么问题,但是它会带来额外的风险,它增加了获得反馈过程中的阻力,而我们需要借助反馈来验证自己所做的事情是否可行,如果不建立反馈循环,可能直到最后才发现走错了方向,就会浪费很多精力
提升项目估算能力
项目估算时工程师最需要学习的困难技能之一,但是这项技能至关重要,因为企业需要根据准确的估算来为产品制定长期计划
使用准确的估算推动项目规划
下面有一些做出准确估算以及提供项目灵活性的策略
- 将项目分解为细粒度的任务,然后对小任务进行估算
- 根据任务需要的时间进行估算,而不是根据自己或别人的希望花多少时间进行估算
- 让实际执行任务的人来做估算
- 当心“人月神话”
- 根据历史数据验证估算结果
为意外情况留出预算
很多项目因为种种原因而错过截止日期,但通常不是因为人员没有努力工作,导致进度严重落后的原因时我们没有顾及或考虑到未知的问题
设定具体的项目目标和可度量的里程碑
更具需要解决的问题为项目设定具体的目标,然后使用里程碑来衡量这些目标的进展
及早降低风险
极为谨慎的对待重写项目
- 重写项目和其他软件项目一样存在项目规划和估算的问题
- 由于熟悉原来的版本,所以会低估重写项目的工作量
- 很容易在重写项目中加入额外的改进
不要在马拉松比赛的半程冲刺
- 随着工作时长的增加,每小时的生产力会下降
- 进度落后的程度超出了你的想象
- 额外的工作时间会压垮成员
- 朝着截止日期冲刺会产生大量的技术栈
第三部分 构建长期价值
权衡质量与务实
归根到底,软件质量时一个权衡问题,为了产出高质量的代码,往往对于代码审核、标准化和测试覆盖率的要求可能过于教条化,而质量方面投资不足,则会阻碍我们快速行动。
构建可持续的代码审核流程
对于软件工程师来说,代码审查的好处是显而易见的
- 尽早发现错误或设计上的缺陷
- 增加做代码变更时的责任心
- 为如何写好代码进行积极的示范
- 分享代码库的知识
利用抽象控制复杂性
选择正确的抽象,你的设计就能自然而然的转化为程序,模块的接口就会小而简单,新的功能也更加容易视频而不需要大规模重组。
- 抽象将原始问题的复杂性简化为更易于理解的原语
- 抽象降低了应用程序的维护成本,使得未来的改进更容易
自动化测试
一套全面的自动化测试可以验证新代码的质量,并保护旧代码,避免引入错误或者导致其他错误。
偿还技术栈
过了某个阶段,过多的债务就会阻碍我们取得进展,负载累累的代码难以理解和修改,降低了迭代速度,软件工程师应该主动回避这些债务缠身的代码
最小化运营负担
运营系统或者产品的经常性成本消耗时间和精力,而这些时间和精力可以投入到杠杆率更高的活动上。
拥抱运营的简单性
卓有成效的工程师专注于简单性。简单的解决方案可以降低运营负担,因为它们更易于理解、维护和修改
持续推进机械任务自动化
时间是最宝贵的资源,坚持不懈的推进自动化,以减少那些完全可以避免的情况。在决定是否是否自动化前,我们必须判断,与前期投入一些成本将流程自动化和人工执行特定任务,哪一个更省时间
为团队成长投资
让招聘成为每个人的责任
为团队添加一名实力强劲的工程师所带来的额外产出,远远超过你可以做的其他许多投资
设计好的入职流程
最初为创建入职流程而投资的时间,会在每一个新加入的团队成员上持续得到回报
通过事后复盘汇聚集体智慧
建设卓越的工程师文化
工程师文化由团队成员共享的一套价值观和习惯组成,卓越的工程师文化可以带来许多好处。工程师觉得自己被赋予完成任务的权力,这让他们更有成就感,生产力更高,这样的问题提供了一个共同的背景和决策框架