标签归档:C语言课

09级肿么了?——谈新大纲、累加式考试和项目式学习在实施上的问题(草稿)

计算机学院2009级学生的入学与往届没什么两样,但在大三这一年为他们讲授《操作系统》课之后,发现他们是非常特别的一届,具体表现为:

  1. 特别能抄袭被确认抄袭的人次历史之最,是往届数倍
  2. 特别能放弃。抄袭无门后,就大片地放弃作业,人数也是历史之最,往届数倍
  3. 特别少交流。网上论坛里的讨论,无论数量还是质量都是史上最低
  4. 特别能应试。虽然发帖少,但询问评分细节的帖子却是史上最多
  5. 特别缺惊艳。即便是独立完成作业且拿满分的同学,其中也难以见到往届哪种处处惊艳的效果,很多人都只是应付,看不到任何激情。

这种突然的极端变化令人不得不思考,做为使用新教学大纲的第一届学生,是不是大纲的变化带来了这些问题?这些思考形成了本文。希望看到此文的同学、老师能多提意见,一起丰富此文,适当时候提交给学院。

新教学大纲的主要变化

我手上并没有新旧大纲的文本,凭印象列出09级已经经历过的主要变化:

  1. C语言课变成C/C++课
  2. 很多课程的授课和实验学时缩短,甚至有些课程的实验完全砍掉,使学生有了更多可自由支配的时间
  3. 累加式考试深入到每一门课程,一张考卷定乾坤的日子不再有
  4. 大一全年完成一个年度创新项目(从08级开始);大二下开始每学期一个软件设计与开发实践课。都是分组完成一个大项目

高级语言程序设计课改带来的问题

高级语言程序设计课由纯C变为C/C++,而学时没有增加,必然造成C和C++都学不到位。学不到位并不是问题,没有任何一门语言是一门课就能教会的。问题在于,这门课的定位没有向后传达,导致后续课程的教师仍抱有原来的期待,被打了个措手不及。

就拿文件操作来说,大家的心理预期都是在C语言课学完,后面课程再应用一下、巩固巩固。但在09级是课上没咋学,到数据结构课需要用时,就表示不会。数据结构老师太nice,直接去掉这部分要求,导致到了我的操作系统课,学生还不懂怎么用。

所以我认为,课改后的高级语言程序设计必须给出一个明确的定位,到底这门课的输出是什么,有哪些是后续课程可以直接利用的,哪些是必须再培训的。

累加式考试带来的问题

去年底在全校做报告时我曾提出一个观点:“如果不作业反抄袭,累加式考试就注定是个玩笑。”从09级的情况看,我言中了。

据我了解,在前两年的学习中,他们只经历过一门反抄袭的课:高级语言程序。浩瀚的纵容抄袭作业的课程,消磨了他们的求知欲,甚至扭曲了他们的价值观。到大三时,他们中的很多人已经不相信自己有能力独立完成作业,所以再次面对反抄袭时,就纷纷放弃。

反抄袭必须大家都动手,才有真正的意义。但考虑到很多教师面临的客观情况,现阶段并不适合全面由任课教师做这件工作。应该以学院为单位,组建反抄袭委员会,做抄袭行为的最终裁定。对抄袭的惩罚也不能仅仅是一门课内的事情,要与奖学金、入党、保研,甚至学籍挂钩。每次看到被我抓过抄袭的学生入党、被评为优秀学生干部,我都觉得讽刺至极。

项目式学习带来的问题

这是最大的一个改革,相关经验不多,所以带来的问题最严重:严重打击学生自信心

在以前,大家基本都是考试成绩论英雄,分高和分低的差别也就是背书多少的差别,所以分高的也不觉得自己比别人牛多少,分低的也不觉得自己真就不如人。项目式学习之后,一切都是真刀真枪,搞得定的就是公认牛人,搞不定的也承认自己确实不行。这正能说明项目式学习的美好愿景。然而,现在的项目式学习因为管理不善,多数人都没真正动手去搞,整日只能膜拜那些大牛,仰角越来越高,久而久之就觉得自己真是不行了,自信心完全丧失。但事实上,如果他们一开始就能亲自动手,未必就搞不定。

