分类目录归档:教书匠

游戏给教学的启发(1)

如果学习能像游戏一样好玩,那该多好。学生开心,老师也不用发愁了。游戏为什么好玩呢?

我的经验,好玩的游戏至少要具备如下几个元素中的一个或多个:

  1. 由浅入深的挑战
  2. 输了再来
  3. 成就感
  4. 梦想成真
  5. 有趣的情节
  6. 漂亮的画面

应该还有其它元素,欢迎来访者补充。后续文章中,我会逐条想象如何在教学中体现出这些元素。

2010年考研操作系统统考试题挑刺

操作系统教学中,我经常向学生灌输一个观点,就是不要对操作系统的知识太“较真”,因为这东西本身就完全是人造的,没有任何自然定律支配它,所以什么是对,什么是错,咋说都有道理。学操作系统的关键在于要领会精神,了解细节,但不要纠缠细节。比如,我们都知道操作系统提供给应用程序的接口是“系统调用”,这个貌似没有争议。但如果硬找麻烦的话,对于像DOS和一些嵌入式OS等不区分用户态、内核态的,应用程序除了系统调用,还可以直接读写内核空间里的数据,直接调用甚至修改内核里任意一条指令;对于Java OS(别讨论它是不是OS,因为OS压根没有精确的定义),应用程序和系统之间的接口是Java API,根本到不了系统调用的级别。

所以,我认为机械的选择、判断题根本不适合操作系统这个博大精深的东西,很难经得起推敲。甚至于说,操作系统根本不适合被考试,不适合用简单的“对”和“错”来评价一个学生对这门学问的理解。最近拿到了2010年考研统考题的真题和官方标准答案,从中找到了不少刺,再次证明了我的观点。摘录几个:

23题:

下列选项中,操作系统提供给应用程序的接口是
A. 系统调用    B. 中断    C.库函数    D. 原语

标准答案是A。

挑刺:

  1. 很多系统的系统调用都是用软中断实现的,所以不能说中断就不是这个接口。
  2. 大多数应用程序都是通过库函数间接调用系统调用的,而操作系统可以将库函数和内核、系统程序等打包在一起提供给用户,所以库函数也是一种接口。这个命题让我想起我在课上问过的一个经典问题“扫雷是不是Windows操作系统的一部分?”
  3. 不过,从选出“最符合题目要求”的答案角度看,这道题还能算是合理的。

24题:

下列选项中,导致创建新进程的操作是
I. 用户登录成功    II. 设备分配      III. 启动程序执行
A. 仅I和II    B. 仅II和III    C. 仅I和III    D. I、II和III

标准答案是C,仅I和III。

I.的挑刺:

  1. 用户一定是OS用户吗?FireBBS系统中的BBS用户,只要连接进来,就建立进程,然后才是登录操作,而且无论登录成功还是不成功,都只是这一个进程为其服务。
  2. 就算用户是OS用户,假设这是一个字符界面的单用户的简单系统,启动后,shell就控制着终端,等待用户输入用户名和密码。验证通过后,shell才打印命令提示符,并接受用户的命令。这样,在用户登录过程中,没有任何新进程被建立。

II.的挑刺:

  1. 很多虚拟设备都是靠建立进程实现虚拟的,比如spooling方式的虚拟打印机的实现就可以这么做
  2. 一定有物理设备驱动程序的设计中,就用到了进程,每当这个设备被分配,就建个进程做些数据处理之类的工作。我举不出具体的例子,但相信肯定可以这么做。

III.的挑刺:

  1. 这个描述本身就不清楚。是“启动程序”被执行,还是启动一个程序并执行?
  2. 如果是“启动程序”被执行,并把启动程序理解为boot,那么这时候还没有进程的概念呢
  3. 如果是启动一个程序并执行,那么这个程序必须是应用程序吗?就不能是中断响应程序、引导程序、子程序什么的吗?就算它是应用程序,进程A调用execve()启动程序B,这个过程中有新进程建立吗?

45题:

题目太长,不敲了,是关于C-SCAN算法的。这道题刚考完试的时候,就有考生提出了质疑。这个考生能在高压力的考试情况下看到这一点,很厉害。这个争议的根源在于对C-SCAN算法描述的差异。统考的事实标准参考书(汤子瀛编著)里,说C-SCAN扫描的最远点是有访问请求的点,还有些资料(我查阅了《Operating System Concepts》,wikipedia)里说C-SCAN扫描的最远点是磁盘边界。汤式C-SCAN在这些资料里叫C-LOOK。虽然描述不同,但他们都是对的,思想上是一致的。46题涉及的Clock算法也有类似问题。这并不是问题,因为真正研究操作系统的人都不是学究,不会追求与教科书保持一致,会根据自己的需要去改造、创造算法。但在考试中,这就是问题了。不看汤本的学生,在这道题上会多少遇到一些杯具,至少得多费点儿时间。这很糟糕,有点儿颠倒。

