Language agnostic 如何约束一个';她有没有从重写一切的强烈欲望中解脱出来? 安装程序

Language agnostic 如何约束一个';她有没有从重写一切的强烈欲望中解脱出来? 安装程序,language-agnostic,Language Agnostic,您是否有过这样的经历:进入一段代码进行看似简单的更改,然后意识到您刚刚踏入了一片值得认真关注的荒地?这通常会伴随着一个官方的“疯狂”时刻,在那一刻,重写眼前的一切的压倒性感觉开始蔓延 需要注意的是,这段糟糕的代码不一定来自其他人,因为它可能确实是我们过去编写或贡献的东西 问题 很明显,有一些严重的代码腐烂、可怕的架构等问题需要处理。与这个问题相关的真正问题是,现在不是重写代码的正确时间。原因可能有很多: 当前在发布周期的中间,因此任何更改都应该是最小的。 现在是凌晨2点,大脑开始关闭 这似乎会

您是否有过这样的经历:进入一段代码进行看似简单的更改,然后意识到您刚刚踏入了一片值得认真关注的荒地?这通常会伴随着一个官方的“疯狂”时刻,在那一刻,重写眼前的一切的压倒性感觉开始蔓延

需要注意的是,这段糟糕的代码不一定来自其他人,因为它可能确实是我们过去编写或贡献的东西

问题 很明显,有一些严重的代码腐烂、可怕的架构等问题需要处理。与这个问题相关的真正问题是,现在不是重写代码的正确时间。原因可能有很多:

    当前在发布周期的中间,因此任何更改都应该是最小的。
  • 现在是凌晨2点,大脑开始关闭
  • 这似乎会对日程安排产生不利影响
  • 兔子洞可能比我们现在的眼睛所能看到的要深得多
  • 等等
问题: 那么,我们应该如何平衡不断改进代码的责任,同时又是一个负责任的开发人员呢?我们如何在意识到行为及其可能导致的潜在鲁莽的同时,避免对事件做出贡献


更新 伟大的答案!在大多数情况下,似乎有两种学派:

  • 不要抗拒这种冲动,因为这是一种很好的冲动
  • 不要屈服于诱惑,因为它会把你烧成灰烬

  • 想知道是否有更多的人觉得存在任何平衡是很有趣的。

    糟糕的代码不是完全可以避免的,但它可以通过适当的抽象来隔离。如果它确实是荒地,也就是说,周围没有垃圾填埋场,那么专注于设计过程比试图让人们写出完美的代码要有效得多。

    重写的冲动是正当的,前提是:

    • “冻结”现有代码(带有标签)
    • 您可以在单独的分支中开始重写尝试
    • 您首先准备一些单元测试,以确定当前行为,并确保重现现有功能
    这就是说,您必须平衡重写过程和遗留代码的稳定性。

    “如果它没有坏,就不要修理它”;)

    别这样-兔子洞总是太深了。进行任何小的局部更改,使地方比您发现的更干净,但将大的重构留给您保持警觉并有足够时间燃烧的时候

    这是一个很好的开端,可以在以下几个阶段处理大重构:

    你必须像汉瑟和 格雷特尔和小口咬着边缘,一个 今天少一点,明天多一点


    我发现,花两个月的时间修复我“无害”的重写引起的bug,足以治愈我在没有明确授权/项目计划的情况下做这类事情的冲动。

    我非常喜欢制作列表

    一旦这种冲动让你重新写东西——花10分钟列出需要重新写的东西。按照需要注意的代码中的所有小巷进行操作,并列出这些小巷

    希望在相对较短的时间内,您将有两件事:

    • 一个非常长的列表,完全让你不想再重写任何东西
    • 一份实际上并不长的清单,为什么不放纵自己,重新写一次呢
    就我而言,如果你除了重写代码没有更好的事情要做,那么你应该让其他人都知道,然后就去做吧。显然,如果需要几天的时间才能得到任何结果,并且这些更改意味着过多的停机时间,那么这不是一个好主意,但最终代码将成为一个问题。让其他人意识到代码很糟糕,并尝试进行某种形式的修改

    上述说法的问题在于,作为一名程序员/开发人员,你总是会有其他事情让自己忙个不停。只要把它放在优先顺序较低的事情清单上就行了,这样当你在为一些工作而挣扎时,你就可以随时保持你的节奏来重写

  • 重读“重构”
  • 拿出一张纸,逐项列出“异味”清单。
    (针对不良气味中的每种气味(){
    打印气味。名称;
    }
  • 向代码中添加注释,包括列表中的项目。
    while(door()){
  • 通过列表,激光一次聚焦一种气味。
    }

  • 对我来说,这类最难忘的项目发生在大约4年前,当时我被叫到一个远程办公室“帮忙”由于一个项目将在1周内向客户进行主要演示,但尚未开始工作。该项目主要是在印度和国际海事组织的海上进行的,一次项目管理失败导致大量意大利面代码过于零碎,无法以目前的形式正常工作

    经过一整天的审查,我向管理层提出了我的观点,即该项目只需要大规模的重构和重组,否则它将永远无法正常工作。讨论的结果是6天20小时的工作/4小时的睡眠,其中2天我实际上是在公司大厅的沙发上睡觉,因为在工作时浪费了时间开车回旅馆

    该守则的主要改进包括:

    • 命名标准的应用
    • 转入源代码管理
    • 构建过程的开发
    • 单个组件的文档
    大部分原始代码都保留在原处,但只是移动和重组/重构,以使其长期可持续