在上大学时,我曾经是编程课程入门以及其他课程的导师。您描述的问题并不少见。根据您的特定角色,您可能会采用不同的方法。
首先,如果这是一个影响到班上大部分学生的普遍问题,如果您可以这样做,我将向教授授课的教授提供有关学生未能掌握哪些概念的具体反馈,以便他或他她可能会在学期中再次提出对该材料的其他评论,或者为将来的学期改进课程。
如果您在实验时间之外还教课程的一个讨论部分,那将是一个很好的时机,详细讲解那些令人困惑的内容,并使其变得更加具体,并确保所有基本知识都得到了理解。
如果您与这些学生一起工作的唯一时间是您在辅导实验室期间,那么您仍然可以利用这段时间来一次或一次地教学生一些他们需要的概念性组成部分,以便他们理解并完成功课。
他们可能在课堂上感到迷路,甚至不知道在哪里停下来问问题。如果是这种情况,请与他们一起回到基础知识。当他们最后一次了解发生了什么时,他们在课程中的什么位置?如果他们不确定或“从不”理解,则可能必须重新回到开始解释“ hello world”的方向,教他们诸如变量是什么,计算机如何获取其“指令”列表,并尝试进行操作。按顺序执行它们,但是计算机不像我们那么“聪明”,因此您必须非常直率,说出完全适合计算机理解的内容,等等。
这实际上是我在非专业编程课程中经常看到的奋斗和挫折点。学生写一些代码。似乎“大约”是正确的,但是随后他们去编译它,并给出了一个错误,这是一个非常神秘的错误。他们不知道这是怎么回事。盯着他们的代码几个小时。然后终于弄清楚这似乎是微不足道的,例如缺少分号或括号在错误的位置。然后他们再次编译它,仍然有一个错误,这是另外一回事。他们第二次使用变量名时的拼写方式有所不同。等等。因此,他们向朋友,导师或某人寻求帮助,然后他们就可以回答:“哦,只要在此添加,它就可以工作。” 因此他们的经验是编程有点“神秘”
这是一个辅导老师的领域,您在这里有很大的帮助空间。根据他们的沮丧程度,我可能有不同的方法来帮助他们弄清为什么他们的代码无法正常工作。如果他们有所了解,我可能会给他们一些提示,并尝试帮助他们自己解决问题。但是,如果他们只是在准备放弃沮丧的尽头,我经常会给他们几个免费赠品的答案,然后至少问他们一些问题,例如“您了解为什么这种改变会固定您的程序吗? ?
对于某些学生,尤其是非专业的学生,他们可能没有系统地关注成为一名优秀程序员或享受编程所必需的细节。您可以通过策略帮助他们,以帮助他们关注细节,并采取有条理的方法来解决问题,即使这对他们来说也是一个挑战。
但是对于学生“适当地”缩进代码却保持保留态度-经常,刚开始的程序员会在嵌套和范围方面产生问题,因为他们没有匹配的花括号之类的东西,因为他们不注意嵌套在什么下面的内容。给他们一张“检查程序何时无法编译的东西”的清单,例如正确缩进所有代码并确保花括号匹配,确保所有行都以分号结尾,尤其是第一个错误显示所在的行号附近等等
教他们尽早编译并经常编译。编写最小的框架代码(例如,hello world),进行编译/测试。添加几行,然后再次编译。如果您只查看很小的更改而不是很大的更改,发现错误就容易得多。
帮助他们学习如何将问题分解为较小的可解决问题。这是我们作为专业程序员解决不知道如何解决的更棘手问题的同一件事。您会不断将其分解成碎片,直到找到您知道如何解决的问题,或者可以进行一些研究来学习如何解决。“要采取可行的解决方案,您需要采取什么步骤?” 好吧,首先,您需要一些框架代码(Hello World)。你知道怎么做吗?是的,太好了,所以当我们完成交谈后,您可以开始这样做!然后它需要读取一个文件作为输入。您还记得在第4章中读到的内容吗?并不是的?您好,当您运行世界后,为什么不去看一下,看看您可以将其工作多近,然后再给我打电话,当您遇到困难时,它将为您提供更多帮助。头几次,您可能只需要为他们列出解决问题所需步骤的编号列表,以便他们可以从示例中学习如何分解问题。
如果他们在课堂上获得了全部但不是全部的材料,请鼓励他们在课堂上提问,因为十分之九的学生不是唯一不理解的学生,而教授可能只是掩饰了一些重要的东西。
如果他们花“几个小时”盯着一个错误却没有弄清楚它,那是浪费时间,他们没有从中学到很多。错误通常是洞察力问题,而要想出正确的洞察力来解决它的问题,而对于这些类型的问题,他们可能并不了解。建议遇到卡住时采取的其他一般方法:向班上的另一个朋友寻求帮助(必要时认识一些同学),提前开始作业,以便他们有时间停下来,然后再来在开放时间或在教授的上班时间问问题。如果他们习惯于记忆,这对记忆对象很有效,那么当他们 面对编程更多的是解决问题而不是记忆。向他们展示如何从他们的教科书,stackoverflow等中查找语法示例。鼓励他们在私人课程问题论坛上发布问题(如果有的话)。
教他们如何缩小代码停止工作的位置。注释掉所有内容,直到您返回正在运行的内容,然后慢慢将其添加回去,直到再次遇到该段错误为止。
如果这些想法很多,很多想法都可以变成讲义。策略通常是教授掩饰的部分-他们将时间花在语法,如何编写循环,数组,I / O等语义上。但是,没有足够的时间花在“尝试时该怎么办”上运行我的代码,它只是无法编译或崩溃?”
当涉及到概念性事物时,尤其是基础知识,例如“什么是变量”或“什么是循环”?不了解这将阻止他们跟上课程的其余部分。在基于讲座的课程中,教授可能没有时间回答每个问题或帮助每个学生摆脱灯泡的困扰。这就是为什么导师对学习编程如此重要的部分原因。他们可能需要带有其他类比的个性化指导,以使特定主题具体化。
由于您使用C ++进行教学,因此我可以想象课堂作为一个抽象的话题出现,有些学生难以“获取”。通常,用与某个随机现实世界对象(例如“ ATM机”)相对应的示例来教示类的抽象,并对现实世界对象进行类比。您可能有一些变量来跟踪里面有多少钱,有一些方法,这些方法就像告诉atm机如何对特定条件做出反应的规则,等等。有时一个类比就是“粘”给特定人的类比,而其他学生则更好地掌握了另一种。
尽可能为它们绘制图片。就像时序图一样,随着时间的流逝,可以帮助他们了解正在编写的代码的功能。用户单击此按钮。然后,程序应通过执行x,y和z进行响应。在邮局绘制一个像一堆邮政信箱的数组,每个邮政信箱只能容纳一个数字,并在框的前面画一些指针,如指向“地址”的箭头。等等。