自主学习视域下OPCODE对程序设计的干预研究

作者: 李昊 田保慧


摘要:良好的认知策略为学习者加工信息提供了方法,提高了学习者对事物的分析判断能力和创造性思维能力。为探究OPCODE对高职学生程序设计课程自主学习的干预效果,研究中设计了基于OPCODE的认知策略与干预模式,以高职课程中的“C++程序设计”课程作为案例,以180名学生作为实验对象,检验了该认知策略下OPCODE对自主学习的干预效果。研究结果在一定程度上表明,OPCODE对学生自主学习中细节认知、知识融通和创造性思维能力有显著影响。该研究旨在为教师引导学生自主学习提供参考。

关键词:OPCODE;自主学习;程序设计;高等职业教育;干预

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2022)17-0136-05

1引言

1.1存在的问题

目前,在我国绝大部分高职学院选择的第一门程序设计语言都是高级语言(High-level programming language),高级语言虽然非常接近自然语言,语法结构也非常类似普通英文,但是因为它远离硬件的特性,导致其往往掩盖了程序的执行细节[1]。学生自主学习时,在数据传递方面,数据结构方面,程序优化方面也会忽略掉这些细节。

程序设计课程中的知识融通[2]指的是依照共通性的原则融合课程中的知识。虽然绝大部分教材在每一章都会指出本章的知识在整个体系中的作用,并且每一个案例都具有使用代码实现数据移动的共通特性,但是学生在自主学习时都会只留意案例所属章节的知识,并未考虑到前后章节知识的融通。首先学生在代码方面会忽略掉顺序结构、分支结构、循环结构和函数等知识都属于代码逻辑;其次忽略掉寄存器、栈、静态区和常量区属于存储位置;而普通变量类型、数组、指针、共用体、结构体和类属于数据结构的共通性也容易被学生忽略掉。忽略知识融通将会使学生在自主学习时事倍功半。

“21世纪学习框架”指出学习的核心能力之一是创新技能[3]。信息技术在高职学院教学过程中,给教师和学生带来了很多方便。学生在自主学习的过程中,通过简单的搜索,就能解决问题。信息技术的应用使得学生自主学习效率得到了一些提高,但是这种便利也使得学生从学习的构建者变成了信息技术的奴隶,使得学生遇到问题时第一个想到的解决办法就是搜索网络,扼杀了学生自己解决问题的能力,阻碍了学生创造性思维的发展。

1.2文献综述

近年来软件产业发展迅速,仅仅依靠课堂获取的知识已经不能满足软件产业对程序设计课程的要求,自主学习成为现代软件专业学生必须掌握的一种能力,学生不能再仅仅依靠教师灌输知识,必须在一定环境下借助特殊的策略,依靠特殊手段主动构建知识结构。很多教育工作者都在如何提高自主学习效果方面做出了贡献。有研究表明团队协作对提升自主学习效果有显著成效[4-5],学习过程中以小组为单位,以协作交流为目的,以明确个人任务为原则,是一种互助的自主学习策略。还有研究表明使用数字媒体协助自主学习也是一种有效方法[6-10]。数字平台在资源共享方面为自主学习提供了帮助。除此之外,教育工作者们还积极改善策略来引导学生自主学习[11-14]。纵观现有针对提高自主学习效果的研究,虽然有了很多突破,但是无论是研究方法还是研究手段在培养学生细节认知、知识融通和创造性思维能力的实证研究方面仍存在不足。因此,本研究将构建一种基于OPCODE(操作码)的认知策略,进行程序设计自主学习效果的实证研究。

2认知策略的构建

目前主流的程序设计语言都是高级语言,语法结构类似普通英文,不能被计算机直接执行,需要编译后生成OPCODE二进制文件[15]后方可执行。基于OPCODE被CPU直接执行的特性,本研究提出一种协助学生自主学习的认知策略。该策略是一种协助学生学习加工程序设计类知识的方法和技术,要求学生在自主学习过程中分析和模拟案例编译后生成的OPCODE,利用程序设计语言之间的融合性的特点[16],指导学生使用指令来理解程序设计中的难点与细节,帮助学生对知识进行高效的加工和整理,并对知识进行分门别类的记忆,从而提高学生自主学习时的效率。

