|
Python和Matlab可能培养了很多“懒学生”
龚明,中国科学技术大学
现在,越来越多的学生使用Matlab以及Python。尤其是Python,因为开源而得到了更加广泛的应用。公司中用Python做软件开发、数据处理(包括机器学习、图像处理、人工智能等)的更多。这些软件将工作大大简化,效率提高,平时需要几百行上千行的代码,现在可能可以被压缩到几十行完成。并且,和传统的编程语言C、C++、Fortran等相比,这些软件编程直观,浅显易懂,上手快,学生学习一个礼拜就可以编程。更重要的是,一旦建立起“生态”,我们可以很容易找到任何需要的各种子程序和库函数。所以学生使用这些软件的比例非常高。但是,据我的观察,这些软件可能会培养很多懒学生。下面总结我担忧的几个问题。(注:这里我总结的只是几个我认为显著的几个问题。)
(我的一段代码,我编程的时候会注意细节,包括排列、格式等。这个程序比较简单,故没有输入和日志文件)
第一、大量重复性代码。我观察过一些学生,包括我自己的学生,发现他们每天的工作,90%以上是重复的、机械的。比如直接复制以前的代码,修改其中的部分细节或者参数,并运行程序。他们绝大部分时间都是在原有程序的基础上做修改、数据格式的调整、以及画图等。此外,因为Matlab和Python可能涉及到很多的名字,他们在编程的时候,都是实用主义,即需要什么就查什么,而不是把它们都背下来。有一次,我让一个学生把实线改成不同的点划线,他就去百度查找相关命令,5分钟过去了,还没有找到。我不得不生气地离开。这样的情况不在少数。
第二、很少写完整的程序。我很少见到学生用Python和Matlab写一个完整的程序,它们有输入文件,输出文件、日志文件等。也没有见到学生写一些具有某个特定功能的子程序。有些时候,学生都懒得把数据按照某个特定格式存起来,因为很多计算时间都很短,所以他们需要什么数据,就运行一次程序,每次等几分钟或者十分钟。有一次,我让一个学生处理一个数据,我不得不等十分钟;后来,我让它换一个格式重新处理一下这个数据,它又重新运行了一下。这样看起来很方便,其实是很浪费时间。因此,他们运行的代码看起来很多,但是绝大部分都是片段式的:要什么就编什么。这和我以前的经验不一致。我们以前写代码,通常要有输入和输出文件,并且把所有重要的中间数据保存起来。我们要保证任何数据,以确保不重复计算第二次。为了让我们更好地(比如很久以后)查阅这个结果,我们还需要有日志文件,里面有运行时间、输入参数、输出参数、占用内存、甚至每个重要的子程序调用的时间等。一个很好的例子是第一性原理(VASP)的计算软件。现在都没有了。
第三、技能单一、编程能力变差。这些软件功能太过强大,资源又多,需要什么就查什么,于是大家似乎觉得掌握了基本的编程方法,知道怎么查找需要的东西,就可以了。原则上,这当然没有问题。但是,在科学研究中,绝大部分人只需要用这些程序中极少的功能,所以,他们在工作中,一般只会涉及其中极少一部分,并且每天做重复性劳动。如果要实现更加复杂的功能,他们不得不重新查资料和重新学习。对于学习能力强的人而言,这样做没有问题。可是对于普通的学生,我看到他们几年下来,编程能力并没有明显提高,而掌握的编程技能也比较单一。也就是说,几年下来,他们的编程技能基本还是原地踏步踏。因为这件事情,我曾经严厉批评过我的学生,并萌生让他们放弃这些语言,回到传统编程工具上来的想法---最终放弃了,还是担心以后对他们找工作不利。可是,还是有学生难以接受。我经常告诫他们,让他们反思,几年过去了,你们的编程技能和计算能力,真的有显著提高吗?
第四、很少优化程序和代码。我很少见到学生努力去优化代码了。越是高级的语言,可供选择的库函数越多,优化可能就需要更多的时间和耐心。我们以前用C语言等编程,可以通过优化程序结构,从而提高它的运行效率。现在学生都是调用现成的子程序和模块,而又不了解其结构,所以就谈不上提高效率了。当然,不是说优化不行,需要学生主动思考,并努力找出其中的问题。我一个同事用Matlab做张量网络计算,就花了很长的时间优化各种结构,提高效率。有一次我一个学生做一个计算,非常耗费时间,我让他无论用什么方法一定要提高效率,后来他把效率提高了上百倍,当然他的效率还可以进一步提高。但是,很多学生不在乎几十分钟几个小时,所以也都懒得去做了。
我把这个现象提出来,希望更多人关注这些问题【欢迎大家转发给学生】。如果让学生学习C、C++、或者Fortran,和这些软件相比,的确会带来很大的不方便,而且对他们未来工作可能不利。所以时代让大家选择了更加便捷的语言和工具。但是,这些程序所暴露出来的问题,却是很明显的。如何在这两者之间找到一个平衡,可能是所有学生需要注意的问题。我认为这些问题是制约学生能力的重要因素。所以,这些问题不仅老师应该知道,学生也应该知道。
2022年12月19日初稿,12月23日完稿。躺床上睡了好多天,曾经反复思考这个问题。考虑到这个现象有普遍性,今天把它分享出来。时,奥密克戎在中国爆发,疫情肆虐,同时谣言猖獗;愿我国平安渡劫,祝所有人安康。
(Python代码,图片来自网络)
注:欢迎大家转发这篇文章,无需征求我的同意。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-8 20:50
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社