编程很像吃饭。

晚上我饿了。我不在家。我不能到厨房里找点东西吃。我四周看了看,看到只有一家街对面的麦当劳。

于是,我就进入了一个任何时候我离开家、离开我那舒适的小窝后遇到的两难境地:是吃那些垃圾食品,先填饱肚子呢?还是先饿着肚子,等回到家后去吃更健康的食物?

当我在思考这种困境时,我不禁或多或少会把这个问题跟代码质量作一定的联系。当然更多的还是先考虑吃的问题。

我的话只是表达我自己的观点,我并不认为麦当劳是一个能够提供我健康食品的餐馆。作为一个追求绿色食物的人,甚至只是作为一个注意饮食的人,麦当劳的食品远在我的健康食品的标准之下。但是,我相信,跟你们很多人一样,我们已经养成了吃麦当劳里的食物时不再思考这些食物的健康价值了。我饿了,麦当劳里有食物。

既然我已经认识到了麦当劳食物对我身体的短期和长期的影响,我就会全力避免去吃它。对所有预处理过的食物都要这样。这对我来说是漫漫长路。决定去改变自己的饮食习惯并不是一蹴而就的事,健康饮食是一种持续动作

很快你就会发现这一切都跟编程有联系。

健康饮食是一种持续动作?

麦当劳的食品不是一种健康食品。然而吃巨无霸汉堡加水果沙拉会比吃巨无霸汉堡加油炸土豆条要稍微健康一些。吃星巴克的金枪鱼会比吃大汉堡要稍微健康些。在本地咖啡连锁店里喝一碗汤要比吃星巴克的沙丁鱼要稍微健康些。在家里吃新鲜蔬菜做的食物要比其它任何地方的食物都健康。

按这样的方式看食物,我们会得出两点信息:

  1. 所有的事情都是相对的。你永远都可以做到更好,也一直可以做的更差。吃一个巨无霸汉堡并不意味着你会死,而为了能在家里吃饭而忍住一天不进食也未必更健康。
  2. 每一顿饭都是一个新的开始。人很容易落入这样一种陷进:“既然我昨天已经吃了一个大汉堡,不妨今天就再吃一个了”。这种思考方式是毫无逻辑的,也是有害的。每顿饭要吃什么都是一个新的决定。即使你今天早餐吃了一个大汉堡,午餐时吃家做的食物也是你的健康饮食之旅上前进的一步。

把程序代码当作食物

很像食物,代码质量的保证也是个持续的过程。

从简单层面上我们可以认为,一个没有测试和文档就发布的程序包要比有测试和文档的相同的程序包质量要差。可是,在这些一眼就能看清楚的问题之外,还有很多说不清楚的东西。没有人都对什么是”健康”的代码有自己的标准。有些人非常清楚自己的编程问题,并在不断的改进自己。有些人数年来一直写着相同烂代码却从来没有想过这些代码是否“健康”。

做出健康的选择–像对待食物那样对待程序代码。

就像你需要吃饭一样,你最终需要发布你的程序。那么,如何处理这短期和长期里的影响呢?

如果你按照吃麦当劳食物的态度,发布了烂程序出去,那么,短期内你的需求是满足了。但从长期看,你将会一直受到它的影响。你的代码将会很难维护,需要你投入更多的精力。它对你长期的生活和健康没有什么好处。

如果你遵循吃家做食物态度,短时间里你的需求可能不会得到满足。这短期的影响是你会饿会儿肚子,但这样做的一个好的理由是:它对你长期的影响是正面的。你的程序代码会更容易维护,bug会更容易解决,而且需求变更后修改起来更容易。你的程序代码会有一个更长更健康的生命期。

抉择

写健康的代码跟你保持健康饮食一样,需要:认识和承诺。

从吃垃圾食品到健康食品需要你认识到有些事情需要改进。对这些认识采取行动需要你对决定作出承诺。改进你的编程习惯需要同样的事情:认识到有些地方需要改进,并承诺做出行动。通常来说,你的抉择需要符合实际。你必须要吃饭,你的软件到一定时候必然要发布。找不到健康的食物,麦当劳必须是你的选择。我不知道你的软件项目会有什么样的限制因素,有时你不得不发布烂程序。但你要记住, 健康的编程是一个持续过程。用沙拉换掉你的巨无霸汉堡边的炸薯条。

世上没有‘最健康’的食品。你可以花上一整天来烹饪你认为的最健康的食品,但如果它没有进入你的胃里,就谈不上有什么用处。 代码质量很重要,但如果你不发布它,一切都没有意义。最好的获得更健康的代码的途径是持续的改进。让你的程序每天都有改进,而不是期望一朝一夕就丢掉你所有的不好的编程习惯、期望以一个全新的更健康的来代替。