您曾经犯过的最大错误[关闭]


33

与我在Server Fault上阅读的问题类似,您在IT相关职位上犯的最大错误是什么?朋友的一些例子:

我需要在生产站点上做一些工作,所以我决定将实时数据库复制到Beta站点。相当标准,但是当我进入测试版站点时,它仍然在提取过期信息。糟糕!我已经将Beta数据库复制到了实时站点!感谢上帝的备份。

对于我来说,我为在特定时间范围内举行的活动创建了一个表格。参加者将填写表格以获得获胜机会,我们将从数据库向活动组织者发送CSV。我进入数据库,发现只有1个条目是我的。经过调查,似乎我忘记了自动递增键,并且由于服务器设置的原因,无法恢复丢失的数据。

我知道这个问题类似于Stack Overflow上的问题,但是我发现的问题似乎得到了一般性的答案,而不是实际的故事:)

有史以来最大的编码错误/错误是什么?


6
吉尼斯问题!
Junior M 2010年

为什么o为什么这个问题结束?我感到有必要添加自己的大错误:在被特别告知不要部署到生产后,在部署到生产环境后,我关闭了一个LIVE网站三个小时(即HTTP状态为500)。最糟糕的是,我试图掩盖错误,但是客户注意到了,似乎并不高兴。
Maria Ines Parnisari 2015年

对我来说很简单。支付了投资提款,但两次转换为美分。支付了300万而不是3万。亚军-错误的SQL where子句。通知4k的人,他们$ 1-$ 10的投资在夜间增加了$ 1800。显然,其中一些客户花了钱。财务上很快就恢复了。破碎的信心和内gui从来没有真正消失过。如何恢复:承担责任。承认你的错误。即使有贡献因素,也不要怪其他任何事情。理解和团队合作使其得以解决。客户赞赏诚实。
Reasurria '17

Answers:


54

发出带有匹配所有内容的“不良” WHERE子句的SQL UPDATE。

获得的经验:请始终先执行SELECT,以查看将要更改的内容。


15
或将autocommit设置为false,这样您可以查看将影响多少行。
Yevgeniy Brikman 2010年

2
哦,我做到了。非常讨厌...
glenatron

4
哈哈,我认为每个掌握SQL的人都在某个时候做到了这一点,包括我在内
billy.bob 2010年

3
这就是为什么应该先对开发人员进行更新!没有直接修复到产品的修补程序。如果您有审计表,请多加感谢。
HLGEM

13
我曾经做过一次重设某人的密码。在将每个人的密码设置为相同的内容之后,我只是简单地告诉老板,技术支持会收到很多电话,并且出于安全原因,我们应该告诉呼叫者我们必须更改其密码。
巴里·布朗

36

错别字

在此块上花了三天的时间:

if($func == "remove")
{
    $p->comments[$index]->removed = true;
    $p->save();
}
else if($func == "approve");
{
    $p->comments[$index]->approved = true;
    $p->comments[$index]->removed = false;
    $p->save();
}

看到错误了吗?它是末尾的分号else if。我不知道为什么删除的评论没有删除。挖成数据库,Ajax请求我使用,POST变量,必须error_log的和alerts 无处不在。最终重新编写了该方法,并成功了。然后我对原始版本进行了比较,并注意到了分号。

错字是最难追踪的语言,它没有经过编译或预先检查。在编译语言上,即使是这样的错误也很难。更改为===然后突然在内分配了任务if


8
这是Resharper之类的工具真正可以收回成本的地方-它会突出显示这是一个警告,并提示您删除它。
Yaakov Ellis 2010年

24
标题是(预定)双关语吗?:o
Agos

3
@Rogue Coder:单引号和双引号之间的差异很小。花时间为大脑周期担心会浪费时间。参见phpbench.com
Joeri Sebrechts 2010年

2
@ back2dos:Errr ...对。因此,您建议放弃所有这些提到的语言,以支持haXe?在2005年首次出现?继续吧。
乔什·K

10
感谢您赞成“一个真实的支撑样式”的论点。+1
埃斯瓦尔德

28

认为编程主要是关于从头开始构建很棒的新东西。


1
当我刚开始的时候,我也有这个想法。然后我得知,对其他民族的维护比什么都重要。这就是为什么我现在尝试编写最好的代码(带有注释)的原因。

2
仍然有很多新代码需要编写。许多开源项目需要从头开始进行编码,以实现与封闭系统相同的功能。
PP。

23

我最大的错误是认为编程很容易赚钱。


27
如果您是为了赚钱而开始编程,那么您应该获得新的职业。并不是说钱不存在,而是钱,但是您需要真正的开发人员对编程的痴迷之情,否则您将很快就
johnc

