2016-2017-2 《Java程序设计》预备作业2总结
古希腊学者普罗塔戈说过:「头脑不是一个要被填满的容器,而是一束需要被点燃的火把。」
在对计算机系的学生情况的调查中,我说:
最近几年,我有一个深刻的体会:了解学生是上好课的一个基础。如果老师不了解学生的基础,每周的学习情况,学习状态,学习效果,那么,不少同学从第三周就开始跟不上学习进度了,然后就放弃学习了,等着期末背背就过关了。这样四年的学习效果就像大学生上课为什么一定要认真听讲?所说的 有很多人上完了大学,思考方式还是那种「原生态」的模式:
所谓的原生态就没有经过系统刻意地训练,没有经过斧正,而是任由随机事件随机冲击产生随机结果的状态。如果你从大学毕业的时候,你的大脑里没有留下任何你的专业领域带给你的精神、信念、理论和体系,只是比走进大学的时候老了四岁,那你的思考方式很可能就是原生态的。
与个别老师凭感觉说「我们的学生一年不如一年,或某届学学生不行」不同,我收集不少教学数据,我的结论是:我们学生的素质是逐年提高的。从2013年起,数据说明,上我课的学生总体上一届比一届学生强,教学效果一年比一年好。
说我们的学生素质高,一方面是我们的学生的入学成绩总体一年比一年高,除了上课,其他的就只能从一些学科竞赛,运动会,辩论赛,四大歌手,毕业晚会上零星的感受到部分同学的优秀。
为下学期《Java程序设计》课程做准备,我设计了三次预备作业来了解学生,督促学生:
-
预备作业01:你期望的师生关系是什么?: 让同学们了解「Trainer/Trainee」是最好的师生关系,让同学们对即将到来的翻转课堂有个心理准备,让同学们对即将到来学习任务,学习压力有个心理准备,副作用是让同学们学会了Markdown。
-
预备作业02 : 体会做中学(Learning By Doing):让同学们了解「做中学(Learing By Doing)」的学习方法与刻意训练在技能获取中的重要性,进一步理解有学习压力的必要性,副作用是让同学们展示自己,老师了解学生,同学们之间加深交流了解。
-
预备作业03:课程基础:利用搜商,打下课程的Linux基础,初步体会什么叫学习上的举一反三,融会贯通。老师教十个你会六个就及格了?不,应该是老师教十个,你会一百个个乃至更多,至少具备这样的潜能。
预备作业02 : 体会做中学(Learning By Doing)的内容如下图所示:
娄老师这个博客作业的题目,我觉得出的真心好。一般我们都是在课程开篇作业:「对课程了解多少,对课堂有什么期待。」 学生没上过课,也很难说出有什么了解和期待,似是而非的应付了。而且是以课程为中心的视角。娄老师这个题目,以学生为中心的视角,开篇作业应该是学生展示自己,老师了解学生的过程和目的。完全活跃和打开了学生的心扉,认识了不一样的学生和不一样的武艺。还蕴含了 增强学生自己体会能力之不易的意识。 之前就默默想引用到 下学期课程在寒假里的开篇作业了。
我看了你的学生的多篇博客,被这么富有启发性的问题引出的自述吸引了,真棒!
标准如果稍微低点,「超过60%的人」,可能就会有更多的学生敢于表达自己的优点了...
即使这么高的标准,结果都令我大出意外。以超过周围90%的人为标准,信安系15级的同学们各种了不得,各种高手涌现:
- 145209: 系四大歌手冠军
- 155201: 多才多艺
- 155202:踢毽子
- 155205:多才多艺
- 155207:钢琴
- 155208:乒乓球
- 155210:游戏,五子栱
- 155211:滑雪,古筝
- 155212:学习能力
- 155213:双截棍
- 155214:足球
- 155215:演讲与辩论
- 155216:弹跳的爆发力
- 155219:琵琶
- 155220:乒乓球
- 155222:足球
- 155223:羽毛球
- 155224:羽毛球,刻章
- 155225:书法
- 155226:唱歌,软件使用
- 155227:转笔
- 155228:长跑,多才多艺
- 155229:舞蹈,钢琴
- 155230:游戏
- 155231:葫芦丝
- 155232:跑步
- 155233:动手实践能力
- 155236: 游戏
- 155237: 多才多艺
- 155238:羽毛球,书法,游戏
- 155239:音乐,吉它
- 155301:乒乓球,游戏
- 155302:心算能力
- 155303:二胡
- 155304:排球
- 155305:钢琴
- 155306:主持
- 155307:英语,游戏
- 155308:水彩画,体育运动
- 155309:球类,手游
- 155310:素描
- 155311:羽毛球
- 155312:游泳
- 155313:钢琴
- 155315:英语
- 155316:柔韧性
- 155317:中医
- 155318:理解力
- 155320:葫芦丝
- 155321:长笛,英语听力
- 155322:太极,多才多艺
- 155323:游戏
- 155324:游戏
- 155325:绘画
- 155326:绘画
- 155327:绘画
- 155328:电子琴,英语
- 155329:销售
- 155330:摄影
- 155331:电子竞技
- 155332:书法
- 155333:历史
- 155335:方向感
- 155336:足球
- 155337:曳步舞
- 155338:钢琴
同学们分享了他们获取这些技能的学习经验:
- 坚持,毅力
- 压力竞争促进学习
- 主动思考,多方比对验证
- 兴趣
- 刻意练习
- 做中学
- 要总结
- 反馈
- 量变引起质变
- 严师出高徒
- ......
这一次我系统了解到了信安系同学的优秀,感觉不努力教好他们,任由他们上完了大学,思考方式还是原生态模式,作为老师真是对不起良心。同学们掌握了做好一件事情的正确方法,学好专业课中的程序设计不是一件难事。
我相信这次作业不但让老师了解了学生,也让同学们有了更深入的了解。自我感觉良好一下,我认为老师当教练是实现「以学生为主体,以老师为主导」的最好的方法,这次作业是一个很好的范例。
我们学校要建设「特色突出,水平一流」的学校,我们就要教出「特色突出,水平一流」的学生。这几年我一直身体力行实践「做中学」,在以下几个方面进行刻意训练:
同学们通过自己的技能获与老师有了共鸣,那么问题来了,《Java程序设计》要怎么学?一定理解编程是用来解决实际问题的,可以从解决小问题开始,不停的用,最后好成绩只是个副作用。
邹欣老师(博客,微博,豆瓣)在软件开发不是闭卷考试一文中说:
实际的项目中的问题,都是有解的,而且大多数是多项式时间内有解。
我们在现实项目中的 「解题能力」,取决于下面这些因素:
- 对问题的了解
- 对技术的了解
- 估计任务的能力
- 沟通和管理风险的能力
- 拒绝的能力
我希望通过我们课程的训练让大多同学掌握Java技术,学会了解问题,通过PSP方法掌握估计任务的技能,通过团队增强沟通和管理风险的能力以及学会拒绝。
邹欣老师(博客,微博,豆瓣)在技能的反面 - 魔方和模仿中说:
Bill 说技能的反面是 ”Problem Solving” – “解决问题”, 这个听起来有点绕, 我们看看IT 人士熟悉的一个例子吧。 一个IT 专业的大学生来面试, 简历上写 “技能: 精通 Visual Studio C# 编程”。 于是面试官请他实际用VS IDE 写一段程序 (冒泡排序)。 一个 “不精通”的面试者的编程过程实际上就是一个“解决问题”的过程。 例如:
- 嗯, 怎么开始一个C# 的命令行程序呢?
- 定义数组是怎么弄的? 是 “int [] arr” 还是 “int arr[]”, 还是 ArrayList, 还是 Array
。 哦, 我平时都是上网查的. 哦, 我不知道还有 MSDN 网站。 - 嗯, 为什么编译没过呢, 哦, 这里少一个分号。
- 嗯, 怎么设断点? 怎么定义命令行参数? 额, 我要查一查…
你发现他把时间都花在「解决 (低层次) 问题」上了, 你想考察的「算法技能」、 「C# 程序设计技能」 都无暇顾及。注意,这是在他认为非常精通的编程工具和编程语言中出现这样的问题。 你要这样的员工么?
通过身体力行实践「做中学」,我深刻理解了「刻意训练」在技能获取中的作用,同学们的技能获取经验也体现了「刻意训练」。
邹欣老师(博客,微博,豆瓣)下面的一句话,有没有「刻意训练」的经历的人体会是不一样的:
那怎么提高技能呢? 答案很简单, 通过不断的练习, 把那些低层次的问题都解决了, 变成不用经过大脑的自动操作, 然后才有时间和脑力来解决较高层次的问题。
对于编程技能,我对我的前驱课程《程序设计基础(C语言程序设计)》做了个调查。我不得不说,非常感谢徐小青老师给我打下了良好的基础。我们的同学大多在《程序设计基础(C语言程序设计)》中有了4000行到5000行的代码经历。我想在《Java程序设计》中再有5000行以上的刻意训练,实践提高,解决同学们在信息安全专业的学习中程序设计能力不达标的问题。这样信息安全专业的学习才有可能做到时水平一流。
当然,我提了几个《程序设计基础(C语言程序设计)》学习中我认为必须掌握但同学们觉得较难的问题:
- 学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?
理解复杂声明非常重要,数组指针,指针数组;函数指针,指针函数的概念是基础,其他的复杂声明都是这四个的组合。后面的课程中有这样的声明:
void (signal (int signo, void (func)(int))) (int);
signal是个什么东东?以前我在课上提问,能正确回答的几乎没有。
考研中也常有这样的考题:
((x[4])())[4]这个声明中的x是什么东东?
- 学过了C语言,你明白文件和流的区别和联系吗?如何区分文本文件和二进制文件?如何编程操作这两种文件?
int main(){
printf("Hello World");
while(1);
}
不理解流与文件的区别,不知道缓冲区,这个代码的结果大多学过C的回答不对。我们后续专业课程需要的基础没打好。通过fopen/fread/fwrite/fclose掌握C编程中「初始化,完成业务,清理工作」的模式非常重要,文本文件和二进制文件的区别以及如何用I/O函数读取是最常用的,我监考过李晓东老师的C语言课程,有这方面的考题,我相信老师是讲过的,学生的基础还是不够好,后面我会写一篇C语言与Java对文件处理的对比的博客对学生指导。
- 学过了C语言,你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?
- 在C语言里面,什么是模块?你写过多个源文件的程序吗?
- 学过了C语言,你知道什么是「高内聚,低耦合」吗?这个原则如何应用到高质量程序设计中?
C语言解决问题的基本方法大多同学没有掌握,比较主动同学搜索一下,但理解不深。同学们几乎所有的代码都在一个main函数中,不知道一个XXX.c就是一个模块,没有多模块编程的经历,更不用什么「高内聚,低耦合」以及如何实现了。我建议同学们抽空读读王垠的编程的智慧。感谢迅雷的范飞龙博士(博客,微博)的推荐和对我们学生的悉心指导。
- 学过了C语言,你如何把数组A的内容复制到数组B中?如何查找整数数组A中有没有数字5?如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。
学过Java的同学都知道,Java水平的高低和对Java API的熟悉和应用能力紧密相关,在《Java程序设计》课程中我专门写了学习指导博客积极主动敲代码,使用Junit学习Java程序设计。
C语言是一个比较简单的程序设计语言,其标准库函数我全部测试过,掌握了用法,这是我学习的众多编程语言中唯一的。《Java程序设计》课程上了十多年,Java也用了十多年,不少API我都没用过。
「不要重复造轮子 Stop Trying to Reinvent the Wheel」可能是每个程序员入行被告知的第一条准则。这八十多个学生只有一个在拷贝数组是调用了一下strcpy。可以用qsort排序,用 bsearch查找,大多同学是不知道的,告诉他们有这些函数,函数的声明不少是看不懂的,更不用说是应用了。
- 你知道什么是断点吗?给出自己调试程序的例子。
每年毕业设计验收,大创项目验收都有学生找我,不少问题单步跟踪一下就出来了。调试器不光用来除错,还是很好的学习工具,我在课上写过一篇代码驱动的程序设计学习来教同学们如何用gdb来学C语言,基本的调试技能半小时就能学会,参考一下我编写的Linux下C程序设计实验指导, 举一反三在四年的学习中都受益,学会对自己Debug将终身受益。
为了考查学生的实际情况,我留了这个作业:
- 写一个程序,统计自己C语言共写了多少行代码。
统计代码行数,行数不包括空行 (一行中没有字符或只有tab,空格), 注释行 (没有代码, 只有注释),不少同学说代码都丢了,那么可以试试统计这里的单文件c c++库
我们也要培养专门人才,我留了这个作业:
- 毕业后大多数人从事的工作的要求是“提笔能写,开口能说,问策能对,遇事能办”,非常重要的技能是公文写作能力,你觉得自己写作能力如何?要怎么提高?
公文写作的重要性,同学们也许参加工作后才能体会,毕业生调研,不少人后悔没选姬瑞环老师的课,说在学校听说姬老师要求严格。很多人毕业了才能感受到要求严格的老师才是好老师。
写作技能也要训练,我们课上要求每周至少交一篇学习博客,如果能把作业按公文的要求来做,我相信同学们毕业时收获会不一般。
欢迎关注“rocedu”微信公众号(手机上长按二维码)
做中教,做中学,实践中共同进步!
-
版权声明:自由转载-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文”