我们需要怎样的计算机科学教育

一直在想,轮到我自己来写教材,书的主题是什么。有的从软件硬件接口入手,有的从体系架构入手,还有的从性能设计入手。这些切入角度都不错,不过我今天找到了更好的——从『计算思维』入手。


这两个月把各类计算机系统的课本和计算机科学经典书籍大致都翻了一遍,悟出了一个很重要的道理:一本好的教材,一本好书,一定是有灵魂的,不然纵使有了骨架和血肉,也像行尸走肉一样,拼拼凑凑,毫无生机。

另外一个让我很有感触的是工作之后的变化,从中能清晰认识到高校教育和工程实践中存在的巨大鸿沟。工程中会用到大量成熟半成熟的工具和应用,但是在高校中往往没有足够时间来进行磨练(毕竟是以学期为单位),不过这倒不是重点,高等教育的初衷并不是职业技能培训,而是帮助同学构建广泛而有时效性的知识体系,培养独立解决问题的能力。

而我们的学科设计和教材往往两头够不着,在各种条件的制约下成了『四不像』。而具体到计算机科学上,我的感觉是没有真正让同学们喜欢上这门本来非常有趣的学科,症结在哪里?今天无意间找到了答案——计算思维。其实倒也不复杂:从我们的教材开始,就没有着力去培养『计算思维』,或者说没有把一门实践学科以实践的方式来进行教学。


(感谢曲鳖带我去湾区的计算机博物馆,真正看到了历史的痕迹,给我非常大的触动)

那么,计算思维到底说的是什么,不同人有不同的理解,我们来看看 Jeannette M. Wing 最初于 2006 年提出时的定义(是我 CMU 的教授,也跟着沾沾光)

计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动

具体的表现呢?

  • 本质是抽象和自动化
  • 递归思维
  • 通过约简、嵌入、转化和仿真等方法,把一个困难的问题转化为我们已经有办法解决的问题
  • 通过合适的表示及建模方法来使问题得以解决
  • 把数据转换成代码,把代码转换为数据
  • 通过抽象和分解来解决复杂问题
  • 通过简洁和优雅来判断系统设计的优劣
  • 通过冗余、容灾和错误处理来从最坏情况中恢复
  • …..

仔细回忆一下,其实我们所学的很多东西,都是围绕着『计算思维』的,或者说,是为了培养『计算思维』而准备的。而一旦拥有了『计算思维』,就意味着能够以计算机科学的角度去思考,才能更好地去利用计算机的力量来解决问题。

然后我们就会发现,教育工作者和企业最希望学生拥有的能力,都包含在其中了,比如:

  • 持续学习能力 -> 利用抽象和自动化等特性
  • 独立解决问题的能力 -> 通过抽象和分解来解决复杂问题
  • 逻辑分析能力 -> 通过约简、嵌入、转化和仿真等方法,把一个困难的问题转化为我们已经有办法解决的问题
  • 开源精神 -> 通过简洁和优雅来判断系统设计的优劣
  • 理论与实际结合 -> 把数据转换成代码,把代码转换为数据

所以核心是:想办法在课程设计上和习题上击中这些要点。比如说,开一门课一定是因为学生的能力培养需要什么,而不是为了教书而教书。也应该摒弃『计算机基础教学就是教学生怎么将计算机作为工具使用』这种错误思想,而是着眼于培养『计算思维』能力。

据此,给自己开出的药方是:

  • 用经典案例结合计算学科基本问题讲述计算机科学的来龙去脉,并结合相关学科展望学科融合与跨界发展
  • 通过动手实验了解计算机本质与解决问题的基本步骤(习题要好好设计)
  • 每一章节都要围绕『计算思维』来写,帮助读者建立完整的思维框架,尤其是在抽象和自动化这两个层面上
  • 针对重要的设计思想一定要用翔实的例子帮助读者理解清楚,更重要的是点出设计背后的思考,也就是『为什么要这么设计』
  • 多一点私心:加入更多中国与汉字相关的内容,让读者了解我们在数字浪潮中的位置(比如说处理器相关的内容在介绍 x86-64 的基础上加入龙芯的内容)

憋了这么久,就是在等这『悟道』的一天,有趣的是,兜兜转转居然是在 CMU 的网站上找到了最重要的灵感,正如当初选择上 15213 这门神课,仿佛一切都被安排好了。

有了魂,剩下的血肉就好组织了。

在这个特殊的日子,让我说一句:苟利国家生死以,岂因祸福避趋之。(提前 +1S)

捧个钱场?