1
你说的很好。我确实并没有为了钱而去编程,但是我真的认为,靠它生活起来会容易得多。编程是我的激情,即使我需要付费,我也会这样做。
Marcelo de Aguiar 2010年

4
@johnc同样适用于大多数职业。老实说,我不理解那些上大学来“学习编程”的人。我从14岁开始在K&R工作。我上大学是为了“学习电子技术”-但是猜猜怎么了,无论如何我最终还是一名程序员。最好的音乐家自学。最好的程序员自学。那就是生活。
PP。

阿们兄弟,阿们
Misters

23

意外删除了存储我们所有客户信息,订单历史记录和发票的数据库,这些数据库可以追溯到公司成立之初(数年)。

公平地说,我的雇主必须承担一些责任。他们拥有Mac SE上存储的该数据库的唯一副本(是的,这是很久以前的事了),他们给了我(一名新员工,大学以外的第一份工作)作为我的工作站,甚至从未考虑过进行备份。

因此,以为它是数据库的副本,我将其拖到垃圾箱。由于文件大小,它立即将其删除。我们在为数据恢复服务支付了巨额费用后最终将其收回,但是在大约5天的时间里,我们无法履行任何订单或向其收费,并且无法访问有关任何客户的信息。这几乎使(3人一家的公司)陷入了停顿。


15
哎哟。自我注意:始终进行备份:即使已经备份。
克拉莫伊(Kramii)恢复莫妮卡(Monica)2010年

1
@Karmii:最好的建议,请放手。
克里斯,2010年

@Kramii-很高兴我在职业生涯的早期就学到了这一课。
JohnFx 2010年

你没被解雇吗
Mateen Ulhaq 2011年

3
有足够的责任去四处走动。那时我还只是个孩子,可能比今天要想像一家真正的公司做任何愚蠢的事情(例如将唯一的数据库副本放在我的台式机上)愚蠢得多。经验告诉我,即使在一家大公司中,高估雇主的准备也是愚蠢的。
JohnFx 2011年

15

当phpmyadmin问:

“您将要销毁一个完整的数据库!您真的要删除数据库xxx吗?”

我按Enter。


26
防御性编程何时可以帮助预防重大问题的一个很好的例子。如果您正在做一些可能会造成严重影响的事情,例如删除表/数据库,请默认将用户响应设置为“否”,以便他们必须主动同意该操作。
雨果

6
@雨果:+1。我曾经在uni(以前是Unix /数据库sysadmin)的university担任教授,他曾说过:“每当您做任何认真的事情时,请始终将手从键盘上放下,坐在上面约十秒钟,然后思考会发生什么。”
鲍比表

1
@Hugo:我走得更远-“您将要破坏一个完整的数据库!如果您真的想删除数据库xxx,请输入DELETE:”
Loren Pechtel 2011年

3
@Hugo @Loren Pechtel-“您将要破坏一个完整的数据库!对您的登录名进行网络搜索已发现多次出现'lol',因此该操作被拒绝。请与管理员联系或学习交流。”
2011年

15

不确定这是我的“最大错误”,但绝对是一个值得纪念的错误。在我从事新工作的前一两个星期中,我被分配去做一个小的“功能增强”,其中涉及修改网站上最受欢迎页面之一上某些项目的排序顺序。我对代码库不太熟悉,但是很快就找到了相关的Comparator并在compareTo方法内部添加了对几个看上去无害的方法的调用,而无需考虑太多。该代码在本地和没有问题的质量检查中进行了测试,并投入使用。

那天我与老板进行了一对一的交流,脸上带着灿烂的笑容,他向我表示祝贺,因为我加入后很快就获得了我的第一个“功能”。当他访问相应的页面时,我们俩都在看该功能。该页面耗时47秒。我的心沉没了。他刷新了页面:53秒。他的微笑消失了。我回到办公桌前,花了整整一个晚上进行调试,并将重要的补丁推送到实际站点中。

事实证明,我添加的一种看起来无害的方法是远程服务调用,该调用至少导致了一个数据库命中。在每个compareTo调用中。因此,在一个页面上,该页面已对2,000多个项目进行了排序,我获得了约6000个(nlogn)数据库匹配。哎哟。


数据库在您的代码中被击中了吗,还是发生在您调用的某些方法/属性中?
dbkk 2010年

数据库命中实际上隐藏在一个看起来像简单的getter 的方法后面:我在compareTo方法中添加了myObj.getFoo()调用。相关子类上的JavaDoc确实记录了数据库命中的可能性,但是myObj接口上的JavaDoc(这是我在编写代码时看到的)没有提及任何形式。无论哪种情况,我都认为这清楚地表明了(a)代表我进行的测试不足,以及(b)如果您未遵循良好的命名约定,将会发生什么。
Yevgeniy Brikman

