优秀程序员的两大要素:懒 + 笨

2005年10月28日

优秀程序员的两大要素:懒 + 笨

2005.10.26  来自:残缺空间

只有懒惰的程序员才会去编写那些可以最终代替自己工作的自动化工具,才不会成天为了实现相似的功能去编写大段大段冗余重复的代码 – 这种代码往往是软件后期维护和重构的天敌。通常来说,由于惰性的驱使所产生出来的工具和程序将最终极大的提高生产开发的速度。

当然,对于一个程序员来说,光光具备懒惰这个要素还是不够的。在享受懒惰之前,他必须以最大的热情和最高的效率去研究解放自己的途径,比如:找到最有助于开发的工具,最能体现“一次编写,多次复用”精神的代码架构的设计。只有在这些必要的工作之后,才可能真正享受轻松编程的乐趣。

所以“懒”的精髓用一句老话来描述,那就是磨刀不误砍柴功。如果你不想办法磨亮手中的柴刀,就算一天二十四小时都在砍柴,效果也不如拿把锋利的斧头一天只砍一小时。

从这个角度来说,Google给员工的20%自由时间是完全发挥了“懒”的能动力。为了更好的享受偷懒的乐趣,员工会更加具有创造力的去高效完成自己的任务。

夸张一点来说,懒惰才是人类进步的原动力。

这一点似乎比懒更让人不能接受。在解释这里所说的笨的具体含义之前,我们先看看一个聪明人(或者说认为自己足够聪明)会做什么:

    1) 停止学习新的东西

    2) 不愿意用批判的眼光去审视自己的工作

第1点将使我们很难去接受或者主动的去研究一项新的技术 – 即使新技术能带给他更多工作上的便利。第2点会使我们无法清晰的分析自身工作的问题所在,要对其进行改进或者重构就更加困难。

从这两点来考虑,作为一个程序员太自以为是不见得是件好事情。由于对自身的过于自信,往往无法客观的看待自己和自己的工作。相反的,笨一点(确切的说,谦逊一点)有时候倒有助于开发的顺利进行。举例来说,当程序出现bug的时候,最好尽早承认问题是出在自己编写的代码上面而不是在于编译器(当然除非是字节高低位编码方式之类的问题,这种问题编译器会是错误的根源之一)。如果你太自负的认为自己的程序没有问题而去猜测可能是编译器或者其他的什么外部因素出问题的话,那么十有八九你会在调试过程中走上一长段的弯路。

程序员应该笨一些的更为关键的原因在于,当需要思考问题的最佳解决方案的时候,往往要求我们首先要跳出思维定式。你对系统了解的越多,积累了越多的经验,就越难走出已有的局限,可以尝试的范围就越小。相反的,对于一个什么也不懂的门外汉来说,因为没有任何失败的记忆和潜规则的约束,也就没有什么是“不可能”的,这样的大脑所能迸发出来的在专业人士看起来愚不可及的想法往往正是解决问题所需要的关键点所在。

pig345:   有道理,把我几年前的感悟说出来了。
  懒 实际上是身体懒惰而头脑勤奋。
  其实人类正是由于这种“懒”才从原始社会进化成现代社会的。如果老祖宗都勤奋地去森林里找野果子吃,也不会有农业/工业/现代化了。

r_mosaic:
懒有可能是:一、能不用代码生成器而从架构上清晰合理地减少手工代码敲入的程序,就从架构上优化,以减少人工编写的冗余代码。二、如果架构上无法优化,或者优化了以后会严重降低清晰度或减少必要的灵活性,那么就编写和使用代码生成器,在此生成器生成的代码的基础上再做人工修改。

为什么要这样做的原因:程序员是人,人写重复但却每一遍不完全相同的东西(例如枚举)是很容易出错的。如果你很享受这个出错的感觉,那多做做也无妨,但是将来次数多了以后肯定会觉得还是简化一下或写个代码生成器来得方便。

总之是磨刀不误砍柴工。平时要习惯在某些重复劳动或者希望自动化的地方多写些脚本,于是“懒”的习惯会自动养成的。如果不懂得这里的“懒”是什么意思,那么也许这个人是把计算机当作了计算器。

“优秀程序员的两大要素:懒 + 笨” 已有 2 条评论

  1. Unknown 在

    又懒又笨的人不写程序。。。比如我。。。

  2. Robbie Mosaic 在

    所以这是牛人啊!

留下您的评论