如果我有时间,我会写更短的代码

eBay的代码量已经比Windows+Linux更多了。从我看来,这绝不是一种恭维,而是彻彻底底的技术人员的失败。从代码的角度,越短的代码,就越有力量。

Mark Twin曾经在给一个朋友的信中说道:

我亲爱的朋友,如果我有更多的时间, 我就能给你写更短的信了。

文字是这样,代码更是这样。

有了面向对象的方式和一些简单的设计模式加一些重构,代码可以变得非常的简单,明了,易读,却依然保持灵活和强大。在百姓网,我们曾经把2000行代码重构为250行(迷你朝歌),然后又把另外几千行代码重构为250行(迷你荆州)。我觉得250行代码是一个神奇的数量,很多的功能模块,就算用PHP这样并不是完全面向对象的语言,也应该控制在250行之内。我个人的编程习惯和目标是,把每个函数控制在7行代码之内,把函数的数量控制到最小,用最短的代码完成功能。我个人用的简化代码最有效的方式,就是写一段代码,彻底删掉,重写,然后再删掉。在如此十几遍之后所得到的代码,通常比第一次要好得多。

百姓网在过去的一年里面,每周四下午的乐高日,就是定期的重新审视已经写好的代码,并且进行重构的固定时间。取名为乐高,寓意就是,我们希望产生的代码就像乐高的小积木块一样,足够小,足够灵活,却可以以此组合成各种东西。我们的代码,就应该是那些小乐高的积木。

乐高日每次重构竞赛的优胜者,会得到一个乐高积木。我们发的第一块是乐高最经典的红色3001号模块,然后是3002,3003。。。希望我们的代码可以像乐高一样经典。

对于小和短的追求,是为什么百姓网的每个技术人员的第一周一定可以在250行代码之内,一个小时之中,把百姓网的基本功能完成一遍的原因。

为了更好的代码,每天上线前,产品的所有人员(10个人)都会收到所有代码总行数邮件。代码量的增加,对于我们来说不是件好事。我们用拉锯战的方式在功能增加的同时,把代码量牢牢地卡在原地,并且不断减少。我们希望有一天,网站运营的PHP代码会被压缩到5000行之内。

就像对于代码的数量的追求一样,我们追求代码的质量,我们追求最实用的解决方案(我们是彻彻底底的实用主义者,希望用最小的代价解决问题),我们也追求网站的速度,内容的质量。。。技术人员,就应该有些技术人员的样子。毕竟,无论做什么,都要有些追求的。。。

baixing.in.sand.jpg
百姓网在威海海滩。沙滩上的字是:weihai.baixing.com

《如果我有时间,我会写更短的代码》上的25个想法

  1. 技术人员,就应该有些技术人员的样子。毕竟,无论做什么,都要有些追求的。。。
    ——赞同

  2. 从繁入简,才是真功夫。
    除了Mark Twin的例子,中国书法史上也有相关(不完全相同)的例子。草圣张芝也曾说过:匆匆不暇草书。

  3. 有一个代码洁癖的人浮出水面。根据“偏执狂才能成功”定律,百姓网的成功概率越来越高了。

  4. 有没有这样的调查,所有成功的网站每个功能的代码量比较?生命周期本来就只有几个月的代码,经过优化后能把生命周期延长到几年么?项目的成功究竟依赖于代码的精简还是其他方面。

  5. Hi Jianshuo – 看了百姓网对代码的极致追求,冒昧问一个问题,百姓网现在的PHP代码是否都是自己写的raw PHP? 有用到(甚至大量用到)第三方lib/extension/framework吗? 若有对这部分代码的数量和质量如何来选择、控制?

  6. 用到一些,但是不多。我们标榜自己为实用主义者,我们选择用还是不用的基本原则是:该用就用,不该用就不用。换句话说,就是没有教条的原则。

  7. @ssword,第一句话从来没有说“代码量的=技术人员失败”。这是一种断章取义的说法。重读一下试试?我说的是有语境的。

  8. 简单而且有效,就是力量和方向。能把复杂的编程简化,但同时还保留了相同的功效,就非常不简单。

    本人对编程不热衷,但最近经常到百姓网浏览,感觉非常不错,能自动识别并主动链接到使用者所在城市的信息,方便,有效。这是站在顾客角度换位思考的结果。背后是百姓网技术人员的努力和成就感。

  9. 这配图够雷人的。如果我有时间,我会XXXXXX。但是一般的公司不会给你这么多时间,百姓网能这样做是技术人员的向往啊。

  10. 我记得这段话是《代码之美》里面的一段话吧?完完全全都是引述人家的话啊!

  11. 更简洁的代码需要的是时间!如果你加班到深夜写出一堆代码完成了一个功能,通常老板会觉得这个员工很优秀;如果你没有加班,用很少的代码量完成同样的功能,通常老板会觉得,第一这个功能很简单,第二你的工作不努力。

  12. 前一阵子正好接手了一个项目,就是基础打的很乱的那种。折磨死了。
    这次带新项目的时候一定跟开发经理好好确定清楚架构,并尝试引入类似重构日的机制;

    PS:前几天看完reader里头的文章,做了星标。
    今天想起来有篇文章一定要回复的,于是摸着路回来了。

    顺便加个“尾巴”:呼吁建立一种机制,让回复的回复能SNS化,或者至少能提醒被回复人(之前有看到邮件提醒的插件,但没人用也是白搭;)

  13. 这个blog的layout绝对是我见过最简洁明了的。

    你好!我是今天下午在新加坡国大的那个talk里你的的听众之一。后来google到你的blog,就订阅了,觉得你是个相当有意思的人。 :)

  14. 百姓网做了这么久了,感觉吃痴迷技术,技术不错,页面不错,为何没有人气呢?
    58很俗,很烂,但是人气足,这就是市场

  15. 不要太偏执啊。有个著名的劣币驱逐良币的定律,好像适应于很多领域的。

发表回复

您的电子邮箱地址不会被公开。