更可能是(非常常见的)测试环境不能代表生产环境的情况。您对其进行了测试,并表现良好,因此得出结论,这是很好的,从不知道(然后您就无法知道)测试数据库仅包含生产数据库中所包含数据的一小部分。
jwenting 2011年

15

我已经做到了:

rm -rf /bin

(实际上,我并没有完全做到这一点。这将是愚蠢且不可原谅的。我以一种更加微妙,round回的方式做到了这一点,实际上导致了该命令的执行。)

毋庸置疑,此后Unix系统将无法使用,必须重新安装。当时我是一名系统管理员,负责监督我的高级人员很了解。

经验带来了一些好处。我学习了如何列出目录而不使用任何/ bin命令。

echo *

+1学习了一些技巧,例如在DEC-BSD系统上从单用户模式仅使用Bourne shell构造来模拟ls和cat
Arcege 2011年

11

客户希望向他们的整个用户群发送邮件,这基本上将发送有关事件的个性化电子邮件,当他们单击电子邮件中的链接时,将自动将其登录到填写了一半数据的表单中。

我编写代码,测试代码,它可以正常工作,链接可以正常工作。检查并仔细检查了所有内容后,我切换到实时列表并离开。

实时列表比我的样本数据大得多,邮件服务器崩溃了。我必须停止控制台应用程序,然后意识到必须从停止位置重新启动它。幸运的是,添加此功能并不是很困难,并且我已经记录了邮件发送已访问的用户,因此启动了邮件服务器并再次运行,并重新配置了代码以能够从先前失败的位置重新启动并暂停为了让邮件服务器赶上来,我们走了。

不幸的是,我设法以某种方式无法正确更新所有代码。我不记得我做过的细节,但是获取用户数据的查询获取了一组数据,生成哈希的查询获取了另一组数据,因此,如果用户单击链接,他们将获得一个包含他人帐户信息中他人个人数据的表格。在这个利基行业中,有很多竞争激烈的小型企业。

电话没多久就开始在客户办公室响起...

这是迄今为止唯一导致我辞职的错误。


实际数据的+1明显大于样本数据:-(
nudefanatic 2011年

海事组织,这是最糟糕的事件之一> _ <
sevenseacat

7

我曾经使用没有过滤器的交叉联接。在测试数据库中,只有少量数据可以正常工作。部署后,平均每个查询中约有6000万行。


14
实际上,您最大的错误是没有针对适当大小的数据库进行开发。切勿使用小型测试数据库来开发大型生产数据库。除非您拥有合适大小的数据库,否则您将无法编写高性能代码。
HLGEM

7

我撞毁了一台价值10万美元的激光扫描仪。

控制器将位置存储为整数,因此我将所有内容除以10000,以获得以英寸为单位的实际位置。

当最后一位数字为0时,将其省略,因此Z轴是远10倍。

随之而来的恐慌



5

让我的经理眉头打我,辞去了我所爱的工作。我应该让他把事情弄乱,被解雇,然后我应该加强并清理碎片。从那以后,我辞职了,对此感到后悔。


17
管理人员很少会因为这种事情而被解雇。要达到经理级别,您必须非常擅长遮盖后方;您离开公司的那一刻可能就成了替罪羊。也许您可能会以不同的方式处理它,但不要为它而烦恼。
Mark Ransom

如果他搞砸了,您就会被责备和开除(或者至少要经历一段痛苦的时光,直到您丢脸地辞职)。
jwenting 2011年

4

七年前,我还没有认识的我的老板和公司老板刚开始工作时还很陌生,当时他在另一个州为几个潜在客户演示了我们的研究网站。会费低至五位数,所以这些演示对我们刚起步的公司来说意义重大。

在他的演示过程中,我在做一些数据库工作时,我对实时数据库进行了更改,并将每个调查中的每个调查问题更新为相同的文本,例如“这是一个测试问题”,因为存在缺陷。在哪里。我和我的同事争先恐后地准备备份,并希望他当时不演示该站点的内容,而是等待所有从未出现过的大写电子邮件。

好的方面是老板终于涌现了一个开发箱。


3

我在我们的Intranet上运行Xenu的链接侦探,以尝试清除多年来建立的许多断开的链接中的某些(大多数,不足为奇的是从Wiki到共享网络驱动器的链接)。

大约30分钟后,我开始注意到某些新产品的图片有些奇怪,看起来人们已经使用了系统上一些颗粒状的旧照片,但我忽略了这种想法,也许只是没有什么更新了有他们想要的。

再过10分钟后,我注意到特色商品由于某种原因随机变化。在这一点上,我意识到发生了什么事。Intranet使用Windows身份验证,并且对某些功能(例如选择新闻图像和特色项)进行了编码,以响应HTTP GET请求。链接检查器一直在使用我的身份验证,并已爬到管理员端的页面,忠实地执行其工作,并跟踪发现的每个链接,包括类似

/admin/displayItems/icon_update.asp?image=eastereggs.jpg&itemID=3174


7
这似乎是很多人学习何时适合使用GET和何时适合使用POST的方式
Oli 2010年

同意,我将要开始重新开发Intranet的工作,这将正确使用GET和POST放在了需求的最高位置。ASP MVC还可以帮助您轻松,直观地进行操作。
朝巢

1
并不是您的错误,而是一个好故事:-)
Dean Harding

