【问题标题】:process of commenting and improving already written program?评论和改进已经编写的程序的过程?
【发布时间】:2010-02-18 20:55:28
【问题描述】:

请允许我的介绍正确地定义我的问题范围:

我对编程世界还是很陌生。当我有一个软件程序的想法但没有编程经验时,这一切都始于我。我最终选择了外包途径来获取该程序,并且在将近一年之后,我们确实让它运行起来并正常运行。

这个特定的程序是用 php 编写的,并且 100% 基于 Web。我们使用了大量的 ajax、jQuery 等。

现在已经一年了,我一直在尽可能地学习和学习(这里有很多学习!!!)我现在主要专注于 Java,以建立 Objective-C 和 iPhone 的乐趣(可能像 99 % 的所有其他新手程序员)。

我真的学到了很多东西,我学到的最重要的事情之一就是正确的评论和可扩展性。

我现在看到,我们刚刚完成的这项工作在这两个方面都非常缺乏。我想在这个程序的基础上添加和构建,我不仅没有太多经验,而且我发现如果没有这些 cmets,我什至很难了解这些功能......

所以我的问题是——开始着手处理这个项目的最佳行动方案是什么?完全重写是不可能的,我认为没有必要。

我敢肯定,这不是一些新手程序员、软件开发人员第一次走上这条路……其他人在这里做什么?

程序员进入一个项目很长一段时间然后“清理”混乱以使事情富有成效地向前发展是否很常见?

如果这是这个问题的错误位置(我理解它很可能是)有人可以指出我在哪里更合适?

谢谢! 乔尔

【问题讨论】:

    标签: php scalability comments


    【解决方案1】:

    我们称之为“refactoring”,它是编程的重要组成部分。

    首先,您必须拥有一套坚如磐石的自动化测试。通常我们会使用单元测试框架运行单元测试。

    http://www.testingtv.com/2009/09/24/test-driven-development-with-refactoring/

    然后您可以进行更改并运行测试以确认您的更改没有破坏任何内容。

    在某些情况下,您必须围绕现有程序对测试进行“逆向工程”。这不是很困难:您必须专注于“外部”或“主要”或“重要”的接口。

    由于您正在进行逆向工程,因此很难 - 一开始 - 确定应该测试什么(因为它是一个重要的外部功能)和不应该测试什么(因为它是一个实现细节。)

    【讨论】:

      【解决方案2】:

      我真的学到了很多东西,我学到的最重要的事情之一就是正确的评论和可扩展性。

      首先,我很好奇您对“正确评论”有什么了解,因为这变化很大。对于某些人来说,它记录了每个类和功能。对于其他人,它可能会记录每一行代码或根本没有代码。

      在经历了上述一些不同阶段之后,我和 Bob Martin 叔叔在一起,他在Clean Code, 中说您记录决策,而不是代码的作用。代码本身应该是可读的并且不需要文档。通过添加描述行为的 cmets,您创建了最终会不同步的重复。相反,代码应该记录自己。使用命名良好的函数和变量有助于准确描述对方的意图。我强烈推荐使用 Clean Code 来全面讨论这些概念。

      至于可扩展性,通常是您想要内置的东西。可扩展性可能是良好设计的功能,或者是针对需求的适当设计,但糟糕的设计将使可扩展性成为一场噩梦。

      我现在看到,我们刚刚完成的这项工作在这两个方面都非常缺乏。我想在这个程序的基础上添加和构建,我不仅没有太多经验,而且我发现如果没有这些 cmets,我什至很难了解这些功能......

      我认为这是两件事之一的指标:

      1. 代码写得不好。是的,这是非常主观的。 -或-
      2. 你还没有完全理解你需要的一切。 -或-
      3. 两者兼而有之。

      编写好的、能揭示意图的代码很难,需要多年的实践。

      所以我的问题是 - 开始着手处理该计划的最佳行动方案是什么?完全重写是不可能的,我认为没有必要。

      正如其他海报所提到的,Refactoring。重构是在不更改功能的情况下更改代码以提高可读性和可用性的过程。找一本关于重构的好书,或者开始在线阅读所有可以阅读的内容。它现在是一项关键技能。

      程序员进入一个项目很长一段时间然后“清理”混乱以使事情富有成效地向前发展是否很常见?

      不幸的是。避免落入这个陷阱需要大量的努力。每天努力让你的代码变得更好一点。

      【讨论】:

        【解决方案3】:

        我不知道这是否是错误的地方,但我会尽可能回答:

        程序员进入一个项目很长一段时间然后“清理”混乱以使事情富有成效地向前发展是否很常见?

        是的,根据我的经验,这很常见。我从事合同工作已有 10 多年了,我数不清有多少次我不得不进来清理仓促组装的东西以使其规模化或能够为其添加功能。当您将编程外包给另一家公司时,这种情况尤其常见,这样做的动机是让它尽快工作并走出门外。

        所以我的问题是——开始着手处理这个项目的最佳行动方案是什么?完全重写是不可能的,我认为没有必要。

        我不知道这个问题有一个“好”的答案,我唯一能告诉你的是一次采用一种方法,并在你弄清楚它们时记录他们所做的事情。如果您仍然可以访问最初编写程序的人,您可以询问他们是否可以为您提供有关系统的文档,但如果这未包含在原始工作规范中,我怀疑他们是否会有任何文档。

        我真的学到了很多东西,我学到的最重要的事情之一就是正确的评论和可扩展性。

        正如您自己发现的那样,正确的注释很重要,我不相信从一开始就按照 YAGNI 原则构建可扩展性的重要性。我认为随着任何程序的发展,它都会经历成长的痛苦,无论是可扩展性还是功能性。有人能从一开始就考虑到它目前需要的可扩展性来构建 twitter 吗?有可能,但它很有可能会失败。

        【讨论】:

          【解决方案4】:

          程序员进入一个项目很长一段时间然后“清理”烂摊子以使事情富有成效地向前发展是常见的吗?

          对于几乎每个程序员来说这绝对是常见的 :)

          话虽如此,请记住 IIABTFI 原则。如果它没有坏,就不要修复它。

          了解程序的工作原理以及各个部分的用途很有用。

          在没有特定目标和商业目的的情况下尝试改进它不是。

          【讨论】:

          • 很高兴知道我没有遇到麻烦 :-D 我想在程序中加入非常具体的功能,所以这些目标当然很明确。
          【解决方案5】:

          最大的问题是当前运行的程序在满足用户需求方面的效果如何?虽然它可能不是最好看的代码,但它确实有效,这可能意味着您最终需要围绕它进行 101 次重构练习,以获得足够的基础知识来进行其他更改。

          虽然您可以询问该程序的原始作者,但如果他们认为它很棒而您认为它是垃圾,这可能是一个可能的痛处。这是一个想法,应该仔细分析一下,然后才去烧毁桥梁,因为他们认为你无法欣赏他们所做的天才。

          这通常不是以最佳方式完成的,因此当人们学会更好的做事方式时,事情就会以更好的方式完成。当然,这是有限制的,但我会从你有一些重构课程的想法开始,以帮助你掌握应用程序的基础知识,然后开始进行增强和其他东西,看看真正做了什么结束。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-29
            • 1970-01-01
            • 1970-01-01
            • 2023-03-12
            • 2011-06-14
            相关资源
            最近更新 更多