首先声明,本文所倡导的偷懒的观点,是应该加上双引号的,不是真正的让大家偷懒,而是倡导一种以小成本投入换取大收益(例如开发效率变快,产品质量提高等)的思考和开发方式。
前几天写了一篇博客,讲到优秀的程序员热爱偷懒。在本文中将讲述什么样的偷懒是有价值的,可以做到事半功倍;而什么样的偷懒则是因小失大,万万不能去做的。我们在什么情况下应该偷懒,什么情况下不应该偷懒。
能用较小的投入,产生极大效益的偷懒,才是真正有价值的偷懒。
做任何事情都要讲成本和收益,如果成本大于收益,那这件事情是没有人愿意去做的;如果成本等于收益,则属于可做可不做;而如果成本小于收益,说明这件事是有利可图的,那么就一定要去做,还有一些属于小成本能带来巨大收益的,则更应该抢着去做。根据这个原则,如果在开发过程中,在前期能先付出一些成本,先做一些设计,想好产品应该怎么开发,把各种可能的变化提前想清楚,那么在项目开发过程中就能节约大量的时间,可以更快地完成产品的开发,并且能保证质量。相反如果只是为了完成项目,不管三七二十一就开始下手,结果某一天需求突然发生变化,就措手不及了。或者因为写程序的时候没有考虑扩展性和可维护性,导致代码非常混乱,出现不少BUG,需要花费很多精力去解决这些问题,等等这些都导致时间大量的被浪费,每天都在做一些重复性的劳动,效率低下,心情郁闷,项目延期,产品质量也不高。
聪明并懒惰的程序员,在开发的时候一定不会只注重眼前的东西,他们会考虑到很多方面的东西,例如:
- 某个需求是否有可能会经常发生变化,如果有变化的话,在代码上能否不用改动或者只需要很小的改动就可以支持?
- 某些代码是否可能会被多个不同地方使用?如何减少整个团队的重复劳动?
- 如果过来一个人,能否很容易看懂这些代码?
- 那些很枯燥,工作量又很大的工作,能否通过工具来自动完成?
- ……
基于以上考虑,就有了支持配置的程序(适应变化的需求)、有了不同的类库(代码可能被多个不同地方使用)、程序里会加上合适的注释(这样别人看起来就比较容易懂,就不需要再给他们讲解,客观上节约了很多时间)、诞生了很多工具(处理那些枯燥工作量又很大的工作)。
只顾眼前利益,忽视长远效益的偷懒,是愚蠢的偷懒
人无远虑,必有近忧,在项目开发过程中,很多时间都是被浪费掉的。
在项目开发过程中,有时候会出现这种情况:今天有一个需求,说要实现功能A,结果这个功能快要做出来了,突然需求有变动,说这个功能不要了,过了几天突然有说A还是得要。这种情况就是典型的无远虑。人非圣贤,偶尔出现这样的情况可以谅解,但如果在项目开发过程中经常遇到这样的情况,那一定因为在设计这些需求的时候,根本就没有经过思考,而是一拍脑袋就想了个点子,也没考虑任何细节,就很轻率地启动任务了。拍脑袋固然很爽,而且也不需要花费什么力气,但导致的后果是非常严重的,会浪费很多时间,并且很容易影响情绪和团队的士气。这种就是属于只顾眼前利益,忽视长远效益的偷懒,这样的人是极其愚蠢的。
最有价值和有智慧的偷懒,其是是创造和分享
万事都有趋利避害的天性,如果一个东西能给人带来便利,减少繁琐的工作量,那么这个东西是一定会非常受欢迎的,因此从如何偷懒入手,其实是商机无限。如果有件事情你做起来觉得很麻烦,很繁琐,简直不是人做的事情,但是却不得不做,而且还是每天都要做。很多人都会抱怨,但实际上完全没有必要抱怨。因为如果一件事情真的是如此令人厌恶而且还不得不做,那往往除了你之外很多人也不得不做类似的事情。那么如果你能想到一个办法,或者发明一个工具来解决这个问题,那这个东西一定会受到大家的欢迎。仔细想想,又有哪个发明不是这样来的呢?很多发明都是来自于人们想偷懒的需求,难道不是吗?这样的偷懒难道不是有价值和有智慧的吗?