说这些,不针对任何人,任何组织。我本科时学的就是汤老师的教材,对我的帮助很大。命题人的工作做得已经相当好了,能明显看出来他们在费尽心力地精确题目描述,避免各种意外。但没办法,操作系统这门学问的本质决定了,它不可能被机械地考核。考试形式不改,统考的制度不打破,就不可能真正地考查出学生的实际水平。

四年反抄袭,终于可以做总结了

我的教师生涯曾经差点儿毁掉。曾经有那么一段时间,我想消极地对待教学工作,不想再像费脑筋设计实验,不想再想费力气批改实验,甚至不想用心上课。原因是对学生“抄袭”的失望与无助。那时我觉得我做的一切努力都是徒劳的,都被“抄袭”轻松地抹煞了。批作业时,觉得自己就像一个在办离婚手续的地方推销玫瑰花的傻子,不管自己多么认真地书写评语,屏幕那一端都是一个猥琐的面孔在嘲笑我的自以为是。这时,一个在加拿大留学的同学告诉我moss的存在,于是我得救了。

moss是专门为检测源代码抄袭而设计的,可以瞬间从数百份源代码中找出一对对的疑似抄袭,支持很多种编程语言,而且有很多非常贴心的功能。比如教师可以给出框架代码,学生程序中出现的框架代码会被忽略;可以设定n份学生程序中都出现的代码被自动忽略;有可视化程度非常好的结果显示。它还可以处理中文的纯文本文件。Car现在正搞的Duplication可以处理中文的doc和pdf,也是功德很高的一件事。

moss的客户端是用perl编的,只能在命令行使用。我做了它的moodle插件,使在moodle中调用moss变得非常简单。

moss只是反抄袭的一个必要条件。它只是刑侦过程的一部分,还必须有刑罚过程配合,才能收到效果。

moss给出的结果只能是参考结果,还需要人工审核。moss的结果中排名越靠前的,抄袭的嫌疑越大,但并不绝对。是否雷同,要综合考量作业内容,难点、要点,相似比例和代码行数等。

moss查不出捉刀代笔的。针对这种类型的抄袭,我设计了让TA和学生面对面评分的策略,通过直接询问,看学生是否能解释程序。就算学生是找人帮忙完成的,这种方法也能逼迫他去了解程序,一定程度上也促进了教学效果。这种方法还有一个附带效果,就是可以对每名学生做个性化指导、总结。

抄袭确认后,必须有惩罚,否则就是鼓励抄袭了。惩罚的策略我一直在不停地摸索,寻找最优解。现在觉得,基本找到了。

学生抄袭无非是想用最少的力气获得最大的分数。惩罚就要反着来,让他什么都得不到。所以,凡是抄袭,当此作业0分是必须的,是最公平的,容不得半点讨价还价的余地。但这样会造成一种“不抄,0分;抄,最坏也是0分,如果运气好没被雷,就不是0分了”的状态。所以,惩罚必须更重。我的方法是“抄袭当次及之前所有的作业成绩都清零”。这样的好处是越往后越不敢抄,尤其那些曾经侥幸漏网的抄袭者。

假设一门课有8次实验,占总成绩的50%。如果一个学生不幸在第6次实验被雷了,他通过考试的希望基本就渺茫了。为了挽救他,我设计了“期末考试达标,实验成绩恢复”的策略。比如承诺只要期末考试能考到80分以上,被连坐清零的实验成绩都恢复。如果他是个值得挽救的人,那么后面的时间,就一定会更加努力学习了。

反抄袭的一个负面效果,是会“害”一些立志改行的学生。他们可能有自己的理想与特长,但被机械的制度圈进了一个自己不喜欢的专业,去学一些没兴趣的课程。如果他成功混到毕业证,拿着文凭出去闯,很可能会改行成功,创造一番事业。反抄袭,使他们很难混,很可能会毁掉一个未来的人才。对此,应该把每次实验的及格线都设得比较低,较易达到。这种策略对后进同学的帮助和鼓励作用也是很大的。

