编译/马静

从神经科学的角度看程序员的大脑,我们能了解到什么?答案是:很多。软件开发是美国增长速度最快的职业之一——2014年到2024年期间,预计增长率为17%,远高于所有工作7%的平均增长率。
为了更好的填补这个职业的巨大需求,我们开始思考怎样把编程技能进行分类。是不是有一种人更易在程序员的职位上取得成功呢?
科学界关于这个问题并没有很多研究。这就出现了一个问题:为了使更多学校支持计算机学科,政府正试图根据现有的核心技能来对计算机科学进行分类,其中就包括肯塔基政府曾经将计算机科学列入外语课程的尝试,引发了很大的争议。目前我们已知的是,软件开发具备几项重要的核心技能:
  • 分析能力:程序员必须能够分析客户需求,并根据需求开发出合适的解决方案。
  • 创造力:程序员必须有能力设计出软件系统和组件,并使之完美协作以达到客户的要求。
  • 沟通能力:程序员必须有能力写出易理解的软件、有能力记录下自己的软件、并有能力与团队或客户讨论软件功能性。
  • 人际交往能力:程序员往往需要频繁的团队协作。他们需要和其他程序员写作开发系统、与经理和客户进行讨论、与交互设计师交流协作等等......
  • 学习能力:科技发展的速度飞快,程序员必须成为一个“学习专家”,能够迅速熟悉那些自己不熟悉的架构并能够高效实用。
  • 细节导向:程序员必须能够同时考虑到两种情况,理想的用户交互状态下的情况(系统正常工作)和连接失败(意外发生)的情况。
  • 全局导向:程序员必须能够考虑到应用程序的整体架构,想到不同部分是如何合作和交互的。
  • 数学及抽象分析能力:程序员必须要适应抽象化的概念和计算模型。公式能够代表和表达一切,包括数学公式、网络通信、屏幕访问及处理用户输入。
  • 逻辑思维能力:为了处理系统切换和流控制,程序员必须能够理解或写出非常繁复的逻辑。