2.1认知OPCODE表现形式

OPCODE指计算机程序中所规定的要执行操作的那一部分指令或字段。因为OPCODE是二进制序列,直接学习会造成学习成本[17]的增加,案例通过静态分析[18-19]或动态分析[20-21]可以直接将OPCODE按汇编的形式展示出来,和二进制序列相比提高了可读性[22],大大减轻了学生学习的困难程度。学生在学习编程语言时接触到的案例都比较短小,自主学习时尝试使用OPCODE的汇编形式来编码,可以编写出在“时间”和“空间”两个方面最具效率的程序[23]。

2.2理解数据加工与流向

程序的根本目的就是处理数据,高职学生前期学习的案例中并不涉及框架,所以学生要自己把控数据加工之间的数据流向。错误的数据加工与流向会导致程序出现缺陷[24]。本研究提出的认知策略要求学生根据OPCODE理解数据在内存中存储时的结构以及加工与流动方式,比如:整形数据与字符型数据在内存中的结构有何不同;一维数组与二维数组之间是否可转换;形式参数的变化什么情况可以影响到实际参数以及为什么可以影响等等。学生必须掌握诸如此类的细节才能为后期的学习打好基础。

2.3分析内存行为

内存是计算机的重要组成部件之一,是外存与CPU进行数据传递的桥梁,所有程序运行前都需要将有关数据装入内存[25]。程序执行过程中涉及大量数据的引用,如何高效地为每一个数据分配空间,并且在数据使用完毕后及时地释放空间是维护程序健壮性首要的内存行为。不当的内存行为会导致程序在运行过程中出现内存泄漏、膨胀等问题,严重的甚至会导致程序崩溃[26]。当这些问题存在时程序并不会立即出现错误,而是在运行一段时间之后才会有异常表现。这就需要学生通过分析内存行为从内存消耗的角度找到内存消耗过多的数据结构,通过对OPCODE的回溯确定造成内存消耗的内存行为。有效地分析内存行为有助于学生深入地了解程序在内存中的执行情况,进而帮助学生提前发现潜在的问题。

3自主学习干预模式的设计

构建以OPCODE为基础的自主学习干预模式,就是在多种学校资源的支持下,以大学生自主学习为主体,以动态静态分析为手段,以分析OPCODE为策略,以编译器为平台,以教师辅助为保障的多维度立体化的协助模式(图 1)。

3.1主动型干预

推进学生的主观能动性为向导的学习制度可以实现学生学业发展体系的全面完善和持续更新[27]。在程序设计课程的自主学习过程中,要确立学生的主体地位,引导学生主动地分析每一个案例的OPCODE,使学生通过分析来获得知识,并能够对知识进行灵活运用。这就要求学生要构建主动分析的学习体系。知识不再是仅仅从案例代码中获取,而是在OPCODE的帮助下,从知识融通的角度总结得到,使学生认识到总结知识的本质作用,从而充分地调动学生学习的积极性。

3.2被动型干预

在学生自主学习的阶段,会出现种种无法预料的问题,有意识地采用合适的学习手段可帮助基础薄弱缺乏学习动力的学生养成良好学习习惯[28]。在程序设计课程的自主学习阶段,会因为知识掌握得不完善导致编写的代码出现各种逻辑BUG。而解决逻辑BUG是每一个学习程序设计的学生必须掌握的能力。学生通过查看OPCODE的汇编表现形式,可以快速地定位逻辑出错的位置并解决,从而提高学生在自主学习过程中解决问题的能力。

3.3探究型干预

探究是新课程改革倡导的重要学习方式,是一种以发现问题为前提,解决问题为向导的学习方式[29]。学生在自主学习的过程中需要有问题意识,需要有“耳听为虚,眼见也不一定为实”的意识。通过OPCODE干预的自主学习过程中,学生能发现很多高级语言掩盖的知识,而这种知识在教材或者日常教学中并无体现。这就需要学生继续使用OPCODE进行探究最终得到解决,既巩固了之前所学的知识,又掌握了知识的融通,大大提高了学生自主学习的效果。

