构建之法2017年秋(3) 价值观 & (4)教师改进的方向

微信图片_20180803182628
  1. 价值观

在构建之法课程群中,大多数同学都会吵着说“时间不够”“作业太多”,还有“评分太苛刻”。同样的抱怨在高考时可能也有,不过教师并不响应的。对于本课程中同学们的这些反馈,教师的回应也不见得应该是关爱。

对于同学们的困惑,教师们(以及教师的领导们)也持有不同的观点,估且称之为价值观。以下是我的价值观。

3.1 尊重

在课程中,教师中对该对学生保有善意。但是善意有很多种,并不一定是宠爱,尊重也是一种善意。尊重不必一定帮助你做各种事,扶着你搀着你,替你端水斟酒,好像你是残疾人一样。尊重是视你平等为人。

尊重不是违心的肯定,无论你做得够不够好,而是认为自己的学生与其他人一样优秀,也可以完成学业,通过规定的考核。做得到底好不好,是有客观标准的,不以我对你的感情而发生任何变化。尊重甚至也不是鞭策,而是如实地向学生传达信息,传达身为教练根据经验和理论观察到的事实。尊重也不是面子,而是公开的否定和肯定。所有的作业成绩都是公开展示的,就像作业要求也是公开展示的。教师有多么差,学生们在教师这么差的情况下还完成了这么优秀的作品,这是我们期待的。学生有什么缺点,我们都(对外人?)掩盖起来,假装不存在,免得自暴其短,这不是我们期待的。

尊重基于你完成了契约约定的工作,我兑现我所承诺的每项工作的分值。而不是当工作不能完成的时候,才开始抱怨工作或者考核方法本身就是不合理的。这是借口和解释,而不是争论。在工作中也是一样,如果老板付了糟糕的工资,我们不应该少做工作以保证对等,而是应该换一家公司。契约是这个世界上少有的神圣之物,当你给出承诺,就置命运与他人之手。以任何借口破坏契约,都是把自己再次交到对方手上,任人宰割。所以,要么不承诺,要么努力去完成。只是,大家对于什么是“努力”的标准区别甚大。

经常有同学本着中华传统文化说,“对不起,老师,这次的作业如何如何,我以后会努力的。”我通常也会礼貌地回答,“没有关系,没有关系,反正分数我已经扣了。”我不会原谅你,因为你并需要我原谅,这是你的工作不是我的。千万别以为作业完成得不够好是对教师的冒犯,怎么会呢。你不完成自己的工作,我为什么要生气。

总之,尊重基于平等、公开、契约。

还有完全不同的一种尊重,不是甚至平等,而是基于仰视的。源于一个传说。据说西班牙人离间印弟安人,问,“你在你的部落有什么权利?”印弟安战士回答说,“我有冲锋在前的权利。”

flame

3.2 作弊

作弊之所以是个严重问题,首先因为这是软件工程职业教育的一部分。不少同学认为作弊是无所谓的,到了真正的工作中自然就会变好。只怕在职场中,不作弊的决心是有的,不作弊的能力则不见得同时就具备。此外,确实有不少同学对于什么是作弊并不清楚,需要实践经验。

抄袭代码和抄袭文字一般明确认为作弊,但是有相当多的同学认为复制再修改就没有问题。有相当多的同学坚定地认为在博客或论文中复制图片是“出于教学和科研的原因”,是不需要授权的。也有同学认为自己作弊不会被抓到。

有同学认为“抄代码也挺费劲的”。确实是这样,就像小偷偷东西也挺费劲,不过这并不能改变盗窃的认定。做假药的也挺费劲,你因为这就觉得有情可原了?

团队作业要求每日立会,拍照为证。上一届尹同学以学长身份发言时指出,他们都是一次立会,照出一星期的照片来。为什么作弊需要负出额外的代价,这就是原因。要想避免尹同学团队作弊,方法很多,比如要求全程录音或录像,并且发布。反正每次只有半小时而已,录音录像也并没有多大的障碍。这显然为其他诚实团队的带来了不必要的工作量,除非这些录音录像有教师或助教分析,或有同学互评。并且,这也将教师引入了狱警囚徒模式。我们花更多的时间避免违背作业本意的投机取巧,而不是把有限的精力花费在更有效的教学上。

所以,不必考虑道德,这里也有成本问题。

三次教学中,发现过文字抄袭的,照片作假的,当次作业负分。发现过一次团队代码抄袭。那一次全班整体成绩较高,在这一背景下,降整个团队分数为61分,队长60分。

