(本文基于本人近三年来的工作写成,发表于《计算机教育》2014年第18期)
利用博客提交作业的程序设计课程实践模式
贺利坚 卢云宏
(烟台大学 计算机学院,山东 烟台 264005)
摘 要:探讨利用博客提交作业的实践教学模式改革,在合作、模仿、主动投入理念的支持下,保证教学效果,同时也解决了作业抄袭的顽症,在养成习惯等方面给学生带来了更多的机会和额外回报。
关键词:程序设计;实践;博客;互联网
0 引 言
计算机类专业程序设计课程的教学改革一直是焦点话题。无论采用案例教学,还是培养抽象思维,加强算法设计能力以及改革考核方式,目标都是让学生具备程序设计的能力。程序设计能力最终要体现学生针对问题能够设计、实现和调试程序,因此在程序设计学习过程中,学生编制和调试过的“代码行数”可以作为程序设计学习成果的重要指标。在行业中,也有“要学会程序设计,先积累N万行代码”的说法,这就要求大学生在学习期间能够将实践顺利地进行下去,而实践不足也常是学习效果不佳的主要原因。
笔者在近3年的工作中,在C++程序设计课程中,带领学生开通博客,用发布博文的形式提交作业,以此带动学生有效地完成程序设计的实践,保证了程序设计课程教学的效果。学生除了学得知识和技能外,还在有效实践中确立了学习目标,改变了学习方法,获得了学习的兴趣。
1 教学改革概况
C++程序设计课程针对软件工程专业大一学生开设,课程分两学期进行。第一学期的主要内容是C++中面向过程程序设计的部分;第二学期掌握C++中面向对象程序设计的知识。
通过博客提交程序设计作业,目标在于带动学生有效开展实践学习。每周的课堂教学时间,主要由教师针对语言和程序设计方法进行讲解。按照课程教学大纲的要求,结合教学内容,教师编制适量的实践“项目”,在课前复印发给学生。学生在集中安排的上机课时间和自主安排的课外实践中,完成“项目”中要求的编码任务。学生每完成一个“项目”,就发表一篇博文作为提交的作业。
开课的第一周,教师要求并指导学生申请博客。学生以博文形式提交的作业中,除了经过调试的源代码,还需要以程序注释的形式写清题目要求及相关信息,用上传的图片展示程序的运行结果,鼓励学生写一些总结性文字。教师每周浏览学生的博文,适时批注指导,并以此为依据发现教与学中的问题,掌握教学动态,适时调整教学内容和策略;及时发现学习状态存在问题的学生,有针对性地开展帮助。为了实现与学生的充分互动,教师也开设博客,公开教学资料,公布实践“项目”的参考解答,发表博文对学生在学习中存在的普遍问题进行指导。
博客平台选择了在IT行业中有影响力的 CSDN博客,由笔者的 教学博客可以链接到所有的教学资源和学生的博客。
2 课程教学理念
处在大学适应期的学生开始程序设计学习,会面临诸多困难,需要师生在教学理念的层面上,对学习中存在的一些问题形成统一的看法。为引导学生实施正确的学习策略和行为,师生共同达成三方面的基本态度和观念,成为师生共同遵守的信条,指导课程学习的整个过程,保证学习行为能顺利进行下去。
2.1 有兄弟,不孤单
“ 有兄弟,不孤单”,是创新工场2011年推出的一部宣传短片的名字。片中用手绘动画的方式,展示了在攻城(工程)中合作的重要性,提倡“攻城”还需一起上,有兄弟不孤单。刚刚开始学习程序设计的大一学生,需要学会合作学习,依靠集体的力量解决面临的问题。通过反复播放这部短片,强调共同进步的必要;利用需要合作才能完成的学习项目,营造出一个合作共进的学习氛围。学生遇到困难,就会主动找身边的“兄弟们”帮着解决。有了CSDN博客,交流可以延伸到整个CSDN社区中去,能得到更多人的帮助,免除了在学习中被频频困扰的孤独局面。
2.2 抄之有道
看书能看懂,编程序编不出,这是不少程序设计初学者的感受。实际上,所谓“看懂”只是表象,而“编不出”带来的焦虑却可以抽去学生的学习欲望。在交作业期限的“逼迫”下,学生很容易想到复制别人的程序去“交差”。实际上,阅读别人写的程序并模仿,也是一种有效的学习手段。提倡学生在自己编不出程序的情况下,找到了合适的程序参考,认真阅读,也可以“抄”到集成开发环境去调试,直到获得正确的运行结果。抄之有道即要求学生在看懂参考之后,自己再试着独立写出程序。这样的过程可能需要反复几次,直到真正写出来。在学习的起步阶段,这种抄程序是一种可以采用的方式,用博文提交作业,也方便了同学们相互交流、参考。但是,必须抄之有法,抄之有道,将抄作为手段,而不是目的,抄完之后要再次审视和重做,而不是照搬照抄。抄之有道使学生放下了不必要的负罪感,保持了克服困难过程中的良好感受,不久就会在模仿中找到感觉和自信,见到问题能够独立思考,自己真正编写出程序来。
2.3 让代码积累看得见
经历了应试教育,学生的学习严重依赖考试。没有了考试和测验作为学习的评价,大一学生的学习常常找不到目标。用博客交作业,帮助学生找到成绩之外的评价准则。随着博文数量的增加,点击量、积分以及评论的增加,学习成果通过一种可见的形式展现出来,就能产生更加可靠的内在学习动机。这样,学生就获得了一种类似于打游戏升级赚积分的感觉,满怀热情地投入到程序设计的实践中去,将积累代码行数的工作向前推进。学生最终找到了程序设计学习的乐趣,这也将是后续专业学习、终身学习中需要的动力。
3 关键问题——杜绝抄袭
作业是学生在课程学习中接受的必要训练形式,是教师掌握学生学习情况的途径。抄袭作业是大学不良学风中的典型。如果在一门课程的教学过程中不能有效杜绝这种现象,教学就是失败的,一切的努力将会全部泡汤。程序设计的学习中,学生面临的困难是显然的,而将作业发表成博文,更加方便了抄袭,因此,杜绝抄袭就成了实施这项措施的最关键,也是最难把握的方面。
3.1 制度层面,学生没必要抄袭
为学生提供宽松的氛围,解除其顾虑,使学生没有必要产生抄袭的动机,对应的措施是规定作业完成情况与平时成绩无关。可以想象,当学生遇到不会做、不想做或没有及时做,但是期限已至,完不成将会受到批评、会被扣除平时成绩时,一抄了之就是最为便捷的选择。他不会考虑自己是否投入了学习,学习方法上是否还需要调整。过度的外部激励和压力,如考试成绩、批评和奖励,会异化学习的内在目标,作业与平时成绩脱钩,使学生没有必要抄袭,但能意识到在学习态度、学习能力等方面需要主动寻求改变。
3.2 执行层面,学生不需要抄袭
通过“有兄弟不孤单”的学习团队建设,形成集体学习的氛围;指导学生学会利用网络社区中的资源,面对难题有办法解决;帮助学生破除由抄带来的负罪感,将“抄之有道”的手段用好;由博文数量和质量很容易发现需要重点关注的学生,便于开展单独的学习指导。通过这样的方式,消除了学生在学习中的困难,使学生不需要通过抄袭解决问题。
3.3 找到成绩之外的学习动机
在大学前的学习中,成绩被视为一切。大学的教学应该帮助学生找到成绩之外的学习动机。取消作业与成绩的关联,能帮助学生建立内在学习动机。每周展示同学们发表博文的统计数据,表扬学习状态好的同学。适时展示往届学生实际水平与发表博文数量的关系,引起适度焦虑。更重要的是,用博文将积累代码的过程记录下来,学生更容易感受到艰苦的学习带来的快乐和自信,这是学习效果的最佳保证。
4 用博客提交作业的额外回报
利用博客提交作业的方式,不仅仅是提供了一种收集、检查作业的途径,在保证学习效果的同时,还带来了诸多的意外好处。
4.1 养成良好的编码习惯
写出规范的程序是工程质量的重要保证,也是良好学习效果的抓手。作为专业社区,CSDN博客除了具备教学中需要的交流功能之外,博文中代码语法着色、自动编行号等功能是特色,[确认][请贺老师确认表述是否正确?]符合一句一行、缩格排放等基本规范的代码,从视觉上可以给人美的感受,这吸引着学生按规范写程序。因为要发布成公开的博文,既是压力,也是动力,能让学生自然地养成良好的编码习惯。
4.2 及时获得帮助
教师通过博客中的“关注”功能,在任何的时间碎片中都可以看到学生的学习成果,随手提交评论,实现师生互动。建立在教师博客中的课程主页,汇集了学生的链接、历届的教学方案,以及所有学生的学习成果、教师提供的参考解答,为学生获得参考提供了极大的便利。基于CSDN提供的服务,学生还可以利用搜索论坛获得帮助。鼓励学生将自己经过努力无法解决的问题发成博文,写上自己的分析,再通过给老师发私信、上论坛发贴、用微博和QQ分享链接等方式,以求得到帮助。有不少网络中热心的在职人士、高年级学生,会主动浏览这些“菜鸟”们的作业,提供必要的指导和鼓励。一定程度上,这种交作业方式在实践中开辟了解决地方性院校中大班教学条件下助教严重缺乏的新途径。
4.3 学会利用互联网
即使是计算机类专业的大学生,在学习中利用好网络的能力,仍然有很大的进步空间。面对网络,不少人不知道可以干什么,不知道学习资源的获取途径,不懂得参与规则。相关的技能需要引导,而最好的方式,就是在使用中学会使用。用博客提交作业背后的基本观点是,未来从事IT行业的学生,要尽早深度参与互联网。在课程学习中,将学生带到互联网中,在教学环节中利用互联网完成学习任务,让学生在体验中学会运用,这是一个可行且必要的途径。将学生带入到网络中的专业社区,就是打开了将互联网用于学习的大门。在与互联网亲密接触中,有些同学发现了公开课、其他的专业社区、开源项目;有些同学在发布博文中,学会了直接操纵HTML源代码;还有些同学开始利用网络资源,自主地学习感兴趣的知识。
4.4 接触行业
高校与行业有一定的距离,尤其对于二、三线城市的学生,并不是很容易能够感受到行业的存在,以至于找不到所学知识与行业需求的结合点。不少学生难以树立学习目标,缺乏学习动力,没有学习热情。利用博客提交作业,依赖互联网和专业社区开展日常学习,找到了接触行业的窗口。通过CSDN首页,能看到行业动态,搜索学习资源;参与专业论坛,打开了全面了解行业内技术、经济、文化的大门。在博客频道,学生关注的博主,可能就是某一方面资深的技术大牛,受其影响,逐渐就会有愿意投入的专业学习方向。和业内高手通过博文中评论等途径建立联系,通过高质量的博文建立影响力,身在校园也可以在行业中形成个人品牌,建立人脉,这无论是对就业还是对更长远的职业发展,都是宝贵的财富。
5 与其他提交作业方式的对比
程序设计课程教学中的作业,还可以用交作业本、Email、校内教学平台(如Blackboard、Moodle)等方式提交。近年来,采用OnlineJudge平台(OJ)进行实践和考核的尝试也不少[1]。表1从多个角度对这些方式进行了对比。
表1 程序设计类课程中几种提交作业方式的比较
交作业方式 |
博 客 |
OJ平台 |
校内教学平台 |
作业本 |
开放性 |
完全开放 |
题目公开 |
封闭 |
完全封闭 |
交互性 |
参与面广,交互手段多 |
完成题目后有限参与 |
有限参与 |
非常有限 |
教学资源 |
自建 |
较多题目积累,但共享差 |
自建 |
自建 |
作业检查及效果 |
方便掌握学生学习过程 |
方便掌握学生学习结果 |
一般 |
一般 |
实现教学目标 |
可以涉及语言、算法、工程等多方面的目标。 |
强于算法能力训练,重视严格测试下的结果正确。 |
展示教学材料,实现作业的在线收集。 |
收集“给老师看”的作业。 |
新颖性 |
实现基本教学功能,还可以自由发挥,“经营”自己的空间,在专业社区中形成自己的品牌。 |
类似竞赛的氛围会吸引一部分同学,继续利用外部激励帮助学生实现学习目标。 |
一般 |
无 |
学习动力塑造 |
有趣,有效,扩大视野,增加交流机会,促进全面提高,进而产生学习兴趣和自信。 |
有挑战性,激发学习热情。严格的测试容易影响部分初学者的学习积极性。 |
一般 |
差 |
延续性 |
养成习惯后,可以支持其他课程及各种自主学习,对学生影响深刻。 |
限于程序设计、算法类课程,不方便体现工程中涉及的技术要求。 |
无 |
无 |
综合 |
好 |
好 |
一般 |
差 |
在程序设计课中,出于便捷性、有效性等方面的考虑,交作业本的方式,无论手写或打印,都应该被新型方式代替。
校内教学平台提供支持教学的通用功能,其最大的问题是封闭,难以产生好的交互效果,而对于程序设计的作业环节,最多也只是提供了一种方便收集的渠道而已。笔者在教学中,只将之作为展示教学材料的平台。
OJ是专为程序设计和算法训练、竞赛设计的,其最大的好处在于能够方便地进行考核和组织竞赛。目前已经积累了充足的题目资源,但仍显不足。对于程序设计初学者,题目在输入输出格式方面有硬性要求,程序需要通过严格的测试,[?通顺吗?]容易形成不好的体验,有初学者哀叹学程序设计难,用OJ难上加难。将这种考核的平台和形式贯穿于整个学习过程,对学生的全面提升作用有限。
博客作为程序设计课程学习成果的展示平台,最大的益处是为学生的专业学习注入了新鲜气息,打开学生的合作空间,开阔了专业视野,让学生的学习目标回归自然,促进学生将实践进行下去,引发了学生强烈的学习兴趣和动力。不易感知的学习进步可以用可见的博文数量、点击量、积分、博客排名上的变化体现出来。CSDN的专业性、开放性,使学生得到了诸多的额外回报,对学生的专业学习促进作用明显。这种方式的实施有一定难度,需要任课教师在定制作业、发动交流氛围、开展学习指导方面,要有更多的投入。但是以笔者的体会,不少事情本来就是该做但是在传统方式下无法做的,而有些工作,开始做了,习惯做了,工作难度和负担并没有想像中的那么大。
对于两种值得推广的方式,OJ平台的潜力还有进一步挖掘的空间,可以发挥更大作用;发布博文的方式顺应互联网时代开放、共享的潮流,更胜一筹,更利于将学生的学习从考试中引出来,尽早站在行业的层面看待技术的学习。目前,笔者在教学中的探索,由完全围绕发博文组织实践的方式,转为以博客为主、充分发挥OJ平台的作用。
6 教学效果
以2012级56名学生两学期完整的教学实践数据为例,学生发表博文数最多221篇,最少39篇,平均102篇;访问量,最多25 118,最少2 709,平均10 222;在当时CSDN社区中70万左右的博客主中,积分最高排名3 277,最低28 554。按每篇博文平均100行代码估计,学生1年的平均代码量有1万行左右,有40名同学在一年中完成8 000到15 000行代码。根据对全体学生的无记名问卷调查,有67.19%的学生表示这种交作业的形式“非常好,为保证学习效果起了决定性的作用”;有53.13%的同学将“对专业学习产生兴趣”归功于在程序设计课上将他们引入专业社区。
表2是在一次面向大学一年级学生的选拔性考试(选拔考试的程序设计部分占30分)中,用传统形式完成作业的班级(选拔人员)与采用博客交作业的学生(试点学生)的成绩对比,试点学生的成绩占优。选拔人员是同年级200人中报名参加选拔的95名同学,他们的入学成绩一般接近一本线,而试点学生是降分录取的校企业联合培养的学生,并且是全员参加。
表2 选拔人员与试点学生的测试成绩对比
分数段 |
选拨人员 |
试点学生 |
人数 |
百分比% |
人数 |
百分比% |
26-30 |
16 |
16.84 |
11 |
20 |
21-25 |
32 |
33.68 |
23 |
41.82 |
16-20 |
22 |
23.16 |
12 |
21.82 |
≤15 |
25 |
26.32 |
8 |
14.55 |
总计 |
95 |
100 |
55 |
100 |
学习理论认为,与智力因素相比,学习动机、兴趣等非智力因素在学习中起着更大的作用[2]。与此同时,高等工程教育对“做中学”、与产业结合[3]已经提出要求。用博客交程序设计作业,重在将程序设计的实践有效进行下去,在学习过程中,培养学生兴趣,建立考试标准之外的学习动机。有效的代码积累过程中得到的良好体验是学生的最大财富,一年当中写过的超出一般的代码量,本身也就是教学效果的重要反映,他们在学习过程中培养起来的兴趣和由此引出的自信,更是无法量化的成绩。
7 结 语
笔者在近3年的教学实践中,尝试以博客提交作业的方式,探索了这项程序设计课实践模式改革中涉及的教学原则、方法、理念、内容体系等多个方面的问题。这种模式适用于程序设计课,也可以用于其他专业课程,以及对学生课外自主学习指导中。
教学改革取得了明显的成效,但不足之处在于试点班级在一年级之后,能够坚持将实践学习成果用博文发表的学生只是个别。这种现象涉及的因素很复杂,也提出了如何能够让学生在没有老师提要求的情况下,延续这样一种学习方式的努力方向。值得欣慰的是,有为数不少的外校的学生,跟着笔者在博客上公布的C++学习方案展开深度实践,请求笔者关注并指点,这是开放的互联网产生的额外影响。
参考文献:
[1] 彭源,田秀霞,张安勤,等.基于ACM竞赛理念的C++程序设计教学模式改革[J].计算机教育,2013(7):74-77.
[2] 程美华,相广海.高等学校人才培养中非智力因素影响分析[J].现代教育管理,2012(12):109-113.
[3]查建中. 面向经济全球化的工程教育改革战略:“做中学”、产学合作与国际化[J]. 高等工程教育研究,2008(1):21-28.
(编辑:郭田珍)
附:某学生5月积累10000行的统计