前言
本文上篇主要介绍了解决问题的心理过程以及问题表征阶段影响问题解决的一些心理因素,并分享了另外相关案例和指导意见。本文继续介绍影响问题解决的其它心理因素。
影响问题解决的心理因素
自我监控技能
大胆假设,小心求证
––– 胡适
在设计好解题计划后,问题解决者并不是简单地执行解题计划,而是要时刻自己监控自己对解题计划的执行是否正确、解题计划本身是否正确。这有点类似行车过程中,GPS 导航软件时刻检查车辆当前的行车路线与之事先规划的路线是否吻合。若不吻合,则导航软件会提示车主车辆已偏离规划的路线。。
问题解决者自我监控技能的强弱可能对问题解决的效果和效率产生决定性的影响。例如,解决某道数学题时,解题过程中需要计算出某事件出现的概率,然后再以此数据继续解题。若经过很多步骤才算出这个事件的概率是 1.02,通过自我监控则可以发现这个概率值的计算显然是错误的。那么,应该重新计算这个概率值,而不是继续执行其它解题步骤。相反,此时若未觉察到这个错误,继续执行其它解题步骤,最终的答案很可能是错的。
专家在解决问题过程倾向于更加频繁地进行自我监控,并且其自我监控的效果比新手更好。专家在解决问题,尤其是一些难题,往往更加频繁地提出各种假设,并通过逻辑推理和寻找数据证据对其进行检验,然后再根据检验的结果提出新的假设,再对这些新假设逐一验证,通过这样的自我监控逐步向解决方案靠近。就好比拨洋葱皮,每拨一层皮,就离洋葱核心更进了一步,最终解决问题。而新手在解决问题过程往往很难提出假设,即便提出假设,他可能不能清晰地意识到那仅仅是个假设,便在此基础进行其它操作了。最后他们得到的所谓“结论”,可能通过简单的逻辑推理就可以发现是错误、甚至是自相矛盾的。
笔者曾经遇到这样的问题求助。求助人在写一段服务端的 Java 代码,用于获取网页表单中提交的某个字段的值。求助人传达给我的信息是:网页中确实存在服务端代码中所要获取值的字段,但是服务端代码就是取不到该值,“原因”是浏览器并没有把该字段的值提交到服务器。我问对方得出这个“结论”的证据是什么?他又回答不出来。显然,他只是把“假设”和猜想一厢情愿地当作结论了。如果求助人在该问题的定位过程中做到了自我监控,他可能会问我如何去验证客户端某个字段是否被提交到了服务端,而不是问我这个问题如何解决。最后,通过简单的 Debug 查看变量,发现浏览器事实上提交了服务端所要获取值的字段,只不过服务端代码中所用的字段名的大小写弄错了!
提高自我监控能力,不是能够一蹴而就的事情。需要问题解决者清楚地明白“结论”和“假设”的区别。在问题解决过程中,任何中间结论的得出都必须经过逻辑推敲和相应的事实证据(数据)。另外,也可以对自己的解决问题过程进行反思:在问题解决后第一时间,自己问自己在问题解决过程中,自己犯了哪些错误,有没有及时自己发现这些错误(而非求助于他人)。通过这样的反思,问题解决者能够跟好地理解自我监控的重要作用,有助于以后在问题解决过程中逐步加强自我监控。笔者有时在遇到一些问题定位的求助时,尤其是对方是新人时,往往会先问对方目前的结论和进展是什么。若发现对方的结论(或者中间结论)是错误的,我可能不直接指出,而是引导其思考,让对方自己发现自己的错误。这种方法一定程度上也能提高问题解决者的自我监控能力。
短时记忆容量
根据记忆保存时间的长短,人脑的记忆可以分为短时记忆和长时记忆。前者类似于计算机的内存,其特点是记忆保持时间短(约为 5 秒到 2 分钟),容量小。后者类似于磁盘,其特定是记忆保持时间长(永久保存)、容量大。人脑在解决问题过程中,需要将长时记忆中的内容提取到短时记忆中参与信息加工。而短时记忆的容量很小,它只能容纳 7±2 个块的信息。这个“块”是一个相对的单位,一个英文字母可以算一块,而一个英文单词也可以算一块。因此,适当增加“块”的长度可以增加短时记忆的容量。例如,手机号码”13612345678“按“136-1234-5678”这样 3 块来记忆比“136-12345678”这样 2 块来记忆要容易一些。
尽管如此,对于复杂问题的解决,或许减轻短时记忆的负担比设法提高短时记忆容量要重要。毕竟人脑此时的主要任务是解决问题,而不是记忆。减轻短时记忆负担可以使人脑集中力量到其它更加重要的活动上,如逻辑推理、提出假设和验证假设。一种简单可行的减轻短时记忆负担的方法就在解决问题过程中打草稿。例如,将问题的已知条件、待确认的细节、问题解决过程中获得的新知识、新经验以及中间结论(它可以看作新的已知条件)都列在纸上,这样既不增加短时记忆负担,又便于综合考虑。同时,也便于同他人就问题进行讨论。
动机强度与情绪
相信大家都遇到过这样的情形。解决问题时,尤其是遇到困难时,自己越是强烈地希望去解决它,问题解决越是没有什么进展。相反,当我们适当地停下来,把注意力转移到这个问题之外一段时间,回头再重新继续这个问题的解决。这个时候往往灵感闪现,有可能问题一下子就被解决了。这个过程中,其中一个影响问题解决的因素就叫做动机。动机简单来讲就是指心理动力。术语化的表述就是激发并维持个体活动的一种内在心理过程或内部动力。它与问题解决的效率呈一个倒 U 型关系,如图 3 所示。
图 3. 动机强度与问题解决效率的关系
可见,最有利于问题解决的动机强度是中等的(并非越高或者越低才是越好的),并且对于不同困难程度的问题,其所需的最佳动机强度也是不同的。困难的问题比起容易的问题,所需的最佳动机强度要低。这就说,面对难题,问题解决者适度调低动机强度,心里不要抱着过大的意愿要去解决它,反而有利于问题的解决。
情绪在问题解决过程可能起到积极的作用,也可能起到消极的作用。乐观、平静和积极的情绪有助于问题的解决,而紧张、惶恐、烦躁、压抑等消极的情绪会阻碍问题的解决。不难发现,不少新手遇到问题时的第一反应是害怕和紧张,甚至于烦躁。而专家在面对问题甚至是难题时往往也从容不迫。在问题解决过程中,如果我们觉察到自己的情绪有些紧张和烦躁时,不妨先暂时停顿下,先调节好情绪再继续问题的解决,这样效率可能比一头扎到问题中要高一些。
因此,团队的直接主管在日常工作中也可以多关注组员在工作中表现出的动机强度和情绪状态,并在必要的时候指导组员对它们进行调节,而不是一味地施加压力和有意无意地制造紧张的气氛。这点,和中国古代各种兵书所重视的士气其实是一个道理。
自动化加工与直觉思维
熟练的打字员打字的时候无需思索要敲击的字母位于键盘的哪个位置,熟练的汽车司机可以边开车边与人聊天。这些都是自动化加工的例子。当人们对解决问题的某些部分的操作已经达到充分熟练的程度,这些操作就形成了自动化加工。这有助于在解决问题时将个体有限的心理能量集中到整个问题中最难、最关键的部分。从而提高了问题的解决效率。自动化加工也有助于形成直觉思维。下面看一个笔者经历过的直觉思维的例子。
笔者曾经遇到这样的求助。对方称其在远程 Debug 一段 Java 代码时遇到了一个奇怪的问题: 有个变量的值始终赋不上去。我的直觉的反应是对方 Debug 时所看的代码与远程主机上运行的代码不匹配导致该现象的。因此建议对方将远程主机上的 jar 包下载下来反编译相关 class 看看其代码与本地代码有何区别,以验证我的想法。最后发现是欲进行赋值的变量其值来自另外一个 class 中定义的常量,
对方更改了该常量的值后仅仅将该变量所在 class 更新到远程主机,而未将该常量所有引用类重新编译后更新到远程主机,从而在编译器的作用下使得远程主机上的 class 读取到的仍然是该常量的先前值。
上述问题的解决关键的一步其实是靠直觉思维: 直觉给了我们一个问题的解决方向,接着才是在这个方向的指引下去求证,最后解决问题。可见,直觉思维往往可以使我们快速得到问题的解决思路,从而提高问题解决效率。但问题是新手通常不具备直觉思维的能力。直觉思维需要在解决问题方面长期的练习和积累才能逐渐形成。另一方面,软件开发人员在学习新技术新事物的过程中,需要注意理解和掌握基本概念和原理,并在日常工作中遇到问题时联系这些概念和原理进行分析,这样有助于问题解决,并通过一个个问题的解决逐步达到问题解决过程中能够形成直觉思维的境界。
心理定势
心理定势指预先存在的心理状态、习惯或态度。日常生活中我们提到的思维定势就是心理定势的一种。下面看一个实际的例子。
测试人员要对一个数据库过期记录删除脚本的性能进行评估。测试该脚本时需要数量较大的数据库表记录 (如 30 万条)。对于这些记录,有的测试人员仍然会采用提高负载测试工具给应用发送请求的方式由应用去生成数据库记录,因为他们经常接触到数据库记录多数是这么生成的。而事实上,这些记录完全可以由专门编写的脚本 (如存储过程) 去负责生成。这样不仅方便具体控制记录中的数据,也可以提高记录生成的速度,便于反复测试。
可见,心理定势使得我们在面对“新问题”时倾向于采用过去使用过的方法和方式,从而可能不利于问题的解决。这是心理定势在问题解决中表现出来的消极作用。值得注意的是,心理定势也能对问题解决起到积极的作用,其表现在于通过复用过去的经验和方式方法可以减少问题解决所需的心理能量,有助于问题解决的自动化加工。
因此,问题解决过程中一方面我们可以借助心理定势,以减少问题解决所需的心理能量,另一方面又要注意打破心理定势,避免其束缚我们采取更优的问题解决方法。
当我们试图沿用以前的方式方法去解决现有问题而无法解决时,不妨再仔细分析下当前问题与以前遇到的问题究竟还有什么不同之处,以前的方法是否仍然适用。或者说,问题解决的更高境界是面对一个问题时我们能够敏锐地发现现有问题与以前问题的不同之处,从而在第一时间选择与以往不同的、更为适用的方法。例如上面例子中,如果问题解决者能在第一时间意识到其目标是生成一批记录,而这批记录是如何生成的是一个与其目标无关的因素,那么他可能就会去想有什么方法比通过发请求给应用更高效。
人际关系
软件开发毕竟是一个社会化的团队活动,从这个角度来看,可以说个人在问题解决中所起的作用有时是非常有限的。良好的人际关系有助于个人在团队中找到愿意协助其解决问题的人。而紧张的人际关系则使个人解决问题时能够使用的资源变得非常有限。
观点采择
团队开发中遇到的问题有时不是靠一个人的力量就能够解决的。当个人在解决问题过程中需要求助他人的时候,就需要涉及与他人的沟通。沟通是否顺畅会影响问题的解决效率。而沟通过程中当事人是否能够站在对方的角度去理解和思考可能成为沟通效果、效率的瓶颈。
观点采择指采用他人的视角来理解他人的想法和感受的能力。心理学的研究认为观点采择这方面能力强的儿童能够更好地理解同伴的需求,因而他们能够更有效地和同伴进行沟通。如果拿实际的经验来对比,我们不难发现这点在成年人 (同事) 之间也是适用的。
有心理学理论认为人的观点采择经历从 3 岁到青春期 (12-15 岁) 的发展已经到达了“深入”的程度。但是,笔者也经历过不少个案,这些个案中的当事人在工作过程中与其他同事进行沟通时很难站在对方的角度去理解和思考对方的观点和思路,因而降低了他们在问题解决过程中求助的效果、效率。
总结
本文介绍了问题解决的心理过程,并在此基础上介绍了影响问题解决的心理因素。然后,以笔者实际经历的例子为基础通过比较专家与新手在问题解决过程中表现出的差异分享了提高软件开发人员问题定位与解决能力的指导意见。需要指出的是,本文所给出的相关指导意见,也可将其看成其有助于我们形成心理定势。因此,面对问题是我们一方面可以借鉴它们,另一方面要注意打破和超越它们。
参考资源
- 皮连生,《教育心理学》,第二版。
- Richard J. Gerrig,Philip G. Zimbardo,Psychology and life, 18th edition。
- 桑标 等译,Jhon W Santrock 著,《毕生发展》,第三版。
感谢张龙对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。
评论