作弊是一种例外,而不是常规教学的一部分。所有的检测都有些假设。我们假设学生提交的作业并不是作弊的,在此基础上开展教学,而不是先假设学生们都会骗人。验尿的设备假设提交的样品是尿液,记者把绿茶倒进检查,由于绿茶碎屑与红细胞大小相似,在仪器中查为血尿是合理结论。处理作弊,也并不一定每次都有事先规定的条款可以遵循,因为并不希望师生是狱警囚徒模式。每次处理作弊的原则是保证教学整体不受影响,其他同学不会效仿或认为不公平。同时,不必对作弊的同学动怒,也不必在他的身上花费过多的时间。道德教育是公民教育的一部分,并非软件工程课程的重点。

river

3.3 对同学们感受的回应

(1)时间少,工作量

“作业量太大了”“做不完啊”“我还有啥啥别的正事呢。”

同学们将在三两年后走向工作岗位,成为一个用工资养家糊口的人。据我所知,大部分人由于能力所限,只能从事每天8小时工作。同时据我所知,现在不少同学每日学习时间不过1小时。从1小时到8小时的过渡是怎么完成的呢?

作业量大不大,可以根据完成时间来判断。大叫着工作量太大的同学们,PSP记录表明平均每周约9小时工作量。各位同学的导师认为,每周9小时工作量太小了。同时导师们指出,同学们经常对导师说,“杨老师的课作业非常多,所以您的工作要放一放”,各位也是这样对我说的,“我导师布置的任务特别急,所以作业完成不了啊。”各位同学不太清楚我和你们的导师互相认识,还常见面吧。

(2)我还有别的正事呢

兄弟院校有同学提到,我还有某某MOOC的课要上,这也是正事吧。我的学生不太跟我说这个,因为我的回答一般是,“是正事,应该好好学,只是跟我有什么关系,为什么要跟我说这个。”你恋爱了失恋了心情不好心情太好,天太冷天太热,这对你的人生都非常重要,是很了不起的感受,不过,我一点儿也不想你分享给我。我只想评价你的作业。

A

为什么MOOC能投入时间,而软件工程课则不能呢。因为(很多)MOOC没有考核。没有考核不做度量的课程,都是耍流氓。你真以为真了几届世界杯以后踢球就能功力大进?是的,研习他山之玉是不可或缺的,不过,这是充分条件么?我对你有别的什么本事,又学了什么新的技能一点也不感兴趣,我只想评价你的作业。

(3) 嘴硬

同学们还喜欢用言辞证明,我的就是好,就是符合要求的。我想说,工程不是辩论,徒以牙尖嘴利是挣不到工资的。不过有时候,对这种态度确实挺失望的,所以连这句话也懒得说。

如果你是真心不懂,那么这是教学。如果你懂,只是想来辩论,那么就超出教学范围了。

这里本来举了一些例子,自己读了一遍,顿时兴致索然,全删了。

fish

(4) 我不会啊

我也想对上级和领导说“我不会啊”,他们会换个人来完成这个任务的。

同学们说“我不会”的时候,有时是求救,希望能越过这个障碍继续完成任务。有时,解决障碍本身的答案并不重要,而寻找答案的方法才是更重要的。以下是一例,当时在微信中答同学问。

–引文开始—-

有两位同学在遍历目录时出现了类似的问题。以下是解决的建议,不是单独外对这一特定问题,而是”我不会”,”我基础差”,出现类似的”莫明其妙”的问题该怎么办。

方法1. 读手册

