软工+C(6): 最近发展区/脚手架
教育心理学里面有提到“最近发展区”这个概念,这个概念是前苏联发展心理学家维果茨基(Vygotsky)提出的,英文名词是Zone of proximal development
,摘录维基百科上的介绍如下:
The zone of proximal development, often abbreviated as ZPD, is the difference between what a learner can do without help and what he or she can do with help.
该理论认为学生的发展有两种水平:一种是学生的现有水平,指独立活动时所能达到的解决问题的水平;另一种是学生可能的发展水平,也就是通过教学所获得的潜力。两者之间的差异就是最近发展区。教学应着眼于学生的最近发展区,为学生提供带有难度的内容,调动学生的积极性,发挥其潜能,超越其最近发展区而达到下一发展阶段的水平,然后在此基础上进行下一个发展区的发展。
为什么要提到最近发展区呢?这就要说到在班级博客教学中的一个重要的方面:点评。点评一般由教师/助教 构成,足够的点评覆盖率,持续跟进和及时反馈对学生来说是重要的,反馈让学生处于一种diff状态,diff状态带来学习中的“发展区”:已有知识、做法和新知识、做法之间的边界,此时学生会review这个边界。
既然点评是重要的,教师/助教应该做到持续跟进和及时反馈,但怎样做到这两点在实际中会遇到一些具体的问题。例如,软件工程的结对编程项目的一次作业周期是一周,如果大家都在截止日期最后1天才去点评,也许等发现问题的时候已经没有足够的时间及时发现题目设计上的问题,学生实践中的困难等。而且堆积到最后一天点评,也会有量大的问题。因此,我认为从环节发布开始,就可以每天固定一些时刻去做增量点评,并且在前1/2天及时发现环节设计上需要做设计变更的地方,教师/助教需要有意识的实施这个过程。
发现具体问题,就可以和相关的知识、方法联系上来。让学生在反馈中再次强化对知识、方法具体落地的认识。例如,助教发现git提交代码的编码规范、文件组织等工程问题:
“强烈建议大家在自己的代码中写明readme,介绍一下自己的这个工程中哪些是有用的代码,哪些是自己用来测试的代码,哪些文件夹都干什么的,大家也要将自己的文件命名为有意义的文件名,否则大家提交了很多代码,而我需要找来找去,也并不知道我想找的文件在哪里。不知道你们过了两周时间再看自己的代码,是否也会和我有同样的感受[微笑]。”
此时就可以顺手引入“编码规范/风格”的问题,事实上,无论是软件工程的学生,还是有经验的工程师,都会经常陷入:先写出一堆随意的代码,命名了一堆随意文件夹名字之后,再去review编码规范,此时才跟根据编码规范做整理(refactor),经过多次磨合后,一个团队的成员对这点都形成习惯后,才内化成一种肌肉记忆,上来就相对规范。
发现具体问题,可以通过设计/建立新的环节来落地。根据我个人目前的点评经验,及时的博客点评可以大概收获30%左右回复率,对有回复的博客给予恰当的改进意见,有较大比率会有改进行动。之所以说是要有恰当的改进意见/环节设计,是因为学生在很多地方存在对需求的理解误区,因此需要把误解/模糊的地方通过改进意见/环节设计 去具体化。
例如,在一次结对编程单元测试这个环节,虽然题目经过设计,助教也做了单元测试模版,但是在沟通中还是出现了漏洞,大家在四则运算计算模块的单元测试应该针对:add/sub/multi/div, 还是针对:calc(string exp)这点上出现理解不一致,在点评中只有少部分学生改进了实现,实现并针对calc做了单元测试。
在这个例子中,单元测试处于课程的第四次:
- 四则运算初步(个人)
- 四则运算模块化(结对)
- 词典案例分析(个人)
- 四则运算单元测试(结对)
经过分析,其实当时主要是模块化的那次没有直接要求做成支持混合四则运算的,担心学生没有解析混合四则运算的算法基础,到了单元测试的时候,学生就默认以上一次为基础做单元测试,教师/助教在设计单元测试模版的时候也忽视了这个潜在的风险点。
这个问题在之前其他学校采用四则运算这个题目的时候也出现过,我觉的可以在第2次的时候就要求实现calc(string exp)的接口,算法的话,如果学生基础缺失,可以直接在题目里提示会用到的算法,理由是软件工程的课程不是算法课程,在实际开发中,如果一个方面的算法问题有现成的方案,也会至少大家是直接去看相关算法来写做为第一个版本。并且在四则运算这个个人项目环节不是要求大家能自己发明基础的算法,而是能在知道大概用哪些算法的基础上开发版本后,能在后续需求变更中持续满足新的需求,此时实际上才会有创造解决新问题的“算法”部分的事情。
软件工程课程的学生会发现,软件工程课程不会有专门的时间教编程语言/数据结构/算法/数据库这些前置或者后置课程。但是实际开发中,这些又是程序的重要构成部分,我们说软件=程序+软件工程,程序的部分又分核心模块/应用模块。实际开发中,核心模块使用的算法一般也都是从已有的开始做第一个版本来迭代,因此,我们可以遵循两个原则:
- 保持核心模块的接口要求,不做降级要求。
- 提供实现核心模块所需要知道的上下文,关键词,例如可能会用到的数据结构/算法。
对四则运算的算法模块,可以增加:
- 关键字:中缀表达式,后缀表达式,逆波兰表达式,栈,调度场算法
- 参考链接:
在软件开发中经常需要创造和寻找越来越好用的轮子,而在教学环节中需要常常造梯子,搭建好足够支撑学生在自己水平上往前几步练习知识和技能的脚手架,然后在过程中逐渐减少脚手架的支撑,最后达成独立完成的能力。
Instructional scaffolding is a learning process designed to promote a deeper level of learning. Scaffolding is the support given during the learning process which is tailored to the needs of the student with the intention of helping the student achieve his/her learning goals.
梯子/脚手架理论(scaffolding)是由认知心理学家Jerome Bruner受最近发展区的概念启发提出的,当学习一个新概念的时候,脚手架需要考虑设计合适的任务/模版/指南/建议/训练。有时候,我们会在某个环节里欠考虑一些因素,导致提供的任务/模版/指南/建议/训练一定带有某种“壁垒”,如果我们观察/记录/分析,找出这些壁垒,在迭代中改进设计,可以有效消除这些壁垒。
软工+C(6): 最近发展区/脚手架的更多相关文章
- 软工读书笔记 week 9 ——《构建之法》
软工读书笔记 week 9 ——<构建之法> 最近的三周我们正式开始我们的项目.然后我也把<构建之法>中的相关章节再拿出来读了一番.以下是一些 ...
- 软工实践——github文件整理
软工实践中,整理github上文件遇到的一些问题 先扔github链接Transcend/ActivityHelper 1.原来呢我们团队的github上的文件的安排十分凌乱,没有归档.把说明文档.源 ...
- 关于软工项目beta版本
项目总结 项目成员: 黄丰润 031302307 王旭銮 031302320 张家俊 031302329 张晓燕 031302343 项目完成度:实现了专业信息填写.查看,教师信息填写,报课和查看课表 ...
- 2017春季 JMU 1414软工助教 链接汇总
助教自我介绍 学生博客链接和coding链接 [1414软工助教]团队博客汇总 助教总结 评分 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目2:单元测试 团队作业1: ...
- 【2017集美大学1412软工实践_助教博客】团队作业10——项目复审与事后分析(Beta版本)
写在前面的话 转眼轰轰烈烈本学期的软工实践就结束了,这个过程中想必在熬夜敲代码,激烈讨论中留下诸多回忆的同时,也收获了不少.恭喜所有团队完成了本阶段冲刺,此外,由于大家的贡献分给的都很平均,将个人贡献 ...
- [2017BUAA软工助教]第0次个人作业
学习别人的经验和体会 零.前言 我认为人生就是一次次地从<存在>到<光明>. 一.软件工程师的成长 0.这是一个博客索引 同学们在上这门课的时候基本都是大三,觉得在大学里,到教 ...
- 福州大学软工 1715 | K 班 - 启航
福州大学软工 1715 | K 班 - 启航 愉快的暑假已经接近尾声了,我猜很多同学的暑假都过得轻松,毕竟是夏天(空调/WiFi/西瓜).不过呢,暑假期间的老师.助教们可没有闲着,都在为接下来的软工实 ...
- [2017BUAA软工助教]博客格式的详细说明
一.为什么要强调博客格式 可以对比粗读一下这几篇博客然后自己感受一下博客格式对博客阅读体验的影响: MarkDown流: [schaepher]2017春季 JMU 1414软工助教 链接汇总 ...
- [2017BUAA软工助教]收集个人信息
如题 我们要收集三个东西 1.学号 2.Github地址 ① 3.博客园博客地址 ② 请各位同学自行创建,并按照如下的格式评论在这篇博客下 "14061195+https://github. ...
随机推荐
- angularjs1.X进阶笔记(3)——如何重构controller
目录 一. 结构拆分 二.基本代码优化 本篇是内部培训交流会的摘要总结. 培训PPT和示例代码已托管至我的github仓库: https://github.com/dashnowords/blogs/ ...
- python之编码与解码
编码 字符串被当作url提交时会被自动进行url编码处理,在python里也有个urllib.urlencode的方法,可以很方便的把字典形式的参数进行url编码.当url地址含有中文或者“/”的时候 ...
- 【java】随机生成6位的数字
int radomInt = new Random().nextInt(999999); int radomInt2 =(int)((Math.random()*9+1)*100000); Syste ...
- js正则表达式 数字和小数点 非负数 保留两位小数点
验证数字非负数 小数点保留两位小数点 下面正则已验证通过 /^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/
- 使用Semaphore控制对资源的多个副本的并发访问
Semaphores 怎样工作? 您可以将信号量看做可以递增或递减的计数器.用一个数字即5来初始化信号量.现在这个信号量可以连续最多递减五次,直到计数器达到0.一旦计数器为零,你可以将它增加到最多五次 ...
- iOS ----------各种判断
iOS 判断数字 - (BOOL) deptNumInputShouldNumber:(NSString *)str { if (str.length == 0) { return NO; } NSS ...
- as无法关联git
转载请标明出处:https://www.cnblogs.com/tangZH/p/10060573.html 从gitlab上面把项目拉下来之后,用as打开,发现as无法关联git,没有git相关的菜 ...
- 南京邮电大学 JavaA期末复习要点总结
南京邮电大学 JavaA复习要点: Chap1 入门 1. Java应用程序开发过程教材P14~P15 Chap 2 基本语法 1. 标识符的命名规则教材P19 字母下划线美元符号开头,除 ...
- 与webview打交道踩过的坑
随着HTML5被越来越多的用到web APP的开发当中,webview这一个神器便日渐凸显出重要地位.简要的说,webview能够在移动应用中开辟出一个窗口,在里面显示html页面,css以及js代码 ...
- pip install PIL The _imagingft C module is not installed
需要先删除PIL再进行安装 sudo pip uninstall -y PIL 删除PIL相关文件夹:/usr/local/bin/pil , usr/lib/python2.7/dist-packa ...