反抄袭没有技术难度,工作量也不大,最难的是坚持。对此持反感态度的学生是占多数的,得顶住这个压力。待到期末时,学生们回想这一学期获得的,就会感激这份坚持了。

极限教学:所有考试都应该是开卷考试

闭卷考试有一个强烈的心理暗示,告诉大家,“死记硬背”很重要。死记硬背不是不好,古人的学习思维“读书百遍,其意自现”说的就是不断地读,产生记忆效果,进而就能领会精髓了。古人这种说法很对,但是不够与时俱进。古时候的书翻来覆去就那么几本,不得不读百遍,否则没书读了;而且每本字数都不多,读百遍很轻松。现在的书那么多,那么厚,读百遍不可能。而读不到百遍,还要把里面的东西记住,这种“死机硬背”远远达不到领会精髓的效果。所以,我斗胆断言,我们的学生学得那么死,那么机械,闭卷考试这个指挥棒起主要作用。所以,干脆来个极限逆转,所有考试都开卷。

我进行开卷考试的次数粗略算算,也有10多次了。能看到的好处是:

  1. 学生没有了背诵的负担,更能用心去体会知识;
  2. 平时学得好的,期末几乎不用复习,很潇洒;
  3. 思维灵活的学生,比机械记忆能力强的传统好学生,更能获得好成绩;
  4. 考场秩序井然,基本不会有抄袭别人的意图,教师监考轻松;
  5. 为了和谐,为了就业,开卷考试可以更堂而皇之地提高整体分数,而不必偷偷摸摸地画重点、透题什么的;
  6. 就算一个学生平时什么都不学,考场现翻书,也能答上一些。过程中,还能让他多多少少学到一些东西。

能看到的弊端是:

  1. 很多学生还是习惯背诵,不习惯灵活;
  2. 裸考或比基尼考的,会觉得比闭卷考试舒服,这就让穿着羽绒服考的不舒服;

为了扬长避短,我总结了如下几条经验:

  1. 考前教育要做好,让大家别按照传统习惯备考;
  2. 送分题(书上能找到答案的)和分档题(很灵活,考查思维、应用等能力的)的比例,要设计好。比如,想尽量让所有人都通过,就备足60分的送分题。不过,迄今为止,无论我多么努力送分,都有交白卷的;
  3. 送分题尽量要明显。这样熟练的人,一下子就能在书上找到位置(最熟练的人,回答最简单的题,也会翻一下书确认,切记),节约出时间去思考分档题;不熟练的人,当然一定会很慢地翻书找答案,这样他就不至于过早交卷;
  4. 需要誊写的字数宜少不宜多。这样,熟练的人很快写到要点,有更多的时间思考、设计;不熟练的人,因为不自信,一定会狂写不已,给自己壮胆,也不会早交卷;
  5. 题目全是大题最好,这样的题才有思维发挥的空间;选择、填空,容易勾引学生的抄袭欲;
  6. 每道题都应该有梯度,从几个送分的小问题,引发几个分档的大问题,这样既能避免白卷,又能引导学生答题的方向;
  7. 2个小时的考试,设5-6道大题为宜;太多,就成为书写速度竞赛,而不是思维竞赛,批卷时也累;太少……没试过更少的,不知道会怎样;
  8. 如果要考5道题,那么就出6道,让学生任选5道,可以减少一些偶然因素带来的影响;
  9. 公开所有过往考试题,让学生知道开卷考试的题什么样;但答案可以讲,不可以公开;
  10. 每年都使用0.5-1道旧题,这样让哪怕最不爱学习的学生,也会去看看旧题,学上那么一点点。

等开卷考试久了,学生都习惯了,都善于思考了,就可以回归闭卷,但考题依然是开卷的形式和难度,这就到了教学的最高境界了。

moodle里如何活跃讨论区

moodle背后的思想叫做“建构主义教育学”,大意是学生在学习的过程中如果能对课程有所贡献,而不是单纯的听讲,会获得更好的学习效果。所以moodle中到处充满了可以“建构”的元素,比如wiki、论坛、词汇表、投票等等。为了鼓励学生建构,这些活动都可以被赋予一定的分值。

moodle到了中国,大多数的用户都只是把它当作一个发布课件和收作业的工具,不能充分利用其“建构”的能力。这和我们的传统相符合。传统认为,教师就是要发送的,学生就是要接收的。如果课程里要学生发送,那还要老师干什么?这种观点和传统,不值一驳。这里就介绍一下我的“建构”经验。

