解决问题是编程中的一个很大的部分。软件开发中一个常见的想法是将问题解决作为一种特定的技能,然后将其应用于开发的不同方面(设计、调试等)。因此,解决问题被错误地认为是一种通用的技能。然而,这并不是解决问题在大脑中的工作方式。
虽然人类确实拥有一些通用的问题解决技能,但它们远不如特定领域的问题解决技能(如能够调试程序)有效。虽然我们可以学习推理,但是不能学习如何解决一般的问题。相反,我们学习如何解决编程问题,或如何计划最好的流程,或如何创建一个设计模式。每一项技能都是独立的,不会影响其他技能。这种无法转移解决问题的技能说明了“大脑训练”对发展一般智力的开发可能是无效的。
这条规则的一个例外似乎是空间技能。空间技能使我们能够在头脑中想象物体,比如俄罗斯方块的形状,并在头脑中操纵这些物体,比如旋转俄罗斯方块的形状。训练这些通用技能可以改善其他学科的学习。这种现象是很不寻常,空间训练提高了一系列非语言技能的表现,可以提高软件开发人员的效率。即使有这个奇怪的例外,学习如何解决编程问题的最好方法仍然是练习解决编程问题,而不是学习下棋或其他。
这里还有一个招聘上的意义。筛选程序员候选人的一个流行想法是给出一些脑筋急转弯的谜题,比如如何称一架大型喷气式客机的重量。正如谷歌在2013年发现的那样,这是在浪费时间,脑筋急转弯世界中的问题解决与编程世界中的问题解决之间没有可靠的对应关系。如果想判断编程能力,就要直接评估编程代码。