[https://msdn.microsoft.com/en-us/library/system.io.directoryinfo.directoryinfo(v=vs.110).aspx]

MSDN说DirectoryInfo需要catch 3类异常。

我查了代码,你没有捕获,在调用的时候,在调用的函数外面,都没有。这就跟调用函数的时候缺了三个参数一样。

不知道如何写捕获异常是吧,这应归结为知识结构不够完整。知识结构不完整是不可能自行解决的,要么补知识结构,需要较长的时间,要么借助外界力量,这个比较快。

方法2.  问同学,看同学代码,看别人如何解决。

不要说,“这个实现不了。”谁也实现不了,才是实现不了,你实现不了,就只是你实现不了。

有人能实现,去请教。如果你连查一遍博客找谁和你用了相同的语言的时间都不想花,那就只好等别人主动帮助你了。

别人没有责任给你讲怎么办?死皮赖脸地求,请TA吃饭求,给他买各种礼物求,给他男朋友女朋友买礼物求。在芬兰有位中国小伙儿问我,没有实验经验怎么办。我说直接找个感兴趣的实验室。他说,人家根本不给没经验的人活儿干。我说,去给他们扫地,然后再说呗。我学计算机,是从给老师打字开始的,就为了能摸到键盘。

方法3. 搜索引擎

搜索,随便找了个链接进去,然后就知道应该怎么写了(bing现在有了代码示例,更加友好),这样就能得到异常被抛出的原因。在这之前,神仙也不能确认就是什么原因,这也是远程诊断和听你描述特别难以提供帮助的原因——必须先能看到展示的信息,然后才能判断。

此外,我发完消息才发现漏了一点。

我不会在有技术效果不能确认的时候,就写下那么长的核心代码。一定先把没用过的技术都试用一遍,然后再写核心代码。如果技术手段不行,核心代码不必写,因为跑不起来。

写那么长的核心代码,长达72行,却从来没有调试运行过。

这就像写了 main(){,然后就开始写代码,写了800行,再写最后一个 }。

善良的老师会说,你的匹配能力还真强呢。

不要相信这位老师,他想的就是,“不要这么做。”只是受教育理论要求,才必须友善。

–引文结束—-

(5) 我费了这么长时间做,为什么得分少?

这是典型的”没有功劳还没有苦劳么”心理。分数判定是按spec来的,就像高考就像托福机试一下。你顶烈日冒大雨前来考试,也一样可能不通过。你的努力是成绩的必要条件,不是充分条件。

事实上,同学们甚少跟我就这一点讨价还价。我听说了有些学校的同学这样做,那是因为同学们觉得跟仁慈的老师讨论可能有效益,跟我讨论这一点纯粹是浪费时间。

(6) 为什么算法实现了,却扣我分这么多?

这涉及到 核心算法与符合规范 间的分值分配。凡是参加过ACM比赛的同学和有过工作经验的同学并不存在这种疑惑,因为工作业绩是以结果度量的,而不是以什么“核心”或者任何不可见的部分声称完成来领工资的。科学、技术、工程都以可见的指标衡量,凡不能度量的,就是不存在的。

此外,本课程作业中的算法过于简单(并且不是算法课),大部分工作也是如此,此时合规是工程的基本要求。需要由外在检验符合需求,而不是你会了就行。比如作业要求是命令行参数,那么不能用scanf实现。即使你觉得命令行参数不好而scanf更好(而不是只会scanf),也需要按规范实现。

4. 教师改进的方向

B

(1)及时反馈

如果当周作为不能评出分数,一方面学生会迅速忘记当时是怎么考虑的,不利于学习,另一方面学生可能在此后没评分的几周里再次犯下相同的错误。所以快速反馈,至少下次作业以前,是必要的。

一旦有出差,批作业就非常成问题。完全不出差,又难以实现。此问题估且搁置。

(2) 避免不教而诛

初学时,学生经常陷入无所适从,做的各种事情都是错的,这样的感觉。这种感觉不利于学生建立信心和继续努力,会得出结论“我不适合学习某某学科”。理工科普遍有这种不够友好的倾向,下马威一百杀威棒能让不少同学望而却步。

有些办法能减少学生完成作业以后的挫败感(罗列条目细致会增加作业前的畏难,再讨论)。

如,在学生互评时,原则是”不得有相同分数的”,这在执行时,不如”排序,不得存在并列名次”操作起来容易。这个案例想说明,原则执行起来要比具体措施困难,虽然原则更接近动机。在部置作业时,需要考虑二者的妥协。

再如,代码参考和文档模板。邹老师提议过写一个词频统计的代码,低效能,同时代码风格较好,供学生在此基础上修改。这个还没有做。文档模板,FFL老师给出的两篇作业 软件产品案例分析 遵循了相同的模板,

要求清晰,

能够帮助学生把握回答的脉络。

引用如下。

—-FFL引文开始—-

[http://www.cnblogs.com/orzyt/p/6013963.html]

[http://www.cnblogs.com/dasusu/p/4896863.html]

大纲如下

第一部分 调研,评测

第二部分 分析

第三部分 建议和规划

细节如下

第一部分 调研,评测

评测:

软件的bug,功能评测,黑箱测试

1、下载并使用,描述最简单直观的个人第一次上手体验

2、按照描述的bug定义,找出几个功能性的比较严重的bug(至少两个)。用专业的语言描述(每个bug 不少于 40字),如有必要,可以配图

采访:

1、介绍采访对象的背景和需求(他们有没有用过这个APP或类似的APP,除了现有的功能还有别的需求么)

2、让采访对象使用10-30分钟K米的功能(请上传照片证明用户的确正在使用,远程采访的同学请让别人帮忙照相)

3、描述用户使用这个产品的过程, 用户的问题解决了么?软件在数据量/界面/功能/准确度上各有什么优缺点?用户体验方面有问题么?

4、用户对产品有什么改进意见

5、结论:经过这么多工作,你一定有充分的理由给这个软件下一个评价,请选择一个结论:

第二部分 分析

1、使用此软件的大部分功能,联系第二部分的分析,估计这个项目做到这个程度大约需要多少时间(团队人数6人左右,计算机大学毕业生,并有专业UI 支持)

此处应参照教材WSB表格

2、分析这个软件目前的优劣(和类似软件相比),并推理出团队在软件工程方面可以提高的一个重要部分(具体建议)

3、根据理解和体验,画出整个软件所有功能逻辑框图,根据重要度标识出各模块的重要度、完成度、出发点及效果

4、针对不同的维度评分,对用户体验方面、UI界面美观度、核心功能,分别打分(总100分)

第三部分 建议和规划

1、如果你是项目经理,如何提高从而在竞争中胜出?

此处应根据NABCD或“根据《构建之法》8.5小节的内容”

2、目前市场上有什么样的产品了?

3、你要设计什么样的功能?

4、为何要做这个功能,而不是其他功能?

5、为什么用户会用你的产品/功能?

6、你的创新在哪里?可以用 NABCD 分析

7、如果你来领导这个团队,会有什么不一样?

8、如果你的团队有5个人,4个月的时间,你作为项目经理,应该如何配置角色(开发,测试,美工等等)?

9、描述你的团队在16 周期间每周都要做什么,才能在第16周如期发布软件,大小里程碑绩点设定

10、作为用户,你或你们最喜欢其中什么功能?(列表123,最多选择三种,说明理由) 你或你们可能会为哪些功能付费?(说明理由)

—-FFL引文结束—-

又如,有同学在todolist、燃尽图、PSP、WBS中的功能点不对应。这不是主观故意,而是因为对工程管理缺乏了解,所以教师应该在课堂或作业中提出明确要求,而不是见了作业以后感觉“这你也不懂”。

又如,控制台和命令行参数,各个学校不止一届同学表达了困惑,应该单独撰文发贴说明这些概念,并作为作业的附件。一味指责同学们基础不好,连这个也不会,于事无补。

最后,有同学提出希望有更详细的判分依据。我曾经以ACM不公布测试用例为据否定了同学的提议。如果假设同学们是诚实的,不会直接输出测试用例期待的结果,那么详尽的判分依据对同学们更快掌握和进步会有帮助。应详尽到对文件名的要求这样的程度。我尝试了给出pull脚本,既帮助同学们检验自己的git repository是不是可以拉下来,也帮助同学们拉别人的工程参考和互评。

(3) git

git每学期都在改进,不过还是要注意 要从开始就保持检查,作为强制要求,不提交倒扣分。应对团队项目也执行这一要求。下学期我准备写个脚本每天pull一次,然后diff,把团队项目的log发到作业评分里。在教师机器本地的部署执行,实施方案还在考虑中,会重视,但是难以兑现。目前检查的措施是要求学生对演示录屏,要求学生实现快速部署对于学生经验要求高,对教师机器要求高。

(4) 整理和积累

FFL博士建议过作业加标签,还没有做,逐渐意识到必要性了。

示范和模板,积累不够。

点评同学们的作业,都留在了微信中,在博客里和作业里看不到。这样的好处是,1.节省时间,2.实时交互,3.避免同学们置之不理,4.同学们能注意到这是单独对他本人所说的,而不是拿出对别人说的话再对他说一次,感觉到被尊重。坏处是,不利于教学成果的积累。下学期,整理对话吧,仅dump记录还不够。

(5) 课堂知识结构组织需要更有条理

使用邹老师提供的PPT讲了一节,教室投影不清楚,学生休验不好; 内容太多,取舍难。按我自己拉的大纲讲,经常某一项超出计划时间很多,到最后只好后面的讲不完了,下课了之。得刻意控制一下每点的时间花费。

微信图片_20180803182614

——————————————————

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/]

//[http://blog.csdn.net/younggift]

//[http://giftdotyoung.blogspot.com]