我是一名计算机科学专业的学生,完成了我的第二学期的编程课程。我很喜欢他们,并且学到了很多,但似乎其他学生比我更挣扎于概念和作业。当作业到期时,不可避免的群组电子邮件会在一两天之前出现,人们需要帮助解决问题的特定部分,或者有时人们似乎很难知道从哪里开始。
我真的希望能够提供帮助,但我很难想出正确的方法来给予他们帮助而不给他们答案。当我无法理解一个概念时,代码片段可以帮助我,但同时如果它有很大意义,那么很难想到另一种方法。此外,每项任务的学术诚信部分总是迫在眉睫,警告不要与他人共享代码。我已经尝试使用伪代码来帮助其他人了解程序流程,让他们弄清楚如何实现它的某些方面,但我没有得到太多的反馈,也不知道它实际上有多大帮助他们out,或者如果它只是进一步混淆了它们。
所以我基本上想看看是否有人有这方面的经验,或者我可以帮助其他学生在正确的方向上推动他们的好方法,或者帮助他们以正确的方式思考问题。
答案 0 :(得分:18)
让他们向你解释他们的代码。
这完成了几件事:
答案 1 :(得分:8)
我曾在TA部门和CS部门的帮助台工作过(并帮助过好友)。这就是我做的......
提出问题,找出相关问题,然后解决相关问题。如果他们无法建立联系,你就无法真正帮助他们。
编辑:如果他们在前一天或前一天寻求帮助,请拒绝提供超过基本语法的帮助。事情应该在截止日期之前处理。在当天抓拐的人对你来说不是一个好习惯。
答案 2 :(得分:3)
一些想法:
进行配对编程
让学生(您正在帮助的人)坐在椅子上并编写代码。可以是代码片段,可以是项目的一部分,任何东西,只要它代表他们遇到麻烦的东西。当他们走的时候,指出(不是粗鲁)他们可能做错事的地方,或者可以改进的地方。
审核已完成的工作
对我最有帮助的事情之一就是让同伴(而不是教师或学生助手)审查我的代码。大多数时候,同行可以指出他们可能做出不同的事情的地方。
让他们重复你。
我经常让人们帮我学习重复我刚刚说过的话,看看他们是否理解或有任何问题。如果人们在不理解某些事情时不会说话,你会感到惊讶。
在项目到期前提供帮助。
尝试在项目到期前一晚完成项目是一种万无一失的方法,至少不能像你可能那样彻底地学习这些概念。
不要自己编码
如果你为他们这样做,你的同伴将不会学到任何东西。
查找其他资源
助手,友好的教授,另一位同伴可以成为宝贵的资源。如果您发现您的教学风格与同学的学习风格不相符,请将其指向可能能够帮助他们的其他人。
希望最好的
教导某人时,你只能走得那么远;他们必须要学习。
答案 3 :(得分:2)
对你的同学可能有帮助的一件事是在讲义中指出类似的代码(或者如果你没有在你自己的笔记中分发讲义)。那样你只是向他们展示了教授说的话,但是以有用的方式做到了。
如果另一名学生对此持开放态度,请向他们询问他们尝试过的所有事情以及为什么会有所帮助。
最后,考虑去找你的教授并询问他或她对你被允许做什么以及他们如何建议你帮助他人的意见。毕竟,教授们在教学方面有多年的经验。更重要的是,作为一名本科生,你有机会成为未来几年的技术援助吗?我作为一名本科生获得了TA,这帮助我有效地利用我的冲动来帮助他人而不破坏任何荣誉准则。如果你有这样的本科就业机会,让教授现在看到你作为有用的类型将帮助你获得它们。
答案 4 :(得分:2)
我认为你不应该帮助他们。我认为这在学术上是不诚实的。此外,他们帮助你给他们答案,甚至让你回答问题也没有帮助,因为一旦他们参加考试(或现实世界),你就不会在那里为他们服务。他们不仅需要学习如何自己编程(可能是你正在帮助他们做),而且还要自己解答他们的问题。这意味着在像StackOverflow这样的地方张贴。你可能想建议他们制定一个特定的问题(总是一个很好的练习)并在这里发布“homework”标签。
当我在大学学习CS课程时,有许多学生根本无法编码或设计(我正在考虑高级软件工程课程)。他们也不知道如何解决问题,在哪里查找问题,在哪里获得问题的答案,或者要问什么问题。他们完全无助,因为他们大部分时间都在大学生的家庭作业/项目小组中工作,并让更有才华的小组成员亲自抓住他们。不要永久保持这一点。业界最不需要的就是更多不称职的程序员,他们以优秀的成绩毕业,可以上简历。
答案 5 :(得分:1)
每当我试图教我的女朋友如何编程我几乎什么也没做,只是提出问题。 (她在感到无聊之前得到.each
陈述)
让他们质疑他们的代码如何运作以及他们认为他们如何完成任务。给他们小微调正确的方向。从来没有 EVER 为他们输入内容。如果您有另一台计算机并在其上键入代码以显示它们并向其显示结果,那很好,但不要过度。
答案 6 :(得分:1)
以下是我给学生老师的建议:避免给学生答案。相反,问他们问题。并确保提出将来可以问自己的问题。对于我教的材料,以下是我希望所有学生自问的一些问题:
你的抽象是什么?
您的抽象应如何表现的示例是什么?你能告诉我另一个例子吗?
是否有任何示例表明您允许抽象失败?该例如何失败?
您是否测试了这些示例?
抽象的表现形式是什么?
表示如何与抽象相关?你能告诉我一张照片吗?你能告诉我数学吗?
允许哪些功能查看代表?每个职能的合同是什么?表示是否满足函数可以假设的不变量?每个函数都确保保留不变量吗?
valgrind说什么?
答案 7 :(得分:0)
教学中最常见的问题之一是确定学生是否理解你。确定是否应该继续或改写的一种简单有效的方法是让学生通过做一些密切相关但不相同的事情来表达他们的理解。
此外,由于编程本质上是单词问题,因此学生将事情分解为步骤非常重要。在我向他们展示任何东西之前,我会要求看到他们的高级步骤。太多人在语法中被挂断了,并且在潜入之前从未真正确定他们想要做的事情。
答案 8 :(得分:0)
向他人解释内容的一般经验是找出他们的第一位置。尽量不要给他们解决他们甚至没有的问题(即使你确定他们以后会遇到他们)。换句话说,不要先走两步。如果他们在理解按值调用时遇到问题,请不要解释它们的递归。
答案 9 :(得分:0)
就帮助同学而言,我通常使用“玩傻”的方法。我假装我对他们的特定任务一无所知,我请他们让我快速了解他们应该做的事情。我还要求他们快速了解他们在课堂上学到的关于任务概念的内容。这通常需要大约5分钟和大约95%的时间,另一个学生在他们完成向我解释时回答了他们自己的问题。如果他们还没有解决这个问题,我请他们引导我完成他们对作业的解决方案。在这样做的过程中,他们通常会发现他们的解决方案偏离了他们刚刚在课堂上学到的内容。
就编程特定的帮助而言,我有时会要求另一个学生向我发送他们的代码,然后通过我编写的简单shell脚本运行它。该脚本清空代码文件中不注释的所有内容,并将结果提供给其他学生阅读。生成的文件通常读起来就像是他们代码的轮廓,很多时候他们只是通过获取代码就可以看到代码出错的地方。如果他们的方法完全错误,我告诉他们使用注释写一个代码应该做的事情(用高级术语);完成此操作后,他们会使用实现该大纲步骤的代码填写大纲的每个部分(测试每个“块”)。这有助于很多人将代码与算法分开(我认为许多常见问题源于缺乏系统或训练有素的问题解决方法,这项练习有助于使他们走上正确的道路。)
另一种方法是使用不同的编程语言回答问题。例如,我通过使用C,Ruby甚至伪代码解释概念来帮助我的几个同学学习Matlab项目(这些代码更像普通英语而不是代码)。我知道他们对其他语言有更多的经验,所以我用他们最熟悉的东西来说明这些概念,并鼓励他们先用他们的“母语”来解决这个问题。一旦他们确信他们理解了概念,他们就可以确定如何用目标语言实现它们。在您还在学习语言的同时学习新概念会使两者变得更加困难。这种方法还有助于确定他们是否无法理解如何解决问题或如何编写解决方案。
答案 10 :(得分:-1)
心理学方法
向他们展示他们日常使用的一些流行的真实应用程序(作为示例)...用您尝试教授的相同编程语言编写.....