摘要:AI都能写代码了,大学计算机课程应该教什么?最近,美国顶尖名校东北大学做出一项重磅决定,淘汰计算机基础相关的核心课程,转而主推Python教学。
编辑:桃子 好困
【新智元导读】AI都能写代码了,大学计算机课程应该教什么?最近,美国顶尖名校东北大学做出一项重磅决定,淘汰计算机基础相关的核心课程,转而主推Python教学。
东北大学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的课程真的明智吗?毕竟,说不好哪天就会有另一种语言占据主导地位了。
课程体系的设定,应该更关注那些经得住时间考验的原则,而非追逐短暂的技术潮流。
是革新,还是倒退?
但现在,在这个近二十多年来最严峻的科技就业环境下,Khoury计算机科学学院却计划放弃这种行之有效的教学方法。
如前所述,学院提出的改革方案将逐步取消Fundies 1、Fundies 2和「面向对象设计」课程,转而推出全新的课程体系。
新课程将以Python为主要教学语言,学院认为这是个附加优势,因为Python目前是企业实习岗位最青睐的编程语言。
GitHub 2024年度编程语言榜单中,Python继续霸榜
但是,我们不能仅仅因为一门语言在业界当前流行,就把它作为教学语言——我们必须选择具有真正教育价值的语言。
选择Racket是因为它有专门的「教学语言模式」,可以随着学生对设计原则的理解逐步引入新的语言特性。
虽然新课程最初使用同样具有教学导向的Pyret语言,但在第一门课程中就会迅速过渡到Python。
而Python却没有类似的渐进式学习特性——学生不得不在掌握如何清晰高效地使用这些特性之前,就必须先接触复杂的语言特性。
另外,Khoury学院表示将允许持有大学先修课程(AP)计算机科学学分的学生免修新课程。
现行课程体系之所以不允许这种做法,是经过深思熟虑的——AP课程并不包含系统化的设计能力训练,因此与入门课程并不具有同等的教育价值。
Fundies 1和Fundies 2通过小型问题的实践来训练设计思维,这为学生在后续的面向对象设计和软件开发课程中处理更复杂的项目打下基础,同时也为他们的实习工作做好准备。
如果允许学生跳过这些基础课程,他们在后续的高阶课程学习和未来的职业发展中都可能会遇到严重的困难。
改革,是为了提高课程出勤率
从这些变更来看,虽然Khoury学院表面上认可设计范式,但实际上并未致力于将系统化程序设计,作为课程的核心要素来维护。
这是一个令人担忧的决定。
正如Fundies 1教材中所说,当前课程所强调的程序设计能力是「区分野路子程序员和专业软件开发者的关键」。
如果Khoury学院放弃以设计为导向的课程体系,将无法培养合格的软件开发人才。
这次变更的主要推动力,似乎是想让核心课程变得更容易。
还有另一层原因是,能够减少退课的人数。
有一位教授告诉学生,学院希望减少从Fundies 2和「面向对象设计」课程退课的学生人数。
虽然这种想法可以理解,但为此删除课程中最重要的部分显然是得不偿失的。
「面向对象设计」课程的前任助教Derek Kaplan称,自己见过许多学生在这门课程中挣扎。但也见证了这些学生通过学习这门课程成为更优秀的程序员。
学期末的「代码互换」(code swap)作业,要求学生在其他学生的代码基础上进行开发,这是学生最难应对的作业之一——但它教会了学生如何在他人编写的代码库中工作,这是他们在未来职业生涯中必须具备的能力。
此外,对许多学生来说,这门课程提供了他们首次参与大型软件项目的经验,这与他们在实习期间将要从事的工作很相似。
因此,降低课程要求对这些学生并无益处。
我们不禁要问:大学究竟是为了让学生轻松拿到分数,还是为了真正培养人才?
至少,Khoury学院管理层在计划对核心课程进行任何改变时,都应该咨询有经验的助教。
助教们拥有独特的视角——他们不仅亲身体验过这些课程,还在帮助其他学生成功的过程中积累了宝贵的经验。
助教深知什么是行之有效的,可以帮助确保在进行有利于学生的改变的同时,不损害核心教学原则。
Derek Kaplan表示,「如果Khoury学院执意作出这些改变,这无疑将标志着东北大学计算机科学项目衰落的开始」。
来源:新智元