如何保持编程课程的趣味性?

9
我猜,以下问题在每个学校或大学都是标准问题:
你的工作是教授编程。不幸的是,一些学生是半专业人员,有多年的经验,而其他人甚至不知道基本概念,例如“类型变量”的概念。
据我所知,这会导致以下情况之一:
1.从最基础的开始教授编程。有经验的学生感到无聊并停止上课。因此,他们将错过甚至不知道的内容。
2.教师和教授声称需要基本知识(无论那意味着什么)。缺乏经验的学生无法跟随课程,很多人会关注不重要的事情(例如理解复杂示例的每个细节,而不了解示例背后的概念)。其中一些人会放弃。
3.大学发明一种人为的编程语言,以给有经验的程序员和新手“平等的机会”。大多数学生会对“无用的语言”感到沮丧。
4.是否有比上述解决方案更好的第四种解决方案?

今年我不得不教编程,我以为我的学校是唯一一个新手和半专业人士在同一课堂上的地方,对我来说非常困难。知道我不是唯一一个这样的情况后真让我感到欣慰!;) - Nicolas Dorier
17个回答

13

这个问题与学生的位置有关,作为老师,你不应该过于在意处理。如果课程是计算机编程入门课程,那么你真的需要从基础开始教起。如果你的课堂里坐满了已经会编程的专业人士但他们没有出现,那么问题可能出在你的课程描述上,或者学校强制他们以先修课的形式参加这门课程而不允许他们进行测试。

你的工作就是在课程描述中描述你想教授的内容,并将其教授给学生。如果学生报名超出了课程要求,那就是他们的问题。我认为你唯一需要避免的是,如果你的课程确实是面向初学者的话,不要试图使课程对初学者过于高级。


1
你是正确的。不幸的是,在许多大学里,学生需要参加“初学者编程课程”。 - Black
现在许多学校都设置了独立的编程入门课程,这是在介绍编程和更高级别的计算机科学课程之前进行的。学生可以从超级入门课程中获得豁免。 - Uri
你的答案在完美的世界里是完美无瑕的。但可悲的是,现实与此相去甚远。不管有多少不对劲,这都是必须解决的问题。我的意思是,这不是针对提出的问题的答案,而是关于应该有哪些不同轨道的问题的答案。 - Boris Callens
如果你处于一个无法获胜的情况下,这个问题就没有真正的答案。关键是,如果你试图过分努力地回答这个问题(让初学者课程对高级学生非常有趣),那么你会使这门课程对它所服务的人不够有效。 - Dave Markle

10

我认为最好的方法是在理论基础上引入实际而有趣的练习。采用问题解决方法很棒(使用有趣、有趣、激动人心、真实世界的问题)。这需要教授本身具有亲身经历,与新技术一起工作并非常了解它们,而不仅仅是教授几十年前学过的内容。

事实上,编程应该通过实践来学习。教练应该专注于激励学生编码并尝试自己解决问题。这可以通过在课程开始时分配一个完整的仿真项目,并在课堂上解决出现在项目中的子问题来完成。这样,学生将了解编程语言中某些特定功能的存在原因以及可能有用的地方。

这只是一个想法。还没有尝试过!;)


当然。没有什么比让别人编写一些与他们相关的小程序更能激发动力了。 - Dave Markle

3
我最近参加了一门课程,学生们在编程方面的经验非常丰富。通过一个练习计划,他们成功地让有经验的程序员保持了兴趣,这个计划是将实践部分(即编程部分)的时间记录下来,并在高分榜上发布结果。每次讲座结束时,教授会给出一些指导意见,帮助我们更进一步提高成绩。众所周知,所有的工程师都喜欢争夺排名靠前的位置,因此我们都会积极参与,并学到了新的知识和技能。
即使那些经验不足的学生对自己的成绩并不特别在意,他们仍然完成了练习。
我不知道你的课程是否可以实现这种解决方案,但如果可以,你应该认真考虑一下。

2
我认为有几件事情可以帮助弥合高级和初学者之间的差距,并让每个人都对课程感兴趣并参与其中。

高级研讨会

