上周,我和我的同事们简短地聊了聊我们在工作中搞砸的事情。我很久以前就不再犯这些错误了,所以回想过去很有趣。但是满脸笑容,其实我们当时犯的错误让我们受益匪浅。分享你自己的错误是至关重要的,这样其他人就可以从中吸取教训,并有可能提高他们的工作效率。我在这里记录了我最近的一些错误。为什么误删了那么多生产数据库?几个月前,Reddit上有一篇关于一位入门级开发人员在第一天上班时误删了生产数据库的帖子。我们读到这样的文章,其中有人犯了一个巨大的、不可磨灭的错误,我们忍不住害怕。我们意识到我们并非不可能犯这种错误——大多数时候我们都在悬崖边上停下来。在我的第一份工作中,有很多高级DBA在工作的第一天不小心删除了生产数据库的例子。工作团队对一周前的旧数据库备份进行了修正,让他得以保住工作。现在十年过去了,他们还拿这件事来取笑他。今年早些时候的一个早晨,我被叫去调查客户生产中的一个问题。他们本应与一小群用户一起对产品进行Beta测试,但他们的网站主页突然什么也没有显示。我猜想可能是系统的bug或者漏洞导致的。我登录生产机器,调用数据库,发现articles表是空的。好的,这证实了网页显示为空白的事实。user表里还有用户,这就奇怪了,所以我们把所有的文章都丢了,但至少他们的测试用户的账号还在,我们可以说明这是beta版本,这种事情时有发生时间。下一秒我就懵了。我不记得我做了什么,我以为我不会愚蠢到在控制台窗口中键入以从表中删除用户,但在这里-既没有文章表也没有用户表。我坐在那里,感到有些震惊。然后我的思绪飞速运转,试图找出解决问题的方法。我真的删除了用户表吗?是的。我们是否运行了备份数据库?没有。如何向客户解释?我不知道。我记得去找项目经理,坐在她旁边解释发生了什么,文章表没有数据,所以网站看起来是空的。哦对了,我还误删了user表。现在他们需要重新邀请所有用户——如果他们能弄清楚用户是谁的话。哎呀。我回到座位上,感到深深的挫败感。但是我觉得有点奇怪,我们怎么会一开始就把所有的文章都丢了呢?于是继续调查,一方面是因为这个结果很难接受,另一方面也是想给面子。过了一会儿,我注意到了关键问题。服务器上还有5个其他数据库,其中一个与我正在查看的名称非常相似。查看了一下,文章都在,users表也完好无损。原来是配置更改无意中使其成为生产数据库,导致网站指向全新的数据库。我在其中看到的用户呢?种子数据。终于解脱了!早上我神经紧张,胃里翻腾,难受,幸好我们“修复”了所有数据,找到了问题的真正症结,没有提前公布数据库被误删的噩耗。这个小插曲让我们受益匪浅,最简单的一个就是:现在我们一直在备份我们的数据库……这对我们开发者来说可能是最有效的胃药了。总是在正轨上,从来没有在正轨上我最近犯的另一个突出的错误并不那么严重,实际上是由最终累积成大麻烦的小错误组成的。我们项目开发的挑战之一是时间紧迫(但并非总是如此?)。在我们的第一次会议上,我们一致认为该项目需要的时间是我们负担得起的两倍。从立项开始,工期紧,三遍五遍通过了认证流程,才能进入客户真正关心的功能部分。我之前只是在一个单页应用程序中实现了一次身份验证,但仍然不完全理解应用程序的各个部分是如何组合在一起的。试图尽可能快地推出应用程序是一个很大的错误。我漏掉了一些很重要的东西:用户登录后,是通过cookies加载的,但是我的app页面没有加载提供了等待时间,但是根据事件的先后顺序来决定优先级,所以服务器会回复说你没有许可。此错误很少见且难以重现,因为大多数情况下事件都是按正确顺序完成的。此外,身份验证过程从不检查用户令牌是否无效。如果您不经常访问该网站,当您发现无法登录该网站时,您需要退出并重新登录。令牌应该在每次请求时更新,但我从来没有时间了解规则。所以时间问题又来了。如果我们同时发送多个请求,而我们收到的响应取决于它们到达的顺序,那么以后用于发送请求的令牌将是错误的。我们努力跟上时间表,但最终还是花费了给定时间的两倍。不同的是,我们开发的应用程序有更多的错误,并且需要更多的时间来跟踪和修复错误。工作中的错误让我在所有人面前感到尴尬和羞愧,因为我把一切都搞砸了。我会这样说:从那时起,我花时间学习身份验证机制,现在了解OAuth、JWT、刷新令牌和失效。我在库中仔细阅读了很多其他人编写的认证代码,并基于几种不同的语言版本和框架构建了认证流程。失败是成功之母。这是每一次失败的经历给我的启示。只要你愿意学习,你几乎可以从每一次这样的经历中获益。如果一个人能够从错误中吸取教训,就会取得进步。如果一个玩家第一次犯错,我尽量不要对他表现出不满,他们通常已经知道自己搞砸了。但我也尽量不去评判那些总是错的、永远不会改变的人。他们也需要被同情。对待错误,如果你能做到这四点,那么你就会不断进步:你可以对自己所犯的错误自嘲,从中吸取教训,然后努力为自己辩解。与他人分享,以便其他人可以从中受益。关于犯错误的宝贵价值,我想给大家讲一个著名的轶事:20世纪初,IBM总裁托马斯·沃森(ThomasJ.Watson)遇到一位员工,他因为多次错误决策而导致公司损失惨重。当员工被解雇时,Watson回答说:“没有,我只是花了60万美元培训他,我怎么会让别人雇用他来积累他的经验呢?”你过去犯过哪些有趣的错误?一起分享吧!
