第一门编程语言的选择无关紧要?
发布于 2021-09-04 18:11 ,所属分类:软件编程学习资料
最近有两名计算机系的同事(来自不同院校)声称我们不应该担心第一门编程语言课程,因为它根本无关紧要。他们认为我们应该更学生的学习成果。他们的理念是,如果学生很好地学习了这些概念,那么就可以将这些知识应用到接下来学习的任何语言中。
1.
第一门语言的学习既能学习语义概念,又能掌握特定句法知识,而第二门语言的学习就只剩下新句法的学习了,假设两门语言的语义结构相同。如果学习语义(即基本概念)完全不同的第二门语言,例如 LISP 或 MICRO-PLANNER,则学习的难度不亚于学习第一门语言,甚至会超过第一门语言。
根据我的经验,对于大多数学生来说,学习第二门语言并不容易。虽然通常一门编程语言的经验可以转接到第二门编程语言,但并不是无缝的。Tshukudu 和 Cutts 一直在研究学习Python 和 Java,哪些知识可以转移,而哪些不行(https://dl.acm.org/doi/10.1145/3372782.3406270)。虽然有些知识可以转移,但是当他们改变模式时学习速度就会降低。
非计算机专业的学生学习编程时,第一门编程语言的选择尤为重要。学生想要了解他们向往的实践社区中哪些是有价值的。如果学生想成为一名数据科学家,则学习R 或 Python 比学习 C 更有意义。研究计算的学生需要学习Processing,而学习 MATLAB 就无法掌握更多相关的知识。如今并非学习编程的每个人都希望或需要掌握像计算机科学家那样随时切换语言的能力。
2.
最近,我一直在从另一个方面思考这个问题。为什么有人认为第一门编程语言的选择无关紧要?
我有一个假设,当该领域还很年轻时,也许这种理念是正确的。计算机课程的定义首次出现在20世纪60年代后期,重点强调了编程的数学基础。Nathan Ensmenger 在著作《The Computer Boys Take Over》中将其描述为提高计算机科学专业化水平的一部分。因此,早期进入计算机科学的学生的数学背景比如今学习编程的普通学生更强。再看一看均值,就会发现这种变化很明显。
20世纪70年代的编程课程教学主要面向的是本科生,而如今从幼儿园到高中,学习编程的孩子比70年代计算机专业的本科学生还要多。人们在开发计算机科学教育时设定的数学背景超过了如今孩子们的水平。
下面是我的假设:他们看到的转移不是从一种语言到另一种语言。它是基础数学知识的不同形式的转移。如果我们根据学生已经掌握的数学知识来教授编程语言的语义,则新语言不过是基础数学知识的不同形式。数学教学是必不可少的,数学家喜欢以不同的形式或不同的方法探索相同的问题。
看一看维基百科中勾股定理的页面,上面列举了6种证明。如果我们只考虑编程知识的转移,就会错误地将问题概念化。对于拥有很强数学背景的学生来说,第一门编程语言与未来编程语言的区别不过是他们已经掌握的知识的不同符号。这就解释了为什么他们的看法在过去并没有错,而如今情况已发生了变化。
但是,如果学生的数学水平不是很高,该怎么办?如果是一位小学六年级的学生,数学成绩还不太好,但他想学编程,怎么办?如果是一位平面设计师想编写 PhotoShop 脚本,但他不喜欢数学,也不觉得自己是程序员,该怎么办?我认为对他们来说 Python 或 MATLAB 的学习非常困难。如果学习编程的人是一名“纸上谈兵式程序员”,他希望能够与程序员讨论工作,但并不想实际动手开发软件,该怎么办?如今学习编程的人与20世纪70年代的学生大不相同。
3.
我们不必在编程中加入太多数学知识。我们知道,大多数使用 Scratch 的人在讲故事时并没有学习太多数学知识。“纸上谈兵式程序员”很难找到有助于学习的资源,因为大多数学习资源都要求逻辑和数学,但我们正在开发的教学方式可以帮助“纸上谈兵式程序员”学习编程,同时不会涉及太多数学知识。为了向更多人教授编程的知识,我们不能期望学生都拥有良好的数学背景,这一点我们在40多年前就预料到了。
如果我的看法是正确的,那么希望本文对研究人员和教师都有所启发。对于研究人员而言,如果你正在研究哪些知识可以跨语言,却没有衡量数学基础知识,那么可能会错过为何这些知识可以转移的关键因素。对于教师,必须注意在编程教学中灌入数学知识。如果你发现学生的学习有困难,则说明你的课程中涉及太多他们没有掌握的数学知识。
4.
网友评论
评论1:
也许对某些人来说,学习编程就是学习数学的一种方式。正如你在文中列出的原因,编程本身就是学习数学的绝佳机会。至于为什么我们要教幼儿园及高中的孩子学习编程,这是一个争论不休的话题。
但是有些编程教学并不需要太多数学知识。计算机是一种强大的工具,而编程是一种利用和引导这种力量的方式。比如,有些老师希望在历史课上使用计算机可视化数据,他们可不想与数学打交道。
我支持并鼓励大家通过编程来教授数学。但是,编程在教育中的作用不应仅限于数学。
评论2:
虽然没有数学基础的人也可以学习编程,但是如果他们能够掌握数学基础的话,就可以成为更好的程序员。Leslie Lamport 曾发表过一篇关于并发教学的文章(http://lamport.azurewebsites.net/pubs/pubs.html#teaching-concurrency),建议大家都看看。
相关资源