2017-2018-1 《程序设计与数据结构》课程总结

2017-2018-1 《程序设计与数据结构》课程总结

有关课程的一些信息参考2016-2017-2 《程序设计与数据结构》课程总结.

为了这学期的课程,我记录了选教材的过程,参考两个月选一本理想教材,上文提到:

学习数据结构的概念不难,难点是:

如何实现从数据结构概念到程序设计实现的跨越(即如何实现一个数据结构)

如何实现从实际应用到数据结构抽象的跨越(即如何利用数据结构解决实际问题)

《程序设计与数据结构》并不是一学期讲Java,一学期讲数据结构这么简单,而是把编程和数据结构有机的结合起来,上学期重点解决“如何实现从实际应用到数据结构抽象的跨越(即如何利用数据结构解决实际问题)”的问题,这学期重点解决“如何实现从数据结构概念到程序设计实现的跨越(即如何实现一个数据结构)”的问题。 这种方法是 C+数据结构不好解决的,我相信使用C++,Java,Python等有类STL库、Collection API的语言讲授数据结构会更好。

翻转课堂

翻转课堂采用优秀的SPOC平台蓝墨云班课博客园的班级教育应用,我们也使用博客园课程管理,兼顾封闭与开放。

我们的课程主页如下

翻转课堂不是老师让学生自学就完了,学生要自学,老师也要做大量的工作,付出巨大的努力。

首先要安排好每周的学习内容,我们这学期的教学进程参见:2017-2018-1学期《程序设计与数据结构》教学进程

每周都给出明确的学习目标,详细的学习资源和有最后期限的学习任务

虽然有些死板,但同学们缺的就是这些死板严格的要求,要求不明确,学生根本无法享受「灵活」带来的好处,不少人随便糊弄一下就过去了,这么细致的要求,也还是有同学糊弄的。

我们的主要学习资源有教材,课程内容配套的微课。教材学习指导是同学们学习的重要指导,相当于传统课堂要讲授的内容,用好了能大大减少学习时间,提高学习效率。教材学习指导初期几乎是一页一页的指导,详细到每段代码如何阅读,取得了良好的指导效果:

这样还不够,学生学习过程中还是会有问题的,多年实践证明微信群,QQ群不适合答疑:问答很快被冲掉,一个问题要回答多遍,问答无法积累。后来在博客园建立了课程答疑论坛进行答疑,承诺同学们有问题24小时内回复。

课程答疑论坛

与以往答疑时间无人提问不同,从以老师教为主转变为学生学为主后,在每周的学习过程中同学们总能提出一些问题,有问题才说明学了。我们的课程答疑论坛应用效率很高的一个证明是,开课期间在博客园的排名一直是数一数二的。博客园承诺同学们的问题24小时内解决。问题数量,质量有了大大的提高。但还是不够及时,同学们之间的交流才是最及时的。蓝墨云班课解决了这个问题,老师要做的大多是给提问和解答的同学都加分就可以了,很少需要回答问题了,大大激发了同学们学习的积极性:

我认为以上措施解决了以往同学们学习中的各种障碍,只要想学习的同学,就没有什么学习上的障碍了,剩下的是自己的学习态度和努力程度的问题了

过程化考核对每周的教学效果进行检测,老师可以根据成绩和出错多的题目对教学内容,教学重点进行调整。如果没有100分的限制,这学期学得好的同学可以拿150分,学得差的就只能50-60分。我经常让同学们体会「学过」和「学会」的差别,我们老师也要体会「教过」和「教会」的差别。翻转课堂以前我特别不理解,上课强调了那么多遍的重点内容,甚至有些题目和答案都讲了,考试为什么还有学生不会。过程化考试让我了解到,由于基础和态度问题,很多同学根本没听或听不懂,所以学生的结论是老师没教。过程化考试让老师很早就知道学生有那些该掌握的知识没有掌握,可以通过反复讲解和反复考核来解决重点,难点的学习问题。

每周我们都有考核,检测本周学习的效果,,这是学习中非常重要的反馈,我希望同学们能对照答案,找出不足,查漏补缺,一些重点内容和错得多的题目会多次考核。实践中发现有了答案还有不少人看不懂,后面的课上增加了错题讲解的环节。我还是认为这一定程度上反映了学生的学习动力不足和学习积极性不高的问题。
使用了蓝墨云班课,效果更好,可以实时反馈,了解学生的学习盲点,让课上的讲解更具针对性:

