是否曾经在办公桌前,面对一个难题,感到一丝挫败?或者这种不愉快的感觉已经成为日常工作的一部分?如果真是这样,那么就需要做出一些改变了。过多的挫败感很可能导致压力,进而引发一系列身心问题。那么,程序员如何在工作中控制挫败感呢?能做些什么来最小化它的影响?为什么会在工作中感到挫败呢?
维基百科上关于挫败感的页面在前两句话中提供了一个很好的定义:在心理学中,挫败感是一种常见的情绪反应,与愤怒和失望有关,它源于对实现个人意愿的阻力的感知。阻力越大,意愿越强烈,挫败感就越强烈。
简单来说,挫败感就是这样发生的:想要某样东西(意愿),但得不到(阻力)。阻力和意愿越大,挫败感就越强烈。如果观察工作中感到挫败的程序员,会发现他们想要的东西,他们的个人意愿,很可能是他们正在工作的项目的满意完成。如果正在修复一个bug,希望它被修复。如果正在开发一个新功能,希望完成它的实现。如果正在努力达到一个截止日期,希望按时完成任务。
但有些东西阻碍了。意想不到的阻力。以为通过执行任务a、b和c就能完成任务。然而,在任务b进行到一半时,意识到实际上还有几个其他任务需要完成——这些任务之前没有计划。突然间,想要的东西——满意的完成——变得更加遥不可及。更糟糕的是,最初的估计变得不切实际。
结果呢?挫败感。如果这一切还不够糟糕,甚至可能发现自己陷入了一个不断增加的挫败感的恶性循环,看起来就像这样:
有问题,尝试一个解决方案,它不起作用。
或者这样:
有问题,尝试一个解决方案,它起作用了,但会发现一个或多个新问题。
作为程序员,需要找出避免陷入这些挫败感循环的方法。因为感到的挫败感越强烈,思维就越不敏锐。思维越不敏锐,就越不可能想出解决面临的问题的好方法。
该怎么做呢?如何抵御挫败感的危险呢?在某种程度上,认为不能。只是人类,永远不可能足够聪明,完全预测一个系统将如何表现。软件系统太复杂了。在《代码大全》中,史蒂夫·麦康奈尔指出,管理复杂性是软件开发中最重要的技术话题。换句话说,编程语言、操作系统、设计原则和模式的整个目的是帮助这些有缺陷的人类更好地理解计算机内部发生了什么。没有这些东西,将直接与位和字节打交道,显然不会在尝试开发一个有用的应用程序方面走得太远。大脑无法完美地预测一行代码将如何影响系统的其他部分。总会有一些时候,陷入了不可预测的循环,当一个3天的任务变成了一个3周的任务。
能做的是改进,减少挫败感的可能性,即使不能完全消除它。最好的方法是不断承认局限性,以及无法完美预测复杂系统行为的事实。这几乎是一种谦逊。如果能学会接受并不像想象的那么聪明,那么就会开始采取措施来弥补局限性。这与此相反的是,对自己的能力过于自信,会无情地投入到代码中,拒绝承认实际上不确定否在做正确的事情。