看不懂自己写的代码,这对一个职业程序员来说是不可饶恕的

最近遇到一个事情让我大为不解。一个程序员自豪的宣称他完全看不懂自己一周前写的任何代码。我真的想探明他的这种自豪感从何而来,但无解。他是在骄傲每天写如此多的代码吗?有人会愿意聘请这样的人去写程序吗?

首先让我明确的阐明我对此事的观点:不能理解一周前或一年前自己写的代码,这对一个职业程序员来说是不可饶恕的。

我就把话放这。现在,让我详细的说一下。我已经兢兢业业的编程编了15年。很早我就接受了一些编程习惯,至今没有改变。我能轻松的看懂我一年前写的代码,甚至2年前,12年前。各种语言的代码,在各种业务领域里。算法,解析器,web应用,嵌入式控制器,脚本,链接,所有你能想到的。即使有些很早的代码,理解起来有些困难,但我仍然能从中看出一些模式的影子。

我能做到这些,主要的方法是认识到代码必须易读。自己易读,别人也易读。代码如果不可读,那就会跟不可用的代码一样糟,甚至更糟。如果一段时间后你看不懂你自己写的代码,别人就更不可能看懂了,没有这种可能。不会有任何一个软件产品会因为你而值得骄傲。

我无法用更大的声音强调,让自己的代码易读、易理解是何等的重要。不仅仅是它能让你的软件产品更好,更容易被别人维护,同时,这些代码也将成为你自己的私人工具箱,你将会在今后的职业生涯里使用、反复的使用它们。拥有这样一个工具箱,你将变得超级的强大,这将是你区别于其他编程高手的重要特征之一。我己经记不清有多少次,当面对一些似曾相识的问题时,我通过回忆,在我的历史代码库里搜寻,轻松快速的就能找到或整编出问题的解决方案。很显然,你不能理解的代码是进入不了这样的工具箱里的。

这样结束这篇文章似乎有点玩世不恭,我应该解释一下是如何练就这样的功力的。坦率地说,这很难用文字描述,但我尽力。

我非常确信,我的这种方法也被作家们(以及任何从事创新性职业的人)使用。一旦你写完一段代码(越小越好),你需要停下来,看看它是否易读、易懂。读它,反复的读它数次。跳出你对这个问题熟知的环境,想象那些完全不知道上下文情况的人在读这段代码。这样的一个人能读懂吗?如果不能,是因为什么?从你的由《代码大全》等好书丰富而成的“代码可读性”百宝箱里找出所有可以的技巧,应用它们,直到你确信这段代码变得易读为止。

一旦你满意了,再读一遍。几天后再读一遍。这让我想起了我写一些高深技术的文章时,每一个句子,我都要读上20遍,重写5次。我写代码也经常是如此。完美可以因天赋而成,也可通过无情的重复和实验实现。因为我不具有前者,我就一直坚持着后者。

最后,重构,无畏的改进。如果你遇到一段可以更清晰的代码,那就让它更清晰。改进代码质量是我们这种职业中一种难以把握的附加任务,但当你遇到一个持续一、两年,涉及多人的大型项目后,你自然就会领悟其重要。

[英文原文:Understanding your own code ]
分享这篇文章:

23 Responses to 看不懂自己写的代码,这对一个职业程序员来说是不可饶恕的

  1. says:

    隔一个星期的话 我还能重写一次。。。但能比一周前的好

  2. 郭锐 says:

    我就奇怪了,看大牛的文章,总是说代码以易读为主,好像其他的都不重要了,完全不看代码的时间复杂度和空间复杂度,难道技术的进步使得硬件设备越来越好,就可忽视硬件的因素么?现在的程序员的这种想法退回到20年前,能写得出代码么?

    • wowk says:

      大牛两样能兼顾而已

    • Gavin says:

      性能其实也是需要考虑的,但首要的是可读性的问题。尤其是大规模的系统开发。性能问题完全可以通过集群,这样的部署技术解决。但是如果code可读性太差,可维护性太差,那,这样的系统其实就等于被判了死刑。

    • 徐风子 says:

      越易读,就越容易维护,也就越容易改得更好。

      就像作家要先会识字一样。你那个是基础条件。

    • Judas.n says:

      代码跑不了,人会跑,机器会跑.

    • 砖家 says:

      绝大部分的代码,没有涉及到复杂的算法,对性能的影响也小,代码的可读性是影响软件维护工作的更重要因素。

    • wade says:

      我知道我很难说服你,但是,性能的重要性真的远比不上可读性,可读性高的代码能很容易的变成高性能代码,反之几乎不可能。代码性能,系统容量是二流程序员最喜欢拿来吹嘘的主题

    • 寻觅 says:

      代码易读与性能优化并不冲突。难道被优化过性能的代码就不能是易读的代码吗?

      最基本的格式、命名这些,不管是在性能一般还是性能优异的代码中,都应该是统一标准的(至少是你自己习惯的标准)。由于易读而导致性能低下是几乎不可能的,他们本来就没有冲突

  3. Adam says:

    大多数时候我分辨不出哪部分代码是我写的,因为所有的代码看上去都差不多。

  4. hail says:

    代码没必要非得易读吧,对于大众易读的代码,,,,没必要吧,代码易读不是优秀代码的必须,code says“知音难觅”

  5. 白头发乌鸦 says:

    个人觉得代码是否易读的需求取决于代码维护量,如果一个项目需求变更频繁,代码经常要维护,没有易读的代码那就是恶梦一场;反之,接一个项目搞完拿钱闪人,以后爱咋咋的,这样的项目只要能完成就行,谁会在乎个代码易读于否呢~

  6. 博客丛 says:

    代码写的乱点没事,关键要写上注释!

  7. Demon says:

    与人品无关,与良心有染。

  8. dai says:

    曾经写的Perl代码,当时只有我和上帝知道什么意思,现在只有上帝知道了。

  9. aaa says:

    我现在就在给一个旧项目修BUG
    之前负责做这个的人已经跑了
    代码写的非常烂
    各种懒散的空行 (严重的连续十几个空行,还不少出现)
    几乎没有的注释
    变量名随便声明 (各种arr1,arr2,arr3)

    在页面上拼装SQL
    全部`自力更生’ 各种字符串操作
    ( str+= val + “,”; 最后还要去掉后面的逗号,这个做法引发过BUG)
    完全没见过有类似String.Join这样调用系统功能

    上面的描述还不完整
    不管你们怎么看 反正我觉得这台不应该了
    不应该为赶进度而降低代码质量

  10. 假秀才 says:

    好的代码不是因为遵守了某种规范和风格, 而是在于他些的是不是”代码”.

  11. Yonghang Jiang says:

    “我无法用更大的声音强调”
    这翻译似乎有点机械了

  12. Mobile1991  这篇文章
  13. 没学历的农民工 says:

    就算资历浅,代码逻辑不够清晰,命名不够易解,但是能把注释写清楚不行吗?我还在学习中,估计连入门都算不上吧!好歹是把自己的小网站给弄出来了……为了自己以后优化愣是把注释写的快成一片文章了……

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据