我们都不是专家(我们大多数人还没有)。当然,我们都知道如何用我们喜欢的语言编写程序,但编写高质量的应用程序和编写语法正确的程序是两回事。我们工作,学习,奋斗,不断学习,最终达到其他人可以向我们学习的门槛。
如果你的学习过程和我的一样,你可能会写一些功能齐全,可靠的应用程序,这些应用程序仍然每天都在使用,但每当你想到它们时,都会感到羞愧。程序代码?混合业务和表示逻辑? SQL注入漏洞?代码荒芜荒芜的任何评论?名单还在继续。
不幸的是,我们都不能指望我们的雇主允许我们回去重写我们的旧应用程序,因为只要我们想到它们就会给我们做噩梦。更糟糕的是,我们中的一些人实际上必须使用我们的旧应用程序工作,但是要知道,就重构而言,做一大堆好处会太冒险和/或耗费时间。
你如何应对过去曾经犯下的编程暴行,以及那些发现你并不总是知道自己在做什么的肮脏秘密的人?
答案 0 :(得分:19)
不后悔。如果你不为上周写的代码感到羞耻,这意味着你没有作为程序员进行改进; - )
说真的,我的方法一直是修复那些危险的东西(例如SQL注入漏洞)紧急然后重构其他代码丑陋,如果我碰巧在某个特定工作中需要重构的区域。在修复错误或引入新功能时,我经常会列出需要重构的代码列表,然后在完成“真实”任务后重构代码。它通常不需要花费过多的时间来进行,我进行单元测试以确保我没有破坏任何东西(如果你的代码没有经过单元测试,这是测试它的一个很好的理由!)。
杰夫阿特伍德不久前写了一篇很棒的博客文章(here)。
答案 1 :(得分:8)
每当我小时候做一些不太理想的事情时,我的父亲会说,“好吧,生活是一种学习经历。”我们的应用程序也可以学习:
在我们的每个应用程序版本中,我们都提供了各种变化:
渐渐地,我们努力用第三和第四项替换麻烦的代码。
有时你可以抛弃你的错误。我认识一位高级开发人员曾经被雇用过一家公司,并被要求制作类似于他为第一家公司所写的东西,但更好。他们给了他工作人员和工具,他做了。
答案 2 :(得分:5)
我的第一个程序仅存在于TRS-80盒中,其中氧化铁已剥落。一对夫妇打印出一个7针40列热点阵打印机,将字母刻在特殊的银色金属涂层纸上。一个夏天,所有那张纸都在阁楼里变黑了。
我觉得我很好。我最古老的暴行被安全地摧毁了。
实际上,有一种暴行继续啃着我。我为Amiga创建了一个名为“Sliced HAM”的视频模式,这种模式很受欢迎。它改变了每行的基色,使图像更真实,图像更少。
我很快写了一个转换器和查看器。在观察者中,我坐在忙碌的循环中等待用户关闭图像。 Amiga是第一个大众市场多任务计算机系统,这是不可接受的。我应该等待窗口的关闭事件。
多年来,人们都认为视频模式很慢,但这只是我糟糕的榜样。图形协处理器正在完成每条扫描线的所有工作。
仍然困扰着我。
答案 3 :(得分:3)
这是一个很好的问题。
除非您正在编写开源软件或者只是将旧代码转移到网上,否则我认为这不是一个大问题,因为未来的雇主不会看到您过去的轻率行为。 您也可能不会受到前雇主的约束,也不会发布源代码。
大多数(优秀的)开发人员会随着时间的推移而改善,过去的同行会意识到你今天可能比以前更好,就像他们可能更好一样。您的雇主根据您的经验而不是您现在的经历向您支付了费用,因此他们得到了他们所支付的费用。
如果除了你以外的其他人关心你的应用程序并且每天都使用它,那么他们可以自由维护它(如果他们有源代码)。代码变得陈旧。没有得到维护,改进和重新考虑的应用程序要么完美(不太可能),要么不够重要,不值得付出努力。如果一个前雇主不守旧地继续在你的旧申请上赚钱,那就是他们的问题和他们客户的问题,最终摇钱树将会枯竭。
如果您觉得您的应用程序被广泛使用,那么代码是免费提供的,并且可能会在下一个thedailywtf帖子中展示一些内容,并继续修复它。否则,很高兴有足够的平庸旧代码,这样你就不会引起注意了。
我认为更大的问题是我们早年留下的文字废话 - 旧的论坛帖子,不正确的博客帖子,对语言功能的火焰战争等等。
答案 4 :(得分:3)
也许您所在的组织可能会或可能没有机会纠正过去的错误。
答案 5 :(得分:2)
这比以前更加困扰我。我已经认识到它只是开发过程的一部分。没有人从第1天开始(甚至现在就开始)编写完美的代码。鉴于您当时拥有的技术和资源,您编写的代码很多时候已经足够了。将您在10年前编写的代码与1周的截止日期与当前使用当前技术和技能组合的代码进行比较是不公平的(对于您或其他任何人)。
答案 6 :(得分:2)
我公开道歉。我想借此机会为INewWindowManager道歉。遗憾。
答案 7 :(得分:1)
如果没有损坏,请不要修复它。
我知道可以更简单,更优雅地完成某些事情的感觉,也许是因为你现在更好地理解了框架,或者因为你学到了一些新技术。但是,当你想要扩展或改变一些代码时,这才真正有用,否则只要它运行就让它运行。如果它不工作(即如果它有问题,太慢,吃资源等),你仍然应该开始修复它,因此还没有后悔。否则,你还在担心什么?代码中的美丽是如此短暂......; o)
从另一个角度来看,如果你开始研究别人的代码,甚至你自己的旧代码,你不应该对找到次优代码感到惊讶。我们都这样做。事实上,当你成功地重构旧代码时,这是一个感到自鸣得意并扮演英雄的机会。
非最佳代码只是工作的一部分。我们应该期待它遍布每个角落,并且在我们需要触摸时始终准备重构旧代码。如果管理层不了解它并且不允许你有时间这样做,这只是一个问题。
答案 8 :(得分:1)
鉴于工作仍在那里,你仍然有机会提交新东西,修复废话并办理登机手续!修复错误永远不会太晚。并没有什么可尴尬的。每个人都会犯错误。
我也相信诚实,好的进攻是最好的防守。只是大声说,“这是我的代码,它是废话”,人们会和你一起笑:)没有必要尝试隐藏你的代码。它存在于你的VCS中,无论如何都有你的名字。
答案 9 :(得分:1)
为编码员提供了一项新服务:Bad Code Offsets。支付以弥补过去的编程暴行...
答案 10 :(得分:0)
处理这些不良记忆的最佳方法是向他们学习,我相信你已经有了。当您向团队成员请求宽恕时,同样重要的是,这也很重要。最重要的是,当你指导团队的初级成员时,你应该记住这些“坏榜样”。
答案 11 :(得分:0)
这可以是一种平衡行为。我一直被“改进”一些有效的代码所困扰,但我觉得很难看,并引入了一些愚蠢的新bug。
另一方面,在我职业生涯中的几次,我一直在努力设计一些设计糟糕的垃圾代码(由我或其他人写的) - 有时几周 - 因为我觉得我没有时间修理它。
在每一种情况下,我终于咬了一口子并再次正确地做了一遍,问题几乎立刻就消失了。然后我希望我早点修好它 - 从长远来看会更快。
将精力集中在给你实际悲伤的部分 - 你需要处理的部分(新功能,错误修复),但是你害怕触摸,因为它们太脆弱或太可怕了。 / p>
这可能是一个很好的指标 - 你越害怕它,就越需要修复它。
-Tom Bushell
答案 12 :(得分:0)
我在网上匿名发布,让别人受苦!不用等了,我在我的博客上做了,可能会被同行嘲笑。
答案 13 :(得分:0)
我确保我先备份旧的东西,“以防万一我不像我想象的那样聪明”和'如果我像我想的那样聪明,我可以证明它! :)