年度创新项目

大一的年度创新项目开题总是能让人眼光直亮,但中检时就有几分泄气,等结题时所剩项目的数量只能是令人失望了。虽然结题的项目都挺扎眼,但一项普及型的运动最后变成精英秀场,这绝不是成功。我们虽然可以用“大多数学生经历了失败,获得了经验”来自慰,但必须正视的问题是,很多学生在过程中看到的是自己和牛人之间那貌似无法弥补的差距,信心受到严重打击。

虽然口号是“允许失败”,但学生早习惯了成败论英雄式的考核,谁也不好意思拿失败上去混分。或许,我们应该考虑采用“越失败,越高分”的评价标准?思路来自于一篇博客,其中谈到:

Pennsylvania University 的一位教授在他的工程设计课上希望他的学生以失败来通过考试,这门课又被称为“Failure 101”。 在这门课中最好的学生是那些失败最多的并且风险最大的学生。就好比走迷宫,最先走出迷宫的人是那些犯错最早并且最多的人,因为他们把走过的路描述成地图,迷宫的构造了然于心,自然能更快走出来。

这种评价标准对初生牛犊来说实在是再合适不过了。

软件设计与开发实践课

这门从其它课程挤出来的课,会延续3到4个学期,每学期让学生分组做个大项目,项目主题是上一学期学过课程的综合。在不是每门课都能保证充足的实践性的情况下,这种做法可圈可点。但再好的设计也敌不过糟糕的实现。此课程的直接结果就是彻彻底底地消灭了许多同学还残存的那一点点自信。

分组项目总会遭遇的一个尴尬,传统说法叫“坐车”,现代说法叫“打酱油”。

分组的目的是培养团队意识,锻炼团队合作能力。但事实上,绝大多数项目都是一个人干,n个人看。这n个人中可能会有一个心肠好的还能帮着写写文档、打打下手,剩下的连看都未必看。

我曾问过那个1,为什么能容忍那些n。他说没啥要容忍的,他们真要是动手干,才会发生需要容忍,甚至完全无法忍的事情

合作的项目越多,差距越大,就越没有信心能追上,于是干脆就永远放弃了追赶。09级学生是我见过的最没精气神的一届。只两次大项目就把他们打成这样了,等所有项目做完会怎样?我不敢想象。

是不是我们该放弃“团队合作”这个奢望呢?不应该,条件也不允许(没那么多指导老师)。怎么办?我目前没有经验,但有一些粗浅想法:

  1. 控制团队规模,2人为上,3人最多
  2. 开题
    1. 将项目工作量进行划分。可以不均分,能力较弱的同学可以只做少部分工作,只要达到对他本人的锻炼目的即可
    2. 按工作量和难度情况,给每人设一个“最高分”。比如某人任务量比较少,那么他最后全完成也只能得到80分
  3. 每周那三小时的机房之旅基本没用
  4. 让网络成为指导与协作的主阵地,方便管理和监控
    1. 师生用乐学网交流,如打字说不明白,就网上留言约时间见面,证明确实指导了
    2. 代码传到github,可以便捷地跟踪谁在什么时间做了什么,完成工作量的百分比。而且git是工业界一个非常重要的配置管理工具,很有必要学会使用
  5. 允许组内成员互相帮助,甚至替他人完成工作,但最后必须如实交代。如果结题时发现组内有一人把他人成果当成自己的,全组0分
  6. 根据实际完成情况,以开题时划定的最高分为依据,多加少减,完成每个人的评分

实践教学比重提升带来的问题

在以前,整个本科课程体系都是理论当道,纸上谈兵,学生到毕业了也没写过多少行代码。毕业生倒也是人才辈出,一方面是行业情况好,另一方面是我们的学生确实优秀,就算大学没练出实践能力,到工作岗位也能被激发出来。还有一些学生走学术路线,与实践渐行渐远,靠理论成为大家。

