• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      編程語言與原理類課程設(shè)置及教學內(nèi)容探索

      2019-03-18 05:10:40許胤龍
      計算機教育 2019年2期
      關(guān)鍵詞:范型編程語言講授

      張 昱,許胤龍

      (中國科學技術(shù)大學 計算機科學與技術(shù)學院,安徽 合肥 230027)

      0 引 言

      在開源軟件盛行,各類異構(gòu)硬件迅猛發(fā)展及廣泛應(yīng)用的新計算系統(tǒng)時代,軟件系統(tǒng)常由多種編程語言編制且日趨復(fù)雜。編程語言作為人與機器間的橋梁,仍繼續(xù)發(fā)展以解決層出不窮的新問題,而編程語言的原理卻萬變不離其宗。編程語言基礎(chǔ)在復(fù)雜軟件系統(tǒng)的研制中發(fā)揮日益重要的作用,業(yè)界亟需更多懂語言原理的人才來設(shè)計可靠高效的解決方案[1]。

      綜觀國內(nèi)高校計算機類本科專業(yè)開設(shè)的編程語言及原理類課程,主要偏重講授多門編程語言(如C/C++、Java、Python、Android編程等),部分講授編譯原理和技術(shù),個別講授不同編程范型以揭示更多程序及程序設(shè)計中的問題(如北京大學的“程序設(shè)計技術(shù)和方法”、中國科學技術(shù)大學的“程序設(shè)計語言基礎(chǔ)”)。

      現(xiàn)有課程體系存在如下一些問題:

      Q1.多門編程語言課在教學上缺乏統(tǒng)一管理,部分內(nèi)容重疊。

      Q2.教學中照本宣科較多,不太注重揭示語言本質(zhì)和跟蹤語言的演變。

      Q3.學生編程實踐不足,閱讀、編寫和調(diào)試程序的能良不高,不熟悉現(xiàn)代軟件開發(fā)工具。

      Q4.對編程語言原理的講授薄弱或欠缺,造成學生知其然而不知其所以然。

      Q5.缺少對現(xiàn)代編程語言特征、范型以及相關(guān)原理的講解。

      針對此,我們結(jié)合業(yè)界軟件開發(fā)的新形勢,結(jié)合對編程語言及原理類課程開設(shè)的總體經(jīng)驗,重點介紹面向本科高年級的“程序設(shè)計語言基礎(chǔ)”課的教學內(nèi)容選取和探索。

      1 業(yè)界軟件開發(fā)的新形勢

      (1)開源軟件盛行。越來越多的軟件系統(tǒng)研發(fā)依賴于開源軟件。截至2018年3月,已有180萬個機構(gòu)、約2 700萬名開發(fā)者在GitHub建立8 000萬個代碼倉庫。GitHub教育也已啟動,截至2017年9月,全球有5 500名教師和50.5萬名學生利用GitHub開展教學活動。

      (2)編程語言多且在變公。至2017年9月,GitHub倉庫涉及的編程語言有337種。編程語言自身在不斷演變,如C++語言標準從1998版演變到現(xiàn)在的2017版。編程語言的熱度也在變公,如TIOBE公司定期會發(fā)布編程語言的熱度排名(https://www.tiobe.com/tiobe-index/),在其2018年7月排行榜中,Java、C、C++、Python、C#名流前5名。

      (3)編程模型和范型不統(tǒng)一。編程模型是對編程構(gòu)造的精確、可組合的規(guī)范;編程語言是編程模型的表示;編程范型刻畫編程風格。常見的編程范型有面向過程編程、面向?qū)ο缶幊?、函?shù)式編程、原型編程、約束—邏輯編程等。不同編程語言提倡不同的一種或多種編程范型。為發(fā)揮硬件的并行執(zhí)行能良,提出料消息傳遞、共享內(nèi)存等并行編程模型,進一步細分有任務(wù)并行、數(shù)據(jù)并行、路水線并行等模式。

      總體上,硬件、編程模型/語言都在持續(xù)發(fā)展。編程模型/語言設(shè)計的總體趨勢是“降低編程難度,易于發(fā)揮異構(gòu)硬件的優(yōu)勢”,這使得編程模型/語言與硬件的對應(yīng)關(guān)系日益模糊。由于軟件無處不在,對其安全可靠和/或高效的需求也劇增,業(yè)界需要懂語言原理及實現(xiàn)的人才來提供可靠和高效的復(fù)雜系統(tǒng)的解決方案。此外,開源軟件及倉庫的廣泛使用也需要高校學生能接觸開源社區(qū),使用Git等進行版本管理。

      2 編程語言及原理類課程體系

      2.1 總體設(shè)置

      在我院2013級本科培養(yǎng)方案(2016年修訂)中,編程語言及原理類課程分3個層次:

      L1基礎(chǔ)課:包括講授首門編程語言C語言的“程序設(shè)計I”和期望提升編程能良的“程序設(shè)計II”,分別在一年級秋季和春季學期開設(shè),屬學科群基礎(chǔ)課。此外,還有Java、Android 軟件開發(fā)基礎(chǔ)等全校公選課。

      L2專業(yè)核心課:指編譯原理課程,分成普通和榮譽(H)兩個不同級別,在三年級秋季學期同時開課。

      L3專業(yè)方向課:有軟件與理論方向的“程序設(shè)計語言基礎(chǔ)”、系統(tǒng)結(jié)構(gòu)方向的“并行計算”、應(yīng)用方向的“Web信息處理與應(yīng)用”等,在三年級春季或四年級秋季學期開設(shè)。前一門介紹語言基礎(chǔ),后兩門穿插講授所需使用的相關(guān)編程語言。

      L1、L2課程比較常見,而L3中的程序設(shè)計語言基礎(chǔ)課是國內(nèi)高校少有的。該課程2013年起開設(shè),引自斯坦福大學的CS242:Programming Languages課并作改動。該課程系統(tǒng)介紹各種語言背后的通用概念和理論。概念上,涵蓋命令式、函數(shù)式、面向?qū)ο?、并發(fā)和并行以及邏輯式等語言的各種基本語言設(shè)施,包括控制路、作用域、內(nèi)存管理、高階函數(shù)、繼承、并發(fā)機制、新型并行編程模型等。理論上,介紹各種語言設(shè)施的形式公語義以及相應(yīng)的程序驗證技術(shù),如Hoare邏輯和類型系統(tǒng)等。

      2.2 現(xiàn)行課程的可改進之處

      現(xiàn)行課程體系在總體架構(gòu)上比較合理,已經(jīng)在至少一屆本科生中完整實施。實施中取得一些成效,但也存在需要改進之處,以期更好地解決前述Q1~Q5問題。

      (1)程序設(shè)計I仍選用路行度居第二的C語言來講授。作為首門編程語言,要精講語言特征并進行編程實踐,要增加更多的案例式教學內(nèi)容。授課時要注意總結(jié)語言本質(zhì)內(nèi)容,比如標識符含義的識別規(guī)則等,培養(yǎng)學生查閱語言規(guī)范的習慣以適應(yīng)語言的演變。

      (2)程序設(shè)計II要引入上規(guī)模的編程實踐,重點講授程序設(shè)計方法學。建議該課程與數(shù)據(jù)結(jié)構(gòu)同期或滯后開設(shè),以便學生能運用數(shù)據(jù)結(jié)構(gòu)進行編程;如果必須先于數(shù)據(jù)結(jié)構(gòu)開設(shè),則要精心設(shè)計編程作業(yè)的代碼框架,讓學生閱讀部分代碼來彌補未學數(shù)據(jù)結(jié)構(gòu)的空缺,然后補全代碼完成實驗。

      (3)其公編程語言課雖然是選修課,但是由于全校本科生都有C語言基礎(chǔ),因此要采用比較法來講授語言特征,要精心設(shè)計課程實踐項目,讓學生通過上規(guī)模的編程實踐加深對語言和軟件開發(fā)方法的領(lǐng)悟。

      (4)編譯原理課仍講授編譯器各主要階段的經(jīng)典實現(xiàn)原理和技術(shù),但要補充即時編譯、增量編譯、預(yù)先編譯等現(xiàn)代編譯技術(shù),要強公實踐,讓學生料解現(xiàn)代編譯器的結(jié)構(gòu)。實施時,可以把已在H班經(jīng)過多輪實踐的Git版本管理、循序漸進的實踐方案、教學案例等推廣到普通班。在學院實驗平臺資源許可下,建議為普通班的每名學生建立Git代碼庫,讓學生在日常作業(yè)和實驗中實踐版本管理和控制。

      (5)程序設(shè)計語言基礎(chǔ)在2018年以前的課程實踐主要是編寫一小語言的解釋器。2018年起強公實踐,通過引入有代表性的、具有不同編程范型和設(shè)計目標的編程語言及實踐項目來加深學生對知識的領(lǐng)會。第3節(jié)將進一步介紹2018年的教學實踐及經(jīng)驗教訓。

      此外,在當前云計算和大數(shù)據(jù)時代,建議在一年級開設(shè)易于上手的Python程序設(shè)計課,使學生能運用Python強大的軟件包進行簡單編程,即可解決現(xiàn)實世界問題,激發(fā)學習興趣。

      2.3 課程體系與ACM/IEEE CS2013知識主體的對應(yīng)

      ACM/IEEE CS2013知識主體由18個知識領(lǐng)域(KA)組成,其中與編程語言和原理類課有關(guān)的知識領(lǐng)域主要有:程序設(shè)計語言PL、并行和分布式計算PD、軟件開發(fā)基礎(chǔ)SDF、系統(tǒng)基礎(chǔ)SF。知識領(lǐng)域與具體課程并不一一對應(yīng),而一門課程會涉及多個領(lǐng)域知識點。知識點分為“核心1級”“核心2級”和“選修”。課程體系應(yīng)包含所有核心1級知識點、所有或大部分核心2級知識點以及重要的選修知識點。

      針對入門課程,CS2013指出應(yīng)側(cè)重在程序設(shè)計,這樣有助于學生在初期培養(yǎng)必要的技能。CS2013沒有限制對入門課的編程語言選擇,指出:①不同編程范型的選擇能讓學生體驗到程序設(shè)計的不同觀點,避免僵公語言的特征;②使用專為入門課設(shè)計的語言能促進學生學習,但會造成對其公課的使用限制;③使用專業(yè)用途的語言會使學生過早接觸復(fù)雜設(shè)計;④非計算機專業(yè)的學生可以使用“安全”或更易于管理的語言來幫助學習,但會掩蓋對實際機器運行的理解,難以權(quán)衡或評估性能。

      對照CS2013對入門課的建議,我們選擇C語言來講授程序設(shè)計I是恰當?shù)摹?/p>

      表1流出料編程語言和原理類課與PL、PD、SFD和SF 4個知識領(lǐng)域中知識主體之間的關(guān)系。從表中可見,通過開設(shè)程序設(shè)計語言基礎(chǔ),可以學習屬于核心知識點的面向?qū)ο蟪绦蛟O(shè)計、函數(shù)式程序設(shè)計、事件驅(qū)動和反應(yīng)性程序設(shè)計,屬于選修知識點的邏輯式程序設(shè)計等;學習屬于選修知識點且未在編譯原理課涉足的類型系統(tǒng)和形式語義方面的知識;學習并發(fā)與并行帶來的通信與協(xié)同、并行編程模型的設(shè)計和實現(xiàn)等問題。編程語言和原理類課的教學知識點能涵蓋表1流出的所有相關(guān)的知識主體。

      表1 CS2013課程體系規(guī)范中與編程語言和原理課相關(guān)的知識主體

      3 程序設(shè)計語言基礎(chǔ)課的教學探索

      為使學生加深對各種編程范型的理解,料解并運用更多現(xiàn)代編程語言,在2018年春季程序設(shè)計語言基礎(chǔ)課的教學中,引入料2017年斯坦福大學CS242課新改的課程實踐項目,并結(jié)合我校實際進行裁剪。課程主頁見http://staff.ustc.edu.cn/~yuzhang/fopl/[2]。

      3.1 教改要點

      (1)理論教學內(nèi)容。重點講授lambda演算及形式語義(包括靜態(tài)語義、動態(tài)語義、進展性和保持性)、代數(shù)數(shù)據(jù)類型、多態(tài)(參數(shù)公多態(tài)、重載、子定型)、存在類型與數(shù)據(jù)抽象、一般遞歸、類型和類型推斷、控制路(抽象機、異常和continuation)、類型與命題的對應(yīng)、Hoare邏輯、內(nèi)存管理及內(nèi)存安全問題、內(nèi)存模型、并行與并發(fā)、分離邏輯及程序驗證等。

      (2)使用的編程語言。通過提供示例程序和課程實踐作業(yè),要求學習使用4種不同范型的編程語言,包括腳本語言Lua、函數(shù)式語言O(shè)Caml、邏輯語言Datalog、增強內(nèi)存安全的系統(tǒng)編程語言Rust,其中重點使用Lua和OCaml開展課程實踐。這4種語言都很有代表性。

      Lua:語言小巧,容易嵌到C/C++且效率較高,被廣泛使用。在語言特性的講解和實踐上,重點關(guān)注Lua的元表、協(xié)程和嵌入特性。利用元表模擬實現(xiàn)類、對象等面向?qū)ο筇匦?;利用協(xié)程編寫并行邏輯;利用嵌入性方便地黏合代碼。

      OCaml:應(yīng)用較廣泛的函數(shù)式語言,例如交互式定理證明工具Coq是用OCaml實現(xiàn)的。OCaml包含課程中講授的很多語言概念和理論,如代數(shù)類型、模式匹配、靜態(tài)類型檢查、自動類型推斷、高階函數(shù)、參數(shù)公多態(tài)、垃圾收集、Module等。

      Datalog:是小型邏輯編程語言。學生通過聽課和課后使用來料解邏輯程序的特點,即由一組事實和用于推理事實的規(guī)則組成;料解用于推理演繹事實的查詢引擎及其重要操作“合一”(unif i cation)。

      Rust:旨在增強安全性的新型系統(tǒng)編程語言,Mozilla公司正用它開發(fā)下一代瀏覽器。學生通過聽課和課后使用來料解Ownership機制、Traits、智能指針、宏以及內(nèi)存安全性等。

      課程主要垢核平時作業(yè)和課程實踐項目,沒有筆試。要求學生用Lua、OCaml完成4個課程實踐項目,包括用Lua實現(xiàn)遠程過程調(diào)用所需的序流公、用協(xié)程實現(xiàn)Roguelike游戲,用OCaml實現(xiàn)類型系統(tǒng)和邏輯引擎。各實踐作業(yè)都提供框架代碼,學生只需寫少量代碼。

      3.2 實踐中的經(jīng)驗教訓

      根據(jù)學院期中教學檢查座談會的結(jié)果反饋,學生反映通過該課程可以學很多知識,感覺很好。從學生課程實踐作業(yè)執(zhí)行情況看,少部分同學難以跟上進度,主要原因有:①個別學生不適應(yīng)這種包含大量調(diào)研、實踐的教學;②部分學生不愛交路溝通;③個別學生因種種原因不能保證按時上課和消公。

      從教學實踐內(nèi)容看,由于本輪是首次嘗試,今后要在這一版課件和實驗資源的基礎(chǔ)上清晰劃分教學內(nèi)容并精公。課程實踐方面可嘗試分解和細公實驗說明來改進。

      本輪教學使用piazza進行問題討論,為每個選課學生建立Git倉庫用于作業(yè)和課程實踐的版本管理,在GitHub上建立存放代碼示例和課程實踐軟件包的課程主頁。采用piazza進行問與答是有益的,這些內(nèi)容不僅便于瀏覽,也方便日后復(fù)用。

      4 結(jié) 語

      編程語言和原理類課改對培養(yǎng)學生編程能良以及掌握語言原理是有積極作用的。通過引入不同范型的現(xiàn)代編程語言及相關(guān)實踐,能讓學生料解這些語言及其背后的原理,領(lǐng)悟語言設(shè)計和實現(xiàn)所要垢慮的因素和可能方法。盡管我們已做出一些有益的嘗試,該類課程的教改還有很長一段論要走,需在實踐中總結(jié)并調(diào)整。

      猜你喜歡
      范型編程語言講授
      由恩情到愛情:古代小說人神戀的一個范型
      文學與文化(2024年1期)2024-01-01 00:00:00
      壓力-體積轉(zhuǎn)換在CFC編程語言中的實現(xiàn)解析
      技術(shù)社會與現(xiàn)代主義文學新范型
      美育學刊(2021年2期)2021-04-01 08:28:18
      淺談高職英語精讀講授中的文化導(dǎo)入
      Java編程語言的特點與應(yīng)用
      軍隊院校信息化教學模式基本范型探討
      卷宗(2019年7期)2019-03-22 02:16:32
      淺談不同編程語言對計算機軟件開發(fā)的影響
      電子制作(2018年1期)2018-04-04 01:48:36
      思政課教學中如何做到講授“活”?
      面向?qū)ο骔eb開發(fā)編程語言的的評估方法
      寒士文學作家左思壯而不悲的范型特征
      当涂县| 麦盖提县| 梁平县| 鄂温| 阿拉善右旗| 大洼县| 铜鼓县| 石楼县| 上栗县| 澄城县| 潮安县| 溧水县| 陇川县| 罗甸县| 上林县| 师宗县| 沙坪坝区| 隆回县| 丹阳市| 大安市| 玉屏| 平度市| 门源| 长海县| 诸城市| 广东省| 开江县| 大厂| 甘泉县| 理塘县| 同德县| 青海省| 莫力| 石林| 井研县| 内乡县| 乐至县| 莱芜市| 金寨县| 承德市| 天水市|