林生佑,曾 昊,徐芝琦,潘瑞芳
(1.浙江廣廈職業(yè)技術(shù)大學(xué)信息學(xué)院,浙江 東陽 322100;2.浙江傳媒學(xué)院媒體工程學(xué)院)
編程范式就是如何組織程序的基本思想,它反映了開發(fā)設(shè)計(jì)人員對程序的基本哲學(xué)觀。編程范式主要分為兩大范式:命令式編程范式、聲明式編程范式。這兩大范式衍生出最基本的面向過程、面向?qū)ο?、函?shù)式和邏輯式四個(gè)子范式,如圖1所示。
圖1 編程范式結(jié)構(gòu)圖
命令式范式的本質(zhì)就是編寫了一個(gè)命令列表,計(jì)算機(jī)按照列表中的命令順序執(zhí)行。其優(yōu)點(diǎn)是結(jié)構(gòu)簡單,易于實(shí)現(xiàn),缺點(diǎn)是不能解決復(fù)雜問題且效率較低。此外,在命令式范式的基礎(chǔ)上還分出面向過程和面向?qū)ο髢蓚€(gè)子范式。面向過程范式是一種基于過程調(diào)用的編程范式,面向過程程序被分成一組稱為過程或函數(shù)的可執(zhí)行代碼塊,其本質(zhì)是通過多個(gè)過程經(jīng)過順序、選擇和循環(huán)等程序結(jié)構(gòu)組合而成。而面向?qū)ο蠓妒绞澜缰械膶?shí)體都由類表示,對象是類的實(shí)例,數(shù)據(jù)和操作被封裝在對象中,對象由數(shù)據(jù)成員和方法成員組成,方法對對象進(jìn)行操作,而對象接收來自方法的消息請求來執(zhí)行計(jì)算,實(shí)現(xiàn)交互,完成任務(wù)。
聲明式范式注重表達(dá)計(jì)算的邏輯,而忽略計(jì)算的具體流程。命令式告訴計(jì)算機(jī)如何做(How),而聲明式告訴計(jì)算機(jī)做什么(What)。在聲明式范式基礎(chǔ)上又可細(xì)分出函數(shù)式和邏輯式兩種子范式。函數(shù)式范式是一種基于遞歸函數(shù)計(jì)算理論的范式,其程序由一系列數(shù)學(xué)函數(shù)所組成,程序執(zhí)行便是計(jì)算這些函數(shù),并對表達(dá)式求值。而邏輯式范式以數(shù)理邏輯為基礎(chǔ),采用陳述性的方法表達(dá)系統(tǒng)內(nèi)的事實(shí)和規(guī)則,并通過這些事實(shí)和規(guī)則還原現(xiàn)實(shí)世界。邏輯式程序由各種斷言和推導(dǎo)規(guī)則所組成,程序的執(zhí)行則非常像數(shù)學(xué)中對命題或定理的證明過程。
計(jì)算機(jī)本科教育多范式編程教學(xué)就是指在編程教學(xué)過程中融合多種范式思維,教授多種范式語言,使學(xué)生了解不同編程范式的基本思想和適用場合,以便學(xué)生在遇到問題時(shí)可以找到最適合解決問題的編程范式,從而培養(yǎng)學(xué)生求解復(fù)雜問題的能力。
編程范式是學(xué)習(xí)編程語言時(shí)必須先理解及掌握的重要概念。編程范式教學(xué)的本質(zhì)是給學(xué)生教授范式背后的編程哲學(xué),即編程語言的邏輯和思考現(xiàn)實(shí)問題的方式。國內(nèi)高校對于編程范式的教學(xué)存在如下三個(gè)方面的問題。
大多數(shù)高校的編程課程首先向?qū)W生教授面向過程范式,即C 程序設(shè)計(jì)。通常情況下,學(xué)生還會使用C語言學(xué)習(xí)其他后續(xù)課程,比如數(shù)據(jù)結(jié)構(gòu),算法分析等。在后續(xù)專業(yè)課程中,學(xué)生也會接觸到其他編程范式及語言,但此時(shí)學(xué)生的思維已經(jīng)深深地扎根于面向過程范式中了,要想學(xué)習(xí)新的編程范式是極其困難的。因此,學(xué)生應(yīng)該盡早接觸到多種編程范式,避免知識體系缺失,限制約束了學(xué)生對問題的理解及想象。
高校編程教學(xué)側(cè)重語法教學(xué)而忽略培養(yǎng)編程思維,基本只涉及到命令式范式中的面向過程和面向?qū)ο?。多范式融合的編程是?dāng)今互聯(lián)網(wǎng)行業(yè)及計(jì)算機(jī)軟件行業(yè)的新寵,比如一些傳統(tǒng)命令式語言C++,Java都在其最新版本的編譯器中加入函數(shù)式范式的特性;一些金融科技軟件也明確了使用函數(shù)式范式進(jìn)行開發(fā)。高校編程教學(xué)工作應(yīng)與行業(yè)需求進(jìn)行有效結(jié)合,增強(qiáng)學(xué)生畢業(yè)后的社會就業(yè)競爭力。
通過研究牛津大學(xué)計(jì)算機(jī)科學(xué)本科專業(yè)的教學(xué)大綱和課程設(shè)置發(fā)現(xiàn),該專業(yè)從一年級開始就教授學(xué)生多種范式的編程語言,如圖2所示?!昂瘮?shù)式編程”和“命令式編程”這兩門課程同時(shí)出現(xiàn)在一年級新生的必修課中;三年級的“知識表示和推理”則教授邏輯式范式,借助Prolog語言來學(xué)習(xí)有關(guān)語義方面的知識;“Lambda 演算和類型系統(tǒng)”則對應(yīng)高級函數(shù)式編程,讓學(xué)生對函數(shù)式范式有更深了解;“編程語言原理”則進(jìn)一步站在全局的視角系統(tǒng)闡述了編程語言及其范式理論。
圖2 牛津大學(xué)計(jì)算機(jī)科學(xué)專業(yè)必修課表
無獨(dú)有偶,帝國理工學(xué)院計(jì)算機(jī)本科教育在課程設(shè)置中也全面施行了多范式編程教學(xué),圖3 顯示了該校計(jì)算機(jī)本科專業(yè)一年級的“計(jì)算機(jī)實(shí)踐”的課程列表,其中“Haskell 函數(shù)式編程”,“Kotlin 函數(shù)式和面向過程編程”,“Kotlin 和Java 面向?qū)ο缶幊獭钡榷际且荒昙墝W(xué)生的必修課程。教授邏輯式范式的“Prolog導(dǎo)論”也出現(xiàn)在二年級的春季學(xué)期必修課程列表中。
圖3 帝國理工學(xué)院計(jì)算機(jī)科學(xué)專業(yè)必修課表
由此可見,諸如牛津大學(xué)及帝國理工學(xué)院這類世界一流大學(xué)計(jì)算機(jī)科學(xué)專業(yè)本科教育,基本囊括了所有的編程范式,反映了世界一流大學(xué)計(jì)算機(jī)科學(xué)專業(yè)對多范式編程教學(xué)及人才培養(yǎng)的重視。國內(nèi)高校編程教育模式應(yīng)多借鑒他們的編程教學(xué)方法。
在借鑒國外一流高校計(jì)算機(jī)本科編程教育做法的基礎(chǔ)上,我們提出了多范式編程教學(xué)新模式,如圖4所示。它的重點(diǎn)不在于介紹個(gè)別課程的教學(xué),而在于通過專業(yè)培養(yǎng)計(jì)劃修訂思路來實(shí)踐我們的多范式編程教學(xué)。其思路主要包含以下三個(gè)方面。
圖4 多范式編程范式教學(xué)模式
“離散數(shù)學(xué)”作為計(jì)算機(jī)科學(xué)專業(yè)學(xué)生的必修數(shù)學(xué)課,其中數(shù)理邏輯及圖論的部分內(nèi)容比較抽象且難度較高,不易被學(xué)生掌握,Prolog恰好是一種建立在邏輯學(xué)理論基礎(chǔ)之上的語言,通過在離散數(shù)學(xué)教學(xué)中引入Prolog可簡化學(xué)生對于命題邏輯及一階謂詞邏輯等概念的理解和掌握。還能通過Prolog程序快速的模擬并驗(yàn)證邏輯推導(dǎo)的全過程。學(xué)生在學(xué)習(xí)數(shù)理邏輯的同時(shí)也學(xué)習(xí)了以邏輯式范式思維解決問題的能力,達(dá)到了事半功倍的效果。此外,Prolog 語言還廣泛應(yīng)用在人工智能的研究中,可以用來建造專家系統(tǒng)、自然語言理解、智能知識庫等。在“人工智能基礎(chǔ)”課程引入Prolog語言,可以簡化課程理解難度,更好呈現(xiàn)課程內(nèi)容。
從大學(xué)一年級開始為新生提供多范式編程經(jīng)驗(yàn)。選擇“Python程序設(shè)計(jì)”作為教授多范式編程的第一門編程課程,Python作為一種多范式語言兼有面向過程,面向?qū)ο蠹昂瘮?shù)式的特性。在Python 教學(xué)過程中,先講授如何使用Python 進(jìn)行面向過程編程,然后,當(dāng)更復(fù)雜的程序需要進(jìn)行數(shù)據(jù)及類型抽象時(shí),自然地引入面向?qū)ο笏季S。接著,由遞歸的概念及實(shí)踐引出高階函數(shù),從而教授與數(shù)學(xué)思維接近的函數(shù)式編程風(fēng)格。最后通過將多個(gè)實(shí)例分別由這三種范式實(shí)現(xiàn)代碼,從思想和代碼層面對三種范式進(jìn)行對比和比較,生動直觀地向?qū)W生展示不同范式解決同一問題的思考方式和哲學(xué)思想。我們還在后續(xù)專業(yè)課“圖像與視頻處理”課程中使用Python 語言實(shí)現(xiàn)各種算法,將枯燥理論知識與Python 簡單易懂的代碼方式相結(jié)合,檢測了學(xué)生Python多范式編程的能力。
由于受課時(shí)影響,將所有的編程范式語言都囊括在計(jì)算機(jī)科學(xué)專業(yè)本科課程中是不現(xiàn)實(shí)的,但可以間接地將四種主要編程范式的思想及內(nèi)容嵌入到其他專業(yè)核心課程中,具體措施如下:
首先,“C 程序設(shè)計(jì)”課程是高校計(jì)算機(jī)專業(yè)的必修入門課程。C 語言是一個(gè)典型的面向過程范式語言,為了還原C語言教學(xué)目的的本質(zhì),在教學(xué)中全面結(jié)合面向過程范式的思想,著重培養(yǎng)給學(xué)生以面向過程思維思考問題的方式,避免C語言教學(xué)陷入語法陷阱。
其次,“C++程序設(shè)計(jì)”和“Java 程序設(shè)計(jì)”是面向?qū)ο缶幊陶n程,擔(dān)負(fù)著將面向?qū)ο蠓妒降乃枷肴谌刖幊探虒W(xué)的任務(wù)。這兩門課不僅要涵蓋面向?qū)ο蠡靖拍?,還要涵蓋如單繼承、多繼承、多態(tài)和抽象接口等高級面向?qū)ο笾黝}。將對象優(yōu)先思想方法全面在“C++程序設(shè)計(jì)”和“Java 程序設(shè)計(jì)”課程中推行,增強(qiáng)學(xué)生面向?qū)ο笏季S能力?!霸O(shè)計(jì)模式”是軟件開發(fā)人員在面向?qū)ο筌浖_發(fā)過程中面臨的一般問題的解決方案,是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。在“設(shè)計(jì)模式”課程中通過對二十三種經(jīng)典設(shè)計(jì)模式的教授并結(jié)合實(shí)例,進(jìn)一步讓學(xué)生對面向?qū)ο蠓妒接懈钊牒椭庇^的理解。
再次,在“數(shù)據(jù)結(jié)構(gòu)”課程中引入函數(shù)式編程范式,嵌入函數(shù)式范式的Haskell語言可以更好地呈現(xiàn)課程內(nèi)容和簡化課程難度,比如結(jié)合Haskell中的遞歸和折疊函數(shù)等重要的計(jì)算思維講授遍歷和排序問題,在簡化了數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)難度的同時(shí)教授了函數(shù)式范式思想,拓寬了學(xué)生的視野。
我校計(jì)算機(jī)科學(xué)大類包括數(shù)字媒體技術(shù)、軟件工程和網(wǎng)絡(luò)工程這三大專業(yè),其中數(shù)字媒體技術(shù)專業(yè)學(xué)生480 人,軟件工程專業(yè)學(xué)生320 人,網(wǎng)絡(luò)工程專業(yè)學(xué)生320 人。多范式編程教學(xué)新模式從我校19 級數(shù)字媒體技術(shù)專業(yè)開始進(jìn)行試點(diǎn)。通過近二年的探索與實(shí)踐,學(xué)生的算法設(shè)計(jì)及綜合開發(fā)能力有了一定的提升,主要表現(xiàn)在:
在每年的編程能力比賽中,教改試點(diǎn)的數(shù)技專業(yè)學(xué)生在前50 名中占37 人,遠(yuǎn)比軟工和網(wǎng)工專業(yè)(10人和3 人)人數(shù)多。且數(shù)技專業(yè)的學(xué)生能較好地選擇并靈活地使用合適的編程范式來解答競賽試題。在教改試點(diǎn)前的2017-2019 年,我院參加浙江省藍(lán)橋杯獲獎(jiǎng)人數(shù)約每年6 人左右,到了2021 年,獲獎(jiǎng)人數(shù)已增加到22人。
通過對比數(shù)技專業(yè)教改前后近兩年的“數(shù)據(jù)結(jié)構(gòu)”和“離散數(shù)學(xué)”的學(xué)生期末成績數(shù)據(jù),在期末試卷難度相近的情況下,經(jīng)過函數(shù)式和邏輯式范式教學(xué)的學(xué)生的成績普遍優(yōu)于沒有融合編程范式教學(xué)的其他專業(yè)學(xué)生,各班平均成績大約提高4-10分。
程序設(shè)計(jì)競賽考察的是學(xué)生的算法設(shè)計(jì)實(shí)現(xiàn)能力,而通過作品參加各類學(xué)科競賽和專業(yè)大賽則考察的是學(xué)生的分工協(xié)作、語言表達(dá)和項(xiàng)目開發(fā)能力。2020 年全院六個(gè)工科專業(yè)參加各類學(xué)科競賽和專業(yè)大賽省級以上獲獎(jiǎng)104 人次,其中數(shù)技專業(yè)學(xué)生獲獎(jiǎng)23 人次,僅2021 年上半年就已達(dá)113 人次,數(shù)技專業(yè)學(xué)生獲獎(jiǎng)達(dá)31人次。
在編程課程中引入多范式編程教學(xué)新模式是今后編程類課程未來發(fā)展的大勢所趨。計(jì)算機(jī)科學(xué)專業(yè)的本科生應(yīng)當(dāng)對主要編程范式有一定了解和掌握,以便更好從事專業(yè)工作。多范式編程教學(xué)新模式突破了傳統(tǒng)程編程類課程的理念,提高編程教學(xué)的科學(xué)性和有效性,同時(shí)也拓闊了學(xué)生的視野及思維方式,提升了學(xué)生的就業(yè)競爭力。