3

到目前为止,我唯一的令人费解的,心跳加速的,突然变得发烫的痒的错误是运行不带WHERE子句的UPDATE查询。幸运的是,最近15分钟进行了一次备份,数据没有经常更改,这意味着我能够在10分钟内完全恢复数据,而没人知道。

不错,但我已经打了一些电话。它们是并保持密切联系,因为我在这个行业中听到了足够多的恐怖故事,以至于我所做的一切可能使事情变得糟透了。


1
你们难道犯过数据库错误的人都称回滚吗?
JE队列

@Xepoch,仅在您开始交易时才有帮助
CaffGeek 2011年

1
@Chad,我们通常不应该假设所有数据调用都应该隐式地事务化吗?
JE队列

2
@Xepoch,永远不要假设。
CaffGeek 2011年

1
@Char,我个人倾向于维护事务中的所有数据库交互。那些不这样做的人会承担风险或有无关紧要的业务案例。规范假设和MANDATE是我们将开始和维护具有事务性DB管理的代码项目。
JE队列

3

对于我使用的机器人,我们会保留每次运行的日志文件。我们有机器人和模拟器,它们都生成这些日志文件夹。模拟器的日志文件没有用,但是机械手的日志文件非常有用,并且可以永久存储。

由于机械手本身的硬盘驱动器空间有限,因此会将它们转移到另一台计算机并存储在该计算机中。该计算机恰好是与机器人通信的主要操作计算机。

好吧,我几个月前才刚刚开始研究机器人,对此一无所知。我以为操作计算机上的日志是模拟器生成的无用日志,因此将其删除。我们丢失了所有旧日志,因为没有适当的备份。


8
该死的... 想研究机器人!我整天要做的就是建立糟糕的网站。
丹·雷

2

在我的计算机上而不是在构建计算机上构建了我们软件的版本,因为它更快(快了约4个小时,这意味着它可以在当天(而不是第二天)进入质量检查),而发行商希望尽快进行。

我在计算机上调试时有一个特殊的定义,该定义导致在质量检查中未检测到错误。他们仅在验证测试的4周结束时检测到它,但它严重到无法通过验证。


2

意外删除生产数据库而不是开发版本。我没有看到我正在使用的服务器。幸运的是,上一次备份是在4个小时前完成的,用户没有在系统上进行太多更改,因此没有大数据丢失。


我有一个同事这样做。只有他以为自己要放弃本地副本而不是产品副本。我们都在工作,然后听到他说'哦,SH ** !!!!' 那是一个有趣的下午。
Tyanna 2011年

2

我犯过的最大错误是,我的开发机器上没有进行源代码控制。我的硬盘崩溃了,我失去了数周的工作。这是一个很难学的教训,我再也不会发生。


不是我的错误,而是相关的。我公司工作了其网络服务器受到影响的有一,给予他及时执行的“RM-R /”版本控制服务器(DMZ Whazda?),入侵者root访问权限
jwenting

2

在Java中使用==而不是equals进行字符串比较


13
那是你犯过的最大错误?
克里斯,2010年

在Java中,这是一个更大的问题,在Java中==是一个参考比较。在C#中,==确实对字符串的值进行比较,相同.Equals() 尽管如此,还是有一些区别,见乔恩斯基特的答案在这里:stackoverflow.com/questions/3678792/...
蒂姆·古德曼

2
@Tim:仍然无法回答这是“您犯过的最大错误”的方式……关于后果的更多信息至少是很好的……
Dean Harding 2010年

如果最多的答案是拼写错误,那么我的答案有何不同?如果您是初学者,则几乎不可能调试出此错误,并且可能使您整日沮丧。
南达

