芥末堆芥末堆

当北大文科生遇上编程

作者:北大青年 发布时间:

当北大文科生遇上编程

作者:北大青年 发布时间:

摘要:一篇抱怨“文科生学python”的帖子被顶上了未名BBS十大……

屏幕快照 2019-09-26 下午5.01.29.png

图片来源:unsplash

点击了PyCharm中的Run后,谢云腾带着疲惫爬上床,留下电脑在黑暗中飞速运行。这已经是他写这次文科计算机基础实验班课程作业的第三个晚上。

这是一次网络爬虫作业,要求爬取“新浪每日热点新闻”版面连续31天的新闻内容,并对字数、图片等信息进行分析。由于数据量庞大,运行整个程序耗时长达45分钟;再加上校园网不稳定,经常导致程序报错,停止运行,没有点好运气,程序很难执行成功。所幸第二天早上醒来,谢云腾终于看到了“Process finished with exit code 0”(程序执行成功,正常退出)。

谢云腾的困扰在北大并非个例。自从程序设计被全面纳入文科计算机教学,许多文科生都不得不面对这个陌生的领域。随之而来的是种种不适应:老师讲得太快,难以跟上;作业得不到细致讲解,答案很难看懂;上课听得明明白白,自己操作却总是失败……一时间,文科生学编程被推上了风口浪尖。

屏幕快照 2019-09-26 下午4.48.48.png

△未名BBS上对文科生学编程的抱怨 | 来源:未名BBS

编程归来

实际上,编程并不是在2018年秋季学期第一次进入文科计算机课程。

早期的教学计划要求文科生必选两个学期的文科计算机课程,第一学期教授计算机基础知识和办公自动化,第二学期教授程序设计。2000年后,随着Office的普及,第一学期的内容变为计算机基础知识和Office,第二学期则提供多个专题供学生自主选择学习,其中包括程序设计。2015年前后,随着毕业学分调整,文科计算机课程被压缩成一学期;同时,信息科学技术学院也开始了让编程回归文科计算机必修课程的探索。

2018年是试验的第3年,也是最后一年。此后,不管是在实验班还是基础班,编程都成为了必修内容。

但编程的回归并未得到普遍欢迎,反而引发了不少争论。

教学方式是争论的焦点。“老师没有操作代码,直接把例子放在课件上展示,当我们还在看代码是什么意思的时候,已经放过去很多张幻灯片了。”国际关系学院2018级本科生张宸赫说。他认为编程教学进度过快,效果不好,不如把课程分为两个学期,第一学期详细学习Office,第二学期慢慢学Python。“就像学语言一样,从学音标来开始。”

“培养科学家和培养实际使用者,这两个是有区别的。”负责文科计算机基础实验班教学的邓习峰老师猜测,第一次讲Python的老师可能采用了培养专业“码农”的方式,转换成适合文科生的教学方式需要一个过程。“另一个问题在于时间太短,”邓习峰分析,“现在的文科计算机课程由原来双学期的课变成单学期,时间缩短导致内容讲不完,不够精细,学生容易处于‘半生不熟’的状态。这是课程建设过程中要继续优化的内容。”

但他也表示,课程开设之初,学院就制定了针对文科生的教学计划,编程语言的选择就是特点之一。

“这次选择经过了复杂的决策,但后来我们都选了Python。”邓习峰说。相比其他编程语言,Python具有跨平台、入门简单、数据处理能力强、功能库丰富等优势。也正因此,近年它的流行程度上升很快,并成为2018年TIOBE编程语言排行榜年度语言。

屏幕快照 2019-09-26 下午4.48.58.png

△热门编程语言的百度搜索指数 | 来源:https://index.baidu.com

由于处在过渡期,2018年秋季学期的编程教学没有设立统一大纲,不同班的教师自主选择授课方式和内容。“但只要是程序设计,内容基本是差不多的。”邓习峰说,“可能每个老师对难度的把控是不一致的,但到了2019年秋季学期就会相对统一。”同样,试卷也由各班教师自主命题,但均包括笔试与上机测试,按不同比例计入总成绩。

文科与编程

