使代码最后的提示

时间:2009-07-02 09:44:52

标签: programming-languages

有时我真的很想知道我的代码是否“持久”。我尽一切努力使其“最后”,避免在写作或解决问题时依赖事物。如果我重写或添加代码,“编程技巧”和假设将来可能发生变化。有时这很容易,有时很难,但它只是成为程序员的一部分,让工作更好,更快,更容易。

话虽如此,您是否可以根据个人经验推荐一些提示,以便在HLL中编写更好的长效代码?什么应该避免,什么拥抱?

谢谢!

8 个答案:

答案 0 :(得分:6)

避免您最近阅读和思考的任何内容,

  

这是一个有趣的语言功能,设计模式等。   ,我认为这可以帮助我   降低我的代码复杂性。

出于某种原因,这总会让我后来咬我。最好是在侧面项目中使用它,然后在生产代码中使用它一旦被证明是一个好主意,而不仅仅是看起来像。

答案 1 :(得分:5)

有点腐烂......

编译旧项目时,我经常遇到的问题是

  • 缺少依赖项 - 最好列出您依赖的任何库,包括您从中获取的URL。您的包含路径可能与5年前不一样!
  • 编译器更改 - 这些通常不会太麻烦,通常可以使用C / C ++中的#define修复
  • 数据大小更改 - 从16位移动到32位时,这是一个令人讨厌的问题。尽量不要对变量的大小做出假设。
  • 神秘的构建过程 - 对于某些项目,可能存在构建资源,库等的模糊构建步骤。确保它们有良好的文档记录。
  • 过于聪明的代码 - 我见过的代码假设机器的内存少于X兆字节,因此使用指针的顶部位来保存数据。不要那样做!
  • 错误检查 - 当事情破裂时,良好的错误检查将帮助您更快地找出原因。

答案 2 :(得分:3)

有时候让代码持久化的关键不是尝试在前面构建一些永恒耐久性的杰作,而只是为了继续并制作真正有用的东西。甚至可以预先做出某些假设,只要它们都可以通过评论,断言或单元测试清楚地记录下来。这让我想起:编写大量的单元测试,以便随着代码的发展,随着时间的推移,关于它应该如何表现的假设不断被测试。

不要以为你写的任何东西都会保持不变。依靠不断的重构,专注于尽可能简化。

答案 3 :(得分:2)

我发现以下提示很有用:

  1. 使用有意义的变量/成员/类/函数名称,即使您的手指因打字而受伤。

  2. 准确,简明地评论每个类和函数,过程(除非它是样板文件,例如set / get方法)。如果这不可能或不容易,那么你的函数/ sub可能太复杂了。

  3. 保持功能/程序小 - 5-10行。这有助于使它们易于验证,测试,调试,记录和使用。

  4. 当您查看代码时(通常是在修复错误或进一步开发过程中)并且有些事情会让您感到沮丧,请记录问题或修复问题。通常以后你会发现一个错误并且它会有关系,或者你会以违反这些假设的方式使用这些代码,文档会帮助你。

  5. 记录您一整天所做更改的工作日志。保存到存储库时,可以将日志的一部分从上次保存剪切并粘贴到当前位置,以便对代码存储库的更改进行详细记录。单独保存日志(存储库,电子邮件,博客)。

  6. 将代码分解为独立的可重用组件。在过度工程,KISS和泛化之间有一个很好的界限,所以你必须权衡专业人士和骗子。制作可重用组件的优点是,您倾向于更好地设计组件以进行少量假设,具有干净的接口,具有很少的依赖性 - 所有这些都可以实现更好的代码。此外,可重用组件在更多地方使用,因此代码往往会得到更好的测试。

  7. 在代码可能失败的任何地方抛出异常或使用断言,具体取决于它的调用方式,即传递的参数或对函数/过程的任何外部因素的依赖性。 “永远不会发生”只存在于理论中 - 例外使得更容易缩小错误。

  8. 保留正在运行的待办事项列表/错误列表,以查找需要执行的操作或增强功能,作为日志的一部分。有可能永远不会完成此列表,因为只要您能够完成列表中的项目,就会添加新项目。在某些时候,列表将包含低优先级或可延迟的项目,并且您将转移到生产或新版本。 MS Word已经使用了多少年,现在已经完成了吗?

答案 4 :(得分:1)

对我而言,这很像发送电子邮件或任何通信。

代码“完成”之后,我会回过头来看看我脑海中的所有场景。

之后是测试。

我见过的最好的开发人员可以阅读代码并获取所有基本内容。然后通过单元测试得到更多问题。

另外,评论。我认为在汇编编程中他们谈论的是“一次编写,从不读取”代码。如果您不评论汇编代码,则无法对其进行维护。 HLL需要有用的评论。

答案 5 :(得分:1)

在我看来,让程序发展并没有错。曾经有一段时间我一直想要预见每一个可能的变化,但我在大多数时候都知道,这是不可能的。但是,抽象比实现细节存活的时间更长。所以我的建议是尽可能将你的应用程序分离到许多组件(类和函数)中,并使用尽可能抽象的接口(隐藏实现细节)。这样,当某些事情发生变化时,不可避免地会发生变化,这些变化可能会在源代码的一小部分中被隔离。

答案 6 :(得分:1)

我试着记住以下内容:

  • 代码可能比任何人预期的要长得多,或者比任何人预期的要短得多(我离开了一个项目,他们用不同的语言完全重写了我的应用程序 - 但新开发人员很高兴,因为我留下了大量的评论!)
  • 如果你回到你的代码,你会发现它是可怕的。它总是如此。在忘记它是如何工作之前做出评论。
  • 意识到其他人会查看你的代码,认为它是垃圾,因为你没有足够好地遵循OOP,并重构整个事情。然后,重构该事物的人会来请求你帮助,因为它不起作用,你会发现为了SOLID原则而重写的人完全从应用程序中移除了整个功能,这就是完全是因为你首先打破了SOLID原则(对不起,这是一个咆哮......)。

无论哪种方式,我都会添加大量评论。注释可以解决上述所有问题并使代码持续更长时间。我会建议在冗长的一面犯错误。

答案 7 :(得分:0)

了解SOLID原则。例如Getting a SOLID start