如何抑制自己重写一切的强烈冲动?

2024-04-18

Setup

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

值得注意的是,这些糟糕的代码不一定来自其他人,因为它可能确实是我们过去编写或贡献的代码。

Problem

很明显,存在一些严重的代码腐烂、糟糕的架构等需要处理。与这个问题相关的真正问题是现在不是重写代码的合适时机。造成这种情况的原因可能有很多:

  • 目前正处于发布周期的中间,因此任何更改都应该是最小的。
  • 现在是凌晨 2:00,大脑开始停止运转。
  • 它可能会对日程产生看似不利的影响。
  • 这个兔子洞可能比我们目前的眼睛所能看到的还要深得多。
  • etc...

Question

那么我们应该如何平衡不断改进代码的责任和作为一个负责任的开发人员的责任呢?我们如何才能避免为破窗理论 http://www.codinghorror.com/blog/archives/000326.html,同时也意识到这些行为以及它们可能导致的潜在鲁莽行为?


Update

很好的答案!在大多数情况下,似乎有两种思想流派:

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

知道是否有更多的人认为存在平衡将会很有趣。


我非常喜欢列清单!

一旦您有重写某些内容的冲动,请花 10 分钟列出需要重写的内容。遵循所有可带您进一步了解需要注意的代码的小巷,并将它们也列出来。

希望在相对较短的时间内您将拥有以下两件事之一:

  • 一个非常长的列表,完全让你不想再重写任何东西。
  • 列表实际上并没有那么长,所以为什么不放纵自己去重写呢?!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何抑制自己重写一切的强烈冲动? 的相关文章

  • 以程序方式生成二维“斑点”图形的好方法

    我希望以计算快速的方式创建一个 blob 这里的斑点被定义为可以是任何形状但全部相连的像素的集合 例子 ooo oooo oo oooooo o o ooooooooooooooooooo oooo oo ooooooo o oo oooo
  • 当可以使用库函数时,使用 system() 函数是不是不好的做法?为什么?

    假设正在开发的应用程序需要一些功能 可以通过对命令行程序进行系统调用或利用库来实现 假设效率不是问题 那么简单地对程序进行系统调用而不是利用库是不好的做法吗 这样做有什么缺点 更具体地说 此场景的一个示例是需要从 Web 服务器下载文件的应
  • 是否有任何编程语言支持定义原始数据类型的约束?

    昨晚我在想编程语言可以有一个功能 我们应该能够限制分配给原始数据类型的值 例如 我应该可以说我的 int 类型变量只能具有 0 到 100 之间的值 int lt 0 100 gt progress 然后 这将在所有情况下充当普通整数 除非
  • 给定源顶点,查找有向图中具有环路的所有路径

    我无法解决这个问题 我必须找到所有simple从源顶点开始的路径s含有一个simple有向图中的循环 即不允许重复 当然除了循环在路径上连接回的单个重复顶点 我知道如何使用 DFS 访问来查找图形是否有循环 但我找不到一种方法来使用它来查找
  • 我们可以利用语法高亮功能来删除 SublimeText 源文件中的所有注释吗?

    我有一堆用不同语言编写的源文件 我想从源文件中删除所有注释 虽然编写正则表达式当然是一种选择 但根据输入文件 我可能必须处理表示注释的字符出现在字符串文字内的情况 还需要维护不同语言的正则表达式列表 语法突出显示似乎在突出显示注释方面做得相
  • 仅具有副作用的方法的名称

    因此 改变其对象的方法是mutator 不改变其对象但返回值 或对值的引用 的方法是getter 是否有一个广泛使用的方法名称 该方法不会改变其对象 不返回值 但可能会改变作为参数传递给它的对象 也就是说 只有每个方法对参数有副作用时才会被
  • 您能解释一下流的概念吗?

    我知道流是字节序列的表示 每个流都提供了向其给定的后备存储读取和写入字节的方法 但流的意义何在 为什么我们与之交互的不是后备存储本身 不管出于什么原因 这个概念并不适合我 我读过很多文章 但我想我需要一个类比或其他东西 选择 流 这个词是因
  • 数据库级别的国际化

    谁能向我指出一些解决数据库级别任务国际化的模式 最简单的方法是为每个文本列的每种语言添加一个文本列 但这在某种程度上有点难闻 我真的希望能够动态添加支持的语言 我要提出的解决方案是保存在模型中的一种主要语言和一个查询翻译并将翻译保存到的字典
  • 两个平面之间的交线

    如何找到两个平面之间的交线 我知道数学思想 并且我做了平面法向量之间的叉积 但如何以编程方式从结果向量中获取行 平面的方程为ax by cz d 0 其中 a b c 是平面的法线 d 是到原点的距离 这意味着满足该方程的每个点 x y z
  • 为什么要使用继承? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 语法分析和语义分析有什么区别?

    据我了解 Parser由词法分析 句法分析和语义分析三个阶段组成 Lexical 它将我的输入分割成标记 例子 123 100 0 gt 123 100 0 语法 它将研究标记并检查它们是否彼此有意义 我遇到的问题是理解最后阶段的 语义解析
  • 从应用程序中删除死代码的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常觉得 在多次迭代我的代码之后 我留下了一些函数 类或其他代码行 这些代码在以前的版本中有意义 但对于新版本来说并不是很有用 我知道探查器可
  • 导致堆栈溢出的最短代码是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使PHP库松耦合? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何检查一个盒子是否适合另一个盒子(允许任何旋转)

    假设我有两个盒子 每个盒子都是一个长方体 http en wikipedia org wiki Rectangular cuboid aka长方体 我需要编写一个函数来决定盒子是否具有尺寸 一 二 三 可以装入具有尺寸的盒子中 甲 乙 丙
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 如何通用地减少子集平均值的计算?

    Edit 由于似乎没有人阅读此链接的原始问题 因此让我在这里介绍一下它的概要 正如其他人所问的 最初的问题是 给定大量值 总和将超过数据类型的值Double那么如何计算这些值的平均值呢 有几个答案说要按集合计算 比如取50个和50个数字 计
  • Windows 应用程序事实上的标准键盘快捷键列表?

    假设我正在为 Windows 开发一个新的桌面应用程序 是否有我可以查阅的所有 Windows 应用程序都应支持的键盘快捷键列表 来自 Microsoft 或第三方 注意 当我在这里说 所有 Windows 应用程序 时 我的真正意思是 特
  • 类是否应该有静态和非静态成员

    我试图找出一个类何时适合同时具有静态和非静态函数 又名 obj new ClassA obj gt doOOPStuff something ClassA doStaticStuff Note This example is done in
  • 以任意顺序匹配可选捕获组

    在解析用户输入的许多情况下 用户有机会向输入添加几个可选标志 这些标志应该以任何顺序接受 如何使用正则表达式对其进行解析 以便每个标志都位于它自己的捕获组中 如果存在 例如 有一个必需的令牌a 然后是 3 个可选标记 可以按任何顺序出现b

