亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        張 昱,許胤龍

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

        0 引 言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        2.1 總體設(shè)置

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        3.1 教改要點(diǎn)

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

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

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

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

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

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

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

        3.2 實(shí)踐中的經(jīng)驗(yàn)教訓(xùn)

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

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

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

        4 結(jié) 語

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

        猜你喜歡
        范型編程語言講授
        由恩情到愛情:古代小說人神戀的一個(gè)范型
        壓力-體積轉(zhuǎn)換在CFC編程語言中的實(shí)現(xiàn)解析
        技術(shù)社會(huì)與現(xiàn)代主義文學(xué)新范型
        淺談高職英語精讀講授中的文化導(dǎo)入
        Java編程語言的特點(diǎn)與應(yīng)用
        軍隊(duì)院校信息化教學(xué)模式基本范型探討
        卷宗(2019年7期)2019-03-22 02:16:32
        淺談不同編程語言對(duì)計(jì)算機(jī)軟件開發(fā)的影響
        電子制作(2018年1期)2018-04-04 01:48:36
        思政課教學(xué)中如何做到講授“活”?
        面向?qū)ο骔eb開發(fā)編程語言的的評(píng)估方法
        廣州大學(xué)學(xué)報(bào)(社會(huì)科學(xué)版)(2015年1期)2015-02-27 12:40:21
        美女免费观看一区二区三区| 无套内射蜜桃小视频| 亚洲av一宅男色影视| 日韩久久久黄色一级av| 亚洲综合精品在线观看中文字幕 | 亚洲成AV人国产毛片| 成人免费毛片立即播放| 日本在线观看一区二区三| 久久久久久久波多野结衣高潮 | 国产无套露脸| 成年毛片18成年毛片| 亚洲av色av成人噜噜噜| 亚洲一区二区三区四区精品| 青青草在线免费视频播放| 射精专区一区二区朝鲜| 亚洲有码转帖| 国产精品女同久久免费观看| 国产精品日本一区二区三区在线| 男女边摸边吃奶边做视频韩国| 中文字幕一区日韩精品| 国产手机在线αⅴ片无码观看| 久久久精品中文无码字幕| 亚洲一区二区三区四区精品| 国产自国产自愉自愉免费24区| 少妇久久久久久被弄到高潮 | 无码区a∨视频体验区30秒| 美女福利视频在线观看网址| 变态调教一区二区三区女同| 无遮挡h肉动漫在线观看| 国产精品高清视亚洲乱码有限公司| 日本一区二区三区在线观看免费| 99久久国产精品免费热| 国产精品成人免费视频一区 | 国产精品三级1区2区3区| 91精品国产一区国产二区久久| 国产精品特级毛片一区二区三区 | 日本熟女人妻一区二区三区| 亚洲97成人在线视频| 亚洲日韩av无码一区二区三区人| a国产一区二区免费入口| 国产精品女同久久久久久|