4实验与结果分析

4.1对象

本研究选择某高校C++选修课和必修课的180名学生作为测试对象,且均为统一招生。所有测试对象被随机分配成3个测试组,分别为普通组、OPCODE行为分析组(以下简称“行为分析组”)和OPCODE行为模拟组(以下简称“行为模拟组”)。每组均有60名学生,学生的年龄和基础课成绩等情况比较,差异均无统计学[30]意义(P>0.05),具有可比性。

4.2实验设计

选择学生入学后第1学期开设C++的程序设计课程来做实验,三组学生教材、资料、学习平台和教师一致。普通组自主学习采用传统方式,根据教材和平台资料进行学习和练习,自己制定学习计划,教师充当学习顾问,不提供C++知识以外的交流与指导。行为分析组自主学习时,需要分析由编译器生成的每一个案例OPCODE的汇编表现形式,并根据OPCODE的运行记录下栈帧数据变化,教师可对编译器生成的OPCODE进行指导。行为模拟组在行为分析组学习的方法上仍需要模拟编译器的功能,自行构建栈帧,将案例每一句高级语言翻译成OPCODE的汇编表现形式,并考虑是否可由其他代码替换(图 2)。三组学生学习时长相同。

实验采用准实验设计[31],主要分为实验前测试和实验后测试两个阶段,实验前测试在实验前一周内进行,试验后测试在实验结束后马上进行测试。分析方法为单因素ANOVA检验,检验水准α= 0.05。

4.3实验结果

实验前在各组之间成绩满足正态分布且整体方差相等的前提下进行单因素ANOVA检验得到结果如表 1。可以看出实验前三个分组的平均成绩差异无统计学意义(p>0.05)。

实验后各组之间成绩K-S检验满足正态分布(每组超过50人以K-S检验为主),并且不同分组整体方差相等。由表 2可以看出各组之间差异具有统计学意义(p<0.05)。说明三个分组经过试验已经出现了成绩上的偏差,由本研究提出的策略协助学习的两个组学习效果优于普通组,而行为模拟组的学习效果优于行为分析组。

4.4行为分析组与行为模拟组学生针对OPCODE认知策略的评价

5讨论

认知策略是影响学生学习成绩的因素之一[32]。目前在我国程序设计课程的学习中,多数学生仍局限于只学习高级语言案例代码的认知策略,其学习效果是值得肯定的,但存在的不足也是值得教育工作者思考和探索的。高水平的认知策略可以促进学生的知识建构,并进一步为促进学生元认知策略的发展建立支架[33]。学生不仅要清楚了解自己的学习目标,还要知道选择何种策略高效的组织知识,监控自己的学习过程。基于OPCODE的认知策略为学习者提供了一种新型的高效率的方法来达到学习的目标。

5.1有助于提高自主学习中认知细节问题的能力

高级语言中有很多重要的知识并没有在教材和日常教学中体现出来,这些知识的存在使得高级语言中很多复杂的问题得到妥善的解决。如栈帧[34]结构的存在提高了内存的利用率。栈帧的实质就是开辟的一段用于记录函数数据的内存,参数和返回地址放在EBP加偏移的位置,EBP指向的位置保存的是上层函数的EBP数值,临时变量放在EBP减偏移的位置,当函数执行完毕时通过将EBP的值赋值给ESP进行栈帧的销毁,在整个调用过程中,始终以EBP寄存器作为桥梁不断的进行数据操作。EBP的这些操作就是Inter32位平台上OPCODE的一种表现形式,指令和Inter指令集是一一对应的[35],大大增加了OPCODE的可读性,使学生在自主学习过程中可以直接理解程序执行时的细节。

5.2有助于加强自主学习中融通知识的能力

学生通过学习OPCODE的汇编表现形式,可以发现使用jmp、jcc、call、ret指令可以实现所有的代码跳转,使用7种寻址方式可以解决数据的读取问题;可以发现在内存中没有数据类型的区别,只有字节的区别;还可以发现代码和数据在内存中都是0和1二进制数据,代码的OPCODE是数据,数据也可以被翻译成代码(图 3)。

上一篇 点击页面呼出菜单 下一篇