天天看点

2019年程序员最值得学习的思维利器——任务分解

只用系统1不行,还要用系统2

作为程序员,我们常常会遇到以下这些典型问题:工时常常估不准,估少了加班加点都做不完,估多了项目经理会有意见;遇到不熟悉的任务容易恐慌,怕自己完不成;开发进行到一半才发现某个地方设计有缺陷,要返工,费时费力。

做一个普通人,我们还要面对更多的难题:到年底了,是不是应该考虑跳槽,该跳去哪里;该不该买房子,是将其视为一种投资手段,还是应该认为房子就是必需品;要找什么样的人处对象,什么时候应该结婚。

有些人不觉得这些是问题,因为他们从来不把它们当回事。工作随便应付了事,这里干不下去就去别的地方干。单身的生活早已习惯,自由自在挺好的,就算一辈子不结婚也不是什么大事。

然而更多的人,还是会被这几个问题所困扰,每一次想起来都非常头疼,不知道如何是好。久而久之,这些问题甚至有可能变成一块心病,产生着持续的负面影响,非常不利于日常的工作和生活。

《思考,快与慢》的作者提出了“系统1”和“系统2”的概念,系统1能很快地给出答案,系统2则需要通过分析和计算才能回答问题。我们在思考前面所提到的典型难题时,使用的通常是系统1,但给出的答案往往不是最优的。系统2,是时候派上用场了。更具体地来说,我们要采用的思维工具是,任务分解。

什么是任务分解

任务分解,又或者叫目标分解,就是把一个任务、目标分拆解开成一个个更加具体、清晰的子任务、子目标,通过这些子任务、子目标最终完成任务和达成目标。

我们可以先来看看现实版“钢铁侠”埃隆·马斯克是怎么做目标分解的。

马斯克是特斯拉和SpaceX的CEO,他曾经公开宣布自己要送100万人殖民火星。那么从地球送一个大活人到火星上去要多少钱呢?美国太空总署NASA还真就算过一笔账,答案是100亿美元。

如果要自费的话,恐怕只有少数十几个顶级富豪才能在倾家荡产之后移民火星,而且他们还很大可能不愿意去。如果是国家政府负担这100万人的费用,即便是富如美国都要花费几百年的GDP。由此看来,百万地球人殖民火星这个想法根本不可能实现。

但是,马斯克并没有死心,他认为只要把成本降下来就可以。那么要降到多少呢?50万美元。这个钱并不多,在北上广深甚至连一套比较好的房子都买不下来。从NASA的100亿美元到50万美元,足足差了两万倍之多,仍然让人觉得不可思议。

马斯克接下来就是把两万分解成20x10x100,并且将这个公式作为自己公司的三个主要努力方向。

“20”:现在的宇宙飞船一般最多只能承载5个人,马斯克认为这太浪费了,我们可以完全可以把火箭造宽敞一些,一次载个100个人。从5到100,平均到每个人身上的成本就降了20倍。如果你平时有一直在关注SpaceX的新闻,就会发现他们正在做这方面的工作。

“10”:政府机关或国营企业效率低,马斯克认为自己掌控的企业完全可以通过提升效率再把成本降低10倍。他并没有说大话,成本已经降到同行的五分之一了。

“100”:如果我们每天开车上班,一辆车只能开单程,开到目的地就报废,估计没多少人能开得起车。马斯克认为如果可以使火箭可回收重复使用,让发射火箭像开车一样只耗燃料钱,那么成本将会极大地降低,100倍不是梦。在经历过多次失败之后,SpaceX现在已经实现了可回收火箭这一目标,并且在这个方向继续前进。

这些算下来,你是不是不再觉得马斯克是在痴人说梦话了呢?虽然还是很困难,但是我们却能看到他实现终极目标的希望。相比之下,我们的工作和生活难题远远比不上殖民火星复杂度那么高,完全可以参考任务分解的思路去解决。

任务分解有什么用

1.把大任务分解成小任务,工时估计会更加准确

完成一个完整的登录功能需要多长时间,我们很难估计,可能只要三个工作日,也可能要三个礼拜。如果我们把这个估计提交给项目经理或产品经理,他们很可能会发疯。

其实我们完全可能通过任务分解,将这么一个大功能分解成一个个小功能,例如申请、找回密码、登录、注销等等,然后再逐一向下分解。