中国学生多数还是羞于表达,更不会反抗,只是喜欢随波逐流,默默接受。80后90后在这个方面比前辈有很大进步,但还是不足够。比如迄今为止我在课程里发起的所有投票项目,参与投票的人从来不曾超过半数。所以,要想“建构”就必须加一些刺激,或者是利诱。

建构手段里,我用得最多的是论坛。对论坛我试过三种不同的管理方法:

  1. 不设分数,只是当作一个交流场所。结果论坛比较沉闷,往往只有一些抓耳挠腮时发的一些并不考究的提问帖。只有极少数的人会发比较肺腑的帖子,但re的人少,也失去了继续发帖的积极性。如果作业的难度大,教师回帖比较及时,论坛活跃度会高一些,但帖子的质量普遍一般。
  2. 论坛表现占总成绩的5%,并且采用民主评分法,每个人都有权利给别人的帖子打分。分数按所有帖子所有评分的平均分统计。结果,论坛火爆,帖子很多,其中不乏精品贴,但真的把“民主”权力发挥好的学生很少,很多都是相约发帖,你问我答,互相评分。而且平均分的机制使一些学生发一贴,得满分后就开始一言不发。
  3. 论坛表现做为额外加分(5%)计入期末成绩,并且只有教师有评分权,而且教师通常只给每个帖子1分。所有帖子所有评分的和为最终得分,但不超过上限。结果,论坛水平暴涨,讨论热烈,思辨细致,文采四溢。提问的帖子水平也很高。教师旁观、侧敲为主,不做终结发言,更能推动讨论。

总结这三种方式,应该是第三种方式更好。不过现在课程几近尾声,获得加分的学生只占2成。评分标准是比较松的,所以发帖但没得到加分的学生数量很少,因此参与过论坛活动的学生也就在2成左右。也许,如果还有机会的话,可以尝试同样的评分方式,但分数放到百分以内而不是加分,效果会更好。

总结一下活跃论坛的经验:

  1. 分数和合理的评分方法是最重要的助推力;
  2. 教师的参与能让更多学生愿意参与讨论。有论坛加分,但教师不参与,学生就不够活跃的实例;
  3. 教师不要急于发表意见、解决问题,要留更多的时间和空间给学生;
  4. 教师不要只以答疑解惑的身份参与讨论,而是把自己放在和学生平等的位置,鼓励玩笑,百无禁忌,繁荣论坛。

等学生再上其它没有论坛的课,开始怀念你课程中的论坛的时候,你就成功了!

师有多大胆,生有多大产

最近被雷了两次。一次是被08级软件学院的学生雷到,另一次是被李晗静老师雷到。两个事件是相关的。

自从1996年来到工大,从学生熬成教师,虽无甚成就,但一拨拨的学生是见了不老少,从没见过像08级软件学院这样的,能让如此多的具有主动性和自学能力的学生同时出现在一个学院的一个年级。要知道,我一直认为,普遍来说,“主动性”是工大学生最致命的短板,并因此认为工大的学生只能算是“二流”。但08SE咄咄逼人的主动性,和佛挡杀佛的自学能力,让我终于体会到同时见到一批一流学生是什么样的感受。那就是“舒服”。

这种事情的出现不应该是偶然的。虽然软件学院从成立以来,其学生一直比计算机学院的主动性要好,但以前也就是一般好而已。必然性在哪里呢?便发了个帖子,想了解一下李晗静老师在他们的C语言课都干了什么。结果就被李老师所作的事情雷到了。

其实李老师所作的,和我的极限教学思想是一致的,不知道她是不是看过我的文章后才这么做得哈,^_^。但她可比我还要极限,简直就是到极端了。我自认在教学上的胆量独步工大,没人敢像我一样去挑战传统的力量。现在才知道,自己多么的自负,多么的渺小。从教学效果来看,李老师也比我做到的好,真的提升了学生的主动性(不过也不一定比我好,因为目前为止,我还没体会过我教过的新生在大二会有什么样的精神头;但是,体会过大三时的精神头,那是个惨不忍睹啊。不过,这应该是两年的时间,被传统祸害的结果吧?自我安慰一下了)。真的是“师有多大胆,生有多大产”啊。可惜,李老师也为此付出了惨重的代价,评教结果并不好,不好到她都不好意思告诉我是啥结果。

庆祝极限教学的又一次胜利!

抄袭之本在哪里?

今天在操作系统课程论坛里,沙明同学发了一个帖子,说:

雷同系统终究是形式!真正的想学东西还得看自己。说到底,还是中国教育的事。治标不治本。

