三句话总结本书
- 关注杠杆率(投资回报率)
- 关注代办事项,设置优先级四象限,重点是第一象限(重要、紧急)和第二象限(重要、不紧急)的事情
- 做一个高效率的工程师,
简单总结和感受
这是一本面向程序员工程师的一本成长类的书籍,给出了成为一个高效率工程师或团队的方法论。对于个人来说,书中给出了一个杠杆率的可计算的指标,杠杆率 = 工作产生的影响 / 投入的时间,可以理解投资回报率。我们应该去做那些杠杆率高的事情。另外学习方式、任务优先级、投资迭代速度和想法验证等问题也是值得去关注的。不过后续的章节有些内容是交叉的,有些冗余。
读书笔记
杠杆率
高效工程师应时刻专注于做杠杆率(投资回报率)高的事情。
什么是杠杆率
杠杆率 = 产生的影响 / 投入的时间
可以理解成投资回报率(ROI)
如何提高杠杆率
- 减少完成某项工作所需时间 ==> 如何在更短的时间内完成工作?
- 增加该工作的产出 ==> 如何增加该工作产生的价值?
- 转向杠杆率更好的工作 ==> 是否有其他工作可以在当下创造更多价值?
我们在实际开展某项工作之前可以问自己上面三个问题,尝试提升该项工作的杠杆率。思考自己的杠杆点,优先做那些高杠杆率的事情。人总有一天会意识到时间才是自己自己最优先、最珍贵的资源。
学习方式
培养成长型思维方式
工程师是成长型的,我们要为自己能够改变的每一个方面负责,从提高谈话技巧到掌握新的工程重点都是自己能够掌控的内容。
提升学习的速率
复利是一件强大的武器。做一件事最好的时间是 10 年前,其次是现在。
明白学习复利的效益。虽然没有实际复利曲线那么夸张,但越早学习、优化学习方式(选择有挑战的事项)越能够获得更高的收益。
寻求好的工作环境
选择工作或团队考虑以下影响因素:
- 公司或团队正在快速增长。(目前 Web3 就是这样的一共行业)
- 培训。
- 开放。鼓励提出问题;积极反馈和分享信息。
- 节奏。快速行动,但不会让人身心俱疲。
- 人员。身边有更聪明、更有才华、更有创造力的人。
- 自治。有自己的主导权和自由度。
培养新的技能并持续学习
每天花 20% 的时间在 Side Project 、专业领域或者相邻学科上。作为程序员工程师可以有如下的建议: - 学习最优秀工程师写的核心抽象代码。努力编写代码,让最严格的人审核代码。
- 研读内部可获取的任何技术和学习资料,参加专业技能培训课程,学习自己不熟悉的代码,虚心请教。
- 掌握所使用的编程语言。(通过技术面试或者写技术文章来检验自己的掌握程度)
- 主动参加感兴趣项目的设计讨论。在不同类型的项目上工作,能够交叉练习不同的技能。
对于学习,有如下建议:
- 多阅读,加入讨论小组。能够将知识说出来是很有效的检验学习成果的方式。
- 参加讲座、行业会议或者线下聚会。
- 建立并维护一个强大的人际关系网。不要害怕或可以避免与不认识的人会面,走出自己的舒适圈,外面也并没有那么可怕。
- 关注那些传授技能的博客。
- 为教学写作。输出是最好的输入。
- 扩展兴趣项目。目的是提升自己的创造性。
- 培养健康的业余爱好。目的是提升自己的积极性。
优先级问题
人的大脑是用来处理事情,而不善于存储的。对于一件件代办事项最好的事项是将其记录,而不是放在大脑中让其一直叨扰你的。
如何记录代办事项参考 Get Things Done,对于任务的优先级划分使用任务紧急性四象限。
直接创建价值的工作
功利一点,我们做的大部分事情的目的是为了获取价值。衡量这种价值的标准是交付的产品、获客率、业务指标的变化或销售业绩,即成果类的东西。对于一个程序员,工作时长、完成的任务、编写的代码行数或参与的会议数量,这样的事情是没有价值的。有一句话,代码是负债,产品是资产。
重要但不紧急的工作
这部分工作是能够提升我们的能力,在未来能够创造更多的价值。
守护着日程
把连贯的整块时间用来投入工作是效率很高的事情,我们能够进入一种心流的状态。学会拒绝不重要的事情,维护自己成块的时间。
限制同时进行的任务数
把大脑类比成多核 CPU,找到自己的核心数。即重点是找到自己的能力同时处理的任务数量,不要超过这个限制,少了没有全力发挥,多了会影响每个任务的效果。
如果 xxx 就 xxx
定义一些“如果xxx就xxx”的任务,来帮助你利用时间,完成那些遗漏、不想要去触碰的任务。例如:如果晚上 10 点找不到事情做,就刷一道 leetcode 题目。
时刻调整优先级
工作的优先级会随时间变化,重新调整优先级是很重要的,另外不必给清单上所有的事情定好优先级。最重要的、且能够做到一个时间段只有那么几件。
投资迭代速度
迅速行动,快速学习
天下武功,唯快不破。
投资节省时间的工具
如果某个任务必须手动做两次以上,那么第三次就去编写一个工具。工具是一个倍增器,它使我们能超越工作时间的限制,扩大自己的影响力。
缩短调试验证周期
调试会占据研发工作中大部份时间,需要在前期做一些投资来缩短调试周期,而不是在每次迭代中支付时间税。建议如下:
- 提前规划好验证计划。
- 缩短调试验证的必要路径。
熟练掌握编程环境
建议如下:
- 熟练使用自己最喜欢的文本编辑器或IDE。
- 至少学习一种高效的高级编程语言。
- 熟悉UNIX(或Windows)Shell命令。学习grep、sort、uniq、wc、awk、sed、xargs和find等基本命令,所有这些命令都可以通过管道连接来执行更高级的转换。
- 多用键盘,少用鼠标。
- 自动化手动工作流程。
- 在交互式解释器上测试新想法。
- 仅运行与当前变更相关的单元测试。
- 灵活使用 AI 工具。
工程以外的瓶颈
对他人工作的依赖,在团队协作中协作方对任务的优先级错位。解决的方法是多沟通,同步信息。
记住有用的数字
记住行业常见的数字,或者让自己能方便地获取这些数字,它们可以作为评估进度的基准,也可以帮助我们进行大概的推算。
质疑数据的完整性
错误的数据会带来错误的决策,增强数据的完整性有如下几点:
- 广泛地记录日志以备用。
- 构建工具,在数据准确性上更快地迭代。
- 编写端到端集成测试以验证整个分析流程。
- 尽早检查收集的数据。
- 通过多种方式计算同一指标,交叉验证数据的准确性。
- 尽早分析有问题的数据。
尽早验证想法
寻找验证工作成果的最低成本方法
有以下几点启发点:
- 采用迭代的方式可以减少代价高昂的错误,并且在每次迭代之间,我们还有机会收集数据以纠正路线。迭代的周期越短,就能越快地从错误中吸取教训。相反,迭代的周期越长,不正确的假设和错误就越有可能混在一起,导致我们偏离正轨,浪费时间和精力。
- 做少量的工作来收集数据,以验证项目假设和目标,从长远来看,这会减少很多无谓的浪费。
- 先处理风险最大的领域,这样我们就能主动更新计划,避免出现讨厌的意外,这些意外可能会使我们之后的努力付诸东流。
一人团队的问题
除非评审人在你的团队中工作,而且有共同的项目背景,否则在代码评审中很难获得有质量的反馈。如果你不注意建立反馈循环,那么很可能会推迟到自认为所做的工作已经近乎完美才会寻求他人的反馈。如果直到最后才发现走错了方向,就会浪费很多精力。
当一个人负责的业务在推进的过程中,尽量提早向外反馈进度(比如这次的竞赛)
下面是一些策略:
- 开诚布公,乐于接受反馈。改变防御性的心态,要优化我们的学习方式。不要把反馈和批评看作人身攻击,而要看作改进的机会。
- 尽早并经常提交代码进行评审。防止在设计上出现大的问题。另外大批量的代码也难于评审。不要害怕评审人的严厉。
- 先设计新系统的界面或 API,在开始编码之前先展示文档。
建立决策反馈机制
项目估算
谨慎对待项目重写
重写可能会引入过度设计;增量和分阶段地重构项目是降低风险和增强灵活性的方式。
推荐书籍
本书的结尾还推荐了一些书籍,做个记录后面有空再筛选出来看。
- 《人件》(Peopleware: Productive Projects and Teams)
- 《极客与团队:软件工程师的团队生存秘籍》(Team Geek: A Software Developer’s Guide to Working Well with Others)
- 《格鲁夫给经理人的第一课》(High Output Management)
- 《搞定:无压工作的艺术》(Getting Things Done: The Art of Stress-Free Productivity)
- 《每周工作4小时》(The 4-Hour Workweek: Escape 9-5,Live Anywhere,and Join the New Rich)
- 《高效能人士的七个习惯》(The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change)
- 《清醒:如何用价值观创造价值》(Conscious Business: How to Build Value Through Values)
- 《高效能人士的思维方式》(Your Brain at Work: Strategies for Overcoming Distraction,Regaining Focus,and Working Smarter All Day Long)
- 《心流:最优体验心理学》(Flow: The Psychology of Optimal Experience)
- 《成功,动机与目标》(Succeed: How We Can Reach Our Goals)
书摘
无书摘