几个月前,我偶然看到了一篇文章,内容大致为“用九年时间搭建自己的棚屋”,我不想讽刺它,但是这个棚屋真的有够丑的。
读这篇文章时,我简直惊呆了,这样一个棚屋竟然消耗了他们九年的闲暇时光,从这件事,也可以间接说明他们的创造力。
我之所以这么说,是因为我也有自己的“棚屋”。
“棚屋” —— 一个占用了你很长时间的项目,你早已对它失去了耐心,它的存在也失去了本来的意义。
我用一个统计结果来讲述自己的故事:
- 2014 年,部分原因是我需要完成我的硕士论文,我开始尝试搭建自己的“棚屋”,虽然我顺利毕业了,但是对这个棚屋并不满意。
- 我公开了自己的“棚屋”,被一些文章引用 —— 一场认知偏差冒险。
- 因为这次成功的经历,我毕业后失业了一年,重新“翻修”了我的“棚屋”。
- 我的钱花完了,不得不去公司工作,我只能在空闲时间完成我的“棚屋”。
- 从 2014 年到 2019 年,我制作了九个完全不同版本的“棚屋”(不同的故事情节、角色、教育意义、艺术风格),没有一个是令我满意的。
- 即使花了五年时间,做了九个不同版本的“棚屋”,但它们全都没有达到我的标准,我坚持认为,只要给我足够足够多的时间,我肯定可以搭建出一版令我足够满意“棚屋”。
- 于是,我递交了辞呈,打算把“棚屋”修完再去工作。
- 谢天谢地,管理层保留了我的职位,鼓励我在六个月时间内,完成“棚屋”的搭建之后,再回来上班。
- 直到那时,我才意识到,我所做的事情不过是在搭建一个“棚屋”。
这是我完成的“棚屋”,统计向导指南。
棚屋永远都不会完成,除非你决定终止它。
也许,更重要的,是我在搭建这个“棚屋”的过程中学到的东西。
警惕你的“棚屋”
这个棚屋会消耗你的生命。
项目在变成一个真正“棚屋”的过程中,会不停的发展和延伸。“棚屋”项目从一开始就被低估了。你以为只需要几个月,然而拖到了一年。然后在时间的长河里,你的技能得到了提升,你开始想,至多再花一个月时间就能完成。后来这个项目的影响力远低于你的预期,你开始尝试重构项目。
这是我在上一个项目中的迭代版本。每一次迭代之前,我都以为这次是最终版。
软件项目就像制作蛋糕
蛋糕的制作有时间限制,软件也是。你事先就知道,做蛋糕大概需要多久。如果你估计需要3个小时,那么稍微超出一点时间,问题不大。但如果你实际上拖了一周才做出蛋糕,蛋糕内部可能已经坏了。软件也是这样,如果实际耗费的时间大大超出原先的估计,这个软件十有八九是有问题的。
蛋糕的体积很小,软件项目的规模也不应该很大。小体积意味着你可以快速进行大量迭代,找出真正有效的方法。每次迭代都是一个实验,它帮你发现有价值的部分。小体积还可以很容易地进行试错。
蛋糕有消费者,软件也必须有消费者。如果你做出蛋糕,肯定有人愿意尝尝。用户会提供真正客观的数据,帮助发现蛋糕哪里做得比较好,哪里需要改进,这使得设计决策更容易。软件也必须有人愿意尝试,千万不要做出没有人愿意吃的蛋糕。
做蛋糕很有趣,动手前你就知道会做出什么。软件也应该这样,你很清楚做出来会是什么样,然后再迭代。每做一次蛋糕,就测试一个新想法。如果你感到这件事不再有趣了,很可能哪里出错了。
总之,你把软件想成是一块蛋糕,可以想通很多事情。
你会为我的蛋糕买单吗?
不幸的是,这个道理我知道的太晚了,我花了五年的时间在一个“棚屋”上 —— 在没有用户反馈的情况下进行编码和设计。在这种情况下,挽救这个项目的唯一办法是有人使用它。拜托你使用我的项目,好吗?你可以把这项目推荐给其他需要的人吗?你能帮助我把这个项目变成真正可用的项目吗?
不要尝试去制作”蛋糕”,你最后会求着别人来吃它。
常见的问题
你是说不要开发大项目吗?
从某种意义上来说,大项目是一个个小项目的集合。
当我开始构建这个项目时,我有一个愿景,我希望我所做的这个项目是宏伟华丽的,同时也是实用的、有趣的,并且是一本实用的统计指南。这个项目几乎涵盖了我们生活中所有统计需要用到的概念(期望值、方差、常见分布、中心极限定理、贝叶斯规则、回归、最大似然,以及我刚刚学到的任何其他内容)。随着项目的迭代,内容变多的同时,质量也开始下降,这是令人沮丧的:我正在构建一个垃圾。但现在,唯一改进的办法是重新构建它。
在做项目的过程中,我没有搜集任何数据,甚至不知道用户是否真的会需要它。不知何故,我天真的以为,只要项目完成了,就能获得成功(一加一大于二)。
你没有从中收获任何东西吗?
我学会的,最重要的事情,是要构建人们真的需要的东西。
我可以看一下你的项目吗?
请跟我来。