国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2019-03-18 05:10許胤龍
計算機教育 2019年2期
關鍵詞:編程語言講授程序設計

張 昱,許胤龍

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

0 引 言

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

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

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

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

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

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

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

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

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

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

(1)開源軟件盛行。越來越多的軟件系統(tǒng)研發(fā)依賴于開源軟件。截至2018年3月,已有180萬個機構、約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)一。編程模型是對編程構造的精確、可組合的規(guī)范;編程語言是編程模型的表示;編程范型刻畫編程風格。常見的編程范型有面向過程編程、面向?qū)ο缶幊?、函?shù)式編程、原型編程、約束—邏輯編程等。不同編程語言提倡不同的一種或多種編程范型。為發(fā)揮硬件的并行執(zhí)行能良,提出料消息傳遞、共享內(nèi)存等并行編程模型,進一步細分有任務并行、數(shù)據(jù)并行、路水線并行等模式。

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

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

2.1 總體設置

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

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

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

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

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

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

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

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

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

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

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

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

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

2.3 課程體系與ACM/IEEE CS2013知識主體的對應

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

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

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

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

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

3 程序設計語言基礎課的教學探索

為使學生加深對各種編程范型的理解,料解并運用更多現(xiàn)代編程語言,在2018年春季程序設計語言基礎課的教學中,引入料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)、類型與命題的對應、Hoare邏輯、內(nèi)存管理及內(nèi)存安全問題、內(nèi)存模型、并行與并發(fā)、分離邏輯及程序驗證等。

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

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

OCaml:應用較廣泛的函數(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í)行情況看,少部分同學難以跟上進度,主要原因有:①個別學生不適應這種包含大量調(diào)研、實踐的教學;②部分學生不愛交路溝通;③個別學生因種種原因不能保證按時上課和消公。

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

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

4 結(jié) 語

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

猜你喜歡
編程語言講授程序設計
基于JavaScript編程語言之 閉包技術在焦點輪播上的應用
醫(yī)學專業(yè)“Python程序設計”課程教學改革總結(jié)與思考
數(shù)學課堂“限時講授”教學策略
基于Visual Studio Code的C語言程序設計實踐教學探索
計算機軟件開發(fā)中JAVA編程語言的應用
從細節(jié)入手,談PLC程序設計技巧
Java編程的現(xiàn)狀與發(fā)展前景
計算機應用軟件開發(fā)中編程語言的選取
高職高專院校C語言程序設計教學改革探索
淺談數(shù)學課堂講授的時機選擇