最终成绩情况:本学期30名同学,4个100分,90分以上的3人,80-89分的7人,70-79分 的5人,60-69分的10人,不及格2人。平均分78分,基本符合正态分布。

每周的排行榜对同学们的学习促进作用还是很明显的,排在前面有奖励,排在后面的有督促。

这学期继续游戏化,每周奖励一下总分排第一的同学,本学期奖励有图书和程序员茶杯:

一年的课程还是引入了 《构建之法》的做法:结对学习、团队项目,30个同学分为五个小组,设计一个Android游戏:

蓝墨云班课

有了蓝墨云班课这个SPOC平台,翻转课堂的控制更加方便了,解决了多年的平台问题。不到一年经验值就超过全国98.53%的老师。

这里有人体会:学习一项技能,做一些事情,想超过90%的人,稍微努力一下就可以鹤立鸡群了,但是想超过99%的人,那是要付出巨大努力的。那些考100分的同学太了不起了!!

就本门课程而言,发布博客教程,视频,作业等资源91个,开展课堂提问,课堂考核,实验检查,课堂实践等学习活动73次,设计包含300多道试题的题库(一年总计上千道题目了)。

教学周报可以清晰地看到每周在教学上做的工作,包括为学生提供线上学习的资源,为学生在云班课上设计的课堂活动。

教学资源分析

翻转课堂要给学生提供合适的线上学习资源,实现必要的课前预习,保证课前学习效果。

以前使用微信群,QQ群发送资源时,老师不知道学生看了没有,现在有了详细的数据,老师提供的学习资源还是有30%左右的学生没好好看,其实上课遇到的很多问题在学习资源里都有了解答。

老师提供的微课资源就是等价于传统课堂的上课讲解。微课的内容含量是传统课堂的三倍左右,同学们可以根据自己的情况跳着听,完整听,多次听直到掌握,从而做到了因材施教。微课的一个要义是基础好的可以少听或不听,基础差的要多次听,可惜的是事实是基本上是基础差的没有好好看视频学习,反而抱怨上课老师不讲教材内容。当然也存在打开视频不看的钻空子现象。

教学活动分析

课堂上的教学活动是我在教学中最为关注的部分,也是要课堂效果的关键点,在每节课前我都会通过蓝墨云班课进行活动设计,云班课的各种活动组件都能很好地满足我的活动设计要求,而且非常方便简易,用手机开展活动的课堂效果也很好。

头脑风暴活动让全班同学都参与到开放性问题的思考回答,随堂测试能马上得到学生知识点学习情况的数据反馈,点名签到节省了传统点名的时间,讨论答疑突破了时间空间的限制让我和学生随时随地交流学习问题,摇一摇选人增加了课堂的趣味性......

头脑风暴活动是我用的最多的活动,我用它来向全班同学提问,设置实验的检查点,提交课上实践的截图..., 这些头脑风暴活动大大提高了学生的教学参与度。

教学活动的参与度都很高:

学情分析

在过程性考核中,经验值的获得方式,也可以从下图中看出来,其中参与课堂活动是最为关键的,课堂上是没有逃课现象的,学生也基本没有时间去玩手机了,因为手机被用来参与我的课堂活动了。

从下图可以分析出,大部分同学非常努力,入门的3位有两位是助教。学习感觉任务重的是成绩好的同学,大约1/4的同学下的功夫还不到。

对学习资源进行分类,分成必学,选学是非常有必要的,这样会提高学习效率。

学习过程中可以随时查看学生的学习状态,比如这名同学比较不适应翻转课堂,老师提供的学习资源资源一半没有学习,视频才看了3个,了解了这些情况,老师和班主任对其严格要求,在本人的努力下,最后也及格了。

同学们的反馈

蓝墨云班课上的答疑讨论比较实用,对我的学习有促进,可以随时提出或者解决大家的问题,有时候参考大家的问题去学习也是一种不错的方式,同时也方便了老师管理学生和教学,可以及时地上传一些视频或文件供大家下载。当然,蓝墨云班课也是有缺陷的,比如说我要时时刻刻关注老师是否发布了新的学习任务,因为只有打开了蓝墨云班课才知道,所以在一段时间里,我看手机的频率很高,然而有时只是频繁地翻来翻去,感觉有些不适应。

