程序员的“认知失调”--[ 不在为自己的错误做辩护 ]

  “不可能啊”、“一定是服务器的原因”、“我的程序不应该有问题啊”,这些年工作听到的最多的就是这些话了,程序员都是比较自信的,总是觉得自己的程序肯定没问题。

  程序就是程序员的自我延伸,花了几个小时甚至几天时间构建的结果,最后它以“正确”的形象印入你的意识里,你自然不希望别人找出什么纰漏,即便找出什么纰漏了,自己也意识到了“不足”,感情上很难接受,所以大部分人都会习惯性的“辩护”,甚至试图找一些迂回手段证明自己是对的。实际上很多时候,只要我们稍微回归一下,跳出自我守护的那一亩田地,也许我门就会很轻易的发现:我们的确错了。

  心理学上有一个学术名词叫做“认知失调”,所谓认知失调就是指在一个人的认知系统里即将出现新的认知与就旧认知(旧的信念,自我建立的理论)产生冲突引起的心理上的不适,为了调节这种不适感,一方面为旧的认知辩护,另一方面希望在新的认知和旧的认知上找到共存的平衡。例如,你告诉吸烟者吸烟有害健康,应该要戒烟,吸烟者就会出现认知失调,但是他们很快就会从中解脱出来,因为他们会以“吸烟能减轻压力,令他们轻松”的理由来说服自己。

  认知失调是一种很常见的心理现象。在我们设计到实现我们的程序的过程中,我们在心理上已经慢慢的建立了自己对程序的相信。再到代码审查阶段或测试阶段,总会有人指出其中不完美之处,于是出现了认知失调,所以我们会习惯性的“辩护”。一个开发团队中,要形成良好的氛围,首先要克服认知失调现象,提高程序员的认知是比较重要的。

  我们的前辈们很早就意识到这个问题了,并且有些程序开发组已经克服了这种认知的局限。远在计算机刚刚成为可能之初,我们的前辈冯·诺依曼很早就意识到了自己在检查自己的工作方面的能力的确不足,他或许是第一位能够认识到这一点的程序员。而在他的朋友中,有人回忆,冯·诺依曼总是很别人说他自己是一名蹩足的程序员,并且总是不厌其烦的请人帮他读程序,希望能发现一些错误和纰漏。在今天我们看来,冯·诺依曼无疑是一个天才,就是这样一位天才的程序员都能有会不足之处,我们又有什么不能面对自己的错误呢?

  再来转述一个故事。比尔是早期空间跟踪系统的一名成员,他负责写一个模拟器,对整个网络中的空间跟踪站以及实时输入进行模拟,这个模拟器的核心是一个非常紧凑的循环。实际上,它只有13条指令。比尔研究了很多个小时以后,觉得自己终于有些信心了,但是他还是希望找到一些要求比较苛刻的人来帮他检查程序。

  比尔找到了马里琳,她愿意细读他的程序,他也读她的程序,这是他们工作组里再平常不过的事了,这种相互批评的方式能让当事人不会感到自己在接受别人的批评。而比尔认为自己这方面训练有素,没必要通过这种交换来保护自己的自尊心。在他的程序开发价值观里,那种隐秘的、保守的开发方式很不好,只有开放的、分享的开发方式是好的。在他的程序中可能发现错误是人人可见的简单事实,暴露这些错误,不过是为了将来更好的改进,所以并非是对他个人的攻击。

  在这个例子中,比尔经历了他程序开发生涯中最“糟糕”的一天。经历反复的检查,马里琳发现了很多错误,随着错误一个一个的被发现,比尔反而变得越来越开心。要是比尔和我们大多数程序员一样,肯定是开始在为自己辩解了。最后,在他们的一次学术会议上,他向全世界公布了一个惊为天人的事实:13行代码中,马里琳成功发现了17个错误。他认定那天并非他写程序的“良辰吉日”,在那天剩下的时间里,他干脆把程序放到一边,然后向周围的人讲述这一小插曲中的每一个令人捧腹的细节。

  同时,马里琳并没有觉的自己发现这么多错误而窃喜,而是清醒的认识到:她发现17个错误,那么是不是还有可能有更多的错误。她经过长时间的修改之后,和比尔一样,同样找来另一位阅读者。那天下班前,一边是比尔继续向周围同事讲述这件快事,另一边是马里琳和其他人一起又发现了3个错误。

  故事的最后,当这段程序加载到计算机后,哪怕是经历任何“魔鬼似的”测试也没有发现任何错误。实际上,这个模拟器已经被至少十个以上的计算机中心使用,至少九年之内没有发现其他错误。对于每个发现的错误,比尔并不认为是对自己自尊的伤害,事实上,这种自尊恰恰体现了一个人的愚蠢,否则试想一下这个故事的结局会是怎样?

  两个故事说明认知的重要,最后总结几条观点:

  1、每个程序员的会出现认知失调的现象,应该正常对待。

  2、再牛逼的人都会有自己的认知盲区,需要别人去发现。

  3、理性对待别人发现的错误。

时间: 2024-08-02 12:00:44

程序员的“认知失调”--[ 不在为自己的错误做辩护 ]的相关文章

