内疚的程序员

我发现,当程序员开发了一个项目,然后要把它移交给其他程序员时,他们会对开发这个项目时做出的一些决策感到内疚。我问他们当时为什么选择这样做,他们会羞愧的说,“唉,我知道这不是最好的实现方法,如果现在再去做,肯定不会采用那样的方式。”有些人可能会辩护,或强调一下外部因素,比如工期压力。但我的观点是,程序员不需要为老的项目感到太多的内疚。

经验

我承认,我曾经有一次重新发球的经验。那是一个作为内部工具使用的Ruby on Rails项目。我之前对这种技术架构了解不多。基本上就是把东西按照需求拼凑起来,它运行很正常。没有多少测试,设计上必然是没有体现出最好的设计原则。但它能用。

接着,我做了一个6个月长的Rails项目,过程完全是TDD的。在此之后,出现了一个机会,需要调整那个内部工具,增加一些功能。

我很高兴有这次机会。我感觉对这种技术有了更好的了解,能够看出代码中存在的问题,知道如何用更好的Rails或Ruby技术来解决这些问题。这让人很兴奋。不止一次,我惊奇于那些老的代码竟然能正常的运行。我想,绝大多数程序员都很少能有这样的机会,除非他们是在维护一个老项目,我想这是一次很有价值的经历,让我在事后看清了我自己写的程序。

综合分析

但后来,我开始意识到,程序员不必要为自己开发出的产品感到内疚。新的技术和实践方法不断的出现,等待着你去学习,每一次你都要权衡取舍,总会有事后诸葛亮的情况出现。我应该现在重构这个类,还是放到以后再说?我是需要把设计的容易扩展,或者根本不需要这样?做这个项目时我们是否应该首先尽量的减少技术上的风险?

在针对某一问题我遍历群书后,对解决这类问题我学会了新的技术,新的方法。但这并不能妨碍我们当前的工作。我们不可能百分百的知道我们所需要的知识,我们能想到的方案只是能满足解决当前问题需求。

我相信,程序员都已经尽了他们最大的努力。但这并不能免除程序员犯错误,并从错误中学到经验,也不能保证他们能够进行先知先觉的学习。

我想说的是,程序员如果没有足够的知识以最佳的方式来解决所有的问题或在困境中做出最正确的抉择,他不必为此不安。在之后的岁月里认识到了自己的错误,这是自己进步的标识。每一次都把事情做的正确无误,这暗示一种技术的停滞,或完美主义。哪一种更有可能?

你是否也有过这样的一种愿望,希望能够重新来一次,改变某个软件项目中的某些东西?有过看着自己写过的代码感到恶心的时候?把事情做对,还是把事情做完?平衡点在哪里?在评论里留下你的想法吧!

[英文原文:Guilty Developer Syndrome ]
分享这篇文章:

16 Responses to 内疚的程序员

  1. Rache says:

    上一年年末的时候,项目上线,因为某种原因,那是一个两个系统的混合体,上头说等项目上线了,抽空把这个东东拆分出来。

    然后我花了两个星期不断的整合,拆分,折腾,煎熬。不得不说,看见当初自己写的代码真的羞愧,但是,他们的确经过多次的测试和修补后能正常跑起来,每次改动我都不得不说这是奇迹。

    直到两周后另外一个项目需要接手,我才停止了那种折腾。因为在改的过程中,我觉得,这种拆分重构神马的,都已经不重要了。虽然从维护的角度这很不好,但是从自身的角度,经过这两周的折腾,我已经认识到自己当初的不足,并且会在以后的工作中尽量避免,这不是很好么?

    哈哈,其实我才毕业一年,下次维护我代码的人应该能原谅我的。或者他也是个新手,看不出有什么不妥

  2. Tramisu says:

    是滴 身有同感! 不仅是因为目前正好接手了一个其它团队的项目,而且就连自己之前写过的代码,也会经常感到有待优化,值得反思。 但是其实我觉得花费适度的时间做研究然后实现完善的功能,满足需求是最重要的。设计也是为了产品需求服务滴,而且目前的项目多数也并不太小 我们经常会在此基础上累加功能或者优化产品设计,也给了我们机会在实现新功能的同时 review下新功能周围自己写的或者其他同事的代码和设计,顺便就做了修改和重构 也是不错的做法 这样可以相对平衡滴处理好这个问题,只要我们坚持积累与学习 并且反思反思~~~~

  3. Timothy says:

    项目开始的时候,想法是不够成熟的,时间的推移,想法也就跟着成熟了,回头去看以前写的代码在以后看来都不够完善,这就需要重构;所以程序员应该不断学习和实践

  4. 云风 says:

    内疚是不必的,但是却是应该极力避免的,也不能因此而心安理得。
    个人觉得像结对编程就能很好的解决这个问题,虽然经验丰富的程序员也会犯错,但个人觉得代价可能会小很多。当然,如果不犯下一些严重的错误,可能很难有很深的印象,即使编程时间长了,也不一定就更有经验。

  5. terry says:

    那也要看情况,如果项目无任何注释,文档陈旧,又是金融性质,容易出资深,维护的人升级改造的时间又紧,会有很大风险。但是现在的程序员大多走了扔了就了事的。不回出现愧疚这种事情~

  6. hotdigger says:

    其实应该内疚的,程序员需要有一颗持续改进的心。

  7. cheery says:

    恩恩 有过同感 有时候反过头来看自己写的代码 那时候是挺内疚的 会禁不住的问自己 这是你写的吗 当时脑袋不清醒吧
    其实我觉得人是在成长的 当一段时间过去 我们所处的心境环境还有技术上都不一样 以前需要很复杂实行的东西 现在就可以巧妙的解决 可能思想也更宽阔 所有想法也不一样 当然也会产生更好的解决方案

  8. jokey says:

    真正的程序员的人才会有内疚感

  9. weitong says:

    有同感,回想过去的某个项目甚至感觉是人生的污点。。。

  10. 老虎 says:

    这没有什么好内疚的,就跟造船一样,新型号首舰一般都有这样那样的问题,到后续舰只才会逐渐的趋向完美……

  11. coanor says:

    内疚感是一种进步的体现——虽然我们不能以此来安慰自己,地球上不存在完美无缺的代码,随着时间的推移,一些代码总会被替换掉(“内疚”使然?)。如果“内疚”和“能用”之间不平衡时,那么重新来一次也未尝不可。

    最关键的是,希望这些内疚是可移植的,包括代码级别的、设计上的、哪怕注释风格。

  12. ioerr says:

    尽力而为就好

  13. sodarfish says:

    何止是内疚,还伴有不安,总觉得对自己的代码不满意呢

  14. Yonghang Jiang says:

    我在维护我4年前写的代码……经常后悔当年不懂事

发表评论

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

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