这个APP是非常好非常实用的,尤其是对我们样的课程来说,因为所有的作业或是什么都是在网上完成的,对于群体信息的沟通来说这是非常方便的,老师每周下放任务,指定时间然后我们按时完成,既保证了速度也保证了效率,可以继续实行!

对学习有很大促进,拉近了师生的距离,能够很方便的得到一些资源

在这个平台上学习资料更加集中,便于我们查找,而且学习经验排名也能提高我们的学习积极性。建议在这个平台上上传更多的学习资料和参考文献,这样也有助于我们学习。

蓝墨云班课对我的学习很有帮助,希望老师能够多加利用,并且加入更多的学习资料

蓝墨云班课有它独特的教学管理系统,操作方便,相比较于博客园,蓝墨云班课能够上传的资源类型更多,所以对我的学习有很大得到促进作用。希望以后的课程也能够用蓝墨云班课作为教学的辅助软件。

助教机制

计算机系非常重视课程改革,为我们这们课程配了助教王志强老师,我备课,设计安排教学进程和教学内容,设计试题,设计实验,作业点评,答疑等工作,王志强老师负责了改卷,答疑,日常辅导等大量工作,为教学效果的提升付出了很多。

王志强老师点评学生的博客以及交流了300多次:

王志强老师对学生每周的作业都进行了总结,写了不少教学博客:

感谢王老师!!

全面走向开放

这几年,从封闭的有道云协作 全面开放走向博客园,老师和同学们都经历了不适应到习惯的过程,现在也都尝到了开放的好处。

实验楼课堂提供了学习环境,对学生的学习时间有统计,是个好工具。

学生实践的代码都在码云git@OSC托管。实践情况也都是公开的。

即使使用了蓝墨云班课这个SPOC平台,作业的布置,学习指导,学习进程也都是在博客园公开后再引用。

公开也就意味着更公正!

Git与代码托管

课程实践性强,动手实践就非常重要,虽然有「代码驱动的程序设计学习」的这么详细的学习指导。学生踏踏实实使用GDB进行反馈,加点代码,改点代码的还是不多,排名前三分之一的同学问题不大,后面的还是要加强控制,如果老师一个一个的检查,花费时间会非常多,通过git log --pretty=format:"%h - %an, %ar : %s截图的结果,和`wc -l 'find src -name *.c``代码量统计截图,可以自动化检查学生的实践情况,然后重点抽查。

通过git log --pretty=format:"%h - %an, %ar : %s的截图,谁在什么时候提交了代码清清楚楚。