如果可以安排(使用博士生等),请运行一个可选的每周研讨会,任何人都可以参加,但旨在面向更有经验的学生。每周设定一个代码任务/挑战,然后在研讨会上讨论各种解决方案,并讨论不同选择背后的理论和影响。
这为更有经验的编码人员提供了有趣的挑战,因为他们有东西可以深入研究。它开启了一些辩论,可以帮助中级人员掌握有趣的概念,如果让人们展示他们的解决方案,它引入了一种有益的公开审查风格。它还有助于初学者,因为您不必在主要讲座系列中介绍真正先进的概念,以使经验丰富的人感兴趣。

学生参与

经验丰富的人通常之所以经验丰富是因为他们喜欢编码等,很多人喜欢分享他们的知识。利用这一点,以帮助初学者和高级学生的方式,是让更高级的学生参与教学。如果您运行完成练习的课程/实验室,请尝试从更有经验的学生中获得志愿者来担任实验室的导师/监督员。当初学者遇到困难时,他们可以通过解释细节或微妙之处等来帮助解决问题。
这可以真正帮助初学者,因为通常没有足够的工作人员可供每个人询问个人问题。这也可以真正有益于更高级的人,因为不得不解释您“知道”的概念是巩固自己思想的好方法,甚至发现自己对知识有微妙的误解。

2
不要假设你需要的比实际更多;尽量选择没有太多知识负担的编程环境。你可能认为C语言的“Hello world”程序很简单,但那需要理解源代码文件、编译、静态类型和块结构等概念,对于初学者来说并不容易。相比之下,在Python shell中键入“print 'hello world'”就避免了这些问题。声明、复合类型、对象导向、指针、浮点数、递归、模块化、线程、回调、网络、数据库等都是需要花费精力去学习的重要概念。而且,即使没有这些概念,也有很多有趣的事情可以做。你的目标应该是让每个人尽快参与编程练习。
混合能力的教学很难;如果可以的话,可以通过分组来进行。也许可以发布一个基本概念的问卷,并为那些没有得到满分的人提供可选的基本概念部分。有些人认为自己是有经验的程序员,但却误解了基本思想。
如果课程时间太短,无法让人们尝试大量的练习,那么我会放弃更高级的材料,而不是放弃实际的工作。

0

将编程练习围绕体育或电影展开。


0
在我上过的一门课程中,课程成绩的很大一部分来自于一个期末项目,该项目提前宣布,并为各种附加组件和装饰提供额外学分。经验丰富的学生可以在他们不那么准备充分的同学还在学习基础知识时就开始着手完成该项目。
但正如Dave Markle所说,其中一部分是将合适的学生招入你的班级:你真的希望在开始时有一个相当匹配的同伴群体。

0

如果你有很多有经验的学生或者这是一个高年级/研究生课程,你应该专注于融入现有的生态系统。能够理解和融入现有项目而不总是从头开始工作是你可以给这些学生的最重要的技能。

因此,编程作业应该来自真实世界的场景。例如,在开源项目中分配任务给他们。这也可以使它更有趣,特别是因为他们的工作可能成为真实世界项目的一部分。

如果真的是初学者,那就只能坚持基础知识了,但如果学生不是计算机科学专业的,你可以从他们自己的领域(如工程、化学等)创建问题。


0

我觉得你可能要凉了。

在某个时候,差距就太大了。要让初学者理解不会让更高级的人感到无聊的东西,需要整整一年的时间。

然而,这显然取决于主题和环境。对于某些组合,解决方案是按照班级所需水平进行教学。那些过于先进的人会感到无聊并退出,那些经验不足的人会落后并退出。不要太担心,因为两者都不应该选修这门课程。如果他们确实需要上这门课,那么更高层次的人出了问题。


0
坐在椅子上看别人讲话是无聊的(即使他们讲得很好)。
当你能够实现某些事情,能够操纵世界并获得成功时,事情就变得有趣了。因此,请尽可能添加实用练习,并确保他们能够及时完成并成功地完成这些练习。
没有什么比听到“很抱歉,你无法完成它”更令人沮丧的了。在课程中提供的示例很简单,坐在你面前的人都知道这一点。因此,如果他们甚至不能解决你为他们带来的简单示例,他们会怎么想呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接