希望新的一年里,做一个有效率的工程师
其实这本书主要是写给程序员的,或是如何提高一个程序员团队的效率。作者在大(google)中(quora)和start-up互联网公司都工作过。可以说是行业中的老兵。这本书是作者多年工作经验的总结。
虽然大学和研究生的专业都是CS,也曾经做了3年C程序员,现在已经丢下老本行很多年了。有时候走过研发team的工位,看到他们在码代码不自觉的凑过去看几眼。作为一个曾经不称职的程序员,看到这本书,反思自己走过的弯路。深感惭愧。更惭愧的是虽然不coding了,还是在继续犯着这样那样错误。书中的一部分内容也适用于现在的我。希望新的一年里,改进自己,做一个更好的工程师。
作为非程序员的底层工程师,书中对于公司和团队高度的效率提高(招聘新人,培养新人,提高整个团队能力,代码和项目管理,降低运营成本等)我不关心。从individual的角度来看,从这本书中得到有助于我的观点有:
1. 时刻告诫自己,时间才是最有有限和最宝贵的资源。Time is our most finite asset, and leverage—the value we produce per unit time—allows us to direct our time toward what matters most。
具体实现:不要在工作时间做与工作无关的事情,尽量不参加少参加无用的会议。回想有时候参加一个讨论会,很多人都不来,以前我不理解为什么这些人不来,读过这本书理解了。不要把会议邀请当作必须去的义务。
2. 不是所有的任务都是等同的,在一些任务上花费的时间可以得到更多的效益。反之于事无益。需要在工作中能够辨别哪些任务是关键性的(对项目同时也对自身能力提高),哪些不是。
具体实现:给任务排优先级,如有可能尽量丢弃非关键性的任务。对于没有挑战性的任务尽量不去take。因为take这些任务的同时,你丧失了一个解决新问题,学习和提高的的机会。比如我在某个领域很熟悉和精通,领导也喜欢让你take这样的任务。以前我喜欢做顺手的任务。但是再想想,我是能很轻松的完成,但是从中能够学到什么呢?能力有buildup吗?
3. 把自己当作一个创业公司,push自己去完成任务。但是不要push的太狠了。找到自己的节奏,把工作看作一个马拉松,找到适合自己的pace。
具体实现:有时候只是为了完成任务而完成任务,工作中不思考。也没有固定的节奏。如果工作完成了就松弛,如果没有就忙。也没有一个(个人能力提高)长远的打算。这样是不对的。时刻问问自己我今天的工作中能力有提高吗?对将来的发展是否有所帮助?也不要把自己搞得太累或者太轻松,打持久战。
4. 尽量为任务保留大块的时间,不被打扰。
具体实现: 做好计划,不要被一些杂事所打扰。杂事用小块时间来处理。以此来提高效率。
5. 避免重复工作。如果一件事情要做两遍以上,考虑用工具来解决。
具体实现: 每次完成的case要有结果和记录过程。特别是可复用的部分要保留。重点在一些典型的cases。两次遇到同样的事情,就要提醒自己,如果第三次第四次出现的话,我是否可以用上可重用的部分?如果没有的话,马上去做。虽然会非一些时间去做可重用的部分。长期看是合算的。
6. 不要怕犯错误,出错要趁早,问题要及早发现
具体实现:不要把问题留到最后或者试图找workaround甚至掩盖。不要有侥幸心理。不要怕麻烦。及时暴露问题。
7. 对于自己项目至少要有简单的管理。要有任务的目标和里程碑。项目必须是可评估可质量进度可测量的。
具体实现:简单的管理任务,做自己的PM。衡量任务的质量和进展情况并即使的做出反应和调整。PM是站在项目的角度上来看问题。但是作为工程师,也要有自己的管理。不能被PM牵着走。
8. 通过review或者其他方式尽快得到反馈,越快越好。
具体实现:不必在任务完成时才review,可以是在task的任何阶段,哪怕是找一个同事做over-shoulder的review。也比没有反馈好。找对这个领域比较了解的同事。最好是没有保留乐于指出你的缺点的。避免自己在项目中想当然做出低级的错误。
9. A/B测试
具体实现:对于拿不准的方案,如果有条件可以做一下A/B测试。最小的代价得到一些数据结论。考量最坏的结果而不是平均的结果。
10. 尽量准确的估算项目的进展
具体实现:这是工程师的弱项。上月的站会上leader问一个task多长时间完成时,工程师说2周,项目经理认为1周就可以完成。但实际上3周了还没有明显的进展。可能只完成了20%。书中提供了一些方法,比如根据项目进展情况,及时调整等。
11. 尽量早做计划。An effective engineer knows to plan ahead.
具体实现:目前圣诞节期间因为国外放假,所以这阶段的任务比较少。可是实际上可预料到2,3月份的项目。可以早做打算。做好前期的工作,有利于减轻后续的负担。
12. DIY(Don’t Repeat Yourself)Principle。 不要做重复的工作。
具体实现:事实上工作中难免会遇到这样的任务。你只是个工程师没法挑活。遇到重复的工作,尽快完成,move on。。。
13. 不要欠债,有债必还
具体实现:了解自己欠的债在哪里,时刻提醒自己。不要等必须完成的那天再payoff。虽然书里讲的不是这回事。
14. 从简单的事情做起
具体实现,不要想一开始就建个复杂的模型,先想想完成这个task,最简单的方式是什么样子的。也要考虑到未来维护的负担。
目前能够想到的就这些了。最最重要的,时间是你最宝贵和有限的资源。怎么用,就看你了。