上周我和我的同事们关于如何在我们的工作上“翻江倒海”开了一个简短的会议。由于可以远离那些(项目中的)错误,我们可以偷着乐了。除了由此而来的快乐,这些工作中的失误同样给我们好好上了一课。
我们分享出这些失误,不仅可以让其他人从中得益,而且可以让他们自己心里好受一些,这一点是非常重要的。下面分享的就是我最近的两个错误。
其它翻译版本 (1) 加载中几个月前 Reddit 上有新闻说一个入门级的程序员在上班的第一天就清空了生产环境的数据库。我们都害怕见到这样的消息,说有人犯了这种不可原谅的弥天大错。因为我们知道这种错实在太难避免了,我们很多人都曾经差点犯过这种错。
在我第一份工作期间,一个高级数据库管理员就曾在工作的第一天删掉了生产环境的数据库。这种事情屡见不鲜。团队后来从一个一周前的备份恢复了数据而且没有开除这个 DBA。10年后他们还在拿这件事开那个 DBA 的玩笑。
今年上半年的时候,我在早上被叫去查看一个客户遇到的产品问题。他们找了一小群人来准备网站交付前最后的测试,但是就一晚上的时间,他们网站首页上的东西都消失不见了。我当时猜测是不是他们产品里有 bug 或者有漏洞导致了这个情况。
我登陆进他们用于生产环境的服务器。用来放文章的那个表是空的。这就对了,所以我们在网站上什么都看不到。
用户表里还保存有用户数据。虽然丢失了所有的文章信息,但至少这些测试用户的账号还在。我们可以这样解释,这只是个发布前的测试,发生这种事很正常。
接下来的一段时间就很懵了,我实在不记得我做了什么。我不记得我傻傻的在那个黑框框里输入了‘drop table users’。但很显然我的确这么干了,现在文章也没了,用户也没了。我都被自己的愚蠢震惊了。
然后我的大脑飞速运转来寻找解决方案。我确实删了用户表么?很明显。我做了备份么?没有。我怎么跟客户解释这件事呢?不知道。
我记得我走向产品经理,坐到她身边,跟她解释说刚刚发生的事情。我们的文章表里没有数据,所以网站看起来是空的。而且,我删掉了用户表。现在他们需要重新邀请那些测试用户来注册了,如果他们能知道那些人都是谁的话。唉。
我走回自己的位置,感到十分沮丧。
显然,一些事情和我预期的并不一样。首先我们为什么会失去了所有这些文章呢?
我一直在努力深入研究。部分是因为拒绝,部分是希望挽回脸面。不久之后,我注意到一些重要的事情。
服务器上还有五个其他数据库。其中一个的名字与我刚刚看到的数据库非常相似。
当我检出它时,所有的文章都在那里。用户表是好的。事实证明,配置更改无意间将其用于产品中,导致该站点指向一个全新的数据库。那些我所看到的用户? 种子数据。
终于解脱了!一整天的神经紧张和胃酸让我感到恶心,但我们能够“恢复”所有的数据,并且在我们传递坏消息之前我发现了真正的问题。
从这一系列中吸取了许多经验教训。最简单的一个是:现在我们总是会做备份,也许这是开发者最有效的“抗酸剂”。
我近期遇到的其他特别错误之一并不是那么戏剧化。事实上,这是一个微小的错误,但最终导致了混乱。
我们的挑战是在一个时间紧迫的项目上。(他们难道不是吗?)
在我们的第一次会议上,我们都赞成作为一个团队,这将需要比现在多两倍的时间。由于从一开始我们的最后期限就被限定了,所以我通过身份校验代码段轻轻松松搞定,以便我们可以继续处理客户真正关心的功能了。
我曾经在一个单一的页面应用程序中实现过一次身份校验,但仍然完全不了解它应该如何组合在一起。
这样一个错误,必须尽快地解决它。我错过了几件重要的事情:
用户在登录后从cookie加载,但该页面尝试无需等待的加载。根据这些事件的顺序,你将收到服务器的回复,表示未经授权。该错误是少见的并且很难复现,因为大多数时候,事情是以正确的顺序完成的。
身份校验也从不检查令牌是否已过期。如果你没有经常访问该网站,那么当你返回该网站时这将无法正常工作,你将不得不退出并重新登录。
该令牌应该随着每个请求更新,但我从来没有时间理解这其中的规则。所以这再次产生了时序问题。如果我们同时发送了几个请求,根据他们返回的顺序,你可能会在将来的请求中使用错误的标记。
我们已经在尽快解决了,但还是以近两倍的时间而结束。区别是更多的错误,然后花更多的时间跟踪和修复这些错误。
我的工作让我感到尴尬,公共场合感到羞愧,因为这使整个经历更糟。
我会说一件事:从那时起,我花了时间学习认证。我现在了解OAuth、JWT、令牌刷新和到期机制。我对其他人在许多库中写过的身份校验代码感到厌烦。我用几种不同的语言和框架构建了身份校验流程。
只要你愿意发现,在这些糟糕的事情中总是会有益处值得关注的。这是我从所有这些错误中学到的一件事情。
一旦有人从他们的错误中获益,那么现在的他们比过去就会更进一步。我尽量不惩罚第一次犯错的开发工程师,通常情况下他们已然知道自己搞砸了。
相反地,我正尽力克制自己不要对那些一遍又一遍犯同样错误的人那么苛刻,虽然很他们值得同情。
如果你能对错误做到如下四点那么你会继续成长下去:
嘲笑(自己)也犯过
从中学习受益
减少再犯
最后分享给也可以从中可以获益的人
最后,我讲一件关于失误价值的轶事。20世纪90年代,IBM 的 CEO —— Thomas J Watson —— 曾经遇到一位职工,由于他一系列的错误决定导致公司花了不少冤枉钱。当被问到是否决定让他走人的时候,Watson 回答到:
“才不呢,我刚花了 $600,000 培训他。干嘛要让其他人得到他的这次经验呢?”其它翻译版本 (1) 加载中 本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务