后来,大家都认为本科阶段在踏实理论基础同时,也应该锻炼实践能力,所以实践的比重越来越大,于是抄袭党和酱油党就越来越多,其中不乏理论牛人靠抄袭和酱油而保研,进而在理论上更有建树。但决不能因为有这样的人存在,而默许抄袭和酱油。

当禁止了抄袭和酱油,那么就要开始考虑因材施教的问题了。从目前情况看,在很多“好学生”身上,实践能力是个0-1的二值问题,要么有,要么什么都没有。我认为这和我们容忍了太多抄袭和酱油有关。如果他一直都必须自己兢兢业业做作业、项目,那么也许就能锻炼出实践能力了。当然,这只是想象,在没有杜绝抄袭和酱油的情况下,谁都不知道实际会如何。甚至也许可以肯定地说,会有那么一类学生,他们是天生的理论家,但实践能力奇缺,我们的培养应该埋没他们吗?

虽然以前的培养方式埋没了很多天生的实践家,但好在他们也确实不适合读研深造,到企业反而如鱼得水。但对天生理论家来说,不让他们读研,可能是我们的损失;让他们进入职场,可能会遇到问题。所以,我们必须因材施教,不能一刀切地要求所有人。也许,设计多种培养方案,甚至完全放开地让学生选课,根据自身情况去选择实践路线、理论路线或两者兼有,能比较完美地解决此问题吧。

在课程体系未提供分类培养策略的情况下,单门课程可以靠平分实践与理论的分值,并让两者的及格要求都足够低,达到一定程度的平衡。

后记

每项新改革都会带来新问题。指出这些问题是为了改革更好,而不是打击改革,也不是针对发起和实施改革的人,更不是针对被改革所累的人。

在现行的体制下,一次好的改革要做到既不给教师增加负担,也不会不照顾整体的和谐,还要让学生成为前所未有的强人,难度可想而知。但只要所有人,无论领导、老师,还是学生,都能坦然地正视问题,真心想解决问题,这些就都不是事儿。

《C语言点滴》序

注:这几天混得偶有名人样儿,都有人找我给新书写序了。雷他一下,看他敢用不。

做为一个为评职称而编过几本C语言教材的人,我一向认为我是国内写C语言书最认真、最专业、最幽默、最会讲故事的。为了保持这种良好心态,我始终坚持着不去读其他国人写的C语言书。但赵岩这厮,居然用请吃饭骗我见面,硬塞给我一份书稿,以“请我写序”为名,其实是向我示威,来打击我的自信。最让我不能接受的是——他成功了。于是,我便应允作序,揭发此书的弊端,降其销量,让我至少在印数上还能胜他。

这本书真不是谁都可以看的!想考试拿高分的不要看,因为这里所讲老师都未必明白,更不可能考了;想过计算机二级的不要看,因为了解C语言越深,就越会发现考题的问题,自然就答不出“标准”答案;用严肃态度对待技术的不要看,因为书中胡诌八扯、插科打诨到处都是,会让你怀疑看的不是技术,而是相声;想将来靠Java、C++、C#、Python什么的混饭吃的不要看,因为此书可能会让你深深爱上C语言,再不旁顾其它;女生不要看,看了就知道为什么不要看……

这本书真正适合的是一种特别的C语言初学者,他们好奇心强,豁达乐观,喜欢刨根问底,以比别人懂得多为乐。C语言未必会成为他们的未来,但一定会是一份美好的回忆,并在潜移默化中对他们的未来产生巨大影响。这样的人注定少数,弥足珍贵,所以此书一定卖不出太多,哈哈!

既然书就像作者的身材一样短,我的序言也就写这么多吧。反正他肯定不会真印到书上,写多少都是白写。

World Finals, 27th Place, ACM@HIT的新名次

根据官方公布的排名,在2011年ACM-ICPC全球总决赛中,工大获得第27名的成绩。谦虚一点地说,其实DPS队的排名是39,但27是官方最后给出的,咱一定得接受,:-)