沟通能力和人际交往能力是对程序员非常重要的技能,“语言”二字也是短语“编程语言”的一部分。因此当CS学生大脑的fMRI研究结果公布时,结果也并不令人感到意外。
研究表明,这些CS学生在读到源代码是,大脑的语言中心被激活。尤其是大脑中与语言处理、工作记忆及注意力相关的区域。相反,即使是在阅读与数学、迭代、条件分支相关的源代码时,大脑中与数学和逻辑相关的区域并未被激活。(注:工作记忆:working memory,一个容量有限的记忆系统,用来暂时保持和存储信息,是知觉、长时记忆和动作之间的接口)
这么说来,也许肯塔基州把CS课程归入外语类课程的做法也并无纰漏。那么,我们是不是可以假设那些语言相关区域是编程所需的主要、或唯一大脑区域呢?并不完全是这样。
首先,上述研究只观察了读源代码这一个行为,没有研究程序员写代码时的大脑活动。并且,它只对CS专业学生进行研究,并没有研究成功的、专业的程序员。这点是非常重要的。
专家vs新手的大脑
专家的大脑和新手的大脑是非常不一样的。比如,当一个钢琴新手学一个新曲子时,他往往会更多的去想怎么弹——专注于把音符弹对这一简单的任务。
而当一个钢琴演奏专家弹一个他们已经产生了肌肉记忆的曲子时,几乎可以说是曲子自己在“弹奏”。这就好比是一个学骑自行车人和一个骑车非常熟练的人骑车出去溜达时的区别。自行车新手会担心从车上摔下来,因此尽量的保持平衡;而熟练者则知道,只要轮子保持旋转,他们稳稳的把重心压在自行车上,他们就不太可能会摔倒。可以说,他们进入了自动驾驶模式,根本不会去想怎么保持平衡或可能掉下来的事。
当你学习新技能时,你的大脑会改变并适应这些新挑战,用“习惯性”使得事情的进行更加顺畅,从而解放大脑使之有精力应对新的挑战。
换句话说,当你在学习的时候,你的大脑将忙于把你交给它的任务“自动化”。这样以来,你便不需要用自己的意识去刻意人为的完成一些事情。取而代之的是,你的大脑将把这部分“自动化”信息传递给大脑的其他部分,让大脑的其他部分去掌管这部分事情。
一个“专业高尔夫运动员的运动规划”研究发现,专业运动员的大脑活动与新手截然不同:
只有在新手中,后扣带回、杏仁体前脑组织和基底神经节才会兴奋起来。而专业者工作时则主要是顶上小叶、背侧运动前区和后头区被激活。
专业者和新手的大脑差异在更多的认知型任务中,有明显表现。一个非常有名的“关于伦敦出租司机大脑的研究”断定,学习伦敦街道的“知识”使司机的大脑产生了结构性改变。研究对培训者进行跟踪研究,追踪了从开始进入训练到通过测试整个过程,发现那些通过测试者的海马体后端有所扩大。
“人类的大脑即使在成年之后仍然处于可塑性状态,这使得它可以在我们学习新东西的时候进行调整适应。”就像运动员调整他们的身体状态来取得更好的发挥,程序员也会调整他们的大脑来更好的编程。
音乐大脑&软件开发
你应该还记得我前面提到的CS专业学生在读源代码时,大脑中与工作记忆相关的区域会兴奋。事实证明,相较其他人,音乐家们的大脑工作记忆有所加强。
我的妻子是一位科技代理商,而我是她的科技顾问。在几年的工作中,我们发现,大多程序员也是音乐家。南湾的Facebook Campus专门设置有各种乐器的音乐室。搬到旧金山之后,我进入了一家音乐科技初创公司。从那之后,我在工作过的每一家软件公司都曾经开玩笑的跟同事说,我们可以搞一个办公室乐队。
据统计,去年大概有30%的美国人玩乐器,而我的Twitter关注者则近半数都是音乐家。当然,我的Twitter关注者几乎都是软件开发工程师或程序员。
是不是音乐家的大脑构造恰好有助人成为优秀程序员?科学家对音乐家的大脑进行了fMRI研究,研究发现,玩乐器实际上是一种对大脑的“认知锻炼”,而这种“认知锻炼”是我们已研究的其他活动无法做到的。
玩某种乐器能使大脑的很多区域兴奋起来,而且帮助大脑的不同区域建立更强的联系,包括左脑(逻辑,分析,语言等等)和右脑(创造力,想像力,直觉,形象化等等)之间的联系,而高效的编程正是需要两侧大脑的共同工作。
回想一下文章开头列的那些繁杂的“程序员必备技能”,我们会发现玩某种乐器可能是一种能锻炼你的大脑,并有益于软件开发工作的方式。
结论
那么,程序员的大脑是不是不一样呢?相关的研究结果表明,程序员们也许有着更大的工作记忆容量,有更强的语言处理技能和更强的分析能力,很可能还有更大的海马区的面积。要想证明这些结论适用于更广泛的编程活动,我们还需要在这个领域进行更多的详细研究。
好消息是,尽管遗传因素也起到了作用,大量证据表明神经可塑性,练习和调节是程序员认知能力提升的原因。
换句话说,如果你想成为一个健美运动员,你就必须要锻炼你的肌肉;而如果你想成为一个程序员,你就必须要锻炼你的大脑。“程序员需要锻炼大脑,就像运动员锻炼自己的身体那样。”在工作中进行锻炼,你的大脑会得到加强和重塑来支持你的努力。
著名乐队Radiohead吉他手Johnny Greenwood就是个程序员,著名作品Creep广被翻唱,为林宥嘉获得星光大道冠军所唱曲目。
参考资料:
https://medium.com/javascript-scene/are-programmer-brains-different-2068a52648a7#.1g2yp59jy
继续阅读
阅读原文