李昊 田保慧



摘要:良好的認知策略為學習者加工信息提供了方法,提高了學習者對事物的分析判斷能力和創造性思維能力。為探究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—),女,河南商水縣人,教授,本科,工學碩士,主要研究方向為智能交通技術運用、計算機科技與技術。