克服敲代码之“痒”

        程序员要有哪些职业素养?关于这个话题,已经有很多资料了。最近我和章显洲一起翻译了Uncle Bob的《Clean Coder》,整本书谈的都是程序员的职业素养,而且讲得很在理,有兴趣的读者不妨找来一阅。不过,今天我想根据自己的经验和观察,谈谈“程序员的职业素养”的一个方面,就是“克制”——克制写代码的冲动
许多年前我刚开始学编程时,朋友曾说过一个笑话:差劲的程序员有两种,一种是开始就写 main函数的;还有一种是上来就上网找各种类库源代码的。当时我并不能完全理解:编程序,不去找类库源代码,不从main函数开始,那要怎么做呢?后来 才逐渐明白,上来就写main函数,或者上来就找类库找源代码,归根到底都是因为不能克制对于代码的冲动。直接写代码当然很“爽”,很有“成就感”。可 是,这样做真的是好事吗?
        在现实生活中,我确实看到相当多的程序员写代码的冲动相当强烈,甚至难以克制。这可能是因为任何软件都需要以代码 的形式来实现,拿到一个任务,直接写代码可以为程序员带来强烈的成就感。在心里想个明白或在纸上写写画画,反而成了一种难以克制的煎熬。但有经验的人都知 道,程序不等于代码,程序的含义和复杂性远远超过代码;没有明晰的需求,没有清楚的头脑,没有良好的规划,写出来的代码就成了无源之水,无本之木,写得越 爽,后果可能越严重。
        我曾经见过一套系统,其中充满了各种状态码的条件判断,这种情况本来很正常,不幸的是所有的状态码都是硬编码的数字, 整个系统就是一本天书:一会儿判断这里是否等于2,一会儿判断那里是否大于7……究其原因是程序员觉得这些状态码无非就是“用数字代表状态”,所以随便选 些数字就好了,2代表什么,7对应什么,自己记得就好了。更重要的是,硬编码的状态码“用起来方便”,敲代码的速度大大提升——不需要查找变量,也不需要 输入整个变量名。这种系统的问题相信大家都猜得到,维护和修改起来无比痛苦。因此,尽管写这些程序的程序员已有一两年甚至更多年的工作经验,但很难说他们 有“职业素养”。
        与此相反,重构的人员吸取了之前的教训。虽然全部硬编码看起来不爽,用起来更不爽,人人都有立刻动手改掉它的冲动,但重构 时不是首先改代码,而是先仔细阅读程序,编写了一份包含所有状态码的图表(并且打印出来供随时查阅),再根据状态码的意义和使用场景,重新设计状态码(因 为各个状态之间还存在逻辑关系,所以需要以自定义类型表示状态),最后才动手编码完成重构。事实证明,这种策略是非常成功的:阅读代码、制定图表、重新设 计需要三周的时间,真正的重构只用几天就顺利完成了,而且从此以后维护和修改的难度大大降低,真正达到了重构的目的。完成重构工作的程序员,工作经验并不 比最初编写程序的人多,他们没有一开始就写代码,甚至没有花太多时间在代码上,更没有用到高深莫测的技术,但他们身上体现出来的,恰恰是可贵的职业素养。
几乎所有程序员都喜欢狂敲代码的快感,但职业程序员必须要克制写代码的冲动,在写代码之前花更多时间理解需求,设计系统,制定规划,这样写出来的代码才会更加精练,更加聪明,整个程序也因此更有价值。贡献更有价值的程序才是程序员职业素养的体现。

转自《程序员》官网:克服敲代码之“痒”

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