程序员的思维修炼:开发认知潜能的九堂课
上QQ阅读APP看书,第一时间看更新

1章 绪论

欢迎大家!

感谢选择这本书。我们将共同经历一次有关认知科学、神经学、学习和行为理论的旅程。你将看到人类大脑令人惊奇的工作机制,并研究如何克服这一系统的局限来提高自己的学习和思考技能。

我们将开始重构你的“湿件”——对大脑进行“重新设计”和“重新连线”,使你更高效地工作。不论你是程序员、管理者、“知识工人”、技术奇人还是思想家,或者你只是想让你的大脑聪明一点,这本书对你都会有所帮助。

我是一名程序员,所以我的例子和言论都离不开软件开发领域。但是,如果你不是开发人员,也不必担心,实际上程序设计与使用神秘、深奥的编程语言编写软件没有多大关系(尽管我们总是习惯性地认为它们很相关)。

程序设计其实就是解决问题,它需要发明、创造和灵感。不论你从事什么职业,可能都需要创造性地去解决问题。然而,对于程序员来说,既要受到数字计算机系统的严格约束,又要展开丰富而灵活的人类思考,这就会展示二者的强大力量,又会深深地暴露二者的缺陷。

无论你是一名程序员,还是一位心灰意冷的用户,可能都曾认为软件开发是人类可以想象和遇到的最艰难的工作。它的复杂性耗尽了我们的全部智慧,而一旦失败则后果是可怕的,且往往极具新闻价值。我们曾经让宇宙飞船偏离了轨道,撞向遥远的星球;让昂贵的火箭爆炸,蒙受无法弥补的实验损失;给消费者寄去索要零美元的催款信,搞得人家莫名其妙;时不时还让航空旅客滞留在机场。

适才我们发现:这完全是我们自己的错误造成的。我们自身往往增加了程序设计的难度。随着软件行业的不断发展,我们似乎失去了作为一名软件开发人员所必需的最基础、最重要的技能。

不过好在,我们此时此地就能改正这个错误。本书将告诉你如何去做。

过去40年中,程序员引入到程序中的缺陷的数量已经基本保持不变。尽管程序设计语言、技术、项目方法论等都在不断改进,但缺陷发生的频率仍然保持在同一水平,没能得到改善引自Bob Binder,基于Capers Jones的研究成果。

也许这是因为我们一直关注着错误的事情。尽管技术上有了很多显著的改变,但有一样东西却始终没变:我们自己——作为开发人员的人。

软件并不是在集成开发环境(IDE)或其他工具上设计出来的,它是在我们的大脑中想象和创造出来的。

软件是在头脑中创建的。

Software is created in your head.

思想和概念是需要在团队(也包括付钱让我们开发软件的人)中分享和交流的。我们已经在改进基础技术——程序设计语言、工具、方法上花费了很多时间,当然这也是十分必要的,但现在是我们更进一步的时候了。

现在我们需要研究的真正难题是团队内部和团队间的交流,甚至更困难的问题是完全陈旧的思想。没有任何项目是孤岛,软件不可能孤立地创建或者运行。

Frederick Brooks在他的里程碑式的文章《没有银弹》[Bro86]中提出:“软件产品处于应用、用户、规则和硬件也就是平台。的合力之下。这些因素总是在不断变化,迫使软件产品也随之改变。”

Brooks的言论把我们推向了社会漩涡的中心。考虑到社会中各个相关团体的复杂交互影响和社会的持续变化,在我看来当前最重要的两项技能就是:

❑ 沟通能力;

❑ 学习和思考能力。

软件行业正在逐步提高沟通能力。特别是敏捷方法(见注解栏),强调了团队成员之间、最终客户和开发团队之间的沟通交流。类似《演说之禅:职场必知的幻灯片秘技》[Rey08]这样的大众图书突然热卖,表明越来越多的人意识到简单、有效的沟通非常重要。这是个好的开始。

不过,提高学习和思考能力要更难一些。

程序员需要不断地学习——不仅仅是学习新技术,还包括应用的问题域、用户社区的奇思妙想、同事的古怪习惯、行业的八卦新闻和项目演进的重要特征,我们必须学习学习再学习,持续不断地学习,然后把学习成果应用到解决日常遇到的一切新旧问题上。

也许,这些听起来都相当容易,但学习能力、批判性的思考能力和创造力——所有这些扩展思维的能力,都取决于你自己。这些东西没人教得了,你必须自己学习。我们往往错误地看待老师和学生的关系:不光是老师在教,学生也要学。学习完全取决于你自己。

我希望本书能够帮你获得又快又强的学习能力和更实用的思考能力。

什么是敏捷方法

“敏捷方法”这个词最早出现在2001年2月的一次峰会上,与会的17个人都是软件开发行业领军人物,他们创建了各种开发方法,如极限编程、Scrum、Crystal,当然也包括我们的注重实效的编程。

敏捷方法在很多重要的方面都与传统的基于计划的方法不同,最显著的就是摆脱了死板的规则,丢弃了陈旧的日程表,注重实时的反馈。

我在本书中会经常提到敏捷方法,因为很多敏捷思想和实践都是与良好的认知习惯相融合的。