2015-12-17 18:27:44 +0000 2015-12-17 18:27:44 +0000
18
18

怎样才能在工作中不再犯愚蠢的错误?

我在一家小型IT咨询公司做软件工程师已经3年了。我努力地做着出色的工作,但是非常粗心大意,愚蠢的错误也悄悄地爬进了我的工作中。例如,给错误的人发了邮件,忘记了报告中的一个重要部分,在实时服务器上部署了错误的构建,遗漏了代码中的重要bug等等。无论我如何努力避免错误,我还是会犯错误。我的经理仍然对我又气又恼,说他不能指望一个有经验的专业人员做出愚蠢的事情。他警告我说,如果我再犯任何错误,他就会建议上级领导开除/更换我。

如何才能让我的工作变得优秀?有什么工具/方法可以让我永远消除错误?

答案 (8)

39
39
39
2015-12-17 19:01:15 +0000

三件事将帮助你更准确:

–使用检查表和程序(自己写),并遵循它们。包括像'仔细检查你针对的是哪个服务器'这样的步骤。当错误的后果很严重的时候,实际打印出清单,边走边用笔检查。 –当技术帮助你的时候,花点时间检查一下。比如说你的邮件客户端在你打完第一个字母后填入To行。不要只是打完信,然后点击发送。停下来看一看,看看它填写了什么。 –每当你犯了错误,就问自己为什么?你跳过了哪一步?哪些地方没有看清楚?为什么正确的东西和错误的东西看起来如此相似?怎样才能更容易确定自己做对了?用你刚才所学的知识来更新你的程序。

随着时间的推移,你会养成习惯和流程,确保你的做法是正确的。事实上,这就是经验。

13
13
13
2015-12-17 19:51:58 +0000

如何才能在工作中不再犯愚蠢的错误?

你的工作质量出现了问题,需要建立一个发现错误的系统,以建立适当的反馈机制,从而改进/培养个人的程序和工作习惯。 你可能会因为这些错误而丢掉工作。我认为,你的问题的一个重要指标是,这些看起来很容易预防的事情,但你仍然在做这些事情。然而,如果不加以预防,你就有一个严重的问题。

第二步:慢下来。太多时候,"摇滚明星 “的程序员和工程师们都被认为是那些动作快、速度快、狂暴的人–没有什么能阻止他们! 现实情况是,他们不是这样的。这种情况是有的,但也有很多情况不是这样的。不要再感觉到急促,喘口气,慢下来

第三步:在你 "完成 "一件事之前,先停下来休息一下,然后再回到它的身边复习。喝杯咖啡,读封电子邮件,或者是一些不太分心的事情,把你的心思从手头的任务上移开,这样当你回到它的时候,你就会有一个全新的视角。你可能会觉得这样做会让你的速度变慢或降低你的工作效率。然而,这种方法可以让你及早注意到错误,这对提高工作效率很重要。所以,在你点击 "发送 "之前–去阅读另一封邮件或者检查服务器的状态什么的。这不仅仅是写代码。

第4步:当你发现错误时,不要只顾着修复它。花点时间试着弄清楚错误发生的原因。你在哪里着急了?复制/粘贴错误?依赖别人的工作或意见?这将帮助你在错误发生的时候***时更清楚错误的原因。事后发现是没有什么帮助的,你也知道

第五步:跟踪你的进度。注意你的新习惯和做法的实用性。保留一个电子表格,统计一下你在休息后发现的错误或问题。同时,注意到如果一个发现避免了一些会让你的老板生气或尴尬的事情。这样可以培养你更好地自我评估自己工作的接受能力,也可以尝试学习哪些习惯是最有效的。

第六步:制定程序和检查表(或更新现有的检查表),在上面的观察中,你看到的模式会在上面出现。你不可能为_所有的事情都制定检查表或程序,所以在一段时间后(甚至是相当快的时间),你会发现错误的模式,在这些模式中,你可以创建一个可重现的方法来防止某些类型的错误。这只对经常性的复杂任务有用。否则,你会倾向于不检查列表,不保持它的最新状态,或者你可能会做出更多的列表和程序,使它们过时和过时–可能会导致更多的错误。

尝试不同的方法,在错误成为问题之前发现你的错误在哪里。虽然这里的很多回答都集中在开发流程/程序/检查表上(尤其是围绕代码开发的),但 "质量管理 "或 "质量改进 "的前提是将错误检测作为流程开发和/或改进的反馈手段。如果你不知道错误的原因,你就无法开发出 "更好的 "流程。努力发现错误的原因 大多数情况下,你很可能只是匆匆忙忙,并没有对工作进行 "双重检查"。这些是让慢下来的节奏更有成效的一些技巧。