通过`wc -l 'find src -name *.java``的截图,一学期的代码量明明白白。

这学期同学们有了3000至10000行的代码训练,大多数同学超过了5000行的目标,使用git的好处显现。

可是这样有的同学还是没有达到掌握Java基本编程技巧,用来解决简单问题的目标,原因同学们的总结说的好:

通过这一学期的学习真的不难看出代码行数与编程水平真的有一定关系,但也存在bug,所谓学而不思与思而不学,我班马平川同学的代码行数是最少的,但他的编程能力是最强的,同理,代码行数最多的同学编程能力也不是最好的,敲代码固然重要,但编程过程中的学习和思考也是十分重要的,没有总结反思,再多的代码也是别人的,自己学不到什么。

刻意练习,积极思考做的还不够!!

这学期在动手上加强了不少,但促进同学们深度学习的效果还不理想,这方面的努力永远在路上!

微信公众号

本学期更多的使用了教学微信公众号「rocedu」,发布教学,读书学习的相关信息,与同行,同学们有了更多的交流。

也欢迎大家关注交流(手机上可以长按下面的二维码关注):

rocedu

课程总结

学生课程总结说明同学们的收获还是很大的:

  • 20162330 2017-2018-1《程序设计与数据结构》课程总结是最认真的一篇总结了,有前言,目录,老师的要求都有了,学习态度值得大家学习,注意刻意训练,我想他日后可以学得更好,这学期他的写作已经超我不少了,我就担心他以后不继续写了,和他沟通一下,发现担心不是多余的,送了一本书,他也想继续努力写下去:

转眼间一年过去了,在这一年间《程序设计与数据结构》这门课带给我们的有痛苦,也有欢乐,有疲惫,也有收获。不论我们收获了多少,我们都是在不断尝试,老师在不断尝试新的教学方法,我们也在尝试着不断接受。这个学期我们主要针对数据结构的内容进行学习。在结对互助的基础上,还开设了团队项目,虽然总体效果不太理想,但是不论怎样我们尝试了一次团队合作,留下了较为深刻的印象。总之,作为信管专业的学生,能够有幸接触了解到一些软件工程的相关内容,也算是一笔额外的财富吧

首先谈谈课程收获,学到了数据结构的知识,也了解了一些数据结构在各个领域的运用。数据结构的代码实现是个体力活,更是个脑力活,不论怎样我也掌握了一部分。对于本学期讲到的各种算法,二分查找和线性查找和一些基础的排序算法算是比较熟悉了,团队的合作项目让我了解到一个软件的发布流程原来这么麻烦,却又这么充实。

其次说说其他方面的收获,因为团队博客有涉及到一些工具软件的使用,我在使用一些工具时也收获了一些经验和使用技巧,在和团队协作的过程中也有从团队的其他成员那里学到一些优秀的品质。他们的那种做任何事都一鼓作气的氛围感染了我,也偶尔带动着整个团队,不论我们的项目做得怎么样,我们都尽力了。并且我可以保证我们团队是累积贡献量和收获量最多的团队。

除此之外,我体验了一年的“做中学”,在代码上的感触之前有提及, 泛型类-Bag 练习 这篇博客足以说明“做中学”的价值。在不断查找资料的过程中,我的“搜商”也有提高。除了将一些 做的时间 运用在代码上之外,我还将较多的时间运用在了博客上,为了使博客尽可能地呈现出精美的效果并且要与选择的模板相映衬,每次有时间逛博客园时,我都会去额外地了解其他的一些语言(比较基础),并做出各种尝试,每次看别人的博客时,总是不忘看看排版格式。现在,我可以自己设计markdown三级标题的效果了。有的博客侧边栏也很丰富,我的侧边栏原来也挺丰富,现在觉得写博客有时不应该太分心,所以只留下了一个,其他的都去掉了。

  • 20162308马平川同学方法得当,是学得相当明白的同学,基本能够举一反三了,代码量并不多,有效代码量应该是数一数二的了:

这个课程比较大的收获是老师提供了很多方向,能够让我去接触很多技术,这个是非常大的收获。另外一个是对设计模式和OOP原则的讲解,能够初步地体会和理解大型软件工程项目中的设计方法。

他的学习建议是非常有效的,大家应该多读读:

积极主动敲代码。程序设计课如果连代码都懒得敲,那这么课程就是纸上谈兵,什么都学不会。积极主动的更进一步就是自我驱动地学习知识,因为程序设计课程的覆盖面太广,很多知识都是浅尝辄止,可以选取课上感兴趣的、没听明白的地方去深入。
遇到问题,先自己想办法解决。可以去百度、查书等等,推荐看stackoverflow上其他优秀程序员的解决思路,或者用英文在这个平台上提问,找同学解决固然是一种方法,但是看看其他业界程序员的解决方案可能会给你提供更多思路。
充分利用Git工具。利用Git不止可以用于自己的项目的版本控制,也可以去看其他的优秀开源项目的代码,去学习别人的编程思路。
最后一点,知易行难。很多人听了很多道理,依然过不好这一生,上面三点建议,关键在于做的过程。

在上学期的课程总结中,我提到了自己比较遗憾学习中没有做到积极主动敲代码。这一学期,在自己比较主动的逼迫下,我觉得这个问题有所改善。第一学期觉得敲代码是一件比较痛苦的事情,这学期慢慢感受到了其中的乐趣,特别是自己解决了一个问题以后,那种成就感很强烈。我们所用的教材上,每一章节的代码比较详细,例如很多排序算法都是已经有的,我们只要会用就可以了。虽然对我们学习的时候觉得很方便很轻松,但我觉得少了一部分思考的过程。到了后面图的那一部分,代码不再是完整的给出来,而是给了一部分思路让自己写,这个时候感觉很痛苦。所以教训就是,书上的代码不能一味的抄过来,而是要尝试自己还原,这样效果更好,能学习到的东西也更多

说实话,这学期收获蛮大的,我能够自己独立编写一些小程序,还自学了Android开发的基础知识(作为团队开发的副代码手)。这学期在Java方面的投入是巨大的,收获可以说是满意的,效率相比上学期还是有很大提升,但总体还是不高。不过在大量的投入下效果还是不错的,可以说是真正地是在认真搞学习。

希望结对学习这种方式继续延续下去而不是结对编程,因为对于新人来说结对学习比直接进入结对编程要好得多,至少我是这么认为。结对编程太需要考虑结对对象的时间等各方面的需求,并且在提交代码上有诸多不便。而结对学习则是两人在学习方面的困惑共同解决共同提问,比较方便又有效率。

课程前几周我和刘先润的结对学习倒是很认真。在项目冲刺中,我们小组其实冲刺了十天,每天晚上我们四个人都很认真在一堆讨论游戏代码,游戏界面,BUG等。感觉还是很不错的。

关于结对的建议:我觉得可以讲一次课堂实践用作结对编程,在课堂上结对的两人用一台电脑编写程序,同样抽调部分同学的代码做示例来做分析和讲解。(这个想想如何做)

课程结束了大家都叹了口气说“噩梦终于结束了”,然而我并没有这种感觉,并不是因为噩梦没有结束,而是感觉噩梦并没有到来过,虽然每周的博客写得很难受,每次的实践感觉很难,但是每次完成了它们所带来的惊喜感是无可替代的,在这门课程中好像一切都很自然, 什么时候学什么,什么时候做什么,不知道接下来没有了课程的约束我们还会不会这么有规律。

在这一学年的程序设计课程中我从一个对编程一无所知的小白,成长为现在可以独立解决一定编程问题的编程菜鸟,虽然水平并不很高,但成长是巨大的,不仅提高了我的编程能力,也提高了我的逻辑思维能力和独立思考的能力。

对改进教学提出的建议

同学们提出不少好建议,这些建议我在后面的课程中落实:

  1. 加强课堂时间
  2. 课后PP的讲解
  3. 内容拓展,内容深化上可以多做工作
  4. 进行小组项目的实践
  5. 与更多人的交流(学得好的提这个,实际是不少同学不愿交流,我只能轮询改中断)
  6. 待及格定在70分,好多及格的同学其实做的并不好而只是刚刚及格,并不见得好好学了
  7. 每周选5篇同学博客要求所有人点评,促进学习交流,对交流多的同学奖励
  8. 督促学生做课堂笔记,结合有道云笔记电子化,并作为一个考核点
  9. 学习博客中加入每周考试错题更正情况
  10. 实践考核这块要求代码加注

教学过程中的好措施

老师教学方法中得到大多同学认可的做法有:
0. 蓝墨云班课的引入,应用

  1. 结对学习
  2. 通过博客,git交作业
  3. 内容串讲,错题讲解
  4. 课堂实践
  5. 写学习指导,督促同学们多理解、运行代码
  6. 各种学习资料的提供
  7. 做中学
  8. 过程化考核

教学反思

同学们提出来的问题有:

  1. 加强课堂控制,利用好课堂时间:后面要充分安排好每一节的内容
  2. 博客互评的参与度不高: 采纳前面学生的建议,试验了并不好,后面只让结对互评
  3. 英语出题: 工具安装错误,编译器错误即使很简单,不少同学还不看,后面加强英语的学习指导和应用
  4. 代码量与有效代码量:继续刻意练习的指导

我自己感到要加强的地方有:

  • 进度条的作用没发挥好: 时间管理,效率提升,学习过程效率提高的过程参考《构建之法》监控
  • 项目,应用上多下功夫,引入大课建设内容:吸收其他学校项目管理经验
  • 指导学生掌握学习方法,提高学习效率,引入PSP的做法
  • 加强英语的应用:基础试题,解答使用英语
  • 刻意练习
  • 鼓励多思考
  • 教学视频的学习指导

致谢

特别感谢邹欣老师(博客,微博,豆瓣).

感谢北京航空航天大学 的罗杰老师(博客),福州大学的张栋老师(博客),东北师范大学的杨贵福老师(博客),教学中跟你们学了不少方法,有你们这些负责的老师做榜样,我教学更有积极性了,看到你们的教学效果,也给我了不少压力。希望后面能越来越好!

在此,对博客园表示衷心的感谢,特别感谢园主杜勇和工程师阿春,有什么问题基本都是当天解决。

感谢贺利坚老师(博客园博客,CSDN博客,新浪博客)。贺老师向我推荐了蓝墨云班课让我的教学有如虎添翼的感觉!

感谢同学们的大力配合,与你们一起体会教学相长是一件幸福的事情!


欢迎关注“rocedu”微信公众号(手机上长按二维码)

做中教,做中学,实践中共同进步!

rocedu



如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文


posted @ 2018-01-19 07:48  娄老师  阅读(1714)  评论(2编辑  收藏  举报