• 
    

    
    

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

      編譯原理語(yǔ)言認(rèn)知實(shí)驗(yàn)設(shè)計(jì)與實(shí)踐

      2019-08-24 08:58:00計(jì)衛(wèi)星王貴珍
      計(jì)算機(jī)教育 2019年8期
      關(guān)鍵詞:程序設(shè)計(jì)代碼班級(jí)

      計(jì)衛(wèi)星,王貴珍,李 侃

      (北京理工大學(xué) 計(jì)算機(jī)學(xué)院,北京 100081)

      0 引 言

      計(jì)算機(jī)高級(jí)程序設(shè)計(jì)語(yǔ)言自20世紀(jì)50年代出現(xiàn)以來(lái),至今已經(jīng)演化出成百上千種語(yǔ)言,這些語(yǔ)言面向不同的應(yīng)用領(lǐng)域被不同的群體使用。少數(shù)語(yǔ)言自誕生以來(lái)一直保持旺盛的生命力,在計(jì)算機(jī)發(fā)展歷史上發(fā)揮了重要作用;部分語(yǔ)言只在某個(gè)社區(qū)內(nèi)被廣泛使用,具有明顯的專(zhuān)業(yè)領(lǐng)域特點(diǎn);還有一些新興的語(yǔ)言,一直在研究人員和相關(guān)社區(qū)的努力下不斷發(fā)展壯大,正在逐步完善并得到大家的認(rèn)可。TIOBE[1]排名顯示,目前最流行的前10種程序設(shè)計(jì)語(yǔ)言分別是Java、C、C++、Python、C#、Visual Basic .NET、PHP、JavaScript、SQL和R。在這些語(yǔ)言當(dāng)中,C語(yǔ)言屬于傳統(tǒng)的面向過(guò)程語(yǔ)言,C++、Java和C#是目前主流的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,Visual Basic在.NET平臺(tái)上得以持續(xù)發(fā)展,PHP、Python和JavaScript是腳本語(yǔ)言,SQL是聲明式語(yǔ)言,R則是面向數(shù)據(jù)分析的專(zhuān)用語(yǔ)言。

      各個(gè)學(xué)校依據(jù)各自的定位和培養(yǎng)目標(biāo),在計(jì)算機(jī)類(lèi)相關(guān)本科專(zhuān)業(yè)培養(yǎng)方案中,通常會(huì)設(shè)置1~2門(mén)程序設(shè)計(jì)相關(guān)的課程。目前各個(gè)院校采用C語(yǔ)言的較多,非信息類(lèi)逐步采用Python作為其首選程序設(shè)計(jì)語(yǔ)言,信息類(lèi)學(xué)生在學(xué)期間也有選修C++、Java和C#課程的機(jī)會(huì)。盡管如此,有限的學(xué)時(shí)仍然無(wú)法讓學(xué)生學(xué)習(xí)、領(lǐng)略各種不同程序設(shè)計(jì)語(yǔ)言的特點(diǎn),因而造成學(xué)生只會(huì)使用1~2種程序設(shè)計(jì)語(yǔ)言,教和學(xué)兩方面更多關(guān)注編程語(yǔ)言使用,而對(duì)高級(jí)編程語(yǔ)言自身的設(shè)計(jì)、改進(jìn)以及語(yǔ)言的實(shí)現(xiàn)認(rèn)識(shí)和思考不足,最終導(dǎo)致相關(guān)研究人才的缺乏。因此,如何在有限的學(xué)時(shí)內(nèi)彌補(bǔ)這個(gè)不足,讓學(xué)生盡可能多地接觸多種程序設(shè)計(jì)語(yǔ)言,是一個(gè)值得探討的問(wèn)題。

      各個(gè)學(xué)校在不斷加強(qiáng)實(shí)踐教學(xué)體系建設(shè)的同時(shí)[2],也逐步探索與語(yǔ)言設(shè)計(jì)和實(shí)現(xiàn)相關(guān)的內(nèi)容。文獻(xiàn)[3]中針對(duì)編譯原理課程理論完整性不足、課程定位模糊、與其他課程內(nèi)容重疊等問(wèn)題,提出建設(shè)形式語(yǔ)言與編譯課程。文獻(xiàn)[4]認(rèn)為面向?qū)ο缶幊陶Z(yǔ)言和技術(shù)日益流行,對(duì)編譯原理課程建設(shè)和教學(xué)改革實(shí)踐提出新的挑戰(zhàn),因此提出基于面向?qū)ο蠹夹g(shù)的編譯原理課程建設(shè)。

      1 語(yǔ)言認(rèn)知實(shí)驗(yàn)設(shè)計(jì)

      語(yǔ)言認(rèn)知實(shí)驗(yàn)的目的是通過(guò)一個(gè)課程實(shí)驗(yàn)讓學(xué)生了解程序設(shè)計(jì)語(yǔ)言的多樣性,具體要求為使用多種指定的語(yǔ)言實(shí)現(xiàn)同一功能,如使用C語(yǔ)言、Java、Python、Haskell和匯編語(yǔ)言實(shí)現(xiàn)快速排序算法,并對(duì)用不同語(yǔ)言實(shí)現(xiàn)的程序進(jìn)行比較和分析,主要包括語(yǔ)言學(xué)習(xí)難度、代碼規(guī)模、運(yùn)行效率等。

      該實(shí)驗(yàn)的首要目的是讓學(xué)生了解語(yǔ)言的多樣性,語(yǔ)言實(shí)現(xiàn)方式的不同對(duì)程序編寫(xiě)以及程序運(yùn)行效率帶來(lái)的影響,因此,選擇什么樣的語(yǔ)言和實(shí)現(xiàn)什么樣的功能是非常關(guān)鍵的。考慮到語(yǔ)言的發(fā)展歷史和現(xiàn)狀以及語(yǔ)言的類(lèi)型,所選語(yǔ)言應(yīng)能夠覆蓋經(jīng)典的面向過(guò)程語(yǔ)言、面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言、腳本語(yǔ)言(動(dòng)態(tài)語(yǔ)言)、函數(shù)式編程語(yǔ)言、命令式編程語(yǔ)言等。從語(yǔ)言的實(shí)現(xiàn)角度考慮,則希望覆蓋編譯執(zhí)行和解釋執(zhí)行兩種方式。

      為了方便對(duì)不同的語(yǔ)言進(jìn)行對(duì)比,應(yīng)選擇難度和規(guī)模適中的算法讓學(xué)生使用不同的語(yǔ)言實(shí)現(xiàn)。算法難度和規(guī)模過(guò)大時(shí),一方面學(xué)生難以完成,另一方面學(xué)生關(guān)注的焦點(diǎn)容易發(fā)生偏移,無(wú)法達(dá)到實(shí)驗(yàn)預(yù)期目標(biāo)。當(dāng)難度和規(guī)模適中時(shí),學(xué)生會(huì)有更多的時(shí)間和精力進(jìn)行語(yǔ)言之間的比較,因此,一般應(yīng)該選擇已經(jīng)學(xué)習(xí)過(guò)的常見(jiàn)算法來(lái)實(shí)現(xiàn),如矩陣乘法、各種排序算法等。

      在對(duì)比階段,主要關(guān)注代碼規(guī)模和程序運(yùn)行效率的對(duì)比。代碼規(guī)模以代碼行為單位進(jìn)行統(tǒng)計(jì)分析,包括輸入輸出和具體計(jì)算的代碼;而運(yùn)行效率則只關(guān)注計(jì)算部分的運(yùn)行時(shí)間,忽略輸入和輸出部分??紤]到輸入較小時(shí),部分算法的運(yùn)行時(shí)間變化較大,應(yīng)考慮規(guī)模適中的輸入數(shù)據(jù),并多次運(yùn)行程序和采集運(yùn)行時(shí)間,取平均值作為最終的性能數(shù)據(jù)進(jìn)行對(duì)比分析。學(xué)生根據(jù)對(duì)比結(jié)果,撰寫(xiě)實(shí)驗(yàn)報(bào)告,提交相關(guān)資料,其中包括對(duì)比分析的算法選擇、對(duì)各個(gè)語(yǔ)言的認(rèn)識(shí)、實(shí)現(xiàn)方法、運(yùn)行結(jié)果、語(yǔ)言學(xué)習(xí)難度比較、程序規(guī)模比較、程序運(yùn)行時(shí)間比較等。

      實(shí)驗(yàn)評(píng)定階段,在尊重學(xué)生分析成果的基礎(chǔ)上進(jìn)行適當(dāng)引導(dǎo),觸發(fā)學(xué)生更深層次的思考,如為什么不同語(yǔ)言對(duì)同一算法的描述會(huì)造成程序規(guī)模的不同、腳本語(yǔ)言和C語(yǔ)言程序相比性能相差較大的原因是什么等。

      2 語(yǔ)言認(rèn)知實(shí)驗(yàn)教學(xué)實(shí)踐

      根據(jù)編譯原理與設(shè)計(jì)課程的教學(xué)計(jì)劃,語(yǔ)言認(rèn)知實(shí)驗(yàn)安排在第一章引言之后進(jìn)行。在引言部分主要介紹程序設(shè)計(jì)語(yǔ)言從機(jī)器語(yǔ)言到高級(jí)程序設(shè)計(jì)語(yǔ)言的發(fā)展歷史,重點(diǎn)解釋編譯程序的定義及其分類(lèi),特別強(qiáng)調(diào)編譯執(zhí)行和解釋執(zhí)行兩種不同的執(zhí)行方式、編譯程序的典型框架結(jié)構(gòu)以及從輸入高級(jí)語(yǔ)言程序開(kāi)始到目標(biāo)代碼翻譯的工作流程和中間表示,最后以代表性編譯器為例進(jìn)行剖析,說(shuō)明編譯器的構(gòu)造方法,這一部分的教學(xué)安排也是國(guó)內(nèi)眾多高校所采用的方案。這一部分的教學(xué)內(nèi)容存在多個(gè)與語(yǔ)言相關(guān)的知識(shí)點(diǎn),主要包括:①語(yǔ)言的發(fā)展歷史以及編譯器產(chǎn)生的背景;②編譯程序的基本定義及其輸入和輸出;③編譯執(zhí)行和解釋執(zhí)行。

      將語(yǔ)言認(rèn)知實(shí)驗(yàn)安排在引言部分非常有利于學(xué)生對(duì)相關(guān)概念的認(rèn)識(shí)和深入理解。表1給出了從2014年到2018年,筆者在實(shí)踐過(guò)程中所選用的語(yǔ)言和要求學(xué)生實(shí)現(xiàn)的功能。對(duì)比可以發(fā)現(xiàn),在這個(gè)過(guò)程中主要的改進(jìn)在于將小眾的Ruby語(yǔ)言改為Python,并在2018年添加匯編語(yǔ)言,這主要是由于網(wǎng)絡(luò)安全、大數(shù)據(jù)、人工智能等學(xué)科專(zhuān)業(yè)的飛速發(fā)展,Python語(yǔ)言熱度不斷上升,學(xué)習(xí)的需求日益增大。添加匯編語(yǔ)言的目的是為了讓學(xué)生更好地了解編譯器的輸出,在第一章手動(dòng)完成從高級(jí)程序設(shè)計(jì)語(yǔ)言到匯編語(yǔ)言的翻譯,并與后續(xù)實(shí)驗(yàn)生成的匯編語(yǔ)言進(jìn)行對(duì)比,另外,也可以幫助學(xué)生提前預(yù)習(xí)匯編程序設(shè)計(jì)的相關(guān)內(nèi)容。

      表1 2014—2018年教學(xué)實(shí)踐設(shè)置

      在實(shí)驗(yàn)完成后,要求學(xué)生提交相關(guān)源碼以及實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)報(bào)告中從3個(gè)方面對(duì)多個(gè)不同的語(yǔ)言進(jìn)行對(duì)比分析:①代碼規(guī)模:以代碼行對(duì)比實(shí)現(xiàn)同一功能的不同語(yǔ)言程序的規(guī)模大?。虎谶\(yùn)行效率:在輸入相同時(shí),對(duì)比分析不同程序?qū)崿F(xiàn)同一功能的運(yùn)行時(shí)間;③語(yǔ)言易用性:從學(xué)習(xí)曲線、編程效率等方面對(duì)不同的語(yǔ)言進(jìn)行對(duì)比,給出自己的結(jié)論。

      3 教學(xué)效果

      為了更好地了解語(yǔ)言認(rèn)知實(shí)驗(yàn)的教學(xué)效果,2018年教學(xué)考核完成之后,課程組設(shè)計(jì)了調(diào)查問(wèn)卷并對(duì)收回的問(wèn)卷進(jìn)行統(tǒng)計(jì)分析。經(jīng)統(tǒng)計(jì),語(yǔ)言認(rèn)知實(shí)驗(yàn)?zāi)軌蚣由顚W(xué)生對(duì)語(yǔ)言和編譯器的認(rèn)識(shí),并對(duì)后續(xù)的學(xué)習(xí)和實(shí)踐產(chǎn)生深遠(yuǎn)的影響。

      (1)認(rèn)識(shí)到語(yǔ)言的多樣性。如圖1所示,在語(yǔ)言認(rèn)知實(shí)驗(yàn)之前,大多數(shù)學(xué)生熟悉的是C/C++,接近20%的學(xué)生熟悉Python語(yǔ)言,而大約10%的學(xué)生會(huì)使用Java語(yǔ)言;在語(yǔ)言認(rèn)知實(shí)驗(yàn)之后,這一狀況發(fā)生了明顯變化,熟悉并喜歡Python的學(xué)生接近35%,對(duì)Java比較認(rèn)同的學(xué)生比例上升到了20%,同時(shí)Haskell從原來(lái)的0%變?yōu)榻咏?%。多個(gè)語(yǔ)言的學(xué)習(xí)和接觸讓學(xué)生有了更多的選擇機(jī)會(huì),通過(guò)語(yǔ)言之間的比較分析,學(xué)生找到了更適合自己的語(yǔ)言。

      圖1 語(yǔ)言多樣性認(rèn)識(shí)對(duì)比

      (2)認(rèn)識(shí)到語(yǔ)言的差異性。語(yǔ)言認(rèn)知實(shí)驗(yàn)的主要目標(biāo)之一是讓學(xué)生認(rèn)識(shí)到語(yǔ)言之間的差異性。從程序的執(zhí)行方式、編程效率、程序規(guī)模、學(xué)習(xí)曲線等方面進(jìn)行統(tǒng)計(jì),結(jié)果如圖2所示。從圖2的統(tǒng)計(jì)結(jié)果可以看出,80%左右的學(xué)生認(rèn)識(shí)到不同語(yǔ)言實(shí)現(xiàn)同一個(gè)算法的效率是不同的,對(duì)應(yīng)的代碼規(guī)模也不相同。此外,50%左右的學(xué)生認(rèn)識(shí)到語(yǔ)言執(zhí)行方式不同和執(zhí)行效率不同,這有利于加強(qiáng)對(duì)編譯引論階段所給出的編譯執(zhí)行和解釋執(zhí)行的深入理解和直觀感受。此外,通過(guò)本次實(shí)驗(yàn),部分學(xué)生發(fā)現(xiàn)不同語(yǔ)言的程序結(jié)構(gòu)不同,對(duì)于程序語(yǔ)言自身的描述和表達(dá)方式有了更加深入的認(rèn)識(shí)。

      (3)了解實(shí)施過(guò)程存在的問(wèn)題。為了了解實(shí)施過(guò)程中存在的問(wèn)題,調(diào)查問(wèn)卷中包括實(shí)驗(yàn)中遇到的主要困難等問(wèn)題,如圖3所示,80%以上的學(xué)生認(rèn)為新的語(yǔ)言學(xué)習(xí)需要時(shí)間,而超過(guò)50%的學(xué)生認(rèn)為程序開(kāi)發(fā)環(huán)境的搭建比較費(fèi)時(shí)費(fèi)力,由此也導(dǎo)致超過(guò)40%的學(xué)生認(rèn)為實(shí)驗(yàn)時(shí)間比較緊張。

      (4)獨(dú)立完成分析。由于每次選擇的算法規(guī)模和難度適中,因此不可避免能夠在網(wǎng)絡(luò)上找到已有的實(shí)現(xiàn)代碼,如使用Haskell實(shí)現(xiàn)的快速排序算法。在具體實(shí)踐的過(guò)程中,并沒(méi)有要求所有代碼自己從頭編寫(xiě),但是要自行理解和運(yùn)行代碼。代碼來(lái)源統(tǒng)計(jì)結(jié)果如圖4所示,大約21%的學(xué)生是完全自己編寫(xiě)的代碼,而約74%的學(xué)生是從網(wǎng)上搜索部分代碼后運(yùn)行的,剩余5%的學(xué)生是從網(wǎng)絡(luò)搜索獲得全部的代碼。

      4 持續(xù)改進(jìn)措施

      新語(yǔ)言的學(xué)習(xí)是了解程序設(shè)計(jì)語(yǔ)言多樣性的必需過(guò)程,其中學(xué)生一部分精力主性化教學(xué)資源推薦,包括教學(xué)視頻(SPOC),或推送更多的參考練習(xí)題;(2)組成動(dòng)態(tài)討論小組,由助教組織進(jìn)行再講解和分享。

      課程教學(xué)一學(xué)期結(jié)束后閉卷期末考試,傳統(tǒng)班級(jí)和教改班級(jí)題目相同。傳統(tǒng)班級(jí)采用紙質(zhì)考試(編程題有過(guò)程分),教改班級(jí)在線考試(編程題沒(méi)有過(guò)程分,但有多個(gè)測(cè)試得分點(diǎn))。兩個(gè)班級(jí)期末考試分?jǐn)?shù)對(duì)比如圖8所示。

      圖8 教改班級(jí)和傳統(tǒng)班級(jí)期末考試成績(jī)對(duì)比

      可以看出,敏捷教學(xué)模式大大地提高了學(xué)生能力水平及知識(shí)點(diǎn)的掌握程度。教改班級(jí)期末考試90分以上的學(xué)生占45%以上。傳統(tǒng)方式培養(yǎng)的學(xué)生分?jǐn)?shù)段集中在60~80分左右。值得注意的是,由于教改班級(jí)判分嚴(yán)格,不及格人數(shù)占比4%,而傳統(tǒng)教學(xué)班級(jí)紙質(zhì)考試判分較靈活,無(wú)不及格。還有一種可能是強(qiáng)節(jié)奏的能力沖擊是使個(gè)別學(xué)生跟不上,最終掉隊(duì)。

      圖9顯示了教改班級(jí)期末考試知識(shí)點(diǎn)掌握情況柱狀圖,大部分學(xué)生掌握情況良好。但發(fā)現(xiàn)學(xué)生對(duì)指針、變量作用域等知識(shí)點(diǎn)掌握得不盡如人意,分析是因?yàn)榕R近期末教學(xué)比較匆忙,指針內(nèi)容靈活難以消化;而變量作用域則是因?yàn)闆](méi)有專(zhuān)門(mén)進(jìn)行測(cè)試和布置作業(yè),造成知識(shí)消化不夠完全。令人驚奇的是,第一能力層級(jí)的輸入輸出語(yǔ)句得分率偏低,查閱下一層知識(shí)點(diǎn)掌握情況發(fā)現(xiàn),由于“格式化輸入輸出”記憶性和技巧性較強(qiáng),并學(xué)過(guò)的時(shí)間較長(zhǎng),很多學(xué)生已經(jīng)忘記或者忽略,提示下一輪教學(xué)中,考試前需要給學(xué)生強(qiáng)調(diào)記憶并加強(qiáng)練習(xí)。

      5 結(jié) 語(yǔ)

      我們提出對(duì)程序設(shè)計(jì)基礎(chǔ)課程進(jìn)行知識(shí)圖譜及能力層次構(gòu)建,利用在線考試平臺(tái)的不同平臺(tái)進(jìn)行概念測(cè)試和能力評(píng)估。進(jìn)而提出適合程序設(shè)計(jì)基礎(chǔ)課程的一種混合敏捷教學(xué)模式,在教學(xué)實(shí)踐中取得了較好的效果,有積極的推廣意義,并為其他工科課程改革提供了有益的參考。

      猜你喜歡
      程序設(shè)計(jì)代碼班級(jí)
      班級(jí)“四小怪”
      小讀者(2021年4期)2021-11-24 10:49:03
      基于Visual Studio Code的C語(yǔ)言程序設(shè)計(jì)實(shí)踐教學(xué)探索
      如何構(gòu)建和諧班級(jí)
      甘肅教育(2020年22期)2020-04-13 08:10:52
      從細(xì)節(jié)入手,談PLC程序設(shè)計(jì)技巧
      電子制作(2019年9期)2019-05-30 09:42:04
      創(chuàng)世代碼
      創(chuàng)世代碼
      創(chuàng)世代碼
      創(chuàng)世代碼
      高職高專(zhuān)院校C語(yǔ)言程序設(shè)計(jì)教學(xué)改革探索
      不稱(chēng)心的新班級(jí)
      华阴市| 页游| 卢湾区| 东乡| 宜春市| 富蕴县| 江门市| 长武县| 于都县| 视频| 桃园县| 宁都县| 壶关县| 淳化县| 遂川县| 扶余县| 长岭县| 澎湖县| 察隅县| 武山县| 六枝特区| 麟游县| 惠州市| 桐庐县| 棋牌| 浦东新区| 澎湖县| 葫芦岛市| 青龙| 二连浩特市| 常山县| 米泉市| 独山县| 旬邑县| 乌鲁木齐市| 河南省| 谢通门县| 林口县| 古丈县| 台江县| 古交市|