大师级的程序员,都在用这些工作法

程序员是一个忙碌的职业,与这个职业联系在一起的词儿,通常是忙碌、加班、熬夜、过劳、亚健康……当忙碌成为了主旋律,“高效”一词就自然浮出了水面 。
可是,程序员工作效率是由编程能力决定的吗?答案是“未必” 。
这些年,我一直在研究一件事儿:为什么那些大师级程序员,可以兼顾 N 倍于一般人的工作,还有条不紊?他们究竟用了什么工作法?根据我的观察与总结,他们往往绕不开下面四个工作原则 。
下面,就给大家先介绍前两个工作原则 。
以终为始DoD
DoD( of Done,完成的定义),从名字便不难看出,它就是为了解决软件开发中常见的“完成”问题而生的 。DoD 本身并不复杂,它就是告诉我们怎样算是完成了,尽量减少因为歧义造成的各种浪费 。
既然 DoD 是一个弥补理解差异的做法,那么它就应该在人与人的协同工作中起作用 。其中,最常见的做法是在团队中确定好 DoD 。比如:
特性开发完成,表示开发人员经过了需求澄清、功能设计、编写代码、单元测试,通过了测试人员的验收,确保代码处于一个可部署的状态,相关文档已经编写完毕 。
开发完成,表示开发人员编写好功能代码,编写好单元测试代码,编写好集成测试代码,测试可以通过,代码通过了代码风格检查、测试覆盖率检查 。
大家都是聪明人,一旦 DoD 确定好了,谁该做什么事就一目了然了 。
在前面的讨论中,我们所说的 DoD 只是从个人层面入手 。在团队层面,我们也可以定义 DoD,比如:
精益创业:验证产品特性的思考框架
精益创业提出“开发(build)- 测量()- 认知(learn)”这样一个反馈循环和最小可行产品的概念 。
当你有了一个新的想法(idea)时,就把想法开发成产品(code)投入市场,然后,收集数据(data)获取反馈,看看前面的想法是不是靠谱 。无非得到两种结果:好想法继续加强、不靠谱的想法丢掉算了 。不管是哪种结果,你都会产生新的想法,再进入到下一个循环里 。在这个反馈循环中,你所获得的认知是最重要的,因为它是经过验证的 。
我们能够接触到的大多数产品都可以放在这个框架内思考。当产品经理要做一个新产品或是产品的一个新特性,我们就可以用精益创业的这几个概念来检验一下产品经理是否想清楚 。
【大师级的程序员,都在用这些工作法】比如,你要做这个产品特性,你要验证的东西是什么呢?他要验证的目标是否有数据可以度量呢?要解决的这个问题是不是当前最重要的事情,是否还有其他更重要的问题呢?如果这些问题得到肯定的答复,那么验证这个目标是否有更简单的解决方案,是不是一定要通过开发一个产品特性来实现 。
任务分解马斯克的任务分解
特斯拉的创始人伊隆·马斯克(Elon Musk)同时还创建了太空探索公司。有一个目标是,送 100 万人上火星 。美国政府曾经算过一笔账,把一个人送上火星,以现有技术是可行的,但需花费 100 亿美金 。如果送 100 万人上火星就要 1 万万亿,这笔钱相当于美国 500 年的 GDP,贵到连美国政府都无法负担 。
马斯克怎么解决这个问题呢?他的第一步是准备把人均费用降到 50 万美元,相当于一个人在地球上房子的钱 。把原来的 100 亿降到 50 万,降低 2 万倍即可 。
当然,降低 2 万倍依然是一个听起来很遥远的目标 。关注点来了,马斯克的第二步是,把 2 万分解成“20×10×100”,这是一道简单的数学题,也是马斯克三个重点努力的方向 。
“20”:现在的火星飞船一次只能坐 5 个人,马斯克打算把火箭造大一点,一次坐 100 人,这样,就等于把成本降低 20 倍 。如果你关注新闻的话,确实在进行这方面的尝试 。