《失业的程序员》终极花絮:跌倒了请对原地做个标记,并在其他地方爬起来

<失业的程序员>程序员连载章节入口:第一章      第二章   第三章  第四章  第五章  ........... 小提示:其实我本身只是一个创业中的程序员.偶尔在博客园连载了一些我的个人真实创业经历,没想到竟然会成书.(呵呵 一下吧) 以下是我去年首次写IT创业经历连载之前的花絮(写于昨日凌晨) -------------------------------------------------------------------------------------------------

[转]Java程序员们最常犯的10个错误

1.将数组转化为列表 将数组转化为一个列表时,程序员们经常这样做: List<String> list = Arrays.asList(arr); Arrays.asList()会返回一个ArrayList对象,ArrayList类是Arrays的一个私有静态类,而不是java.util.ArrayList类,java.util.Arrays.ArrayList类有set().get().contains()方法,但是没有增加元素的方法,所以它的大小是固定的,想要创建一个真正的ArrayLis

Java程序员们最常犯的10个错误

1.将数组转化为列表 将数组转化为一个列表时,程序员们经常这样做: List list = Arrays.asList(arr); Arrays.asList()会返回一个ArrayList对象,ArrayList类是Arrays的一个私有静态类,而不是java.util.ArrayList类,java.util.Arrays.ArrayList类有set().get().contains()方法,但是没有增加元素的方法,所以它的大小是固定的,想要创建一个真正的ArrayList类,你应该这样做

每个程序员都可能犯过的10个错误!(转载)

每个程序员都可能犯过的10个错误! 2015-03-04 深度操作系统 深度操作系统 深度操作系统 微信号 功能介绍 深度操作系统——个性.时尚.前卫.deepin,为您带来海量最新资讯,与您分享更多技巧. 点击上方↑↑“深度操作系统”↑↑ 可关注我们 本文列出的10个错误,并不局限于C#,Delphi,JavaScript等——几乎涵盖了所有的编程语言.是不是大吹大擂,欢迎各位品鉴…… 1.面向编译器写代码,而不是面向用户 当人们使用编译器创建自己的app时,在把自己的想法诉诸于机器代码的过程

Java程序员可能犯的3个常见SQL错误

概述:Java程序员不仅要具备扎实的Java编程能力,在日常的工作当中往往还要涉及到其他语言的基础知识,尤其是SQL.那么哪些常见的SQL错误是程序员们容易犯的呢?让我们一起来看看吧! 你可能看到Java程序员每周的工作是编码开发一个可伸缩的Web应用程序,或创建一个动态的网站,或者开发高效的电子商务产品页面,也可能是开发一个Android应用程序等等.但是,即使他们致力于不同的项目,却往往都有一个共同点,那就是编程! 他们的职业要求长时间的工作来积累更多的编程知识.Java程序员还需要了解项目

每个程序员都可能犯过的10个错误

本文列出的10个错误,并不局限于C#.Java.Delphi.JavaScript等——几乎涵盖了所有的编程语言.是不是大吹大擂,欢迎各位品鉴…… 1.面向编译器写代码,而不是面向用户 当人们使用编译器创建自己的App时,在把自己的想法诉诸于机器代码的过程中,常常会将那些可以使得编程更为简单却又冗长的语法遗忘于脑后.无论你使用的是单字母的标识符还是更易于人脑理解的标识符,对于编译器而言,毫无区别.编译器不在乎你写的是否是优化表达式,也不在乎你是否用括号封装了子表达式.编译器要做的就是将这些人脑可

Java程序员们最常犯的10个错误(转)

1.将数组转化为列表 将数组转化为一个列表时,程序员们经常这样做: 1 List<String> list = Arrays.asList(arr); Arrays.asList()会返回一个ArrayList对象,ArrayList类是Arrays的一个私有静态类,而不是java.util.ArrayList类,java.util.Arrays.ArrayList类有set().get().contains()方法,但是没有增加元素的方法,所以它的大小是固定的,想要创建一个真正的ArrayL

(转)Java程序员们最常犯的10个错误

1.将数组转化为列表 将数组转化为一个列表时,程序员们经常这样做: 1 List<String> list = Arrays.asList(arr); Arrays.asList()会返回一个ArrayList对象,ArrayList类是Arrays的一个私有静态类,而不是java.util.ArrayList类,java.util.Arrays.ArrayList类有set().get().contains()方法,但是没有增加元素的方法,所以它的大小是固定的,想要创建一个真正的ArrayL

程序员眼睛的保护(爱护眼睛,你我做起)

程序员,怕是眼镜携带者的高发人群. 但是,如何让我们不再成为带着啤酒瓶厚度的眼镜,就真的靠平时的注意了. 以下,是网上看到的一些眼镜保护的信息. —————————— 1  修改编程字体大小 安装好编程软件,第一个要做的事情是修改字体大小.我一般是改成14pt,工具软件的默认字体值9pt太小了. 2 设置屏幕背景为润眼保护色 绿豆沙色能有效的减轻长时间用电脑的用眼疲劳,它的颜色默认值相关信息如下: 色调:85,饱和度:123,亮度:205: RGB颜色红:199,绿:237,蓝:204: 十六进