编写代码后,为什么一段时间后我觉得“我会写得更好”?[关闭]


12

我从事C ++的业余项目已有2年以上。每当我编写模块/函数时,我都会经过很多思考。现在看到问题了

do {
  --> write the code in module 'X' and test it
  --> ... forget for sometime ...
  --> revisit the same piece of code (due to some requirement)
  --> feel that "This isn't written nicely; could have been better"
} while(true);

'X'是任何模块(小/大/中)。我观察到,无论我在编码时付出了多少努力,这种情况都会发生。因此,大多数情况下,我不会看到有效的代码。:)

这是很多人的普遍感觉吗?这是语言的特定现象吗?(因为在C ++中,可以用不同的方式编写相同的东西)。

如果我对现实世界的生产代码有这种重构的感觉,该怎么办,在那儿更改工作代码不会赢得很多荣誉,但是如果失败,可能会带来麻烦。


14
如果我以前的代码从未发现问题,我会更担心。这表明您的技能正在发展。
达伦·杨

1
如果你看一下你的旧代码,做认为“该死的,为什么我没有做这样的方式回到然后?”,那么你有没有教训还不够,因为你写的代码。
2012年

Answers:


17

这种现象非常普遍,并不只针对程序员。每当您执行一项智力任务时,您就会注意到数十个可以改善的地方- 距离一定之后。询问曾经写过论文的任何智者,他们都会告诉你一件事:“别看它。乍一看,你发现一个错误。”

基本上有两件事可以避免重构循环:

  1. 在编写和设计时,请尽早获取远景。让同事看看您的设计/代码。周末过后再看。醉酒或高酒时注意一下(但要注意:清醒之前不要改变任何东西)。
  2. 不完美地生活。如果它不是很漂亮,但是效果很好(阅读:在满足所有要求(包括可扩展性和可读性)方面做得很好),请让它站立并满足于您所做的出色工作,而不是追求完美的工作。

读这个。 en.wikipedia.org/wiki/Buyer's_remorse 非常有帮助。
S.Lott,2012年

3

持续重构是解决之道。更改工作代码不会引起问题,因此,如果操作正确,应予以鼓励。如果您的代码已经过完全的单元测试,则可以放心地重构代码。

您可以预测的有关实际生产代码的唯一一件事就是,它将发生变化。不要试图猜测它将如何改变,明天您将学习什么新技术。简而言之,不要尝试使您的代码“完美”。用您现在的知识尽可能地做到最好。另外,请确保您的代码已经过全面测试和可扩展。

我花20%-30%的时间重构现有代码。我在一家科技公司工作,“管理人员”从未抱怨更改现有代码。但是,我意识到这在某些公司中可能是个问题。马丁·福勒(Martin Fowler)在他的重构书中甚至有一节。

总而言之,这是我的一种普遍感受,但并非负面。


2

每个模块/功能都是天生的,并且在优先领域中不断发展。一旦足以满足外部世界的目标,就常常停滞不前。所有这些最终都将脚手架服务于更高的目标。是的,我们需要沉迷于代码,是的,这也可能导致我们停滞不前。也许这对您来说是个好举动,将您的注意力从代码本身上移开一点,并更多地考虑代码内部的过程(代码的产生者)。


2

这是很多人的普遍感觉吗?这是语言的特定现象吗?

这意味着您正在扩展自己的知识和观点。

如果没有更高优先级的任务,则应始终返回并改进代码。


“ ...回去改进您的代码。” -谁会付钱给您?代码工作完成后,继续。在学习和成长为程序员的过程中,您总是会找到更好的做事方式,并感到可以改善您以前的工作。抵制对此做任何事情的冲动-回溯并改进旧代码主要是浪费时间。
达伍德·伊本·卡里姆

1
@David Wallace-如果没有人不得不回到旧的代码,我们不会对此大惊小怪。
JeffO 2012年

1
“一旦您的代码正常工作,就继续前进”-您不会相信我在生产代码中看到了哪种错误,因为该代码有效;)
BЈовић2012年

@Jeff O-的确如此。如果我要维护旧代码,无论是我的代码还是其他人的代码,我都会考虑对其进行修复。但是,除非有一个需要投入大量资金来维护该代码的项目,否则无法证明整理该代码所花费的时间是合理的。当然,除非是越野车。
达伍德·伊本·卡里姆

@VJovic-如果生产中存在错误,那是因为代码DIDN无法正常工作。我认为OP在谈论的是能正常工作但丑陋的代码。
达伍德·伊本·卡里姆

2

尽管我总是会上一个数学课,以增强上一课的技能。代数似乎很难,直到您修完代数II。然后,您在代数中学习的技能变得很有用。在编程,编写,木工或其他任何事情上都是一样的。

在学习编程课程时,您了解了If-then-else的知识,在了解开关之前,它做了很多事情。当您学习新的东西时,您会经历这种进步,每个人都在做。


2

每当我阅读过去自己编写的大多数代码时,我都会有同感。这是一件好事,这意味着多年来您的知识和编码风格已得到改善。

至于更改有效的生产代码,除非发现明显的错误,否则这是一个很大的禁忌。不仅因为这可能会浪费时间,而且更重要的是,由于所创建的绝大多数软件错误都是在对已发布程序进行更改时引入的错误。从统计上讲,您很可能会引入无法预料的错误。如果没有损坏,请不要修复。


1

开发应用程序意味着改进它并使其变得更好;这是一个连续的过程,因此在编程时,您会获得更多的经验和知识。这也意味着您也在开发中,因此当您回顾旧代码时,可能会发现它可以得到改进。

如果您没有这种感觉,则意味着以下两种情况之一:

  1. 您仍然处于相同的技能水平。
  2. 您的代码已经完美(不太可能)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.