7
7
7
2015-12-17 22:05:45 +0000

停止工作。只有这样才能停止犯错。

不,说真的。你总是会犯一些错误。这就是做人的一部分(我觉得你是安全的)。任何专业的开发人员都会在工作中出现一些错误,这没有问题。这就是我们有测试驱动开发、单元测试和质量部门这样的东西的原因。如果你的经理在第一次通过时就期望软件是无Bug的,那么你所面对的就是不合理的期望。

话虽如此,但我们生活在一个不能因为错误的发生而停止工作的世界里,所以我们要采取措施降低错误的风险。我在制造车间工作,所以我们的口号是Poke-yoke(字面意思是防止错误),这是一个自动化的过程,旨在消除人为错误。这意味着自动化。我肯定建议将软件部署到生产中的自动化构建流程。这将需要不只是一个开发者的参与,但值得尽可能地推动。许多错误可以通过在提交一个动作之前花时间审查来避免。在提交修改之前,花一分钟时间检查一下你的代码。

最后,不要害怕寻求帮助。作为一名开发人员,当发现bug时,我的第一反应是请一个值得信赖的同事来看看。一双全新的眼睛可以看到各种被你无意识过滤掉的问题。如果你没有一个值得信任的同事,那就找一份新的工作吧;听起来你是一个初级/中级开发者,你需要一个支持系统来成长为开发者。

简而言之:*尽可能的自动化,在不需要的时候花点时间,不要害怕寻求帮助。

2
2
2
2015-12-17 21:09:38 +0000

不,你不会消除错误。但你也许能抓住最重要的错误。重要的是要有意识的去做,并寻找更安全的方法。

**识别有风险的努力*。你不可能每时每刻都保持警惕—-但每个人都会整天犯一些小错误。大多数错误是可以不费吹灰之力就能修复的,所以要善于注意到一些有可能出错的地方,而这些错误是不容易修复的。任何与客户的沟通,任何对网站的部署,任何对文档的全局性修改等等

你在做什么?你明白自己在做什么,为什么要做,怎么做?能否更安全地完成?你确定这样做总比不做要好吗?

**暂停*,然后再进行有风险的尝试。不要在没有检查收件人、主题、内容、附件的情况下发送邮件。一个一个地发。慢慢来。给A客户发一个报价给B客户,可能会失去两个客户。最好花一分钟左右的时间检查一遍。不要急于求成,即使是在 “紧急情况下也不要急于求成。提前知道如果出了问题,你会怎么做。做好准备,这样,如果你需要改正错误,你就可以迅速地改正,但不要急于求成。你怎么知道自己是否做错了什么?有什么方法可以早点发现吗

**文档*任何有很多步骤的东西。如果你有文档,就像检查表一样按照它去做,这样你就可以知道它是否足够好,或者它是否过时、不完整或有问题。即使你只做一次–在你写报告之前,把所有需要做的事情都写一个清单。

跟踪待办事项*,特别是如果忘记是个问题。任何你需要做的、现在没有做的事情,都应该放在那里。把它们都记录在一个地方,然后不断回到你的待办事项清单上。不要依赖折叠起来的便签纸条藏在你的后袋里。

&***尽可能地自动*。如果你有一个需要打字的五件事情的清单,你能不能写一个程序来做这五件事情,然后你就只有一件事情会出错?如果你是做软件的,你能不能在引入bug时运行自动测试来拾取?你的目标是100%的覆盖率吗?你的测试是否以破坏你的代码为目标?你有持续集成吗,这样你就不用担心忘记运行测试了?

**如果你做的是一些风险较大的事情,你无法验证,也不容易恢复的事情,请征求第二意见*。对于软件来说,代码在被接受之前总是由别人测试,这是一个普遍的做法。

**学习*。每一个错误都是修改过程中的机会,

**照顾好自己的*。在一天中找时间让自己的头脑清醒一下,有几分钟的安静或放松。在工作前、工作后、午休时等。获得足够的睡眠。有规律、健康的饮食。

2
2
2
2015-12-17 19:14:00 +0000

当然,你永远不会完美无缺,但提高准确性的方法还是有的。我认为最好的方法是引入额外的程序,而不是单纯的重复检查自己的工作,因为人天生就容易犯小错。光靠 “小心一点 "或 "重复检查",你是不太可能抓到这类东西的,所以仅仅是这样的尝试,就等于给自己设置了失败的陷阱。一些具体建议:

  1. 单元测试。有了适当的单元测试,任何时候你对代码进行修改,都要对所有的东西进行测试,这样就可以为你重复检查是否在不经意间引入了bug。

  2. 更好的部署过程。先部署到一个暂存服务器上,使用你在prod中使用的命令,并在那里验证部署是否正确,然后再去生产。除了单元测试之外,在每次部署的时候,一旦你相信你已经完成了,就要预留出时间来检查你的构建,并尽可能多的测试一下。不要只测试那些你认为你已经改过的地方,

