十二 12

克服敲代码之“痒”

作者: baiyuzhong 分类:管理   阅读:20,134 次 添加评论

文/余晟

程序员要有哪些职业素养?关于这个话题,已经有很多资料了。最近我和章显洲一起翻译了Uncle Bob的《Clean Coder》,整本书谈的都是程序员的职业素养,而且讲得很在理,有兴趣的读者不妨找来一阅。不过,今天我想根据自己的经验和观察,谈谈“程序员的职业素 养”的一个方面,就是“克制”——克制写代码的冲动。

许多年前我刚开始学编程时,朋友曾说过一个笑话:差劲的程序员有两种,一种是开始就写 main函数的;还有一种是上来就上网找各种类库源代码的。当时我并不能完全理解:编程序,不去找类库源代码,不从main函数开始,那要怎么做呢?后来 才逐渐明白,上来就写main函数,或者上来就找类库找源代码,归根到底都是因为不能克制对于代码的冲动。直接写代码当然很“爽”,很有“成就感”。可 是,这样做真的是好事吗?

在现实生活中,我确实看到相当多的程序员写代码的冲动相当强烈,甚至难以克制。这可能是因为任何软件都需要以代码 的形式来实现,拿到一个任务,直接写代码可以为程序员带来强烈的成就感。在心里想个明白或在纸上写写画画,反而成了一种难以克制的煎熬。但有经验的人都知 道,程序不等于代码,程序的含义和复杂性远远超过代码;没有明晰的需求,没有清楚的头脑,没有良好的规划,写出来的代码就成了无源之水,无本之木,写得越 爽,后果可能越严重。

我曾经见过一套系统,其中充满了各种状态码的条件判断,这种情况本来很正常,不幸的是所有的状态码都是硬编码的数字, 整个系统就是一本天书:一会儿判断这里是否等于2,一会儿判断那里是否大于7……究其原因是程序员觉得这些状态码无非就是“用数字代表状态”,所以随便选 些数字就好了,2代表什么,7对应什么,自己记得就好了。更重要的是,硬编码的状态码“用起来方便”,敲代码的速度大大提升——不需要查找变量,也不需要 输入整个变量名。这种系统的问题相信大家都猜得到,维护和修改起来无比痛苦。因此,尽管写这些程序的程序员已有一两年甚至更多年的工作经验,但很难说他们 有“职业素养”。

与此相反,重构的人员吸取了之前的教训。虽然全部硬编码看起来不爽,用起来更不爽,人人都有立刻动手改掉它的冲动,但重构 时不是首先改代码,而是先仔细阅读程序,编写了一份包含所有状态码的图表(并且打印出来供随时查阅),再根据状态码的意义和使用场景,重新设计状态码(因 为各个状态之间还存在逻辑关系,所以需要以自定义类型表示状态),最后才动手编码完成重构。事实证明,这种策略是非常成功的:阅读代码、制定图表、重新设 计需要三周的时间,真正的重构只用几天就顺利完成了,而且从此以后维护和修改的难度大大降低,真正达到了重构的目的。完成重构工作的程序员,工作经验并不 比最初编写程序的人多,他们没有一开始就写代码,甚至没有花太多时间在代码上,更没有用到高深莫测的技术,但他们身上体现出来的,恰恰是可贵的职业素养。

几乎所有程序员都喜欢狂敲代码的快感,但职业程序员必须要克制写代码的冲动,在写代码之前花更多时间理解需求,设计系统,制定规划,这样写出来的代码才会更加精练,更加聪明,整个程序也因此更有价值。贡献更有价值的程序才是程序员职业素养的体现。

作者余晟,非正统技术爱好者,毕业于计算机系,副修中文,《正则指引》作者。

本文选自《程序员》杂志2012年12期,未经允许不得转载。如需转载请联系 market@csdn.net

《程序员》2012年杂志订阅送好礼活动火热进行中

转播到腾讯微博

----->立刻申请加入《程序员》杂志读者俱乐部,与杂志编辑直接交流,参与选题,优先投稿

10 Responses to “克服敲代码之“痒””

  1. zkong 说道:

    同感。
    冲动是魔鬼,经常需要克制打开Vim一顿狂切代码的快感。

  2. coolulu 说道:

    vim万岁

  3. zian1689 说道:

    呃,发现自己就有一上来就敲main的习惯.

  4. golulu123 说道:

    xuexi le

  5. mouren1398610506 说道:

    想都不想先输#include

  6. tfl168 说道:

    有同感!同意义!

  7. yelawolf 说道:

    我只是费解,我是尚未毕业的大学生,需求分析和软件架构的能力较差,我觉得这可能和我对业务知识的匮乏有关,在这种情况下如何才能对需求分析和系统设计有清晰的认识,或者说如何才能对业务流程有了解呢

  8. fzyz.abc 说道:

    作为一个刚毕业半年的程序员,个人觉得程序员前期需要多敲敲代码,并学会思考。而慢慢的就会思考的时间多,而敲代码的时间少。

  9. sausage 说道:

    不错噢。磨刀不误砍柴工,唉。。可惜,技术太菜。。

  10. jeswang 说道:

    刚好在看你的正则指引,就在豆瓣一个小站上看到这篇文章,缘分啊。

请评论

preload preload preload
京ICP备06065162