在邓习峰看来,“自用程序设计”是文科生学习编程的主要目的。相对于“公用程序设计”,后者目的在于给别人使用,而前者注重满足自己的需求。

“比如处理研究数据时,如果Excel解决不了,就可以先用Python解决,再交给Excel做可视化。” 他以自己研究的北京交通大数据举例:北京一天的交通数据约有1600万条,Excel完全无法处理,其他软件的效果也不好。但用Python处理只需要很短时间,就可以得出每个车站的客流量、乘客上下车时间、不同地区乘客的乘车偏好等信息。再将数据进行拓展,加入每个站的经纬度,结合地图后就可以分析哪些地方人最多、人群的流向是哪里。这就为国民经济的决策提供了保证。

而在人文学科中,中国历代人物传记数据库(CBDB)也为历史学研究提供了更多角度。CBDB依托程序设计与数据库技术,收录中国历代40余万人物的传记和谱系。借此,研究者可以查询某地在科举和出仕方面的表现,或将某特定时空下的个人创作连接起来进行分析。

屏幕快照 2019-09-26 下午4.49.09.png

△CBDB 中已知籍贯的 67,000 历史人物的地理分布图 | 来源:https://projects.iq.harvard.edu/chinesecbdb

“这样的技术应用到了历史学,很多概念的呈现会更加可视化、更加直观。”邓习峰认为,相比于定性研究,编程更多是在用数与算的概念去衡量我们所面对的世界。这在一定程度上弥补了中国传统思维的欠缺。

对2015级元培学院光华方向本科生韦铭杰而言,编程属于专业的一部分。在他学习的量化金融领域,编程的地位举足轻重。他表示,国外有些面试地点就有计算机,要求面试者现场编程。一次量化金融行业的实习面试中,面试官当场提出一个问题让应聘者写程序,并现场对程序进行点评。

由于当时的文科计算机教学不包含程序设计,韦铭杰特意选择了计算概论B。在他看来,学校学的和工作用的编程是有差异的,实际用的编程一定比学校学的复杂,但如果没有课程内容做基础,是做不到实际运用的。

2012级经济学院本科生唐奕波在大四时尝试过自学编程,因为感到投入产出比太低而放弃。他认为编程不能只依赖于效率较低的自学,更希望能有比较熟练的人引导,这样有问题可以直接问他们。

编程无用?

但是,对于大部分选择就业的学生,编程并不是必备技能,在应聘中也不一定锦上添花。

“(就业对编程是否有要求)主要看找哪方面的工作。” 2012级经济学院本科生沈士竣介绍,“做量化金融或搞学术的话,对编程的要求还是很高的。但如果做行业员、投行、基金、PE(私募股权投资)等,要求不高。”从本科到研究生,他接触的编程主要集中在MATLAB、Stata等数据分析软件。但对于学习Python、C++等编程语言,他表示尚未考虑:“暂时接触不到。”

同样,虽然唐奕波从事的股票研究行业需要相关程序,但他所在公司有专门的IT部门负责研发模块,自己基本用不上程序设计。他告诉记者,股票研究企业招聘时,除非是量化研究,否则就对编程没有任何要求,也不会有“掌握编程优先”的情况。

这也正是很多文科生心中的疑虑:如果未来用不到编程,现在花很大力气去学,有什么意义?

信息科学技术学院的郭炜老师认为,“没有用”很多时候是“不会用”导致的。“如果会编程的话,你可以主动发现这样的机会,在工作中展示自己。这个才能对你的职业发展很有利。”他希望学生不要抱着“这个东西好像没什么用,我就不学”的想法。“那很可能以后有用却来不及再学,就错失这个机会了。”

同样受到重视的,还有编程学习对思维的影响。邓习峰很看重编程对文科生数理逻辑和计算思维的养成。“比如,把一个大的任务分解成几个小的任务,或定义若干函数,每一个都要把自己一段的任务做好。实际上这是一种思维的训练。”

2016级信息科学技术学院本科生吉如一也有相同的看法。“编程和说话不一样。说话可以有些模糊不清的地方,但是编程必须很严谨,逻辑性很强,不能出一点失误。”

热遍全国

当校园中探讨着文科生是否需要学编程时,编程热已经遍布全国,乃至世界。