@Dean:这不是犯过的最大错误……我只是在澄清C#与Java在行为上的差异
Tim Goodman 2010年

1

我告诉我的主任,仅仅是因为他老了,比我拥有更多的经验,并不意味着我会尊重他。我唯一要尊重的是能力。我不必面对这样可悲的声明的后果,可能是因为我是一名初级程序员。回顾这似乎是我最大的错误。我的常识\谦卑在哪里?:-(


2
我部分同意您的观点,只是因为某人(多年)有更多的经验,并不意味着他是一个更好的程序员。那里有很多程序员,他们可以在履历表上写“ xx年的经验”,却不知道自己在做什么。
鲍比(Bobby)2010年

他们很可能在此过程中发现了一个愚蠢的错误,例如此处列出的那些错误,但这将使开发人员更加谨慎
johnc

要明确的是,错误并不在于那种态度。错误是说您有那种态度。
丹·雷

多年来,我一直想对很多人说。
Reasurria '17

1

这件事发生在本月的一位同事身上。

他正在修复一个错误,该错误是在您向许多手机发送短信时发生的。通常,这些消息实际上不会被发送以节省成本,但是由于我们数据库中的配置错误,它们确实被发送了。

费用:一个月的短信流量工资。


那很便宜!:)
jwenting

1

应经理的要求,我/etc/sudoers从一台计算机复制到另一台计算机(即使它无法解决当前问题,但这已不重要了)。不幸的是,我曾经sudo将复制的文件移到适当的位置,却没有注意到其所有者和权限是完全错误的。那时,没有人打开根shell,没有人可以sudo,也没有人可以以root用户身份登录,因为它的shell设置为/bin/false。机器在一个远程数据仓库中...


1

我想为目录中的每个文件创建元数据文件(即,对于每个文件somedir/foo.bin,我想创建一个文件somedir/foo.bin.meta)。由于某些愚蠢的原因,我决定通过Python打开和关闭文件流来创建文件:

for fn in os.listdir(path):
    open(os.path.join(path, fn), 'w').close()

出于某种甚至更愚蠢的原因,我认为在硬盘上的目录中测试此脚本是很聪明的,上面有几笔个人数据。仅在运行它之后,我才意识到我忘记了在将文件名传递给文件名之前实际上已经对其进行了修改open并且我刚刚截断了该目录(ouch)中的每个文件。

幸运的是,那是在个人计算机上,并没有对任何重要内容造成任何损害,但是我仍然吸取了教训。


1

我曾在一家处理瑞典最大的电信公司客户支持之一的公司工作。在我们的服务器上,我们有一些软件可以调节来电队列,可以接多少个电话等等。如果无法正常工作,我们将不会接到任何电话,客户也不会获得任何支持。

Aaaaanyway,我对软件做了(较小的)更改。我本来可以等待服务窗口的更改,但是我想:“嘿,重新启动服务需要一分钟,为什么要麻烦。财富偏爱粗体。” 所以我重新启动了它,不幸的是线程被锁定了,所以我无法替换它。开始惊慌失措,我决定快速重新启动计算机(我正在执行远程操作)。不幸的是,在紧急情况下,我单击“安装更新并关闭”:P

不用说,在接下来的半小时里,在我们设法重新启动瑞典之前,瑞典没有太多的客户支持。

但是,有一位同事比我还糟,他晚上我们调试了自动语音响应系统,然后将号码重新路由到了他的手机上。他唯一忘了将其恢复原状的事情,隔天休息一天,而他的手机仍在工作。我们想知道为什么那一天持续不断地响:)


1

啊,晚上11点,实验室关闭,快点,快点...

$ enscript -o midterm.hs midterm.hs
$ submit midterm.hs
Error: submission is empty

天哪!FFS。我的意思是PS你****!


为语言风格而道歉,这是真实性所必需的。
2011年

0

在编码JS之前的某个时候,我无法区分“ 1”(一个)和“ l”“小L”。即使当我输入此答案时,两者在编辑器中的外观也几乎相同!


为什么要投反对票?
Gopi 2010年

0

我制作了一种站点模板语言,在其早期版本中,所有HTTP参数都隐式扩展为变量。这意味着您可以编写如下网址:

page.vis?body = <body> <p>哦,亲爱的</ p> </ body>

它会完全按照它看起来的样子工作。

幸运的是,我没有用户(叹气),所以我认为这没有太大的安全风险。


0

绝对是TSQL的不幸-在一个编辑器窗口中有太多TSQL语句。有点累,人们在左右打扰我,我发布了一条命令,更新了47,000条记录的地址,城市,州和邮政编码-哎呀。不过,它在大约25分钟内解决了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.