现代软件工程讲义 0 教学方法 - SoftwareTeacher - 博客园

产品分类

新闻资讯

联系我们

人才招聘

当前位置:主页 > 人才招聘 >

现代软件工程讲义 0 教学方法 - SoftwareTeacher - 博客园

2019-10-06 08:36

这门软件工程课的教学方案在这里. 根据学生和学校的具体情况, 可以进行调整。 这篇文章主要讨论教学方法-- 怎么有效地教这门课。为了达到这个目的,我们要讲在这个课程中建立什么样的师生关系,怎么样让学生投入进课程中,老师采用什么样的教育方法,如何判分,如何让学生学到软件工程的技能。不成关系的蜡烛、春蚕和园丁?一说到老师,很多人就会心情激动,把老师比作燃烧自己的蜡烛,吐丝的春蚕,且不说现在的老师早就不认可这种形象,那么学生是种关系这里面的什么东西呢?另一个比喻是园丁和树苗, 园丁多么崇高啊! 杏坛讲学, 桃李满天下... 其实未必,龚自珍的《病梅馆记》也描述了园丁的不当行为。当树苗有自己的思想的时候,树苗有时候也不喜欢 园丁:老师,我的家人已经给我找到工作了,未必和你的专业相关,我就差一个学位证就可以上班了。我花钱来上学,就是为了得这个证。 你能不能给我过了?有不少同学认为, 这种关系挺好的, 老师像哥们一样来关心你。当老师在第一节课说我们一起来学习软件工程的时候,很多同学幻想和老师能形成平等的 朋友关系。 其实,平等的朋友这种亲密关系很少存在于师生之间。首先, 你上完大学要找工作,老师已经有很稳定的工作了。 一起学习只不过是套话! 其次,老师要为自己工作与生活奔忙,没有时间和几十个学生做亲密朋友; 最后, 大学的学习就是有难度的, 就是要付出足够的努力才能及格。老师就是要评判你的努力程度, 给你不留情面地打分, 一个幻想中的 "哥们儿" 帮不了你。你上课偷懒,逃课,不交作业, 你的朋友看到后会怎么样?你的老师会有一样的反应么?保姆、哥们都是熟人, 在熟人社会的关系网中,你可以撒娇,本来可以上网搜索到的信息,偏要问老师和助教(希望他们马上给答案),不按时交作业,撒个娇就能混过去; 在团队项目中偷懒,期望大家有都是哥们,帮我一下吧的热心肠...这是害了你。成年人应该要适应陌生人社交,遵守共同的规矩,按契约精神办事 -- 大家可以看看熟人社会和陌生人社会的区别。一些读者幼稚地认为老师和学生的关系未必会堕落如此, 其实还有更差的,大学老师在学校的教学任务是按照课时来计算的, 只要课时固定, 那么学生太多反而对老师是负担。一个老师如果教得好, 很多学生来选课, 那么这个老师反而吃亏!如果老师严格要求,给差生不及格的分数,她还要准备补考的各种材料,这更浪费了老师的时间。 所以很多大学口头声称鼓励选课, 老师热爱教学...", 其实都是烟雾弹。 对于很多管理者来说,最好的情况是:这种情形类比于狱警/犯人的场景是很贴切的, 就是狱警希望自己上班时间管的犯人越少越好,越老实越好!一个餐馆的老板当然希望食客越多越好, 但是狱警却不会这么想。大学生可以问自己的老师 您希望有更多的学生来上这个课么?如果老师不希望, 那么,你的老师对这个课的感情比不上餐馆老板对餐馆的感情,这更像一个 狱警/犯人 的关系。 ;)大家可以从各种各样的健身馆中看到这样的关系,像健身、瑜珈、跑步等等。 在这种关系中, 是谁想提高自己水平?是那些学员, 这些学员的想法得足够强烈, 他/她才会花钱去参加这样的健身活动。 在健身活动中, 谁要做各种运动, 流汗呢?是学员。 谁在这个活动中对别人指指点点, 提出各种要求,鼓励别人更加努力? 是教练。教练的资质, 教练本身应该在所教的项目中是很有经验的身体力行者。 如果我光看了少量瑜珈的书籍和录像, 或者得到某老师的PPT (如果瑜珈老师用PPT 的话), 我然后就照本宣科去教瑜珈, 虽然我讲的话和一个资深瑜珈教练的话没什么区别 现在开始练习冥想, 要尽量让自己内心安静下来,要保持呼吸均匀, 把精神集中在丹田 可以肯定留在我这个班里的学生不会很多。如果大学里能确定下教练和学员的关系就好办了。 每一个来学习的学生,都是想学好才来的。各人条件不同, 学好的目标也未必相同。有些同学想成为世界一流的软件工程师,那老师就会以世界一流的标准来要求学生;有些同学只想拿一个及格的分数, 那老师也会告诉他如何才能及格,并严格执行评分标准;有些同学想在某个领域深造,老师也会提供相应的指点。 但是,学生别想只付出 "及格" 的努力,却期望收获优秀的结果,或者没有付出足够的努力,却期望老师最后放水让自己及格。健身教练/健身学员的关系对教练也有要求, 最基本的就是及时给反馈。很多老师给同学留下语焉不详的作业, 就听之任之了,美其名曰希望学生自主学习,自我提高, 这是不合格的教练! 想象一下,一个教练在16周课程中, 只给学生两次反馈(期中,期末考试), 这是合格的健身教练么? 这种 教练在大学里是不是很常见呢? 如果你经常去健身俱乐部练习各种器械和套路,你希望你的教练何时给你反馈,纠正你的动作,给你鼓励? 如果你的教练最后说, 你三月前的某个动作不对,我没有提醒你,你也没有改正,导致你现在的肌肉损伤..., 你能回忆起这个动作么?觉得这个教练合格么? 当老师很忙的时候,我们希望助教能担负起及时给反馈的重任。很多人希望老师和学生之间特别和谐,是否相安无事就是最好?古希腊学者普罗塔戈说过:「头脑不是一个要被填满的容器,而是一束需要被点燃的火把。」那火把在什么时候会被点燃?那么最好的情况是不是老师和学生的思维互相撞击,蹦出火花,一起燃烧?这种情况,会在餐馆/食客, 路人甲/路人乙,狱警/囚犯的模式下发生么?很显然,教练/学员的关系是最有希望撞击出火星的,老师和学生之间要有足够的工作量,足够的张力。为学要不疑处有疑,有质疑,有冲突,有鼓励,才会出现火花。如果老师(一个活人)没有给学生及时反馈,也没有和学生进行其他交流,发生思维撞击,那么,这样的老师是否就是 路人甲?他的教学和网上的视频有什么区别呢?- 练习可能没有用。 一些同学看了理论,觉得自己懂了,就不练习,找一些借口 我敲键盘不快。 其实任何人都可以通过正确的训练来改变自己,关键是要投入时间练习!- 练习并没有得到反馈和思考。一些同学做完了当前的题目,就高高兴兴地结束了。但是这些题目有很多扩展方向,他们并没有去做,老师给了反馈,也不理会, 这样也不会得到快速提高。- 学习的动力(想学么?)①如果学生的目的就是找到好工作,那么就让有实际经验的工程师告诉他们,目前他们的水平到底能不能通过企业面试。② 现在的学生多才多艺的很多,学生上学之初对大学还是有很多希望的,但是到了大二大三,大部分同学都是动力不高。怎么唤起他们的动力? 能否让他们不忘初心,从自己的努力的经历中获得新的动力?娄老师让学生回忆自己学习某种技能的过程,这是一个有趣的办法。- 反馈:及时的反馈,老师一个人不能给几十个同学及时的反馈,怎么办?通过结对编程 (马上有一对一的反馈),和团队项目的Scrum (每天的反馈),助教的点评(每篇作业后的点评,每周发布学生进展,最后总结为千帆竞发图)。(举例:娄老师的作业, 张老师的作业)所以在《现代软件工程》 这门课中, 我安排了个人项目, 两个结对项目, 让大家充分有时间把个人技术和一对一的合作技术做好, 然后再开始团队项目。 一个理想的流程应该是这样://把原则应用到各种情境场景中,能开发各种类型的应用程序,和不同类型的人合作分析:是要将知识的某些讯息,所包含的成分、元素、关系、组织原理等等分解出来,重新加以组合,并厘清之间的关系; (Analysis)很多学生一听说我给他们安排的学习计划, 第一个反应往往是 - 负担太重了!让我们回到健身馆,如果一个体质正常的青年想健美, 教练安排他举杠铃, 他会说什么呢?不会是杠铃太重, 我走了!负担是相对的, 这要看大家要跟谁比了。 我在清华大学上课的时候, 也有学生反映负担太重, 我只好和他们一起回忆清华大学校长及各级领导提出来的目标 建设世界一流大学" .如果要建设世界一流大学, 那要跟世界一流大学比。在软件和软件工程方面世界一流的大学是哪一家呢? 我想唯有跟卡内基梅隆大学 (CMU)相比,才能不辱没清华大学的名声。所以, 不是我要为难大家, 而是校领导的意思, 同学们可以找校领导说 我们不想成为世界一流大学, 成为五道口一带的二流大学就可以了。 如果领导同意了, 我当然可以降低负担, 而且我还可以把师生关系调整为 哥们/哥们, 要混还不容易吗?!把压力当朋友,很多读者看到这里, 会问: 这门课貌似有很多作业和规则,不讲情面的老师,是否压力很大?人们对待压力主要有两种态度除了态度之外,我们还要有具体的手段来帮助我们卸掉压力,或者,把压力转化为令人心情愉快的动力。 就像上面提到的演讲所言, 如果我们能在有压力的课程中互相帮助, 从老师,业界专家,学长,学弟学妹那里得到帮助, 并且反过来,帮助别人,那么,我们学习的过程就会有很多乐趣,这些乐趣会从心理上和生理上让我们更好地进步。这也是为什么我们的课程中设计了结对项目, 团队项目,互相的交流,点评,帮助环节。这样的分数体系看起来非常和谐, 但这不是软件业的实际情况.我们任选一种软件类型,例如字处理软件, 最好的软件在市场上有多少份额? 第二名占有多少?第三名呢? 第四名? 谁知道字处理软件市场的第四名是谁? 搜索引擎呢?第一名的占有率是多少? 第二, 第三, 第四呢?第四名的软件也是由优秀的软件人员开发的, 他们也许加班更多,那为什么只有那么少的份额? 这公平么?在很多作业中,我或TA会写一个比较平庸的解法 (例如用冒泡排序或线性查找)参加作业评比。 这个平庸的作业会得0分, 那比这个还差的作业, 就会得负分,从-1, 2, 3 类推下去.下面是两个评分体系的比较:这样公平么?很多人会问。如果一个同学写了没有任何bug 的程序, 得到10分, 另外的同学程序有 1 个bug, 得到9.5 分, 程序编译都不过的同学, 也得6分, 那你觉得这样对写了全对程序的同学公平么?如果一个同学的程序连普通的冒泡排序都比不过, 老师和助教在花时间陪他玩,还有同学抄袭,耍赖不交作业,这些同学在无端耗费大家的时间, 这样的人不得负分得什么?上《现代软件工程》 的同学, 都是大三到研一的同学,应该具备基本的学习能力和开发能力,软件工程和其他类的工程 (如航天工程, 化学工程) 不一样, 我们每天都可以用到软件工程的产物 (软件),搭建, 学习一个软件开发平台比航天化工要容易很多 (注: 在自家后院放二踢脚不是航天工程), 相关的学习资料也是非常容易获得。 在这个情况下,学生们可以在做的过程中学习, 这也叫做中学.做了, 有疑问, 再问老师, 问专家, 这样学习的效果会好很多。 我为这门课准备了二十本参考书 (对, 20 本), 同学们平时可以多看书。在这门课中, 我鼓励学生做自己决定的项目, 但是要求他们要做真实的项目有真正用户的软件。那些 经典的项目, 例如图书馆管理系统, 学生学籍管理系统等,如果没有大量模拟用户,不练习一些实战的功能,是不符合要求的。项目要有活的用户, 只有活的用户才有活的需求, 才有活的场景, 活的测试用例。 只有活的用户才决定同学们写的软件是否值得使用, 有些团队写的小软件很好用,在合适的用户群中引起共鸣, 短短时间内, 就会有几千到几万个用户, 也有的团队费了老鼻子劲, 写出来的东西用户量小于10, 自己团队成员包括在内。 这些不同的用户数量会迫使项目团队反思当初在需求分析, 设计上的问题。 另外这门课并不是算法竞赛, 或者代码集中营, 大家比的不是如何快速敲打出某个算法, 而是如何在有限的时间内交付有价值的软件给特定的用户。 真实这一条件也促使大家做 现实的项目和项目管理。 很多学生有宏大的梦想,但是在短短的 8 周团队项目时间内, 甚至短短的 16 周课程时间内, 他们发现宏大的构想被自己程序的bug 搞得千疮百孔, 轰然倒地。我以前和一位老师合作过,他看过全部的教程, 也参与过scrum 等开发过程。 等到他上课的时候, 原计划是学生要做为期 10 天的冲刺,做出一个版本。 但是学生抱怨:老师我们还要做其他社会活动,找工作...于是他减少到 7 天。然后学生继续抱怨求情, 最后他减少到 3 天。 但是,3天的冲刺能做什么呢?所有的教学内容都有保存并能检索到,能按照既定的流程讲完全部内容,对整个教学过程有一定的监测,能发现问题。上个学期怎么教的,这个学期还能绝大部分重复下来。这个基本也叫 可重复级。在前面的基础上,能把各种关键因素量化, 每个重要的作业都有数量化的指标,每年衡量并找到改进的办法。 教学流程趋于稳定,提高管理的精度,降低教学活动在质量上的波动。除了教学的内容, 还开始处理学生学习的心理问题。在前面的基础上,能充分利用各种信息,对教学过程中可能出现的问题加以预防,能主动改善流程,运用新技术和方法,不断优化教学过程。 除了教学内容, 教学中师生关系, 学生的学习心理也达到优化的阶段:学生不再是 老师要我学, 而是 我要学,我希望老师给更多挑战,我也可以和老师平等探讨各种问题。但是从课后的自我反馈来看, 学生往往在某一门程序设计语言很有收获, 为什么呢?第一是因为这门课的个人项目和结对项目让他们有充分的机会学习和巩固关于某一语言的知识;另外, 他们第一次把某一门语言用到了一个有份量的实际项目中去, 从而深入地了解这个语言的特性。这可以说是现代软件工程的一个好的副作用。

地址:广东省广州市天河区88号 版权所有:Copyright © 2002-2019 澳门永利注册官网 版权所有 Power by DeDe58

技术支持:织梦58

扫一扫,加关注