网站程序购买,长春制作手机网站,东莞企业免费模版网站建设,杭州网站优化流程文章目录 马斯克的任务分解软件开发的任务分解可执行的最小单位任务小结 马斯克的任务分解
我们都知道埃隆马斯克#xff08;Elon Musk#xff09;#xff0c;他既是电动汽车公司特斯拉#xff08;Tesla#xff09;的创始人#xff0c;同时还创建了太空探索公司 SpaceX。… 文章目录 马斯克的任务分解软件开发的任务分解可执行的最小单位任务小结 马斯克的任务分解
我们都知道埃隆·马斯克Elon Musk他既是电动汽车公司特斯拉Tesla的创始人同时还创建了太空探索公司 SpaceX。SpaceX 有一个目标是送100万人上火星。
美国政府曾经算过一笔账把一个人送上火星以现有技术是可实现的需要花多少钱呢答案是100亿美金。如果照此计算实现马斯克的目标送100万人上火星就要1万万亿。这是什么概念呢这笔钱相当于美国500年的GDP实在太贵了贵到连美国政府都无法负担。
马斯克怎么解决这个问题呢他的目标变了他准备把人均费用降到50万美元也就是一个想移民的人把地球房子卖了能够凑出的钱。原来需要100亿美金现在要降到50万美金需要降低2万倍。
当然降低2万倍依然是一个听起来很遥远的目标。所以我们关注的重点来了马斯克的第二步是把2万分解成20×10×100。这是一道简单的数学题也是马斯克三个重点的努力方向。
先看“20”现在的火星飞船一次只能承载5个人马斯克的打算是把火箭造大一点一次坐100人这样就等于把成本降低20倍。如果你关注新闻的话会发现 SpaceX 确实在进行这方面的尝试
再来看“10”马斯克认为自己是私营公司效率高成本可以降到十分之一。他们也正在向这个方向努力SpaceX 的成本目前已经降到了同行的五分之一。
最后的“100”是什么呢就是回收可重复使用的火箭。如果这个目标能实现发射火箭的成本就只是燃料成本了。这也就是我们频频看到的 SpaceX 试飞火箭新闻的原因。
这么算下来你是不是觉得马斯克的目标不像最开始听到的那样不靠谱了呢正是通过将宏大目标进行任务分解马斯克才能将一个看似不着边际的目标向前推进。
软件开发的任务分解
当一个复杂问题摆在面前时我们解决问题的一个主要思路是分而治之
一个大问题我们都很难给出答案但回答小问题却是我们擅长的。所以当我们学会将问题分解就相当于朝着问题的解决迈进了一大步。
我们最熟悉的分而治之的例子应该是将这个理念用在算法上比如归并排序。将待排序的元素分成大小基本相同的两个子集然后分别将两个子集排序最后将两个排好序的子集合并到一起。
一说到技术大家就觉得踏实了许多原来无论是外星人搜寻还是大名鼎鼎的马斯克太空探索计划解决问题时用到的思路都是大同小异啊确实是这样。
那么用这种思路解决问题的难点是什么呢给出一个可执行的分解。
在前面两个例子里面最初听到要解决的问题时估计你和我一样是一脸懵的。但一旦知道了分解的结果立即会有一种“柳暗花明又一村”的感觉。你会想我要是想到了这个答案我也能做一个 SpaceX 出来。
但说到归并排序的时候你的心里可能会有一丝不屑这是一个学生级别的问题甚至不值得你为此费脑子思考。因为归并排序你已经知道了答案所以你会下意识地低估它。
任务分解就是这样一个有趣的思想一旦分解的结果出来到了可执行的步骤接下来的工作即便不是一马平川也是比原来顺畅很多因为问题的规模小了。
在日常工作中我们会遇到很多问题既不像前两个问题那样宏大也不像归并排序那样小但很多时候我们却忘记了将任务分解这个理念运用其中给工作带来很多麻烦。
举一个例子有一个关于程序员的经典段子这个工作已经做完了80%剩下的20%还要用和前面的一样时间。
为什么我们的估算差别如此之大很重要的一个原因就在于没有很好地分解任务所以我们并不知道要做的事情到底有多少。
推演的过程就是一个任务分解的过程。上手就做多半的结果都是丢三落四。你会发现真正把工作完全做好你落掉的工作也都要做无论早晚。
与很多实践相反任务分解是一个知难行易的过程。
知道怎么分解是困难的一旦知道了行动反而要相对来说容易一些。
可执行的最小单位任务
在“任务分解”这个主题下我还会给你介绍一些实践让你知道这些最佳实践的背后思想就是任务分解。如果你不了解这些实践你也需要知道在更多的场景下先分解任务再去做事情是个好办法。
也许你会说任务分解并不难于理解我在解决问题的过程中也是先做任务分解的但“依然过不好这一生。”这就要提到我前面所说难点中很多人可能忽略的部分可执行。
可执行对于每个人的含义是不同的对于马斯克而言他把2万分解成20×10×100剩下的事情对他来说就是可执行的但如果你在 SpaceX 工作你就必须回答每个部分究竟是怎样执行的。
同样假设我们做一个 Web 页面如果你是一个经验丰富的前端工程师你甚至可能认为这个任务不需要分解顶多就是再多一个获取网页资源的任务。
而我如果是一个新手我就得把任务分解成根据内容编写 HTML根据页面原型编写页面样式根据交互效果编写页面逻辑等几个步骤。
不同的可执行定义差别在于你是否能清楚地知道这个问题该如何解决。
对于马斯克来说他的解决方案可能是成立一个公司找到这方面的专家帮助他实现。对你的日常工作来说你要清楚具体每一步要做的事情如果不能说明任务还需要进一步分解。
比如你要把一个信息存起来假设你们用的是关系型数据库对大多数人来说这个任务分解就到了可执行的程度。但如果你的项目选用了一个新型的数据库比如图数据库你的任务分解里可能要包含学习这个数据库的模型然后还要根据模型设计存储方案
不过在实际工作中大多数人都高估了自己可执行粒度低估任务分解的程度。换句话说如果你没做过任务分解的练习你分解出来的大部分任务粒度都会偏大。
只有能把任务拆分得非常小你才能对自己的执行能力有一个更清楚地认识真正的高手都是有很强的分解能力。这个差别就相当于同样观察一个物品你用的是眼睛而高手用的是显微镜。在你看来高手全是微操作。关于这个话题后面我们再来细聊。
一旦任务分解得很小调整也会变得很容易。很多人都在说计划赶不上变化而真正的原因就是计划的粒度太大没法调整。
从当年的瀑布模型到今天的迭代模型实际上就是缩减一次交付的粒度。几周调整一次计划也就不存在“计划赶不上变化”的情况了因为我的计划也一直在变。
如今软件行业都在提倡拥抱变化而任务分解是我们拥抱变化的前提。
小结
虽然我们很熟悉这一思想但在日常工作中我们却没有很好地应用它这也使得大多数人的工作有很大改进空间。运用这一思想的难点在于给出一个可执行的分解。
一方面对复杂工作而言给出一个分解是巨大的挑战另一方面面对日常工作人们更容易忽略的是分解的任务要可执行。每个人对可执行的理解不同只要你清楚地知道接下来的工作该怎么做任务分解就可以告一段落。
大多数人对于可执行的粒度认识是不足的低估了任务分解的程度做到好的分解你需要达到“微操作”的程度。有了分解得很小的任务我们就可以很容易完成一个开发循环也就让计划调整成为了可能。软件行业在倡导拥抱变化而任务分解是拥抱变化的前提。
如果今天的内容你只记住一件事那么请记住动手做一个工作之前请先对它进行任务分解。