这句话引起了我对抄袭本源的思索。如果真的要治本,该怎么治呢?

先从检讨自身开始。一上小学,我就是一个相当听话的好学生,记得班主任要求我们上课时坐在凳子上必须腰背挺直,而且手必须背在身后,我真就把这个无厘头的习惯一直保持到4年级。如此听话,当然不会作业抄袭。但其实我的第一次抄袭是很早的,那是第一个暑假的时候。暑假作业每天一页,量不大,所以一贪玩,就总想今天不写了,等明天写两天的,然后又等明天、等明天……结果到了假期快结束,作业还没写几页,堆压到一起相当恐怖,急得直哭。于是姐姐翻出来她的旧作业,告诉我这个是可以抄的。我的抄袭生涯就这么开始了。

虽然起步早,但个人定力还算足,老师抓得紧,再加上学习还不错,也不觉得写作业是多大痛苦,更不相信别人会比我做得好,所以大学之前 ,我的平时作业还是很少抄袭的。大学以后,所有的编程作业都只有别人抄我的份儿,但那些笔头作业,我几乎没自己写过。原因很简单:

  1. 懒得写
  2. 很少有老师会批改
  3. 没听说会有人抓抄袭
  4. 平时作业几乎不占期末分数
  5. 期末考试那点儿东西,3-7天就能搞定,平时何须费力,不如去做更喜欢的事情

理由相当的富有说服力,令我从来没对自己的行为有过半点自责,直到现在也是这样。不过,有些课程没认真学习,直接混过,还是让我有些后悔的。好在时间都没浪费,足以自慰。

我抄袭的本源是哪里呢?惰性是内因,外在环境也很重要。假使中小学老师也不挨本作业逐字批改,期末考试也严重放水,估计我早就堕落了。由此推断,如果大学老师对我严一些,可能我现在就是另一个模样了。不管推断得对不对,大学老师肯定不能按中小学的套路来的,那大学就该任由学生自甘堕落吗?

在UTD的时候,和那里的老师探讨学生抄袭的问题。他们说,抄袭的事情在美国的文化中是几乎不会存在的。那里没有人会觉得拿零分、降级(美国所谓的降级就是多学几年凑学分)、退学是丢人的事情,反倒做不诚实的事情会严重影响个人信誉。所以,美国学生里想找抄袭的都难。但来自中国和印度的留学生,颇能抄袭。印度学生的抄袭是完全拿来主义,除了名字什么都不改。中国学生比印度的要勤奋得多,肯定会做一些修改,而且还会编美满的故事来证明自己是亲自做的,不像印度学生只会一口一个“No”。但是,教师对抄袭几乎不管,原因有三:

  1. 中国和印度学生在评教时往往按感情打分,而不是客观打分。管多了,遭报应
  2. 美国法律制度严格,抄袭的最终认定要经过高层的审核。这还不是最麻烦的。学生可以到法院告教师诽谤,教师必须出庭、答辩、聘律师、提供有力证据,才能胜诉。就算胜诉了,一堆精力金钱都搭进去了,相当不值
  3. 反正学得不好,最后学生自己买单。留学生学不好,在美国混不下去,就得回国,被祸害的也不是美利坚

也和香港的朋友交流过。他说本科里抄袭的有,但不多。老师懒得管。学生都是成年人了,自己对自己的行为负责去吧。

大陆的高校里,抄袭得肯定比不抄的多,而且是多很多。本源在哪里?社会。一个不讲求公平的社会,一个四处充满徇私枉法、权钱交易的社会,怎么可能让学生心中把持住道德底线呢?而且抄袭于他人基本无害,这怎么就有违道德呢?不抄的才是假正经、伪君子、死脑筋呢。

面对这个问题,大学教师绝对起的是推波助澜的作用。这也很可以理解。我一直在不遗余力地推销我的反抄袭经验,但招致的不屑远多于聆听。我无法探求他们的内心如何,只能猜测大概如下:

  1. 教学工作就是那么回事,何必太认真。干科研才又有票子,又有位子
  2. 学生评教时报复我怎么办?我只求平平静静地上完课,不想搞什么妖蛾子
  3. 抄就抄吗,没什么大不了。将来自作自受去吧
  4. 都抄才好,我批作业还省事了呢
  5. 反正平时作业分值也不高。有本事,让他期末考试抄去

刚才偶然看到一篇关于AI退出NBA的文章,眼中不禁泛起几圈涟漪,虽然我以前对他并无多少好感。

如果我将来也有墓志铭的话,是不是应该写:“一个注定失败的人”?