肖明明,蘇利敏,江 靜
(北京聯(lián)合大學(xué)智慧城市學(xué)院,北京,100101)
C++程序設(shè)計(jì)是大學(xué)本科計(jì)算機(jī)相關(guān)專業(yè)的一門重要課程,其采用面向?qū)ο蟮脑O(shè)計(jì)思想把實(shí)際問題轉(zhuǎn)化為計(jì)算機(jī)所能解決的問題,是計(jì)算思維能力的具體實(shí)踐。[1]然而,在實(shí)際教學(xué)中,該課程概念多且抽象,知識點(diǎn)的掌握、聯(lián)系和應(yīng)用在于建立“面向?qū)ο蟆边@一新的計(jì)算思維模式,思維模式的轉(zhuǎn)變要求高和理論知識的孤立、枯燥使得該課程的教與學(xué)均面臨較大挑戰(zhàn)。因此,以“面向?qū)ο蟪绦蛟O(shè)計(jì)思想”為核心,構(gòu)建清晰系統(tǒng)的課程知識體系,描述知識點(diǎn)及其結(jié)構(gòu)關(guān)系,拓展與知識相關(guān)的程序?qū)嵗蛯?shí)踐案例,并將繁雜且抽象的知識體系以可視化形式向?qū)W生展示,有助于C++程序設(shè)計(jì)課程教師教學(xué)效果的提升和學(xué)生學(xué)習(xí)質(zhì)量的提高。同時(shí),有效的課程知識體系,還可以引導(dǎo)學(xué)生基于自身基礎(chǔ)和興趣,自主利用互聯(lián)網(wǎng)豐富的學(xué)習(xí)資源進(jìn)行獨(dú)立探索,避免“信息過載”和“知識迷航”現(xiàn)象的出現(xiàn)。這對當(dāng)前網(wǎng)絡(luò)化時(shí)代信息技術(shù)應(yīng)用型人才的培養(yǎng)具有重要的引領(lǐng)作用和實(shí)踐意義。
近年來,知識圖譜因其在表達(dá)知識點(diǎn)內(nèi)容、關(guān)系和結(jié)構(gòu)方面的明顯優(yōu)勢,逐漸在教育教學(xué)領(lǐng)域受到重視。[2]筆者針對C++程序設(shè)計(jì)課程知識體系有效構(gòu)建問題,將借助知識圖譜技術(shù)的支持,開展C++程序設(shè)計(jì)課程知識圖譜的構(gòu)建:描述課程教學(xué)中知識點(diǎn)及其結(jié)構(gòu)關(guān)系,并讓知識及其關(guān)系可視化、形象化,形成一種內(nèi)容豐富、可查詢、可更新的課程知識體系。借助課程知識圖譜,讓學(xué)生易于理解和掌握知識,幫助學(xué)生思維清晰、構(gòu)建合理的知識體系,以期進(jìn)一步幫助教師優(yōu)化教學(xué)、提升教學(xué)效果。
知識圖譜是一種揭示實(shí)體之間關(guān)系的語義網(wǎng)絡(luò),可以對現(xiàn)實(shí)世界的事物及其相互關(guān)系進(jìn)行形式化的描述,該概念于2012年由Google正式提出,之后被廣泛應(yīng)用于各領(lǐng)域研究,包括教育領(lǐng)域。知識圖譜的構(gòu)建主要有自底向上與自頂向下兩種方式。自底向上指的是從一些開放鏈接數(shù)據(jù)中提取出實(shí)體,選擇其中置信度較高的加入知識庫,再構(gòu)建頂層的本體模式;自頂向下指的是先為知識圖譜定義好本體與數(shù)據(jù)模式,再將實(shí)體加入知識庫。[3]
課程知識圖譜是教育知識圖譜領(lǐng)域中的某個學(xué)科或者課程的應(yīng)用,其采用“實(shí)體—關(guān)系—實(shí)體”的三元組形式將課程知識構(gòu)建成一個網(wǎng)狀的知識結(jié)構(gòu)。其中,“實(shí)體”表示不同形式的知識點(diǎn),“關(guān)系”表示知識點(diǎn)之間的關(guān)聯(lián),這樣的知識結(jié)構(gòu)可簡明清楚地展示知識脈絡(luò)、關(guān)系等特點(diǎn)。在課程知識圖譜的構(gòu)建方面,張萌結(jié)合課程數(shù)據(jù)特點(diǎn)提出了關(guān)聯(lián)課程數(shù)據(jù)的概念及課程知識圖譜的模式層本體組織方法與數(shù)據(jù)層實(shí)體處理方式。[4]單佩佩依據(jù)培養(yǎng)方案及課程教學(xué)大綱,在分析課程知識結(jié)構(gòu)的基礎(chǔ)上,通過人工方式提取出課程知識點(diǎn),并采用爬蟲技術(shù)獲取課程知識實(shí)體概念定義,以構(gòu)建教育技術(shù)學(xué)核心課程知識圖譜,并用于學(xué)習(xí)路徑推薦。[5]李艷茹等人針對傳統(tǒng)知識圖譜中海量知識點(diǎn)存儲和推理方法的不足,提出了一種可便捷有效構(gòu)建圖譜的CRA模型,并以高中數(shù)學(xué)課程知識圖譜為例,結(jié)合圖譜編輯器對知識圖譜進(jìn)行了構(gòu)建與可視化展示。[6]郭宏偉從高校在線課程常態(tài)化這一視角,結(jié)合智能教育內(nèi)涵,探索了自頂向下和自底向上相結(jié)合的在線課程知識圖譜構(gòu)建途徑與方法,建立多圖譜相融體系以迭代式擴(kuò)充完善知識體系結(jié)構(gòu)。[7]盛嘉祺結(jié)合線上線下教育資源,以教材知識體系為框架,設(shè)計(jì)了命名實(shí)體識別方法和實(shí)體關(guān)系抽取算法,并融合教材、慕課和博客數(shù)據(jù)資源提出了一套完整的面向教育領(lǐng)域的知識圖譜構(gòu)建方法。[8]
在程序設(shè)計(jì)類課程知識圖譜建設(shè)和應(yīng)用方面,黃健對課程知識和體系進(jìn)行梳理分析,基于知識圖譜通用構(gòu)建流程,運(yùn)用本體Protégés技術(shù),建構(gòu)了Python課程知識圖譜,并應(yīng)用于知識檢索和推薦。[9]伍思潔探索了JAVA課程知識圖譜構(gòu)建方式,并將知識圖譜應(yīng)用于自動答疑系統(tǒng)的設(shè)計(jì),用以輔助學(xué)生學(xué)習(xí)。[10]和青芳等人構(gòu)建了包含文本、圖譜、音頻、視頻、動畫、網(wǎng)絡(luò)相關(guān)知識鏈接等數(shù)據(jù)的C語言課程知識圖譜,并將之引入在線課程平臺,為初學(xué)者提供文本格式多樣的學(xué)習(xí)資源和針對性強(qiáng)的個性化問題答案搜索。[11]
縱觀現(xiàn)有研究與實(shí)踐情況,程序設(shè)計(jì)類課程知識圖譜的構(gòu)建仍存在著一定的不足。一方面,在網(wǎng)絡(luò)教學(xué)資源開放共享模式下,課程知識圖譜構(gòu)建率不高,如當(dāng)前沒有針對C++程序設(shè)計(jì)課程知識圖譜的構(gòu)建、缺乏程序設(shè)計(jì)類課程知識之間的融會貫通。另一方面,課程知識圖譜構(gòu)建方法通用性強(qiáng)、針對性弱,如在知識建構(gòu)過程中忽略學(xué)生學(xué)情特點(diǎn)(如專業(yè)、年級、學(xué)習(xí)能力、動手實(shí)踐能力等)、學(xué)習(xí)目標(biāo)(學(xué)生知識點(diǎn)掌握程度,在知識層面、能力層面和素質(zhì)層面所應(yīng)達(dá)到的目標(biāo)等),以及知識理論和實(shí)踐的聯(lián)系。因此,以學(xué)生為中心,立足學(xué)生學(xué)情特點(diǎn),結(jié)合課程教學(xué)目標(biāo),構(gòu)建C++課程知識圖譜,描述知識點(diǎn)及其結(jié)構(gòu)關(guān)系,拓展與知識相關(guān)的實(shí)踐案例,可以為學(xué)生面向?qū)ο笥?jì)算思維和編程能力的培養(yǎng)提供堅(jiān)實(shí)支撐與可靠保障,并且是現(xiàn)有程序設(shè)計(jì)類課程知識圖譜的有效補(bǔ)充,這對網(wǎng)絡(luò)信息化時(shí)代程序設(shè)計(jì)類課程的教與學(xué)都具有十分重要的意義。
C++程序設(shè)計(jì)課程所涉及知識主要是指根據(jù)培養(yǎng)方案、課程大綱和課程教材傳授給學(xué)生學(xué)習(xí)的知識集合,具有比較確定的層級結(jié)構(gòu)。因此,其知識圖譜可采用自頂向下的方式構(gòu)建:首先,確定知識圖譜的數(shù)據(jù)模型,即根據(jù)領(lǐng)域知識和專家指導(dǎo)進(jìn)行本體構(gòu)建;其次,基于數(shù)據(jù)資源進(jìn)行知識抽取(包括實(shí)體抽取、關(guān)系抽取和屬性抽取)、根據(jù)數(shù)據(jù)模型進(jìn)行知識表示和融合;最后,形成知識圖譜。其中,本體構(gòu)建是核心?;跇?gòu)建好的本體,知識圖譜在后續(xù)應(yīng)用中還可以結(jié)合課程知識的更新不斷豐富和完善。
在C++課程知識圖譜本體構(gòu)建方面采用經(jīng)典“五步法”知識庫構(gòu)建方法,具體如下。[12]
1.確定本體的專業(yè)領(lǐng)域和范圍
C++程序設(shè)計(jì)課程涵蓋了基礎(chǔ)語法、面向?qū)ο蟪绦蛟O(shè)計(jì)思想、類、對象、派生類、繼承、多態(tài)性、虛函數(shù)等知識模塊,課程概念多且抽象、難以理解和掌握,知識點(diǎn)孤立片面、無法有效組織和應(yīng)用。本體構(gòu)建的目標(biāo)是結(jié)合課程知識結(jié)構(gòu)特點(diǎn),關(guān)注學(xué)生認(rèn)知水平,制訂出系統(tǒng)可靠的知識圖譜,并以可視化形式展示知識概念、知識屬性和知識關(guān)系,幫助學(xué)生從宏觀上掌握整個課程結(jié)構(gòu),并能以面向?qū)ο蟪绦蛟O(shè)計(jì)思想為核心進(jìn)行關(guān)聯(lián)學(xué)習(xí),從而幫助學(xué)生減少學(xué)習(xí)中的知識迷航、提升學(xué)習(xí)質(zhì)量。筆者以應(yīng)用型本科數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)專業(yè)所開設(shè)的C++程序設(shè)計(jì)課程為基礎(chǔ),根據(jù)課程教學(xué)對象和教學(xué)階段確定本體的專業(yè)領(lǐng)域和范圍具體為應(yīng)用型本科大二學(xué)生所選修的C++程序設(shè)計(jì)課程。
2.獲取課程知識
基于權(quán)威性、客觀性和公認(rèn)性原則,教師應(yīng)將培養(yǎng)方案、教學(xué)大綱、教材和專家知識作為構(gòu)建知識圖譜的重要數(shù)據(jù)來源。其中,教材方面,筆者選取由鄭莉編著、清華大學(xué)出版社出版的《C++語言程序設(shè)計(jì)》。具體獲取課程知識的方式為:首先,充分剖析培養(yǎng)方案、課程大綱和教材內(nèi)容,請教教學(xué)經(jīng)驗(yàn)豐富的資深教師,對課程進(jìn)行人工標(biāo)注,梳理出超過200個知識點(diǎn);其次,為避免個人主觀性,將標(biāo)注的知識點(diǎn)交由專業(yè)教師和專家審核;最后,根據(jù)專家審核指導(dǎo)進(jìn)行修改補(bǔ)充,共標(biāo)記出166個知識點(diǎn)。保留的知識點(diǎn)代表該課程的主要內(nèi)容,是比較重要的知識點(diǎn),涵蓋了該課程基本概念,且這些知識點(diǎn)符合學(xué)生學(xué)習(xí)的規(guī)律。
3.列出重要知識概念
知識概念主要是為了讓學(xué)生了解該知識點(diǎn)的意思及相關(guān)屬性。知識概念獲取來源以教材知識為主,教師應(yīng)梳理所選擇教材中的知識點(diǎn)概念,并使用網(wǎng)絡(luò)資源進(jìn)行輔助。
4.確定知識概念的層次、屬性,將其實(shí)例化
本體層次結(jié)構(gòu)構(gòu)建可將課程知識點(diǎn)進(jìn)行有效的分類,從而提高課程知識圖譜的可用性與有效性。根據(jù)教材中的章節(jié)劃分和課程內(nèi)容的層級關(guān)系,教師可將C++課程知識概念層次結(jié)構(gòu)劃分為知識體系、知識樹、知識模塊和知識點(diǎn),并采用本體構(gòu)建中的OWL本體描述語言創(chuàng)建C++課程知識圖譜的本體概念層次結(jié)構(gòu)。C++課程知識體系由10棵知識樹組成,具體包括程序設(shè)計(jì)基礎(chǔ)、C++基礎(chǔ)知識、函數(shù)、類與對象、繼承與派生、多態(tài)性、數(shù)據(jù)的共享與保護(hù)、程序?qū)嵗?、綜合實(shí)例、實(shí)踐案例。知識樹由多個知識模塊組成,如類與對象這一棵知識樹,由類與對象、構(gòu)造函數(shù)和析構(gòu)函數(shù)、類的組合、深復(fù)制與淺復(fù)制等知識模塊組成。知識模塊由多個知識點(diǎn)組成,如類與對象這一知識模塊由類的定義、類的成員、類成員的訪問控制、對象、對象數(shù)組、對象指針等知識點(diǎn)組成。而知識點(diǎn)表示最小的知識單位。
在本體構(gòu)建中,類的屬性一般被劃分為類的數(shù)據(jù)屬性和類的對象屬性兩種。類的數(shù)據(jù)屬性用來描述類自身的一些特性,類的對象屬性用來表示類與類之間的各種關(guān)聯(lián)關(guān)系。在課程本體中,類就是概念,類的數(shù)據(jù)屬性就是概念的一些描述信息,如定義、內(nèi)容等。類的對象屬性就是概念與概念之間的關(guān)系。結(jié)合C++程序設(shè)計(jì)專業(yè)課程設(shè)置,本文對類的數(shù)據(jù)屬性定義主要包括知識點(diǎn)描述、所處章節(jié)、教材頁碼、掌握程度、是否重難點(diǎn)五個方面。知識點(diǎn)描述主要包含知識點(diǎn)的定義、概念性質(zhì)等描述性理論,對于程序?qū)嵗?、綜合實(shí)例和實(shí)踐案例則描述與其相關(guān)的知識點(diǎn),使理論知識與實(shí)踐應(yīng)用融會貫通。所處章節(jié)表明該知識點(diǎn)處于課程的具體章節(jié)信息。教材頁碼表明該知識點(diǎn)處于教材頁碼范圍信息。掌握程度依據(jù)布魯姆的認(rèn)知領(lǐng)域分為識記、理解、應(yīng)用、分析、綜合、評價(jià)六個等級,越往上掌握程度越高。難易程度分為重點(diǎn)、難點(diǎn)、重難點(diǎn)、非重難點(diǎn)四個維度。在C++課程知識圖譜中,每個知識點(diǎn)都不是獨(dú)立存在的,它們之間都會存在各種各樣的聯(lián)系,主要涉及前驅(qū)后繼關(guān)系、同一關(guān)系、包含關(guān)系、關(guān)聯(lián)關(guān)系、兄弟關(guān)系、例子關(guān)系、繼承關(guān)系、概括關(guān)系,以及初始化、釋放空間、解決、實(shí)現(xiàn)、兼容、應(yīng)用、翻譯等關(guān)系。
本體實(shí)例化是構(gòu)建本體的最后一步,即將C++程序設(shè)計(jì)課程中的知識點(diǎn)實(shí)體以本體實(shí)例的形式表現(xiàn)出來。C++程序設(shè)計(jì)課程的本體實(shí)例以教學(xué)大綱和教材教案為主,以百度百科為輔,進(jìn)行最后的手動提取和整理,使每個知識點(diǎn)實(shí)體都具有完整意義和自身屬性。
5.形式化編碼
筆者采用斯坦福大學(xué)醫(yī)學(xué)院開發(fā)的本體編輯器Protégé對上述步驟構(gòu)建的本體進(jìn)行編碼化,實(shí)現(xiàn)C++程序設(shè)計(jì)課程知識庫的構(gòu)建。
利用C++課程教材和互聯(lián)網(wǎng)資源進(jìn)行實(shí)體、關(guān)系和屬性的手動抽取,在本體構(gòu)建模式層的約束下,將知識整理為“實(shí)體—關(guān)系—實(shí)體”或“實(shí)體—屬性—屬性值”三元組形式,并將其存儲于數(shù)據(jù)庫,即可構(gòu)建好課程知識圖譜的數(shù)據(jù)層。在此基礎(chǔ)上,通過概念與實(shí)體的鏈接,融合模式層與數(shù)據(jù)層,最終構(gòu)建C++課程知識圖譜。筆者采用Neo4j圖數(shù)據(jù)庫進(jìn)行存儲,共166個知識點(diǎn)、202個關(guān)系。
結(jié)合學(xué)生學(xué)情特點(diǎn)和具體教學(xué)目標(biāo)所構(gòu)建的C++課程知識圖譜,可以為學(xué)生面向?qū)ο笥?jì)算思維和編程能力的培養(yǎng)提供堅(jiān)實(shí)支撐與可靠保障。在課堂教學(xué)中,基于C++課程的知識圖譜,可以有效引導(dǎo)學(xué)生了解所學(xué)知識內(nèi)容及知識點(diǎn)之間的關(guān)聯(lián)關(guān)系,形成一個整體的課程知識網(wǎng)絡(luò)。同時(shí),圖譜中程序?qū)嵗?、綜合實(shí)例和實(shí)踐案例的拓展,有助于學(xué)生理論聯(lián)系實(shí)際,促進(jìn)學(xué)生對所學(xué)知識進(jìn)行深入思考。在課后學(xué)習(xí)中,學(xué)生還可以通過C++課程知識圖譜查詢知識點(diǎn)及其關(guān)聯(lián)關(guān)系,從而快速地獲取知識點(diǎn)介紹和相關(guān)資料,這有利于學(xué)生的高效學(xué)習(xí)和復(fù)習(xí)。
此外,C++課程知識圖譜還可進(jìn)行拓展應(yīng)用:如采用自動化手段從網(wǎng)絡(luò)和參考書籍等資源中進(jìn)行知識抽取,豐富數(shù)據(jù)資源,不斷更新知識圖譜;或者基于知識圖譜實(shí)現(xiàn)C++相關(guān)知識的自動問答、智能搜索、資源推薦、個性化學(xué)習(xí)路徑推薦等。這為C++課程教學(xué)教改提供了新的思路。融合C、Python、Java等已有知識圖譜,C++課程知識圖譜還可拓展至程序設(shè)計(jì)類課程知識圖譜,構(gòu)建程序設(shè)計(jì)知識體系,這有助于本科生融會貫通、體系化掌握面向過程結(jié)構(gòu)化編程和面向?qū)ο缶幊蹋M(jìn)而有利于培養(yǎng)學(xué)生的計(jì)算思維、構(gòu)建體系化編程思路和能力。
面向應(yīng)用型本科C++程序設(shè)計(jì)課程教學(xué)需求,本研究提出了一種具體的課程知識圖譜構(gòu)建方法。首先,結(jié)合學(xué)生學(xué)情特點(diǎn),基于培養(yǎng)方案、課程大綱、教材教案和專家指導(dǎo)意見梳理確定課程內(nèi)容的知識結(jié)構(gòu)。其次,根據(jù)本體構(gòu)建過程,依次確定課程目標(biāo)、范圍,定義知識概念層次結(jié)構(gòu)、屬性,并將其實(shí)例化。最后,在本體編輯器Protégé中進(jìn)行本體構(gòu)建,通過neo4j圖數(shù)據(jù)庫將知識及其關(guān)系進(jìn)行存儲,并將其可視化顯示,以此形成了一種內(nèi)容豐富、可查詢、可更新的課程知識體系?;谥R圖譜的C++程序設(shè)計(jì)課程知識體系的構(gòu)建不僅能夠幫助學(xué)生構(gòu)建合理的知識體系,使學(xué)生思維清晰、更容易理解和掌握知識,還能進(jìn)一步幫助教師優(yōu)化教學(xué)、提升教學(xué)效果。后續(xù)研究可采用自動化手段進(jìn)行知識抽取,豐富數(shù)據(jù)資源,更新知識圖譜,可進(jìn)一步將知識圖譜應(yīng)用于課程答疑、學(xué)習(xí)路徑推薦等方面。這對專業(yè)課程教學(xué)改革具有重要的意義。