判断一个类大概要实现哪些逻辑,要如何实现,需要多长时间,这就是我们所擅长的了。

2.面对以前没做过的需求,通过任务分解遍历一次,熟悉度提升之后就不会恐慌

我们在接到一个陌生的活儿之后,难免会心里忐忑不安,生怕自己完不成或者是最终做完了但是花费太多的时间。

首先,一个再怎么新的任务都不可能是完全陌生的,我们可以先将其分解成自己熟悉的部分和陌生的部分。然后,我们再对陌生的那一部分做调研或者请教同事。最后,通过一小段时间的认知获取,我们就会对这个看似陌生的任务越来越熟悉,从而做到心里有底。

3.反复推演,全盘考虑, 会让我们少做很多的返工工作

如果要做任务分解,就必然要从全局的角度出发,通盘考虑每一个子任务之间的关系。我们如果要选择某个关键字段的类型和长度,就要考虑到哪些模块要存,哪些模块要改,哪些模块要取,这样就不容易出现前后不一致要推倒重来的情况。

如果没有全局的视角,只是走一步看一步,遇到一个选择就做一次决定,这就叫窄框架。相反的叫宽框架,这正是我们在做任务分解的同时需要掌握的一种思维工具。

4.反思任务或目标本身,再决定要不要去做

在对“买房子”这一目标做分解的时候,我们很容易想到一个问题,就是为什么要买房子。别人都在购房或者打算购房,这不应该成为我们做出决定的依据,至少不能成为主要依据。

房子主要有两种价值,一种是居住价值,另一种是投资价值。如果我们更看重居住价值,就要找环境更好、周围教育资源更丰富的住宅。如果我们更看重投资价值,就要找发展速度更快的地段和升值空间更大的楼盘。

一个打算两三年跳槽一次的单身汉,居住价值很可能不是他所看重的,他可能认为租房更符合他的需求。对于一个职业生涯刚起步、家里又不能提供支持的年轻人来说,投资房地产就不是一个好的选择,远不如专注地投资自身来的要好。

5.任务分解,就是一个学习和进步的过程

查理·芒格说,“要想找到一个好的妻子,先要做的就是让你配得上她”。

如果希望找到一个知书达理的对象,你自己就不能总是控制不住自己的情绪,老是把错误归咎到别人的身上。如果希望你的另一半有一定的经济能力,你自己就要学会掌握一技之长,有自己的立身之本。如果希望那个跟自己组建家庭、生儿育女的人能心甘情愿奉献,你自己就要开始学会为别人考虑,在必要的时候牺牲一定程度的自由和其他宝贵的东西。

6.目标分解,能让我们更关注当下,做更多更有实际意义的事情

在互联网行业里做技术工作,两三年甚至一两年跳槽一次是很平常的事。我们不能为了跳槽而跳槽,抛开薪酬问题暂且不谈,跳槽到底是为了什么呢?

跳槽可能是为了更快地成长,到一个更有挑战性的岗位上,做更有意思的工作。跳槽可能是为了有一个新的工作环境,建立更好的同事关系。跳槽可能是为了找回生活的那一部分,有更多的业余时间。

找到原因之后,我们可以看看是否有改变当下情况的可能。我们是不是可以找老大谈谈,为自己争取更多有难度的、把自己从舒适区推向学习区的任务?我们是不是可以学习一些人际交往的技巧,改善现在让自己并不满意的同事关系?我们是不是可以找出自己为什么那么忙碌的原因,尝试改变现状?

如何练习任务分解

任务和目标其实没有特别明显的区分,为了更好地叙述,接下来我们就以“小任务”和“大目标”的说法继续讨论。

知道了任务分解的诸多好处,那么我们要如何通过练习掌握这个解决复杂问题、实现宏大目标的思维利器呢?小任务采用列表法,大目标借鉴金字塔原理。

相对于大目标来说,小任务规模比较小,分层的必要性不大,所以我们可以使用列表的形式把一个任务分解成若干个具体的步骤,然后逐一完成。