出发前我问DaLord对今年成绩的预期,他说去年70名,今年能60就行了。确实,去年是靠一点儿优先权的照顾才大直街一日游,今年第一次昂首跨入总决赛,我们确实不必期许太多。但DPS好不给后来者留空间啊,一下子提升这么多。

自从素质教育、能力教育、实践教育这些名词开始挂上领导的嘴边,各种竞赛就如火如荼了。确实挺无奈的,课程自身不给力,达不到“教育”的水准,就得靠竞赛来补了。但这么多竞赛拉出来溜溜,能像ACM这样几乎全靠参与者的喜爱与热情来支撑的,挺罕见。

不能说ACM里是没有功利的,但在ACM的发展历程中,“功利”二字所占比重确实是相当小的。最早的时候,它被包装成精英竞赛,每年特训1-2个队,成员几乎都来自实验学院,从学校的目的看,就是要拿名次,然而,结果是我们总在第二梯队前列晃荡,偶尔会蹭上第一梯队的尾巴,但finals总是可望不可及。这大概是最功利的一段时间了。但一代代acmer对finals的渴望,是不能算做功利的,那是一种理想。

该怎么提高名次,冲击final呢?那时有两种声音,一种是要继续加大对精英的训练力度,另一种则是要培养群众基础让精英自己长成。随着计算机学院对竞赛的接管,后一种策略占了上风。ACM与C语言课的合作从那时候开始,并一直延续到现在,形成绝对的双赢。

但在合作初期,竞赛名次仍没有突破,甚至一度有点儿下滑。此时DaLord横空出世,他做到了一件很匪夷所思的事情,就是让ACM从一个只有学生喜欢的运动,变成了领导也喜欢的运动,而且是在名次并没有提高的情况下做到的。在中国想把任何事情做到最好,都得搞得定领导。搞定领导,ACM就有了地位、经费、场地,使基础更加雄厚,然后忽地一下子,今年就这样了。

这次的成功到底是群众战术的必然还是偶然,还有待时间检验。但不可否认的是,这次finals让acmers得到了想要的,也让领导们得到了想要的,未来形势是相当看好的。即便未来名次提升有限甚至下滑,在ACM熏陶下成长的一届届毕业生也已经是绝对值得的回报了。

ACM这个异类竞赛的成功,很让人兴奋。它至少证明了几件事:

  1. 兴趣与热情是存在的,即使是在中国
  2. 无功利心也能获得成功,即使是在中国
  3. 但只相信上两条可能并不足够,尤其是在中国

最成功的一个C语言赛季

太舒服了!真是太舒服了!这个学期结束时的感觉太舒服了!因为这学期的C语言课太成功了!不仅我舒服,学生也舒服。以往我的课成绩下来后,都是哀鸿遍野,抓20%是常事儿。但这学期除了极少数平时作业不好好做甚至不做的,都通过考试了!

还有什么能比心安理得地放过所有学生更舒服呢?我真的很心安理得,因为通过残酷的作业的检验,我已经相信他们有实力通过我的课了。他们应该是历史上学得最好的一届!

获得成功的两个主要因素是:

1. 全面引入ACM的Online Judge方式评判作业。这东西太有魔力了,不仅能强力逼迫学生歇斯底里地学习,而且还能让他们爱上被Online Judge折磨的时光。端的是匪夷所思。
2. 用Moss抓雷同。如果没有这东西的保证,所有的努力都是白费,还能培养出一批以抄袭为乐的社会蛀虫。

假若明年我还上这个课的话,可改进地方确实不多了,黔驴技穷了。大概总结一下有这么几个:

1. 加大雷同的惩罚力度。一次雷同就清空过往所有成绩,但期末考试80分以上的话,可以恢复分数。
2. 改进网上活动的评分机制。现在的方式只能鼓励第一次发帖,但对继续发帖的鼓励有限,甚至会压制继续发帖的欲望。可考虑完全匿名打分,并要求发帖和给他人打分必须达到一定数量,或者帖子必须有一定数量的人打分后才能记入成绩。
3. 全面修订示例代码
4. 修改Code::Blocks,让它的memory字体也能变大