对于非工科专业,当前大学程序设计基础教育是在误人子弟

当前大学程序设计课程存在的主要问题有以下三个方面:

1 课程内容设计

1.1 程序设计思维缺陷 

      我们都知道:程序设计=算法+数据结构。不要一看到算法和数据结构就想到树、图算法之类的。算法也有简单和复杂之分。求一个一元二次方程解的思路是算法,对一个网页进行解析是算法,最短路径求解也是算法。对入门级的编程基础课程而言,数据结构只要能学到二维向量的表达和运用就ok了。

      要解决一个问题大致需要几个阶段:分析、建模、求解、评估。对应到程序设计领域大致是:分析、算法设计、编程、测试。

      程序设计里面最重要的是问题分析和算法设计。问题分析清楚,才能设计算法,算法设计好了,才可以根据需要选择适合的编程语言和工具。在有限的程序设计课程课时下,各方面的思维和知识都需要去构建,这对学生和老师都是困难的。但是程序设计的先行后续关系是不能改变的。我们应该做的是把最重要的分析问题和设计算法的思想传授给学生, 而不是急匆匆去教语法。现有程序设计课程内容几乎都是语法知识的堆砌和其应用,几乎没有体现程序设计的思想。学生连问题都没搞透彻,就让他们去编代码。这样的后果是学生既没有学会程序设计的精髓,枯燥的语法如果久不启用也会很快在大脑中烟消云散。

1.2 课程中题目设计割裂 

       现有的程序设计教材中的案例、习题几乎都是割裂的一个个小问题,相互之间几乎没啥关系。这样割裂的题目设计不利于程序设计里面建模思想、算法设计思想、编程中结构化和面向对象思想、系统化思想的传授。在学习程序设计的时候我们是一个个零散的小题目,而在后续的不管是科研还是应用过程中进行程序设计却是围绕着一个大的问题展开的。问题小就意味着各种思想的传授不深,不广,散乱,浮光掠影。

       林群院士曾对微积分教材说过这样一句话:假传万卷书,真传一案例。我看用到程序设计课程内容设计上也是一样的。

2 当前大学程序设计课程结构不利于知识向中小学传播

       在人工智能时代,部分大学生接受程序设计课程教育后是要进入中小学等机构当教师指导其他学生进行程序设计启蒙的。大学程序教学内容的偏差会会出现以下问题:

2.1 带偏程序设计课程内涵

       俗话说:有样学样。老师怎么教,学生就会怎么把这种知识向外传播。如果在大学时候学生接受的只是一门复杂的如C和C++的编程语言语法知识,那么以后他们成为中小学老师后也会也会这样向自己的中小学生只传播编程语法知识。

2.2 扼杀青少年对程序设计的兴趣

       我们看到现在学校里面的程序设计几乎都是无休止的刷题,而且是刷C语言或者C++题目。其一、由于中小学程序设计课程侧重于编程语法,要想实现与其他科目的关联难度太大(数学除外,但数学对于很多中小学生本来就是一难题),使得中小学程序设计过程内容偏难,很多学生早早放弃程序设计。其二,中小学生的时间有限,不可能花太多时间在程序设计课程上面,如果编程语言学习曲线过于陡峭,也只能让他们早早放弃,而学生在小时候的程序设计思维的训练应该是更容易接受的,如果能够与其他学科结合,比如可以用程序设计实现作曲、绘画、剧场实现,打游戏等等,后续效果也是最大的。

3 当前程序设计语言的选择不符合当今时代发展趋势

3.1 还在把C或C++作为大学编程基础语言的选择不符合编程语言发展主流。

500

       从图中,我们可以看出20年来居于主流的编程语言是Java和C语言,而近年来发展最快的是Python语言。但是很奇怪的是以前我们一直选择的是C作为基础语言,而不是Java,当然这可以归结于历史的原因,可这3,40十年的历史也忒久了吧。但是很奇怪的是都2020了,接下来很多大学编程基础课程抛弃了C语言,却选择了C++,而不是Python或者Java。

     自2017年以来,IEEE Spectrum发布了各大编程语言的年度排名公布,最流行的语言都是Python。 

  

500

   2019年,国际奥林匹克信息学竞赛把 Scratch, Python, Java, C++ , Delphi五种语言作为参赛语言。

   

3.2 C和C++学习曲线相对较陡,对后续课程帮助不大。

       C语言的指针,C++的面向对象的一些特性,这些特性对于初学者来说是非常不友好的,并且在大部分专业的后继学习中也几乎用不到。不学习这些语言特性,其实找不到要选择这两门语言作为程序设计入门基础语言的理由。     

       我们经常发现大部分学生学习一学期C或C++后,再上后续其他编程语言课程时几乎只记得函数一章前面的内容,编写一个复杂点的函数大多数同学都搞不定。这样前面花时间学习编程课程的价值何在,只是为了后续的编程课程打好基础吗?那为啥不跳过这编程基础课程呢?更不用说和非编程计算机相关课程的衔接了。大部分学生学习C或者C++后除了获得一个二级证书,留下的只是一地鸡毛。    

        五四以后,中国都文言文教学改成白话文了。这都2020了,我们为啥就不能也换一种简单的程序语言(比如Python),而让学生侧重于程序设计中的问题分析和简单算法设计。这样既可以让学生对程序设计不那么望而却步,也能让更多的学生把程序设计课程知识应用到其他学科做好铺垫,为辅助其他学科发展提供更大的推动力。

全部专栏