屏幕快照 2019-09-26 下午4.48.58.png

△热词“编程”的媒体指数 | 来源:https://index.baidu.com

在百度指数中以“编程”为关键词进行分析,早在2012年,“编程”的媒体指数就经历过一次高峰,之后多次登上新闻头条。进入2018年,媒体指数又迎来高潮。正如郭炜所说:“现在所有人都要学编程。”

“原因很明显。”郭炜说,“计算机在各行各业都得到了很广泛的应用。所以,不管什么行业,你很快就会遇到需要编程的场合。以后编程可能不那么‘热’了,我觉得是因为它就像数学一样,每个人都要学了。”

邓习峰认为,编程入门难度的变化也是原因之一。随着软件提供的编程环境让程序设计的门槛降低,“热”形成了初步条件。“就像计算机的操作,原来是字符界面,进入图形化的界面后,计算机在全国、全世界都更加的普及。”邓习峰说,“程序设计是联系逻辑思维、实证思维和计算思维的重要途径,它能帮我们更好地理解当今信息社会。我相信未来它会成为中国大学生必备的基础技能。”

在哈佛大学,编程已经成为基础课程。CS50是哈佛大学的编程公开课,面向所有专业的学生,讲授包括C, PHP, JavaScript, SQL, CSS, HTML在内的多种语言,早在2015年秋季学期就已经成为校内最热门的课程,得到超过800人注册,其中只有10%有过编程背景。

屏幕快照 2019-09-26 下午4.49.30.png

△CS50公开课网站 | 来源:https://cs50.harvard.edu/extension/2019/spring/

“我相信我们能做到比它更好。”邓习峰说。

何去何从

“课程压力很大,这是推行编程的代价。”邓习峰说,“但我们还是要坚持,我认为我们走的是正确的方向,更多老师也都已经认可了。这是大势所趋。”

但文科计算机课程依然需要改善。更好的教学效果需要更多的时间。由于学校的课时已经非常紧张,增开课时并不现实,通过引入新技术提高上课效率是当下最好的办法。邓习峰表示,未来计划采用MOOC(massive open online courses,大规模网络公开课,俗称“慕课”)和翻转课堂的形式,把Office和计算机基础知识放到网上供学生自学,给编程教学更多课堂时间。

同时,上机课的教学也会引入新的形式。“比如说我们把每一次作业都做出多种解决方案,学生之间可以互相比较,看有没有更好的方案,让学习的质量更高。”此外,他表示如果时间允许,将会设计“百练百讲”,为每个教学专题附加难度适中的题库,帮助学生通过实践,尽快上手程序设计。

邓习峰还认为,学生需要改变抵触情绪。在文科计算机课程纳入编程前,Office和计算机基础知识是主要的学习内容,大部分同学对此已有一定基础,学起来相对容易。相比之下,编程的难度显然更高。“如果这门课改个名字,叫‘计算概论C’,可能很多人心里就平衡了。”他开玩笑说。

但他认为,程序设计绝不是文科生无法接触的。他表示,在Windows没流行起来之前,文科生用DOS系统学FoxBASE、FoxPro(编程软件),甚至没有可视化界面,但学的效果也不错。“当然,对文科生的教授方法,比如说教学的案例、内容需要我们去优化,但是不能说文科生就学不会程序设计。”

变化仍在继续。邓习峰相信,随着课程本身与文科生结合更紧密,编程一定会走进文科生内心,达到最终目标: “通过程序设计,文科生能掌握一门伴随自己工作和学习的程序设计语言,也能更好地去理解当今的信息技术。”

*文中谢云腾、张宸赫为化名

本文转载自微信公众号“北大青年”,调查记者李润泽,原标题《当文科生遇上编程》。文章为作者独立观点,不代表芥末堆立场,转载请联系原作者。

1、本文是 芥末堆网转载文章,原文:北大青年
2、芥末堆不接受通过公关费、车马费等任何形式发布失实文章,只呈现有价值的内容给读者;
3、如果你也从事教育,并希望被芥末堆报道,请您 填写信息告诉我们。
来源:北大青年
芥末堆商务合作:王老师 18710003484
  • 当北大文科生遇上编程分享二维码