摘要:從計(jì)算科學(xué)的角度出發(fā),對程序設(shè)計(jì)課程的教學(xué)方法進(jìn)行探索與思考,介紹東南大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院在改進(jìn)教學(xué)理念及教學(xué)方法方面所做的嘗試。文章對教學(xué)理念的現(xiàn)狀及發(fā)展進(jìn)行了分析,提出在教學(xué)中引入以數(shù)據(jù)意識和算法可行性為切入點(diǎn)的教學(xué)方法,運(yùn)用推動思維、注重風(fēng)格的教學(xué)理念來提高教學(xué)效率,從而促進(jìn)教學(xué)質(zhì)量的提高。
關(guān)鍵詞:程序設(shè)計(jì);基礎(chǔ)教學(xué);教學(xué)理念;形象思維;抽象思維
在計(jì)算機(jī)應(yīng)用教學(xué)領(lǐng)域,程序設(shè)計(jì)課程是普遍開設(shè)的公共課程,歷經(jīng)數(shù)十年的發(fā)展,人們認(rèn)識到,學(xué)習(xí)程序設(shè)計(jì)已不只是學(xué)習(xí)一種軟件開發(fā)工具,更有意義的是學(xué)習(xí)和掌握一種適用于面向計(jì)算機(jī)及其計(jì)算環(huán)境的新型思維方法、特殊的邏輯表達(dá)和具有計(jì)算機(jī)應(yīng)用特點(diǎn)的哲學(xué)理念。在最新的教育部高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會發(fā)布的《程序設(shè)計(jì)基礎(chǔ)課程教學(xué)實(shí)施方案》中提出,“在課程涉及的能力培養(yǎng)目標(biāo)上,從提出問題、設(shè)計(jì)算法、選定數(shù)據(jù)表示方式,到編寫代碼、測試和調(diào)試程序,以及分析結(jié)果的整個(gè)程序設(shè)計(jì)過程中,培養(yǎng)學(xué)生抽象問題、設(shè)計(jì)與選擇解決方案的能力,以及用程序設(shè)計(jì)語言實(shí)現(xiàn)方案并進(jìn)行測試和評價(jià)的能力[1]”。其中的能力培養(yǎng)目標(biāo)是教學(xué)的核心目標(biāo),而在這門學(xué)科中,能力的培養(yǎng)實(shí)質(zhì)上是一種腦力的培養(yǎng)。
對于初次學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)的學(xué)生來說,很多概念和術(shù)語都是陌生的,有些甚至感覺不易理解。在學(xué)習(xí)過程中,從外在的形象到內(nèi)部的抽象,都需要逐步理解,學(xué)生的學(xué)習(xí)效率在很大程度上取決于是否感受到或掌握了計(jì)算科學(xué)的思維方法和理念。因此,在學(xué)生和教師這兩方面,都需要一些從計(jì)算科學(xué)的角度出發(fā)的觀察與思考。在課堂上,教學(xué)過程的主體是對學(xué)生講授知識,而在知識的表達(dá)上貫穿著老師自己的教學(xué)理念和基本思想的發(fā)揮。因此,樹立什么樣的教學(xué)理念是一個(gè)很值得思考的問題。
1引導(dǎo)學(xué)生重新認(rèn)識數(shù)據(jù)
數(shù)據(jù)是程序工作的對象,開始學(xué)習(xí)時(shí),學(xué)生都能理解可計(jì)算的數(shù)和文字、圖表等數(shù)據(jù),然而很多情況下數(shù)據(jù)不是單一出現(xiàn)的,一個(gè)問題中涉及的數(shù)據(jù)是否存在內(nèi)在關(guān)系,這種關(guān)系如何用程序設(shè)計(jì)語言描述或表達(dá),往往是初學(xué)者忽視的。我們在教學(xué)中較早地引入數(shù)據(jù)觀點(diǎn),對提高程序設(shè)計(jì)能力有著較好的基礎(chǔ)作用。所謂數(shù)據(jù)觀點(diǎn),主要指數(shù)據(jù)的定義、數(shù)據(jù)關(guān)系、數(shù)據(jù)類型、數(shù)據(jù)存儲、數(shù)據(jù)訪問、訪問異常等一些在程序中與數(shù)據(jù)相關(guān)的問題,對這些問題應(yīng)有明確的認(rèn)識,了解解決這些問題的方法。
數(shù)據(jù)是程序運(yùn)行時(shí)的核心。對問題進(jìn)行分析后建立數(shù)據(jù)模型,是應(yīng)用程序設(shè)計(jì)的主要基礎(chǔ)工作,特別是在面向?qū)ο蟪绦蛟O(shè)計(jì)的過程中,自定義數(shù)據(jù)類型成為主導(dǎo),教學(xué)中應(yīng)更加注重提高學(xué)生的數(shù)據(jù)抽象能力,學(xué)會數(shù)據(jù)模型的構(gòu)造方法。由于數(shù)據(jù)所面對的是操作(方法),數(shù)據(jù)模型的結(jié)構(gòu)關(guān)系到操作代碼和程序流程的質(zhì)量,對程序的執(zhí)行效率也有較大影響,在教學(xué)中可以通過實(shí)例做一些分析對比,使學(xué)生對此問題有足夠的認(rèn)識。
數(shù)據(jù)是信息的載體,在信息處理系統(tǒng)中,計(jì)算和信息組成了一個(gè)不可分割的概念對[2]。在程序設(shè)計(jì)教學(xué)中,需要講解的另一個(gè)問題是如何利用數(shù)據(jù)來承載信息或表達(dá)信息。例如,程序狀態(tài)信息和程序環(huán)境的數(shù)據(jù)化表示方法以及這種表示對算法實(shí)現(xiàn)的作用和影響。在教學(xué)中使用的一個(gè)較為簡單的例子是說,二進(jìn)制數(shù)運(yùn)用自然界中具有二元狀態(tài)的物體來表示,與之相反,我們可以設(shè)定一些數(shù)來表示事物的不同狀態(tài),或者說是把某種狀態(tài)或狀態(tài)符號稱為數(shù)據(jù)。例如,在冒泡排序程序中,使用一個(gè)取值為0或1的狀態(tài)變量標(biāo)記在本趟掃描中是否發(fā)生了交換,以便提前結(jié)束循環(huán)從而節(jié)省程序運(yùn)行時(shí)間。在算法的程序?qū)崿F(xiàn)中較常用的非原始數(shù)據(jù)有些是邏輯數(shù)據(jù),而何時(shí)需要使用邏輯數(shù)據(jù),怎樣使用等都是學(xué)生面臨的新問題。數(shù)據(jù)與信息的關(guān)系、數(shù)據(jù)的合理組織是程序設(shè)計(jì)中的基礎(chǔ)技術(shù),也是提高程序質(zhì)量的重要技術(shù),需要使學(xué)生認(rèn)識到這一點(diǎn)。
直觀地看,能夠輸入計(jì)算機(jī)的信息都是數(shù)據(jù)。而實(shí)際上,要想在程序運(yùn)行時(shí)把數(shù)據(jù)輸入計(jì)算機(jī),需要做不少的準(zhǔn)備工作,如數(shù)據(jù)的存儲方式、數(shù)據(jù)的類型聲明、數(shù)據(jù)的合法性檢驗(yàn)、輸入/輸出界面的設(shè)計(jì)等。數(shù)據(jù)還是對算法和程序進(jìn)行正確性檢驗(yàn)所必需的依賴對象。學(xué)生如果能夠?qū)?shù)據(jù)問題有更多的理解和思考,則會在學(xué)習(xí)效率上有事半功倍的效果。
2從算法可行性的角度認(rèn)識計(jì)算機(jī)
無論計(jì)算機(jī)的用途有何千差萬別,本質(zhì)上它都是一種操作、處理符號的物理系統(tǒng)。對于計(jì)算機(jī)程序而言,計(jì)算就是對符號的操作,無論抽象度多么高的算法都要轉(zhuǎn)變?yōu)閷?yīng)的程序代碼,最終都要被轉(zhuǎn)換為可執(zhí)行的機(jī)器代碼。因此,算法的可行性總是老師對初學(xué)程序設(shè)計(jì)的學(xué)生所強(qiáng)調(diào)的要點(diǎn)。而要理解可行性,學(xué)生首先需要理解計(jì)算機(jī)的內(nèi)部工作原理。
在計(jì)算機(jī)內(nèi)的世界,將機(jī)器的行為和方法與現(xiàn)實(shí)世界中人的行為和方法相比較,既存在著一種固有的映射關(guān)系,更具有一些超越人的能力和表現(xiàn)。人們通常對計(jì)算機(jī)的描述是計(jì)算機(jī)以CPU為核心,這一點(diǎn)是確定的。雖然CPU是計(jì)算機(jī)的心臟,程序是在CPU中執(zhí)行的,但馮?諾依曼體系結(jié)構(gòu)的工作原理卻是以內(nèi)存為中心,或者說從數(shù)據(jù)的角度看,內(nèi)存中的數(shù)據(jù)是穩(wěn)定狀態(tài),數(shù)據(jù)在CPU中只停留瞬間,這一瞬間用來改變或轉(zhuǎn)移數(shù)據(jù)。再從算法的角度看,算法的流程控制依賴變量,而變量代表了某一存儲單元,程序流程的執(zhí)行就是各個(gè)變量的內(nèi)容和狀態(tài)的變遷序列。對于初學(xué)者而言,算法是否具有可行性,主要看它的計(jì)算方法是否能轉(zhuǎn)換為可用變量表達(dá)的表達(dá)式,或者是可由變量控制的基本工作流程。
例如,C/C++語言程序中的函數(shù)調(diào)用機(jī)制以及遞歸程序都是由基于內(nèi)存中的棧區(qū)來實(shí)現(xiàn)的,學(xué)生只有理解了棧的機(jī)制和運(yùn)用方法才能較快地理解遞歸算法和程序。按理說,用高級語言編程就是為了屏蔽底層的硬件,但是對于初學(xué)者來說,計(jì)算機(jī)的硬件工作環(huán)境應(yīng)該了解清楚,甚至需要感覺擁有一種“內(nèi)視力”,似乎看到程序的工作過程??梢哉f要做到心中有一個(gè)計(jì)算機(jī)。
數(shù)據(jù)結(jié)構(gòu)的定義也需考慮內(nèi)存的特點(diǎn)和局限來設(shè)計(jì),即數(shù)據(jù)存儲表示的可行性。例如,學(xué)生對鏈表概念感覺很抽象,其問題實(shí)質(zhì)在于如何抽象地描述數(shù)據(jù)的非連續(xù)存儲的物理實(shí)現(xiàn)。鏈表概念可以分為2層邏輯結(jié)構(gòu),一層是結(jié)點(diǎn)結(jié)構(gòu),另一層是鏈結(jié)構(gòu)(主要成員是頭指針)。單是結(jié)點(diǎn)結(jié)構(gòu)就要表述為把一個(gè)基本類型的變量(如整型變量a)和一個(gè)指針p整合在一起定義為結(jié)構(gòu)變量Node,那么指針p就像變量a伸出的一個(gè)鉤子,這個(gè)鉤子可以用來拉住另一個(gè)結(jié)點(diǎn)(其實(shí)質(zhì)是存儲了后繼結(jié)點(diǎn)的地址)。多個(gè)結(jié)點(diǎn)一個(gè)連一個(gè)地鉤住就形成了一條鏈,我們就稱p為鏈指針。而如果要使它能夠鉤住另一個(gè)結(jié)點(diǎn),就必須規(guī)定該指針的類型,使它具有與自己所在結(jié)點(diǎn)相同的類型,從而使程序在編譯和執(zhí)行時(shí)能夠限定它只能指向與本結(jié)點(diǎn)具有相同類型的其他結(jié)點(diǎn)。但在定義鏈指針類型時(shí),定義本結(jié)點(diǎn)的描述還未結(jié)束,為什么又能使用這個(gè)未完成的類型名?可以解釋為由于指針的值只能存儲地址,編譯系統(tǒng)為指針類型規(guī)定了占用4個(gè)字節(jié)的空間長度,因此可以先對其進(jìn)行聲明,等指針被使用時(shí),前面的結(jié)點(diǎn)結(jié)構(gòu)定義已經(jīng)完成并生效,這是編譯系統(tǒng)為實(shí)現(xiàn)鏈表而特別采取的措施。對于鏈結(jié)構(gòu),需要強(qiáng)調(diào)表中的結(jié)點(diǎn)是動態(tài)生成的,沒有變量名,要想訪問一個(gè)結(jié)點(diǎn)只能先找到其前驅(qū)結(jié)點(diǎn),從中取出它后繼結(jié)點(diǎn)的地址。由于第一個(gè)結(jié)點(diǎn)沒有前驅(qū)結(jié)點(diǎn),因此必須安排一個(gè)表頭指針來存儲頭結(jié)點(diǎn)地址。在課堂上,隨時(shí)在黑板上畫出相應(yīng)的示意圖,可以使學(xué)生更加直觀地理解所學(xué)習(xí)的概念。
可行性的考量基礎(chǔ)在于計(jì)算機(jī)工作原理對抽象高度的限制。例如書寫一個(gè)多分支的邏輯表達(dá)式,需要在其簡潔性和充分性之間做出平衡。因此,還是需要學(xué)生對計(jì)算機(jī)原理和工作方式有準(zhǔn)確的理解。
3思維深度的推動
在教學(xué)中,學(xué)生往往看例題容易理解,而自己動手卻步履維艱,究其原因主要是還沒有具備科學(xué)抽象能力以及沒有掌握將理論應(yīng)用于實(shí)踐的方法,對所學(xué)知識的認(rèn)識和思維達(dá)到一定程度時(shí)就難以深入下去。程序設(shè)計(jì)是一種高強(qiáng)度的腦力勞動,程序代碼是算法的語言實(shí)現(xiàn),而算法是經(jīng)驗(yàn)和思維的結(jié)果。我們?nèi)祟惖乃季S方式主要分為兩類,一是形象思維,二是抽象思維。通常人們總是認(rèn)為程序設(shè)計(jì)是基于抽象思維的勞動。然而,越是強(qiáng)調(diào)其抽象性,學(xué)生越感覺學(xué)習(xí)困難。實(shí)際上,程序在計(jì)算機(jī)中運(yùn)行是一個(gè)物理的工作過程,而算法又來源于物質(zhì)的現(xiàn)實(shí)世界。在抽象邏輯的背后有著具象的問題和環(huán)境,有著容易認(rèn)識和掌握的形象化技術(shù)和方法。如果從形象思維入手,經(jīng)過一段過渡再到抽象思維,則會有事半功倍之效。
形象思維的運(yùn)用方式是以具體事例為載體,對事物的屬性和活動進(jìn)程做直觀式思考。特別是對于計(jì)算機(jī)程序,可以設(shè)想其執(zhí)行過程,把它看作具有運(yùn)動性的事物,這和數(shù)學(xué)方法解決問題是大不相同的。程序尚未執(zhí)行時(shí)即可形容和感知程序中的每一條指令的執(zhí)行結(jié)果和程序邏輯的運(yùn)動軌跡,甚至程序還未形成,流程已在腦中,在此基礎(chǔ)上再進(jìn)一步尋找和篩選最合適的條件和算法要素以解決問題。例如程序中處理的數(shù)據(jù)應(yīng)具有離散特性,對離散數(shù)據(jù)的處理有一套基本方法,最初始的例子是采用循環(huán)遞推的方法計(jì)算自然數(shù)前n項(xiàng)和或者是n!。在這類算法中,自然是以循環(huán)語句為主體,這時(shí),一條循環(huán)語句是高度抽象的,但其執(zhí)行過程必須分解為n次基于存儲單元(變量)的運(yùn)算,這又回歸到自然的手工方法且是形象化的。這種基于形象思維的學(xué)習(xí)方法適合于初學(xué)階段,特別是學(xué)習(xí)程序樣例時(shí)幫助理解教材中給出的程序代碼。如果學(xué)生把自己比做運(yùn)行程序的計(jì)算機(jī),在程序的執(zhí)行過程中感知其動力、目的和成敗,則能進(jìn)一步理解程序邏輯與執(zhí)行結(jié)果的關(guān)系。
度過初級階段后,設(shè)計(jì)算法和編寫代碼描述出算法的內(nèi)容,是進(jìn)一步的抽象思維所要解決的問題。抽象思維的主要特征是以概念為載體,對概念進(jìn)行思考,進(jìn)行概括、描述、推導(dǎo)等活動。程序設(shè)計(jì)的思考過程是一個(gè)從形象到抽象的轉(zhuǎn)化過程,這一過程應(yīng)基于科學(xué)抽象的基本方法??茖W(xué)抽象是指在思維中對同類事物去除其現(xiàn)象的、次要的方面,抽取其共同的、主要的方面,從而做到從個(gè)別中把握一般,從現(xiàn)象中把握本質(zhì)的認(rèn)知過程和思維方法[3]。在遞推計(jì)算的例子中,數(shù)據(jù)的表象是自然數(shù),按數(shù)學(xué)方法抽取其本質(zhì)則得到遞推式f(n)=f(n-1)+n,但從算法的角度來抽象,卻要離散化地表示為n從初值開始通過n=n+1逐步演變?yōu)榻K值。可見在不同的領(lǐng)域中,抽象的前提是基于一套相應(yīng)的理論,例如在程序設(shè)計(jì)領(lǐng)域,這一理論基礎(chǔ)是本課程所學(xué)習(xí)的一套形式化語言及公理。
感性與理性,形象與抽象都有不同的層次。例如在程序中輸入輸出是不可或缺的,輸入輸出也稱為人機(jī)交互,而人并不出現(xiàn)在程序中,程序只能響應(yīng)人的操作,這些操作又只能通過外部設(shè)備來傳達(dá),所以代表人的模型抽象為交互介質(zhì),這是第一層抽象。在不同語言中還需要第二層抽象,如C語言中以文件形式表現(xiàn)各種外部設(shè)備。在程序設(shè)計(jì)語言這一層,語言本身的詞匯、語法和語句又是一種現(xiàn)象,在這個(gè)現(xiàn)象的背后又是一套基于符號、規(guī)則和變形理論的形式化方法。
在學(xué)習(xí)過程中,通過從形象化思維到抽象思維可以完成建立概念、掌握方法和形成理論的學(xué)習(xí)階段,進(jìn)一步再將理論運(yùn)用到實(shí)踐,解決多種問題(也稱為舉一反三)的學(xué)習(xí)階段還需要加深思維活動,否則學(xué)習(xí)將止步不前。那么如何推動第二階段的思維呢?在本課程的教學(xué)中,經(jīng)驗(yàn)主義會得到部分提倡,具體來說是將屬于感覺和直觀的內(nèi)容提升為普遍的觀念、命題和規(guī)律。但問題的復(fù)雜性以及計(jì)算機(jī)系統(tǒng)和算法語言的局限性使經(jīng)驗(yàn)性結(jié)論也受到限制。可行的方法是提倡思辨的學(xué)習(xí)態(tài)度,具體方法是質(zhì)疑和推論。一方面對前面的成果提出質(zhì)疑,找出新的問題,另一方面運(yùn)用歸納和分離方法找出不同問題和算法的相同點(diǎn)和差別點(diǎn),經(jīng)過判斷和分析推導(dǎo)出新的結(jié)論。例如在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,通訊錄的設(shè)計(jì)和實(shí)現(xiàn)是一個(gè)常見的作業(yè),學(xué)生們第一次設(shè)計(jì)方案普遍采用定義一個(gè)記錄類并建立對象數(shù)組,這是在記錄層次上的一次抽象。這種方案的缺點(diǎn)是將對象數(shù)組的元素作為基本訪問單位,數(shù)組的有效長度沒有被封裝,數(shù)據(jù)表的操作也是獨(dú)立的,這樣的程序很難維護(hù)。當(dāng)引導(dǎo)學(xué)生們對這一方案進(jìn)行分析后,許多同學(xué)改用符合線性表解決方案的復(fù)合類,即記錄結(jié)點(diǎn)類和表長度變量作為通訊錄類的數(shù)據(jù)成員,使數(shù)據(jù)表的操作被封裝在通訊錄類中,這是二次抽象,通過通訊錄類的對象間接訪問記錄類的對象。這樣一來,學(xué)生在作業(yè)中掌握了多層次抽象的基本方法。
思維是人的主觀意識,其正確性是個(gè)人無法保證的,對結(jié)果的檢驗(yàn)顯得極為重要。軟件開發(fā)領(lǐng)域重視的算法驗(yàn)證和程序驗(yàn)證也需要引導(dǎo)學(xué)生學(xué)習(xí)運(yùn)用。在教學(xué)中較為快速有效的方法是課堂上老師對學(xué)生的作品進(jìn)行點(diǎn)評,學(xué)生進(jìn)行討論并向著深入的方向繼續(xù)思考,從而認(rèn)清錯(cuò)誤及發(fā)生的原因,改進(jìn)程序質(zhì)量,同時(shí)能夠觀察到較高質(zhì)量的作業(yè)并得以借鑒。
4外部的學(xué)習(xí)因素
在本課程中,教學(xué)效率與方法的傳授有很大關(guān)系。由于前后所學(xué)的知識點(diǎn)有相互關(guān)聯(lián)和貫穿使用的特點(diǎn),需要引導(dǎo)學(xué)生運(yùn)用多種方法對所學(xué)內(nèi)容做細(xì)致地梳理。例如,運(yùn)用相似識別法、比較分類法等。對同一個(gè)問題,找出不同解法,同一個(gè)解法,找出不同的語言描述工具;運(yùn)用分類法做一個(gè)算法集錦,以積累編程經(jīng)驗(yàn)。雖然這些都是學(xué)習(xí)的基本方法,但如何運(yùn)用大有講究。
學(xué)生的心理因素和視覺因素也會影響到學(xué)習(xí)效果。例如,程序代碼的書寫風(fēng)格往往是初學(xué)者不重視的,但是按照公認(rèn)的良好風(fēng)格書寫程序代碼,會使程序看上去具有一種美感。程序的美是一種科學(xué)美,不易被查覺,特別是程序代碼文本,只有喜愛編程的人才會認(rèn)為它是美的。量子物理學(xué)家海森堡(Heisenberg)曾說:“美對于發(fā)現(xiàn)真理的重要意義在一切時(shí)代都得到承認(rèn)和重視[4]”。我們通過對學(xué)生書寫代碼提出風(fēng)格的要求,試圖使學(xué)生認(rèn)識到,編寫具有美感的程序代碼,也是學(xué)習(xí)程序設(shè)計(jì)的一個(gè)必要條件,當(dāng)他能夠看出程序的美就可以認(rèn)為自己是入門了,這在他的心理上會產(chǎn)生一定的自信心。其實(shí),良好的程序代碼風(fēng)格只是一種外在美,它其實(shí)是程序內(nèi)在的合理邏輯的體現(xiàn),合理且通順的邏輯會自然地具有一種和諧的美,因?yàn)樗蔷幊陶叩某晒λ季S結(jié)果,這本身就令人內(nèi)心感到美好和興奮。良好風(fēng)格的程序源代碼具有層次性、呈現(xiàn)出一種結(jié)構(gòu)美,具有簡潔性、統(tǒng)一性、對稱性、協(xié)調(diào)性以及思辨性。對程序風(fēng)格的習(xí)慣性會提高人的編程直覺能力,這也是從一個(gè)角度體現(xiàn)經(jīng)驗(yàn)提高了能力。
5結(jié)語
實(shí)施以上教學(xué)實(shí)踐之后,筆者發(fā)現(xiàn)近幾年能夠較快入門的學(xué)生比例不斷提高,學(xué)生對參與討論和完成作業(yè)的積極性也非常高,特別是越來越多的學(xué)生熱衷于嘗試?yán)蠋熢黾拥木哂袘?yīng)用意義的補(bǔ)充題,感覺到了學(xué)習(xí)本課程的樂趣。在教學(xué)的成敗問題上,教師的理念至關(guān)重要,理念的進(jìn)步與更新也是一個(gè)不斷學(xué)習(xí)的過程。本文只是較為粗淺的探索,今后還需繼續(xù)努力更新和完善,使本課程的教學(xué)工作更上一層樓。
參考文獻(xiàn):
[1] 教育部高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會. 程序設(shè)計(jì)基礎(chǔ)課程教學(xué)實(shí)施方案[J/OL]. [2009-10-01]. http:// computer.cncourse.com/computer/html/ejournal/2010_03/Program_wlx/index.html.
[2] 酈全民. 用計(jì)算的觀點(diǎn)看世界[M]. 中山:中山大學(xué)