APP下载

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

2022-08-31李昊田保慧

电脑知识与技术 2022年17期
关键词:干预高等职业教育程序设计

李昊 田保慧

摘要:良好的认知策略为学习者加工信息提供了方法,提高了学习者对事物的分析判断能力和创造性思维能力。为探究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)。

5.3有助于解决自主学习中创造性思维的问题

计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。学生在自主学习程序设计时的要求则是设计代码使程序运行结果正确。根据OPCODE和高级语言的知识融通性,學生可以发挥自己的创造性思维(图 4),设计出和案例不一样的程序进行对比,从而使知识掌握得更加透彻。

5.4有助于增强自主学习中处理逻辑问题的能力

学生在自主学习程序设计课程的过程中会出现各种问题,违反形式逻辑规律的要求和规则而产生的逻辑问题又是众多问题中出现次数最多的一种。当普通组学生出现逻辑问题时,都是尝试分析编译器中的高级语言是否存在错误,期望从中找到解决办法,效果也是因人而异。而利用基于OPCODE的认知策略解决程序设计过程中出现的各种逻辑问题的能力是行为模拟组和行为分析组学生具备的能力。这种能力以处理OPCODE为认知操作,以解决程序中各种逻辑导致的运行问题为目的,以发现问题、分析问题、提出假设和验证假设为操作序列。当出现逻辑问题时通过断点定位到出现问题的OPCODE,然后回溯OPCODE明确问题原因并尝试解决问题(图 5)。利用OPCODE由CPU直接执行的特性,提高了找到并处理逻辑问题的效率。

5.5有助于提高自主学习兴趣

在本研究行为模拟组和行为分析组自主学习过程中,学生发现了多个正常教学活动中未涉及的问题并自行解决(图 6),通过兴趣产生了动力实现了“知其所以然”。该认知策略促使学生在学习期间自己发现了教材以外的知识。与传统认知策略相比,学生掌握了获取知识的主导权,改变了以往学习过程中被动的局面。有88.3%的学生认为该策略提高了学习兴趣,帮助自己高效地掌握所学知识、思考所学内容。

5.6有助于提高自主学习的效果

传统的认知策略是以教师对案例的讲解为主要手段,学生把大多数精力放在教学案例上,甚至会出现记忆案例的现象,缺乏对知识的思考与辨认,扼杀了学生的创造灵感和个性[36]。在本研究过程中,针对普通组学生无法理解的难点,行为分析组的同学通过对OPCODE的分析已自行解决,行为模拟组的同学通过模拟实现OPCODE,对知识的理解更加透彻并帮助普通组同学解答问题。在实验中,行为分析组和行为模拟组成绩均高于普通组,说明该策略能显著提高自主学习的效果。

5.7开展基于OPCODE的认知策略自主学习的建议

虽然基于OPCODE的认知策略相比传统自主学习策略有较多优势,但在实施过程中也存在一些问题。首先,使用本研究认知策略需要先熟悉OPCODE的汇编表现形式,增加了时间成本。但是根据知识的融通性,使用本研究认知策略理解知识的细节后,能提高所有高级语言的学习效率,减少后期使用时间,宏观方面时间成本并没有增加。其次,OPCODE的汇编表现形式还包含了大量的底层知识。学生只需学习数据寻址、寄存器、指令系统等知识即可满足自主学习的需要。再次,根据实验结果显示,行为模拟组的成绩优于行为分析组和普通组,建议学生在学习时采用模拟OPCODE行为的方式进行自主学习。最后,只需要学生在学习第一门高级语言时熟悉OPCODE指令即可,目前我国绝大多数高职院校要求学生学习的第一门高级语言都是C++或者Java这两种编译性语言,通过基于OPCODE的认知策略掌握了高级语言的细节后,根据知识的融通性即可解决后续其他高级语言学习中的问题。

由对研究对象进行试验得到的结果可以得出结论,使用OPCODE协助学习程序设计案例是学生在自主学习程序设计课程时一种良好的认知策略,有助于提高学生自主学习效果,为学生后期学习其他程序设计类课程奠定了基础。

参考文献:

[1] 胡玉祥,孙德辉.递归算法的汇编语言剖析[J].北方工业大学学报,2013,25(1):45-48.

[2] Zitter I,Hoeve A.Hybrid learning environments:merging learning and work processes to facilitate knowledge integration and transitions[EB/OL].http://dx.doi.org/10.1787/5k97785xwdvf-en,2012-06-26.

[3] 肖立,孟立军.“级联效应”:一项基于PBL美国21世纪大学生自主学习能力培养的质性研究[J].中国远程教育,2017(12):38-45.

[4] 张正华.提升学生自主学习能力的三个策略[J].语文建设,2019(17):44-45.

[5] 张娟.团队自主学习“风车模型”在组织行为学教学中的探索与实践[J].当代教育实践与教学研究,2019(17):167-168.

[6] 易斌.基于自主学习能力培养的自媒体建设[J].中国高校科技,2019(7):94-96.

[7] 刘军,郭绍青,黄琰,等.WSR视野下网络学习空间开展自主学习SPA模型构建——网络学习空间内涵与学校教育发展研究之九[J].电化教育研究,2019,40(7):46-52.

[8] 杜晓明.基于云计算的协作式自主学习的实践[J].实验室研究与探索,2016,35(8):171-173,211.