每当你犯错的时候,试着按照这些思路去想办法,建立起防止人为的自然失误的保障措施,并将这些想法呈现给你的老板。

1
1
1
2015-12-17 23:10:34 +0000

我做了10多年的软件工程师/架构师,我可以肯定地说,你永远无法消除所有的错误。我能给你的最好的建议是确定哪些任务风险最高,并采取措施降低风险。

  1. 大多数时候,给错误的人发邮件并不是什么大事。我无法告诉你多少次我收到过一封邮件,是给其他詹宁斯工作的人发的。但是,如果您发送的邮件可能包含敏感信息,一定要花时间仔细检查一下收件人和内容。如果你要写一个重要的文档,写一个核对表/大纲,把需要的内容写在里面,并在提交之前仔细检查内容。
  2. 对于部署build,一定要使用自动化流程,如果可能的话,先部署到二级服务器上。我的团队会将我们的Ruby服务部署到二级服务器上,进行测试,然后将二级服务器翻转到主服务器。如果在这一点上有任何问题,我们总是可以直接翻转回旧服务器。如果这两点都不可能的话,这就会带来更大的风险,所以我的建议是花额外的时间和精力去做这个任务。对每一个风险较高的步骤都要反复检查,三番五次,
  3. 对于代码中的bug,确保你写出好的单元/集成测试,覆盖正常的工作流程和边缘案例。确保整个项目的单元测试覆盖率尽可能的高,以确保如果你改变了一些东西,破坏了其他的东西,那么单元测试就会失败,你就会提前抓住这个bug。这不会捕捉到所有的错误,但也是一个好的开始。一旦代码准备好了进行黑盒测试,不要只测试你的代码所触及的工作流,要分析你的代码可能会影响到项目的其他部分,并对这些工作流进行测试。黑盒测试也应该包括正常情况和边缘情况。

除此之外,我只想说,要比你平时花更多的时间和精力去做日常任务,把更多的时间和精力放在高风险的任务上。

0
0
0
2015-12-17 18:35:56 +0000

你们的流程有多完善的文档记录?例如,在实时服务器上部署错误的构建听起来可能是一个很大的错误,应该通过冗余的检查来确保构建X到服务器Y,而软件很可能在代码中存在bug,因为事情可能不会那么容易被发现。我很想创建解决方案并向老板提出来,这样将来就可以避免一些错误。要意识到哪些地方可能要检查几次,哪些地方可能没有那么大的问题要做一堆检查来对照。

不幸的是,你是人,因此错误****会发生。完美是很少达到的,因为在体育界的一些所谓的伟大人物中,很少有像迈克尔-乔丹那样错过了比赛胜利的镜头。如果你想要一些治疗方法,可以看看认知行为疗法,方言行为疗法,以及接受和承诺疗法,这些疗法可以用来对抗你想要完美的负面思维模式。错误是会发生的,关键是要考虑你如何应对,以及你的情商有多高,因为自我意识和自我管理可以是其他可以研究的东西,如果你想另辟蹊径。


对于有点记录的,我会考虑更新文档,增加更多的检查,可能对重要的东西有用。在某种程度上,这就类似于有人会建议在校对你要发送的邮件之前等上几秒钟,这样就不会有错别字了,这在某些情况下可能是一个有用的提示。

0
0
0
2015-12-17 19:20:28 +0000

在某些情况下,我和你一样,但我的背景不同。当我们在我以前的工作中推送代码上线时,我们有自动化的流程。在新的工作中,很不幸的是,我们无法实现自动化流程。因此,我在这里和那里错过了一些不应该出现的小细节。虽然我的经理对我很好,但还是很失望。

无论如何,我已经改善了自己,首先确保我把步骤写在记事本上。我确保我有要推送的文件列表,并在做之前仔细检查。在做之前,我也会有一个心智程序,知道自己要做的事情。这对我很有帮助。只要在做之前先装作要做的样子,确保自己没有忘了什么就可以了。

我还想补充一点,那就是你应该和你的经理搞好关系。一对一,解释你喜欢改进的地方,并勾勒出你想怎么做。解释你在这里和那里缺少一些小细节,你想改进。也许他可以给你一些建议,但我想说,如果他威胁要在小细节上开除你,那么这是你必须考虑和准备的事情。