跳至正文
首页 » 博客 » High stakes programming by coincidence

High stakes programming by coincidence

你有没有发现自己运行你的代码来测试一些行为,当你注意到一些不相关的东西并想,“这很奇怪?”也许你想验证点击 “运行” 开始了它应该的过程,但你注意到,当窗口打开时,“取消” 按钮是随机绿色的一秒钟。“这很奇怪,” 你想。

在验证该过程是否正确启动后,也许您重新启动应用程序以查看该奇怪的绿色取消按钮。但是当你这次打开窗户时,什么也没有。这是正常的颜色,没有你之前注意到的绿色的迹象。再一次,你想,“这很奇怪。”也许,在这一点上,你耸了耸肩,把它归结为一些奇怪的操作系统渲染打嗝,然后继续前进。

你永远不知道为什么按钮变成绿色,你永远不知道为什么你不能复制它。这是称为 “巧合编程 ” 的现象的相对良性版本。

“巧合编程” 是在《the Pragmatic Programmer》一书中创造的,他们将其定义为 “[依靠] 运气和偶然的成功”,而不是故意编程。在神秘的绿色按钮的情况下,意外的成功是这样一个事实,即问题本身就消失了。

这可能并不奇怪,务实的程序员对巧合编程的立场是 “不要这样做”。这也是我的立场,我想很多读者都同意。然而,这是我们可能都曾有过的罪过。

编程巧合FTW?

毕竟,这是一个伟大的操作原则,但我们都在办公室迟到,处于 “乞丐不能挑肥拣瘦” 的模式。其他人早就回家了,你不可能对一个持续的错误感到沮丧,预期的修复时间表是 “昨天”。所有的聪明的想法,你添加一个随机调用记录一个空字符串,瞧,一个奇迹!bug是固定的!你运行应用程序几次,以确保,果然,仍然工作。您删除记录器调用,错误回来。把记录器调用回来,错误的方式。

所以你承诺然后回家。

这是9:30,你还没吃东西,你只是。不要。关心。再也不会了。记录一个空字符串作为bug的修复是没有意义的,但是,不管怎样,你要回家了。你把它签入并称之为一个晚上,把 “不要巧合编程” 的格言扔出窗外。

当然,你有最好的意图,第二天回来解决这个谜团。但是当你第二天早上到达的时候,还有其他各种各样的火灾需要扑灭,你永远不会重温这件事。伐木工人的 “修复” 船,毫无疑问,在你离开公司几年后,它会回来困扰一些可怜的树液。

真正的问题

很容易说,当你在不理解它们为什么起作用的情况下做出改变时,就发生了错误的决定。这可能是传统的智慧,但我个人认为这个问题有更多的细微差别。即使你不完全确定为什么,使用你已经看到的解决方案也是可以理解的,所以我认为尝试一些毫无意义的事情的时刻分担了一些责任。

别搞错了 — 我不是说你不应该尝试奇怪的事情,或者偶尔扔冰雹玛丽。毕竟,正如马克·吐温曾经打趣的那样,事故是所有发明家中最伟大的。但是您应该在了解程序员可能发生的道德风险的情况下采取此措施。如果你的滑稽计划真的奏效了, 那你现在就有点麻烦了,不是吗?

事实上,我认为以下是尝试一些不应该工作的最佳结果的强制排名,比如记录一个空字符串:

  1. 它根本不起作用。
  2. 它工作不可靠。
  3. 它解决了问题。

我知道.这似乎很奇怪,说修复错误是最糟糕的结果,但是,记住这里的前提是你正在尝试的东西你不希望工作。当你实现一个解决方案时,排名看起来有很大的不同应该工作。但是当你尝试一些不应该起作用的东西时,它确实起作用了,你的情况比原来更糟。

一个寓言

为了真正推动这一点,让我们提高一点赌注。你不再坐在办公室里编程,而是躺在床上睡觉。突然,你醒来的刺耳的声音… 的东西。你跌跌撞撞地下床,发现警报的来源是你的一氧化碳探测器,大概是在警告你家里一氧化碳泄漏。哎呀!

由于不相信这实际上正在发生,您决定实施 “拍打它,看看会发生什么” 的经典工程解决方案。现在, 就在这里 ,事情变得很糟糕。这应该工作吗?你相信它吗?让我们在这种情况下重新审视之前的强制排名。

  1. 拍打探测器什么也没做。很好.不管怎样,你应该打电话给消防队。
  2. 拍打它会关闭它一会儿,但随后它又启动了。现在你不太确定打电话给消防部门,但你还是这么做了。很好.
  3. 拍打它会永远关闭它。太好了.现在怎么办?你回去睡觉吗?真的吗?!

随着你的生命处于危险之中,你可能会非常确定你理解问题的真正原因。因此,在这种高风险的背景下,很容易看出,解决问题最糟糕的情况是,当一些愚蠢的半措施使问题消失时。重要的是,您不会对此感到满意,因此,您不妨先不要为一半的措施而烦恼。

当然,并不是每个软件错误都像一氧化碳探测器一样重要,但希望高风险的故障排除能带来一点帮助。巧合编程从来不是通往令人敬畏的结果的道路。在最好的情况下,也在最坏的情况下,你获得了暂时的缓刑,以换取你的代码可行性的长期不确定性。所以下次当你向一只虫子扔冰雹玛丽时,想想你的一氧化碳探测器,问问自己是否值得。

用于构建任何桌面、移动或web应用程序的高性能控件。下载终极免费试用版今天,看看它能为你做什么。

</p