[9] 吴杰.信息化条件下学生个性化自主学习模式的实践研究——以高职《C语言》为例[J].质量与市场,2020(15):107-109.

[10] WANG M. Non-English major students autonomous learning under web-based environment[J]. International Journal of Social Sciences in Universities,2020,3(4).

[11] 韩秋枫,李瑛,吕洁.从知识内化的角度论如何提升翻转课堂中学生的自主学习能力[J].计算机工程与科学,2016,38(S1):204-207.

[12] 王文轩.混合教学模式下高职学生自主学习能力培养的实证研究[J].中国职业技术教育,2018(35):10-15.

[13] 蒋丰兴,吕颖梅,徐景坤.以“潜能激励”培养模式提高硕士生自主学习能力——以江西科技师范大学为例[J].学位与研究生教育,2017(12):22-26.

[14] Sun X.Research on the construction of English autonomous learning monitoring mode under the background of big data[J].Journal of Contemporary Educational Research,2021,5(1).

[15] Chen J Y,Yang W,Hsu W C,et al.On static binary translation of ARM/thumb mixed ISA binaries[J].ACM Transactions on Embedded Computing Systems,2017,16(3):1-25.

[16] 谢志英,袁红丽,韩月霞,等.关于计算机编程语言之间融合教学的研究[J].计算机工程与科学,2014,36(S1):212-215.

[17] 魏配轩,赵文梅,余娥,等.大學生学习成本和学习收益影响因素研究[J].现代商贸工业,2019,40(6):166-167.

[18] Ye Y F,Li T,Zhu S H,et al.Combining file content and file relations for cloud based malware detection[C]//KDD '11:Proceedings of the 17th ACM SIGKDD international conference on Knowledge discovery and data mining.2011:222-230.

[19] Tamersoy A,Roundy K,Chau D H.Guilt by association:large scale malware detection by mining file-relation graphs[C]//KDD '14:Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining.2014:1524-1533.

[20] Ding Y X,Xia X L,Chen S,et al.A malware detection method based on family behavior graph[J].Computers & Security,2018(73):73-86.

[21]HARDY W,CHEN L,HOU S,et al.D14md:A deep learning framework for intelligent malware detection[C]//Proceedings of the International Conference on Data Mining(DMIN), 2016:61.

[22] 武伟,汪璇,刘晓燕.汇编语言程序设计课程教学改革探讨[J].西南师范大学学报(自然科学版),2009,34(2):201-204.

[23] 盛羽,余进,陈松乔,等.基于CPU仿真器的汇编语言学习系统设计与实现[J].中南大学学报(自然科学版),2010,41(6):2224-2230.

[24] 王斌,吴太文,胡培培.软件缺陷分类和分析研究[J].计算机科学,2013,40(9):16-20,24.

[25] 嵇海明,杨宗源.PE文件格式剖析[J].计算机应用研究,2004,21(3):165-166,193.

[26] 李文杰,姜淑娟,钱俊彦,等.基于对象引用关系的Java程序内存行为分析方法[J].电子学报,2015,43(7):1336-1343.

[27] 廖春华,欧李梅.智能时代以自主学习为中心的学生学业发展体系构建探索[J].中国大学教学,2020(10):69-74.

[28] 庄静恒.“被动学习→主动探究”教学模式的构建研究[J].科教导刊(上旬刊),2010(1):49-51.

[29] 付晨晨.论探究式学习的价值[J].中学政治教学参考,2017(27):76-78.

[30] 李洁明.博学·经济学系列:统计学原理(第7版)[M].上海:复旦大学出版社,2017.

[31] 王宁.准实验设计与比较个案研究[J].旅游学刊,2020,35(12):3-4.

[32] SHIH,INGEBRITSEN T,PLEASANTS J,FLICKINGER K,BROWN G. Learning strategies and other factors influencing achievement via web courses[A]. WU S,MADISON. Distance learning '98. proceedings of the annual conference on distance teaching & learning[C]. MADISON,WI:Madison Press,1998,359-363.

[33] Salovaara H.An exploration of students' strategy use in inquiry-based computer-supported collaborative learning[J].Journal of Computer Assisted Learning,2005,21(1):39-52.

[34] 钱林松.C++反汇编与逆向分析技术揭秘[M].北京:机械工业出版社,2011:149-165.

[35] IA-32 Intel architecture software developers manual volume 2:in-struction set reference[S].[S.l.]:Intel Corporation, 2003.

[36] 王进,邹晶莹,林婕.基于智能手机的移动学习对高职学生自主学习能力的影响研究[J].护理研究,2018,32(9):1451-1453.

收稿日期:2021-07-16

基金项目:河南省教育科学“十三五”规划2020年度一般课题“疫情环境下基于云课程平台的翻转课堂自主学习模式研究——以软件技术专业教学为例”(课题批准号:2020YB0463)

作者简介:李昊(1980—),男,河南郑州人,讲师,硕士,主要研究方向为数据结构、高职教育;田保慧(1975—),女,河南商水县人,教授,本科,工学硕士,主要研究方向为智能交通技术运用、计算机科技与技术。

猜你喜欢

干预高等职业教育程序设计
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
高职高专院校C语言程序设计教学改革探索
纺织行业职业结构变迁对高职现代纺织专业人才培养的启示
大学生心理危机防范快速反应机制研究
积极想象在音乐治疗中的运用研究
PLC梯形图程序设计技巧及应用