我了解的那些大师级程序员,都在用这些工做法【分享】

程序员是一个忙碌的职业,与这个职业联系在一块儿的词儿,一般是忙碌、加班、熬夜、过劳、亚健康……当忙碌成为了主旋律,“高效”一词就天然浮出了水面。程序员

但是,程序员工做效率是由编程能力决定的吗?答案是“未必”。编程

这些年,我一直在研究一件事儿:为何那些大师级程序员,能够兼顾 N 倍于通常人的工做,还有条不紊?他们究竟用了什么工做法?根据个人观察与总结,他们每每绕不开下面四个工做原则。框架

  • 以终为始
  • 任务分解
  • 沟通反馈
  • 自动化一切

下面,就给你们先介绍前两个工做原则。ide

以终为始DoD单元测试

DoD(Definition of Done,完成的定义),从名字便不难看出,它就是为了解决软件开发中常见的“完成”问题而生的。DoD 自己并不复杂,它就是告诉咱们怎样算是完成了,尽可能减小由于歧义形成的各类浪费。测试

既然 DoD 是一个弥补理解差别的作法,那么它就应该在人与人的协同工做中起做用。其中,最多见的作法是在团队中肯定好 DoD。好比:ui

特性开发完成,表示开发人员通过了需求澄清、功能设计、编写代码、单元测试,经过了测试人员的验收,确保代码处于一个可部署的状态,相关文档已经编写完毕。

开发完成,表示开发人员编写好功能代码,编写好单元测试代码,编写好集成测试代码,测试能够经过,代码经过了代码风格检查、测试覆盖率检查。idea

你们都是聪明人,一旦 DoD 肯定好了,谁该作什么事就一目了然了。spa

  • DoD 是一个清单,清单是一个个的检查项,用来检查咱们的工做完成状况。DoD 的检查项,就是咱们开发产品所需的一系列有价值的活动。好比:编写代码、编写测试代码、经过测试人员验收等。
  • DoD 是团队成员间彼此汇报的一种机制。别把“汇报”想复杂了,最简单的汇报就是说一句“这个功能作完了”。当咱们有了 DoD,作事便只有两种状态,即“作完”和“没作完”,根本没有 80% 作完的说法。
  • DoD 的检查项应该是实际可检查的:你说代码写好了,代码在哪里;你说测试覆盖率达标了,怎么看到;你说你功能作好了,演示一下。

在前面的讨论中,咱们所说的 DoD 只是从我的层面入手。在团队层面,咱们也能够定义 DoD,好比:设计

  • 某个功能的 DoD,好比:这个功能特性已经开发完成,通过产品负责人的验收,处于可部署的状态。
  • 一个迭代的 DoD,好比:这个迭代规划的全部功能已经完成。
  • 一次发布的 DoD,好比,整个软件处于可发布状态,上线计划已经明确。

精益创业:验证产品特性的思考框架

精益创业提出“开发(build)- 测量(measure)- 认知(learn)”这样一个反馈循环和最小可行产品的概念。

当你有了一个新的想法(idea)时,就把想法开发成产品(code)投入市场,而后,收集数据(data)获取反馈,看看前面的想法是否是靠谱。无非获得两种结果:好想法继续增强、不靠谱的想法丢掉算了。不论是哪一种结果,你都会产生新的想法,再进入到下一个循环里。在这个反馈循环中,你所得到的认知是最重要的,由于它是通过验证的。

咱们可以接触到的大多数产品均可以放在这个框架内思考。当产品经理要作一个新产品或是产品的一个新特性,咱们就能够用精益创业的这几个概念来检验一下产品经理是否想清楚。

好比,你要作这个产品特性,你要验证的东西是什么呢?他要验证的目标是否有数据能够度量呢?要解决的这个问题是否是当前最重要的事情,是否还有其余更重要的问题呢?若是这些问题获得确定的答复,那么验证这个目标是否有更简单的解决方案,是否是必定要经过开发一个产品特性来实现。

任务分解马斯克的任务分解

特斯拉的创始人伊隆·马斯克(Elon Musk)同时还建立了太空探索公司 SpaceX。SpaceX 有一个目标是,送 100 万人上火星。美国政府曾经算过一笔帐,把一我的送上火星,以现有技术是可行的,但需花费 100 亿美金。若是送 100 万人上火星就要 1 万万亿,这笔钱至关于美国 500 年的 GDP,贵到连美国政府都没法负担。

马斯克怎么解决这个问题呢?他的第一步是准备把人均费用降到 50 万美圆,至关于一我的在地球上房子的钱。把原来的 100 亿降到 50 万,下降 2 万倍便可。

固然,下降 2 万倍依然是一个听起来很遥远的目标。关注点来了,马斯克的第二步是,把 2 万分解成“20×10×100”,这是一道简单的数学题,也是马斯克三个重点努力的方向。

“20”:如今的火星飞船一次只能坐 5 我的,马斯克打算把火箭造大一点,一次坐 100 人,这样,就等于把成本下降 20 倍。若是你关注新闻的话,SpaceX 确实在进行这方面的尝试。

“10”:马斯克认为本身是私营公司,效率高,成本能够降到 1/10。事实上,SpaceX 的成本目前已经降到了同行的 1/5。

最后的 100 是什么呢?就是回收可重复使用的火箭。若是这个目标能实现,发射火箭的成本就只有燃料成本,这也就是咱们频频看到 SpaceX 试飞火箭新闻的缘由。

这么算下来,你是否是以为马斯克的目标不像最开始听到那样不靠谱了呢?正是经过将宏大目标进行任务分解,马斯克才能将一个看似不着边际的目标向前推动。

微操做

在ThoughtWorks 工做时,个人 Sponsor 是 ThoughtWorks 现任 CEO 郭晓(Sponsor,相似于工厂里师傅带徒弟的关系),他也是写代码出身的。他和我讲过他和 Wiki 的发明者 Ward Cunningham 一块儿结对编程的场景。

Ward 天天拿到一个需求,并不急于写代码,而是和郭晓一块儿作任务分解,分解到每一个任务都很清晰以后,一个个任务完成就行了。当时郭晓虽然以为工做很紧张,但思路却很是清晰。有时,他也很奇怪,由于在开始工做以前,他会以为那个问题很是难以解决,结果一路分解下来,每一步都是清晰的,也没遇到什么困难就完成了。

任务分解是个好习惯,但想要掌握好它,大量的练习是必须的。我本身也着实花很多时间进行练习。随着个人练习增多,我愈加理解任务分解的关键在于“小”。小到什么程度呢?有时甚至能够小到你认为这件事不值得成为一件独立的事,好比,升级一个依赖的版本,作一次变量更名。这样作好处就是,它保证了我能够随时停下来。

我曾读到过一个关于著名高尔夫球手“老虎”伍兹的故事。高尔夫球手在打球的时候,可能会受到一些外界干扰,通常状况下还好,若是他已经开始挥杆,这时候受到了干扰,通常选手确定是继续把杆挥下去,但一般结果是打得不理想。而伍兹遇到这种状况,他会停下来,从新作挥杆的动做,保证了每一杆的标准。

伍兹能停下来,当然是通过了大量的练习,但还有一个关键在于,对于别人而言,挥杆击球是一个动做,必须一鼓作气,而对伍兹来讲,这个动做是由若干小动做组成,他只不过是恰好完成了某个小动做,而没有作下一个小动做而已。换句话说,你们一样都是完成一个原子操做,只不过,伍兹的原子操做比其余人的原子操做小得多。