东北大学Khoury计算机学院,宣布淘汰「计算机科学基础」(Fundamentals of Computer Science)课程。基础不教了,那教些什么呢?答案是——Python。不出意外,这项决定遭到了学生和助教们的强烈质疑。支持的人认为,Python是当前最受青睐的编程语言,对找工作更有利。反对的人认为,如果这个改革方案实施,将是东北大学计算机专业走向衰落的开始。有网友表示,「一个时代终结了。东北大学课程体系曾经是独一无二的杰作,而现在,它将变得平庸平淡」。他认为,那些抱怨Fundies课程难度太大,或缺乏就业市场适用性的人,完全是捡了芝麻丢了西瓜。这些课程的核心是设计过程,而使用Racket正是为了帮助学生理解这点。从这门课程受益的校友表示,「很显然,这种方式是成功的,它已经被证明是开启计算机科学职业生涯的一个绝佳起点」。这场改革背后,折射出一个值得深思的问题,计算机教育究竟应该教什么?
东北大学计算机课程改革
对于计算机科学(CS)专业的学生来说,软件工程师是最主要的职业发展方向之一。一个优质的大学课程体系,必须为学生提供能够让其在职业生涯中取得成功所必需的关键能力。「Putting Your Major to Work: Career Paths after College」2017年众所周知,软件开发领域瞬息万变。如果课程过分追随当前的行业趋势,所学内容很可能在学生毕业之前就已经过时。一个优秀的课程体系应当着重强调那些具有广泛适用性的核心理念,使学生能够灵活地适应在未来工作中出现的全新技术。与此同时,还需要教会学生如何思考软件本质,以及如何系统地解决问题。这正是东北大学现行课程体系一直在努力实现的目标。目前的计算机科学基础课程(简称Fundies)通过教授系统化的程序设计,为解决陌生问题提供了一套行之有效的方法论。这种方法的核心在于,将复杂问题分解成小而可行的步骤,特别是在动手编写代码之前,先要求学生深入思考问题的本质。诸如Fundies 1、Fundies 2、「面向对象设计」和「软件开发」这样的核心课程,着重培养的便是学生对代码的思考能力,而不是简单地堆砌代码。不可否认,没有课程体系是完美的。常有计算机科学专业的学生会抱怨,「为什么Fundies 1教的是Racket,而不是Python这种更『实用的语言』」。需要强调的是,Fundies课程的重点并不是教Racket,而是培养可以应用于任何编程语言的程序设计能力。而Racket只是实现这一目标的教学工具而已。实际上,一个在Fundies课程中掌握了核心概念的学生,完全可以轻松地将这些能力迁移到Python,或者其他任何语言当中。况且,在科技行业瞬息万变的今天,仅仅开设教授Python的课程真的明智吗?毕竟,说不好哪天就会有另一种语言占据主导地位了。课程体系的设定,应该更关注那些经得住时间考验的原则,而非追逐短暂的技术潮流。