zoukankan      html  css  js  c++  java
  • 2016-2017-2 《Java程序设计》预备作业2总结

    2016-2017-2 《Java程序设计》预备作业2总结

    古希腊学者普罗塔戈说过:「头脑不是一个要被填满的容器,而是一束需要被点燃的火把。」

    在对计算机系的学生情况的调查中,我说:

    最近几年,我有一个深刻的体会:了解学生是上好课的一个基础。如果老师不了解学生的基础,每周的学习情况,学习状态,学习效果,那么,不少同学从第三周就开始跟不上学习进度了,然后就放弃学习了,等着期末背背就过关了。这样四年的学习效果就像大学生上课为什么一定要认真听讲?所说的 有很多人上完了大学,思考方式还是那种「原生态」的模式:

    所谓的原生态就没有经过系统刻意地训练,没有经过斧正,而是任由随机事件随机冲击产生随机结果的状态。如果你从大学毕业的时候,你的大脑里没有留下任何你的专业领域带给你的精神、信念、理论和体系,只是比走进大学的时候老了四岁,那你的思考方式很可能就是原生态的。

    与个别老师凭感觉说「我们的学生一年不如一年,或某届学学生不行」不同,我收集不少教学数据,我的结论是:我们学生的素质是逐年提高的。从2013年起,数据说明,上我课的学生总体上一届比一届学生强,教学效果一年比一年好。

    说我们的学生素质高,一方面是我们的学生的入学成绩总体一年比一年高,除了上课,其他的就只能从一些学科竞赛,运动会,辩论赛,四大歌手,毕业晚会上零星的感受到部分同学的优秀。

    为下学期《Java程序设计》课程做准备,我设计了三次预备作业来了解学生,督促学生:

    • 预备作业01:你期望的师生关系是什么?: 让同学们了解「Trainer/Trainee」是最好的师生关系,让同学们对即将到来的翻转课堂有个心理准备,让同学们对即将到来学习任务,学习压力有个心理准备,副作用是让同学们学会了Markdown。

    • 预备作业02 : 体会做中学(Learning By Doing):让同学们了解「做中学(Learing By Doing)」的学习方法与刻意训练在技能获取中的重要性,进一步理解有学习压力的必要性,副作用是让同学们展示自己,老师了解学生,同学们之间加深交流了解。

    • 预备作业03:课程基础:利用搜商,打下课程的Linux基础,初步体会什么叫学习上的举一反三,融会贯通。老师教十个你会六个就及格了?不,应该是老师教十个,你会一百个个乃至更多,至少具备这样的潜能。

    预备作业02 : 体会做中学(Learning By Doing)的内容如下图所示:

    这周的学生作业,福州大学的张栋老师(博客)对作业评论说:

    娄老师这个博客作业的题目,我觉得出的真心好。一般我们都是在课程开篇作业:「对课程了解多少,对课堂有什么期待。」 学生没上过课,也很难说出有什么了解和期待,似是而非的应付了。而且是以课程为中心的视角。娄老师这个题目,以学生为中心的视角,开篇作业应该是学生展示自己,老师了解学生的过程和目的。完全活跃和打开了学生的心扉,认识了不一样的学生和不一样的武艺。还蕴含了 增强学生自己体会能力之不易的意识。 之前就默默想引用到 下学期课程在寒假里的开篇作业了。

    JUSTPUB的周筠老师(知乎,微博,豆瓣)说:

    我看了你的学生的多篇博客,被这么富有启发性的问题引出的自述吸引了,真棒!

    微软的邹欣老师(博客,微博,豆瓣)建议说:

    标准如果稍微低点,「超过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:钢琴

    同学们分享了他们获取这些技能的学习经验:

    • 坚持,毅力
    • 压力竞争促进学习
    • 主动思考,多方比对验证
    • 兴趣
    • 刻意练习
    • 做中学
    • 要总结
    • 反馈
    • 量变引起质变
    • 严师出高徒
    • ......

    这一次我系统了解到了信安系同学的优秀,感觉不努力教好他们,任由他们上完了大学,思考方式还是原生态模式,作为老师真是对不起良心。同学们掌握了做好一件事情的正确方法,学好专业课中的程序设计不是一件难事。

    我相信这次作业不但让老师了解了学生,也让同学们有了更深入的了解。自我感觉良好一下,我认为老师当教练是实现「以学生为主体,以老师为主导」的最好的方法,这次作业是一个很好的范例。

    我们学校要建设「特色突出,水平一流」的学校,我们就要教出「特色突出,水平一流」的学生。这几年我一直身体力行实践「做中学」,在以下几个方面进行刻意训练:

    • 五笔:要求学生会五笔,老师先学会
    • 减肥:五个月减肥30多斤
    • 乒乓:刻意训练在技能获取上的重要性
    • 背单词:学好英语,多一个世界

    同学们通过自己的技能获与老师有了共鸣,那么问题来了,《Java程序设计》要怎么学?一定理解编程是用来解决实际问题的,可以从解决小问题开始,不停的用,最后好成绩只是个副作用。
    邹欣老师(博客,微博,豆瓣)在软件开发不是闭卷考试一文中说:

    实际的项目中的问题,都是有解的,而且大多数是多项式时间内有解。

    我们在现实项目中的 「解题能力」,取决于下面这些因素:

    1. 对问题的了解
    2. 对技术的了解
    3. 估计任务的能力
    4. 沟通和管理风险的能力
    5. 拒绝的能力

    我希望通过我们课程的训练让大多同学掌握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”微信公众号(手机上长按二维码)

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

    rocedu



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


  • 相关阅读:
    使用CustomValidate自定义验证控件
    C#中金额的大小写转换
    Andriod出错之Unable to build: the file dx.jar was not loaded from the SDK folder!
    VC 编写的打字练习
    机房工作笔记Ping只有单向通
    web服务协同学习笔记(1)
    Dll 学习3 将MDI子窗口封装在DLL中
    机房工作学习文件共享
    Andriod出错之Failed to find an AVD compatible with target 'Android 2.2'
    Andriod出错之wrapper was not properly loaded first
  • 原文地址:https://www.cnblogs.com/rocedu/p/6228084.html
Copyright © 2011-2022 走看看