随机推荐

  • PHP 中的位掩码设置?

    位和位掩码是我一段时间以来一直难以理解的东西 但我想学习如何在 PHP 中使用它们进行设置和类似的操作 我终于找到了一个声称可以做到这一点的课程 据我所知 它似乎有效 但我不确定这是否是最好的方法 我将在下面发布带有示例代码的类文件 以显示
  • Apache Camel/ActiveMQ 优先级路由

    我有两个具有相同消费者的 AMQ 队列 第一个队列 Q1 处理 97 的消息 另一个队列 Q2 仅处理 3 问题是 Q2 中的消息需要在排队后立即处理 所以我的问题是 当第二季度有消息可用时 我需要以某种方式暂停第一条路线以吸引其消费者 a
  • 在 Windows 资源管理器中打开一个文件夹并选择一个文件,仅第二次有效

    使用中描述的代码这个答案 https stackoverflow com a 696144 107625SO 发布的 打开文件夹并选择文件 https stackoverflow com questions 334630 open fold
  • 在perl脚本中调用带有输入参数和输出光标的存储过程

    尝试在 perl 脚本中执行过程 Proceure gt 创建或替换 PROCEDURE Getproc v catg IN CHAR DEFAULT NULL v cursor OUT SYS REFCURSOR 执行程序 my sth
  • 为什么大多数 RNG 中上限都是独有的?

    大多数编程语言都提供 伪 随机数生成器 其中许多都有方便的方法来生成特定范围内的整数 到目前为止 在我见过的所有实现中 范围的下限是包含的 而上限是排除的 这有具体的技术或历史原因吗 我可以想象 在使用索引或长度时它很方便 但我找不到任何有
  • 如何查明当前安装的 webdeploy/msdeploy 版本是什么?

    我正在寻找类似 Powershell 脚本的东西来检查 msdeploy 是否已安装 如果是 是什么版本 我考虑过检查 c Program Files IIS 并检查那里的 MSDeploy 安装 但这总是保证是安装位置吗 我需要它在任何给
  • GAE:模型失去了父子关系的踪迹

    我在谷歌应用程序引擎数据存储中的实体关系中遇到了一个非常奇怪的问题 我正在开发一个 Python GAE Web 应用程序 学习练习 完整的代码可以在来源锻造 http rhs galleries svn sourceforge net v
  • 如何以最小的内存占用直接将大内容流式传输为 PDF?

    我正在尝试以最小的内存占用 例如每个客户端 线程 20 MB 将格式化数据的大内容 例如 200 MB 流式传输为 PDF PDF结构是用Adobe postscript编写的 直接用PDF postscript格式编写比较复杂 我一直在使
  • Dynamics CRM 2011 Outlook 客户端和浏览器呈现

    因此 通过 Dynamics CRM 2011 您可以使用浏览器客户端或 Outlook 客户端 http blogs c5insight com Home tabid 40 entryid 218 CRM and Outlook 6 Re
  • 如何进行从旧 Servlet 到 JSF 2.0 的服务器端重定向?

    我目前正在执行客户端重定向 以从遗留 servlet 应用程序的旧部分 到 JSF 页面 应用程序的新部分 如果可能的话 我更愿意进行服务器端重定向 以便我可以将项目放入 JSF 页面可以拾取的请求中 有一组数据需要在遗留 servlet
  • 在 pandas 中插入具有随机字符串值的新列

    我有一个数据框 A B C 0 1 2 3 1 2 3 3 2 3 2 1 我需要在 pandas DataFrame 中创建一个新列 并随机填充此列中的 是 或 否 A B C NEW 0 1 2 3 yes 1 2 3 3 no 2 3
  • random.choice() 需要 2 个位置参数,但给出了 3 个

    当我输入以下内容时 rand num random choice 1 101 表明 TypeError choice takes 2 positional arguments but 3 were given 这些都放在函数中 我不明白为什
  • 使用cmake创建UWP包

    我正在开发简单的 hello world 应用程序 main cpp include
  • N1QL 错误索引扫描超时 - 原因:索引扫描超时

    我在 couchbase 4 1 0 上通过 CBQ 对大约 2000 万个文档运行查询时遇到问题 执行查询时 2 分钟超时后会打印此错误 代码 12015 msg 索引扫描超时 原因 索引扫描超时 我的问题是这样的 什么是索引扫描 这是寻
  • 通过更改 select 的 selectedIndex 来触发更改事件,无需使用 jQuery

    我正在改变selectedIndex通过JS选择 问题是此操作不会触发更改或输入事件 我怎样才能做到这一点 let select document getElementById select let p document getElemen
  • jQuery 进行动态 ajax 调用并等待它们完成

    我需要进行多次ajax调用 确切的数量是可变的 并等待它们全部完成 我当前的代码如下 ajaxRequests new Array ajaxRequests push function return jQuery post url some
  • 在这段 C# 代码中,我的方法后面的符号“=>”在做什么?

    我最近在这里问了一个问题 有人提供了这样的答案 private void button1 Click object sender EventArgs e var client new WebClient Uri X new Uri http
  • 使用 Simpletest 对 CodeIgniter 进行单元测试 - 测试很少

    在我们的开发团队中 我们决定尝试一下单元测试 我们使用简单测试 然而 这是一条艰难的路 一周后 我只创建了 1 个单元测试来测试某个帮助文件 就是这样 其余的 控制器 模型 视图 库 还没有单元测试 我计划不测试其中的大多数 例如 视图对于
  • Log4j2 错误处理

    由于我发现 log4j 1 2 x 存在一些性能问题 因此我尝试迁移到 log4j2 现在我遇到了一个问题 我找不到解决方案 我必须将 log4j 1 2 x 的配置文件重写为 v2 兼容文件 当我到达附加程序内部的属性 称为 errorH
  • 如何抑制自己重写一切的强烈冲动?

    Setup 您是否有过这样的经历 在一段代码中进行看似简单的更改 然后意识到您刚刚踏入了一片值得认真关注的荒地 这通常会由官方跟进吓坏了那一刻 重写眼前一切的压倒性感觉开始蔓延 值得注意的是 这些糟糕的代码不一定来自其他人 因为它可能确实是