我经常听到身边的同学发表这样的言论:

  • 要是再多给我一点时间,我一定把那个模块完成。
  • 时间来不及,我只能用 quick and dirty 的手法。
  • 现在的代码一团糟呢,妈的,deadline 到了,等以后有空再重构吧。
  • 不管了,看上去能工作……提交。

唔,是不是很熟悉?你也这么说过吗?好吧,我先举个手……

回顾我过去两年多时间里写过的程序,我发现一个非常令人震惊的问题——几乎所有的程序都特么是烂尾程序!!!我一度认为自己对代码质量要求比较高,眼里容不得任何丑陋的东西。但是,看着往日的那些程序,我知道自己是多么愚蠢了,多么纸上谈兵。在我大一刚开始学 Java 时,我的老师说,

不要看着这些程序傻,你们以后往往会用更傻的程序做一件事。大多数同学会亲手制造很多垃圾代码。

我当时不以为然,谁会愿意用更烂的方式来解决问题?现在想想,那时的自己 too young,too simple!我们从心底里不愿意用更低效的算法,不愿意写更烂的代码,但是,实际上我们一直在做着那些我们觉得是耻辱的事情。做完这些事情后,我们竟然还在给自己的过错寻找各种各样的借口。啊,要是再给我一点时间完全就不是那个样了!

我最近一直在思考一个问题,为什么当时我能容忍那些丑陋的东西?如果再给我一点时间,我能写得更好吗?我想了想有两个重要因素影响着程序员生产的代码。

  • 对作品的期望
  • 写程序的驱动力

1 对作品的期望

对作品的期望也可以认为是写程序的动机和目的。你为什么要写程序?是遇到了问题需要一个小工具?是为了实现一个想法?还是为了应付老师的作业,为了混口饭吃?

我觉得写程序的动机对最后产品的影响至关重要。程序的目的几乎决定了你写程序的状态。倘使你有一个美妙的想法,你想通过程序来做点什么,那么在写代码时,我想你的状态可以用 像打了鸡血一样来形容。如果仅仅是为了应付某项自己也觉得无聊的任务,那么写着写着就没了动力。

回头看看自己作品,为了应付任务的占了多数(失败啊!!!)。在写作业时,我经常想:哎呀,这个东西写完就拉倒了,助教都不看你代码。以后也不会碰它了,犯得着做这么多设计嘛。用着为日后拓展和维护提供便捷的心来写作业简直是自找麻烦。这么个作业,完成功能就好了。我的老师教导我,写软件呢,一定要从实际情况出发,根据当前和未来的发展形势来做设计。唔……又有了写烂尾代码的理由。那程序的未来就是评分结束后没有未来。这样的做法极度功利,但又似乎合乎逻辑。再多一点时间,也不能做得更好。

当然,我们也会遇到自己特别想做的事。我们写程序不是去应付任务,而是去改变世界(- -     有点大了呢)。你心里有个美好的事物,你还会愿意那么随便搞搞,草草了事,提交万岁么?你对作品有了高层次的期望,你希望它有未来,你也希望显示自己的才华。所以,你或许就打了鸡血?

喂,你是想说对作品期望低就不能做得更好,对它期望高就能了吗?唔……也不全是那样啦。“理想很丰满,现实很骨感。“没听说过?再高的期望,也需要脚踏实地的写啊,亲。

2 写程序的驱动力

大学三年,我对某个英文单词有了刻骨铭心的记忆,他就是人见人怕,花见花败的 deadline 君。每当 deadline 降临,人人网和学院的教学支持系统上总是哀声遍野……呜呼,deadline 猛如虎,让我吃得苦中苦。于是,软件开发除了什么测试驱动之类的方法论外,还有种杀敌千万的 deadline 驱动。有位同学曾画过一张关于生产力和时间关系的图。大致意思是,平日里游手好闲,而 deadline 临近时,生产力陡增,deadline 一走,生产力陡降……这是神奇的现象啊!

这种deadline 驱动的开发方式和所谓拖延症关系密切。没当 deadline 来临,我们总是会说:再给一点时间吧,我能做得更好。真的吗?据我的亲身经历和所见所闻真没看出来。我院在过去的一个学期里,出现了数次作业 deadline 延期现象。一般的桥段是这样的

  • 某作业一个月以后交
  • 大半个月里动手的寥寥无几
  • 我擦,deadline 要到了,还没做呢
  • 老师,能不能宽限几天?
  • 哈哈,推迟一个礼拜,先缓缓
  • 干啊,deadline 又来了,还没写完呢
  • 老师,能不能再宽限几天?
  • 不管了,交!

实践证明,即使再给你多一点时间,你也不能做得更好,因为你把时间浪费在了等待下一个 deadline 上!于是乎,我对自己安慰道:唉,咱尽力了,本来能做得更好的,时间太紧,没办法。这是何等悲哀!

当然,除了 deadline 驱动,也有很多是兴趣驱动和热情驱动,想比而言,他们的工作时间更加分散。当然,生产力不是平均的,在兴奋点上时,生产力出奇的高,在低估时,也出奇的低。程序最后要么是做得比较完整,要么就是挖了一个大大的坑。前者靠坚持,后者么,热度过了不想写了。这时候再给一点时间能做得更好么?我相信,能坚持的同学会把这些时间利用起来,慢慢完善。而挖坑的同学……早就不需要更多的时间了。

3 小结

文章乱七八糟的,其实我最想说的是,如果自己是抱着应付的态度,以 deadline 驱动去写代码,那么给再多的时间都是浪费。软件的品质也不会高到哪里去。如果真心想写,并且能坚持,多一点时间就真是好事。