【问题标题】:C++: Code from the beginning of my project of significantly lesser quality [closed]C ++:从我的项目开始时质量明显较低的代码[关闭]
【发布时间】:2011-02-22 19:13:09
【问题描述】:

几个月前我开始了一个相当大的 2D 游戏引擎项目,我开始注意到:

前一两个月的代码与最近的有很大不同:

  • 变量的命名感觉有点不同
  • 某些代码风格方面有所不同
  • 我有时想知道为什么我会这样命名某个函数,并且很容易想到一个更好的名称
  • 代码感觉相当混乱
  • 在某些部分,我几乎立即想到了一种更好的方法

  • 代码似乎质量明显下降

然而,在我写这篇文章的时候,我一直在注意以和现在一样的方式做每一件事。

现在,我的问题:

  • 即使在大型商业项目中,这种情况也很常见吗?

  • 我是否应该考虑投入(大量)时间重构甚至重写受影响的代码?

  • 随着项目的发展和变化,大部分代码必须从头开始重构或重写是否正常?这很糟糕吗?

【问题讨论】:

  • 这种情况常见吗?是 重构?仅当您需要更改代码或代码完全不可读时。如果有人不断地回去重构,那么新功能就不会取得进展。这是一个必要的杂耍游戏,所以用你最好的判断。正常吗?是 不好吗?没有
  • 每年回顾我的项目越来越尴尬。这是一个学习的东西,但它的回报确实是递减的(在很长一段时间内)。是的,你应该回去并尽力做到最好,但这是一个非常有争议的观点。
  • @GMan:我认为这取决于我们在谈论什么样的“最佳”。良好的名称、一致的风格和不混乱的主要好处是使维护更容易和更快。在这些事情上花费时间,在旧代码中工作,可能会破坏这个目的。它额外的维护工作,在您的命名和样式约定发展的另一年,您将再次完成这一切,甚至可能在此期间甚至不看一眼代码。当然,如果代码不起作用,或者如果它可以更快/覆盖更多案例/一半大小,我会在里面改进样式。

标签: c++ refactoring project-management


【解决方案1】:

即使在大型商业项目中,这种情况也很常见吗?

是的。

我是否应该考虑投入(大量)时间重构甚至重写受影响的代码?

你明天也要这样做吗?

没有。除非您实际上正在处理要重构的代码。

随着项目的发展和变化,大部分代码必须从头开始重构或重写是否正常?

是的。

这很糟糕吗?

如果我们都完美无缺,那肯定会容易得多,是的。

【讨论】:

  • 我不同意。为什么不花时间把事情做好?
  • @Gman:因为你会花费太多时间来完成它,而没有足够的时间真正完成项目。
  • 我同意这一点。不要去寻找质量较低的代码,而是在看到它时对其进行修复(例如,因为需要对其进行更改以添加功能,或者因为您必须通过它进行调试)
  • @GMan:我不会使用任何软件,因为他们仍然会编写所有这些。写得不好或不完美的代码不一定有缺陷或损坏。
  • @GMan:问题似乎与功能无关。我不知道暗黑破坏神 3 的源代码是否自始至终都使用了一致的空格,所以当他们阅读它时,他们不会自己想,“这感觉相当混乱”。我希望暴雪尽一切努力让它通过测试并放在我的门垫上——如果糟糕的风格阻碍了他们应该修复它,否则他们应该离开它。来源风格不一致的现有产品优于风格漂亮的不存在产品。如果它真的坏了,那是一个完全不同的问题。
【解决方案2】:

是的,这也是我的项目的常见模式。 ABR:总是在重构。当我感觉到新的模式出现时,我也会尝试更新旧代码以匹配它。随着项目的发展,您在问题领域工作的经验会影响您的风格,最好更新旧代码以匹配它。

因此,如果几个月后您的第一个项目提交在您的项目中仍然没有改变,那么就会出现问题。我将开发视为一种探索性实践,其中很大一部分是更新旧代码并打磨你的风格。在他们开始编码之前,没有人知道他们的最终设计/API。查找任何大型开源项目并查看其提交历史;它无处不在。

如果您从事绘图或绘画工作已有一段时间,您的风格会随着时间的推移而变得复杂。此外,您的第一层或前几张草图很少是最终结果中出现的墨线。

【讨论】:

  • 只有在您开始项目时没有经验的情况下才适用。我怀疑大多数画家在单一画布的过程中不会有重要的学习经验或风格变化,除非他们专门尝试一种新技术。
  • 没有,但他们最初用于开发空间利用的铅笔素描不会显示出来。
  • “总是在重构”——有时我想知道 English-Prime 是否有它的好处。
【解决方案3】:

从这次经历中得到的重要教训:你正在变得更好。或者,至少,你正在改变。当然,从今天的角度来看,您今天编写的代码对您来说看起来更好。如果你写的代码今天看起来很糟糕 - 让它看起来更好。你今天的责任不仅仅是你今天写的代码;它是整个代码库。所以做对了 - 并且很高兴你变得更好。

【讨论】:

    【解决方案4】:

    是的,会发生这种情况。我什至会说,当您进一步研究解决方案时,这是预期的和典型的。

    仅在您返回并触摸它时更新您的代码。在调整之前不要忘记编写单元测试。

    无缘无故地重写糟糕的代码是很有诱惑力的,尤其是当您没有迫在眉睫的最后期限时。这样你很容易陷入循环。

    请记住,送货是一项功能。

    【讨论】:

      【解决方案5】:

      即使在大型商业项目中,这种情况也很常见吗?

      我必须在这里承认,我的信念是,如果您先设计后编码,您可以避免很多问题。所以我会说这取决于。如果一个人从一个好的设计开始,有一些公司标准来确保基于设计的代码无论是谁编写的都遵循同样的重要规则,那么至少你有机会避免这种情况。但是我不确定是否总是这样:-)。

      我是否应该考虑投入(大量)时间重构甚至重写受影响的代码?

      让事情变得更好永远不会伤害:-)。

      随着项目的发展和变化,大部分代码必须从头开始重构或重写,这是否正常?这很糟糕吗?

      我会说是的,当生成的代码比旧代码更好时,重构通常应该被认为是一件好事。世界永远不会保持不变,即使某些事情在某个时间点是合适的,也可能只是它无法满足当今的需求。所以我想说,如果你工作的公司对你说:“你不能重构这段代码。这是神圣的”。改变(如果它变得更好)总是好的。

      【讨论】:

        【解决方案6】:

        Fred Brooks 写道:“建造一个扔掉的东西,无论如何你都会扔掉的。”虽然它不像过去那样真实,但在您开始着手解决问题之前,通常不会真正理解问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-07
          • 2013-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多