就拿去医院看病为例,我们完全可以将其分解成以下几个步骤:

  1. 使用医院小程序的分诊功能,根据自己的症状找到自己要挂号的门诊科室。
  2. 了解是否可以网上挂号,如果是就在线完成,如果不行就查要去哪里排队。
  3. 挂号后,是否要等待比较长的时间,考虑是否携带充电宝
  4. 医生看诊时,如果要看腿,最好穿短裤;如果要看上身,最好穿宽松的短袖。
  5. 诊断完毕之后,如果要当场做手术(牙科),术后是否能自行回家。如果不能,则需要提前通知亲友帮忙。
  6. 回到家之后能否照常进食,是否需要提前准备流食。
  7. 第二天能否照常上班,是否需要提前请假。

在工作当中,我常常会对任务做这样的分解,分解完之后感觉特别有底气,而且不怕被打断。即便有人中途找我,我在响应完之后看一眼列表就知道已经做完了哪些工作,接下来还要做哪些。

在这里给大家推荐一个小技巧,在心理学上叫做激励。我们可以把分解完的步骤罗列在自己的笔记本上,然后每完成一个步骤就拿笔在后面打一个勾,这样做能给自己带来一定的成就感和满足感。

相对于小任务来说,大目标规模比较大,非常有必要对其进行分层处理。

在商务写作领域有一本书非常有名,叫《金字塔原理》。一篇商务文章,例如报告、总结等,都要有一个中心思想。这个中心思想下面,可能会有几个主分论点,而每一个主分论点下面可能还会有几个二级主分论点,一直细分到每一个子论点。

我们在分解大目标的时候,就可以借鉴上面这种分层思想去操作。以个人成长为例,我们的核心目标就是成为一个更好的自己。那么这个核心目标就可以分解成思想(学识更渊博)、经济(财务自由度更高)、健康(身体素质更好)、人际(跟身边人相处得更好)四个主目标。就经济主目标而言,我们又可以分解成开源(提升赚钱能力)和节流(提升理财能力)两个次主目标。接下来还可以把节流目标再次分解,分解成理财(储蓄和投资)和消费(理性消费)两部分。就这样,我们可以继续细分下去,一直到了现实当中可操作的每一个动作。

任务分解是一种可以通过练习来掌握和运用的技能,并不是什么了不起的天赋。只要在日常工作和生活当中有意识地练习和使用,我们每个人都能借助这个强有力的思维工具获得一开始完全想象不到的好处。

敢于挑战自我和超越自我的勇气

通过任务分解,不仅可以为日常工作生活找到它们在人生大图景中的位置,还给了我们挑战复杂目标、超越自我的勇气。

如果我们可以分解所追求的目标,分解成一个个可操作的单元步骤,那就永远不会觉得无聊,永远有事可做。我在年初给自己定下了11月份之前要完成1000个番茄时间(1个番茄时间32分钟)的目标,所以我只要一有条件就会阅读,例如长时间坐车或排队的时候,我会听“得到”或“极客时间”的课程。

我们知道每一个看似普通的小任务都是为了大目标的达成,所以不会觉得乏味或者毫无意义。以前的我们可能会讨厌上班,但是如果定下了成长的目标,我们就会变得有动力和有自主能动性,积极地去找那些能让自己学习进步的工作去做。以前的我们可能会觉得运动很累,但是如果定下了健康的目标,我们就会觉得走路不是浪费时间,跑步并没有之前想象得那么不可接受。

我们以前可能会有这样的想法:工时估不准就估不准吧,我就尽量做,完不成我也没办法;遇到不熟悉的任务能躲就躲吧,躲不过去就硬着头皮做;做到一半遇到前后不一致的问题就看能不能绕过去,绕不过去就推倒重来。

我们甚至还会有这样的看法:房子这么贵,买房子是不可能买房子的,近期不考虑了;结婚这么麻烦,结婚是不可能结婚的,单身一辈子也不是坏事;跳槽到一家好公司那么难,跳槽是不可能跳槽的,就这么将就下去吧。

通过目标分解,我们会意识到这些事情虽然复杂,要做好的难度比较高,但是并非不可企及。先将大目标分解成小目标,然后再一步步通过实现小目标的方式,看到一条有希望实现大目标的道路。

如此这般,我们就能鼓起勇气,开始挑战自我,最终超越自我。

我有一个公众号,经常会发一些看书思考过后写的文章,还有作为一个程序员的工作经验分享。

如果你喜欢我的文字,可以用微信搜索“李文业的思考笔记”或者扫描二维码关注。

2019年程序员最值得学习的思维利器——任务分解