計(jì)算機(jī)專業(yè)程序設(shè)計(jì)語言類課程教學(xué)改革的思考_第1頁
計(jì)算機(jī)專業(yè)程序設(shè)計(jì)語言類課程教學(xué)改革的思考_第2頁
計(jì)算機(jī)專業(yè)程序設(shè)計(jì)語言類課程教學(xué)改革的思考_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

計(jì)算機(jī)專業(yè)程序設(shè)計(jì)語言類課程教學(xué)改革的思考計(jì)算機(jī)專業(yè)程序設(shè)計(jì)語言類課程教學(xué)改革的思考

文章編號:1672-5913〔2022〕05-0042-03

中圖分類號:G642

1程序設(shè)計(jì)語言類課程的教學(xué)現(xiàn)狀及問題

計(jì)算機(jī)學(xué)科知識結(jié)構(gòu)更新快,其中,程序設(shè)計(jì)語言在短短的幾十年間經(jīng)歷了較大變化。語言類課程是計(jì)算機(jī)學(xué)科的專業(yè)根底課程,其學(xué)習(xí)效果直接影響其他后續(xù)課程。當(dāng)前語言類課程教學(xué)主要面臨下列問題。

1.1課程體系設(shè)置單一

國內(nèi)高校計(jì)算機(jī)專業(yè)的程序設(shè)計(jì)語言類課程大多是過程式或者面向?qū)ο蟮拿钍骄幊陶Z言,課程體系設(shè)置單一。不可否定,這類語言無論是從學(xué)科性還是有用性上講,都是適宜的。然而,程序設(shè)計(jì)語言不僅僅是這類命令式語言,它還包括如ML、Haskell這樣經(jīng)典的函數(shù)式編程語言,或者如兼顧面向?qū)ο蠛秃瘮?shù)式的Scala語言等。從某種意義上講,函數(shù)式編程能夠更大程度地鍛煉計(jì)算思維[1]。在多核并行程序設(shè)計(jì)已經(jīng)被推到前沿的今天,命令式編程語言天生的缺陷使得構(gòu)造并行編程模型變得非常復(fù)雜,而函數(shù)式編程在經(jīng)歷數(shù)十年的開展之后,終于不再局限于實(shí)驗(yàn)室的理論研究。事實(shí)上,如果不懂得函數(shù)式編程,Google不可能發(fā)明出MapReduce。

1.2教學(xué)過程僵化

程序設(shè)計(jì)語言類課程的傳統(tǒng)講授是按照編程語言類教材的典型撰寫次序,先講常量、變量、數(shù)據(jù)類型等,再講敘述式、語句等,再比擬復(fù)雜的語言特點(diǎn),這些花費(fèi)了較多時(shí)間,最后可能不再有多余的時(shí)間剖析該語言的內(nèi)建庫函數(shù)或者類,更少波及該門課程與后續(xù)課程的銜接關(guān)系。這種傳統(tǒng)的講授方式針對第一門程序設(shè)計(jì)語言課程的教學(xué),特別對那些沒有接觸過編程語言的學(xué)生來講,可能是一種較好的方式[2]。然而,對于第二門程序設(shè)計(jì)語言的授課,按照這種按部就班的教學(xué)過程推進(jìn)教學(xué)進(jìn)度時(shí),由于在較長一段教學(xué)活動中所講授的都是孤立的語法點(diǎn),學(xué)生看不到一個(gè)較為完整的應(yīng)用實(shí)例,也不了解這門課程與其他課程之間的貫穿,容易產(chǎn)生厭學(xué)的心理,也很難體會程序語言的設(shè)計(jì)藝術(shù)。

1.3重編程技能,輕計(jì)算思維

針對程序設(shè)計(jì)語言類課程實(shí)踐性特別強(qiáng)的特點(diǎn),許多教改措施都是針對如何提高學(xué)生的項(xiàng)目應(yīng)用實(shí)踐技能的[2-3],如采用案例化、任務(wù)驅(qū)動、工程驅(qū)動等方式。編程技術(shù)固然重要,然而計(jì)算思維比單純技術(shù)更加重要。培養(yǎng)學(xué)生以計(jì)算機(jī)的方式進(jìn)行思考和解決問題,讓他們認(rèn)識到程序是思想的表現(xiàn)形式,最終能夠通過語言來敘述思考與設(shè)計(jì),并能理解這門語言設(shè)計(jì)和實(shí)現(xiàn)的長處、缺乏、限制等。為了到達(dá)這個(gè)目標(biāo),需要引導(dǎo)學(xué)生深入理解編程語言本身。

2教學(xué)改革措施

2.1增設(shè)函數(shù)式編程語言課程

函數(shù)式編程模型早在面向?qū)ο蟾拍畛霈F(xiàn)之前就已經(jīng)存在了,它的核心是lambda演算。由于其語法不如命令式語言的語法直觀易懂,許多初次接觸函數(shù)式編程的人常常不知所措,會覺得難以理解。然而,這種難以理解性與熟悉程度相關(guān)。近20年的課程改革中,因?yàn)榉N種原因,程序設(shè)計(jì)語言類課程體系幾乎完全拋棄了函數(shù)式程序設(shè)計(jì)語言。如今,多核時(shí)代的興起,函數(shù)式程序代碼的簡潔性使得它在并發(fā)應(yīng)用領(lǐng)域綻放光榮。雖然實(shí)用性是我們應(yīng)當(dāng)考慮的一個(gè)方面,但是從培養(yǎng)學(xué)生計(jì)算思維以及從編程語言本身的研究方面,增設(shè)函數(shù)式編程語言課程是很有必要的。

常用的函數(shù)式編程語言或者具備函數(shù)式編程語言特點(diǎn)的編程語言包括Haskell、ML、OCaml、Scala等。依據(jù)需要可以選擇不同的函數(shù)式編程語言:如果傾向于編程語言本身的理解,可以選擇純函數(shù)式的ML、Haskell,或者OCaml;如果傾向于并行分布式程序的開發(fā),可以選擇結(jié)合了面向?qū)ο蠛秃瘮?shù)式特點(diǎn)的Scala語言,它兼容Java。此外,Java8的lambda敘述式也是一個(gè)不錯的學(xué)習(xí)函數(shù)式編程的選擇。

2.2適當(dāng)調(diào)整講授內(nèi)容的次序

以Java程序設(shè)計(jì)語言的教學(xué)為例,按照常規(guī)教材的編寫次序,Java的教學(xué)內(nèi)容通常是先講變量、類型、敘述式和語句,然后是數(shù)組,接著是類和對象、繼承等。在實(shí)踐中我們對講授內(nèi)容的次序進(jìn)行了調(diào)整:在對Java語言作了初步介紹之后,緊接著講解對象的創(chuàng)立和使用,見表1。表1第2行的內(nèi)容不再放在講解了類的定義之后。這個(gè)調(diào)整出于兩方面的考慮:一方面,讓學(xué)生盡快建立對象的概念,知道怎么使用對象;另一方面,數(shù)組在Java程序設(shè)計(jì)語言中視為對象,因此,講解了如何使用對象之后有利于數(shù)組的講解。而類的定義波及較多語法知識,在講解了如何使用對象、變量、類型、敘述式和語句之后,引導(dǎo)學(xué)生考慮這個(gè)問題――我們能不能按照自己的設(shè)計(jì)來創(chuàng)立對象呢,于是開始講解類的定義,見表1第5行。

為了講解如何使用對象,首先選擇兩個(gè)常用的Java內(nèi)建類――字符串String和System,針對已經(jīng)學(xué)習(xí)了C語言程序設(shè)計(jì)的學(xué)生,從教學(xué)效果上看,盡管學(xué)生還沒有接觸到Java的各種語法規(guī)那么,但是他們?nèi)匀唤邮芰恕皩ο蟥曔@個(gè)知識點(diǎn)的講授。更重要的是,他們建立了對象的初步印象,了解了Java與C的不同,并在一定程度上激發(fā)了學(xué)生的學(xué)習(xí)興趣。

由于Java程序需要使用規(guī)范輸出流的辦法System.out.print〔〕用于輸出程序的運(yùn)行結(jié)果,學(xué)生就問:Java程序怎么輸入呢?此時(shí),對輸入輸出流進(jìn)行較為完整的講解顯然不適宜,在講解使用對象時(shí),我們進(jìn)一步講解如何使用Java的字符緩沖輸入流類BufferedReader,直接給出如下板書:

BufferedReaderbr=newBufferedReader〔

//BufferedReader需要一個(gè)Reader類型的參數(shù)//InputStreamReader就是一個(gè)Reader

newInputStreamReader〔

//InputStreamReader需要一個(gè)InputStream類型的參//數(shù),System.in就是一個(gè)InputStream

System.in〕〕;//System.in用于接受鍵盤的輸入

br.readLine〔〕;//BufferedReader的readLine

//辦法讀入一行

以上這段代碼稍顯復(fù)雜,學(xué)生在課余可以仔細(xì)研究并進(jìn)行試驗(yàn)。實(shí)踐說明,這些Java常用內(nèi)建類的使用在教學(xué)初期給出時(shí),不但沒有造成學(xué)生的困惑和畏懼,反而提升了學(xué)生的學(xué)習(xí)熱情。

2.3引導(dǎo)學(xué)生深入理解程序設(shè)計(jì)語言

程序《O計(jì)語言類課程對于培養(yǎng)學(xué)生的計(jì)算思維非常重要,需要學(xué)生深入理解程序設(shè)計(jì)語言本身的設(shè)計(jì)與實(shí)現(xiàn),而不僅僅是學(xué)習(xí)單純的語法。

通常學(xué)生因其視野的局限性和課時(shí)的限制,無法深入學(xué)習(xí)一門程序設(shè)計(jì)語言。教師在授課時(shí)應(yīng)該找時(shí)機(jī)引導(dǎo)學(xué)生去深入理解。通常,語言設(shè)計(jì)和實(shí)現(xiàn)者提供了API文檔和源碼,這些是深入理解一門編程語言最直接也是非常好的參考資料。如果學(xué)生能夠養(yǎng)成查看API的習(xí)慣,無疑能夠促進(jìn)對語言的認(rèn)識和理解。以引用類型變量的講解為例,若變量p引用的是一個(gè)Person類型的對象,變量s引用的是一個(gè)String字符串對象。System.out.print〔p〕輸出結(jié)果是代表對象地址的哈希碼,而System.out.print〔s〕輸出了一個(gè)字符串。這是為什么呢?同時(shí),有學(xué)生就會提出疑問:System.out.print〔p〕是否可以直接輸出p所引用的Person對象的成員值,如姓名和年齡等,而System.out.print〔s〕是否可以輸出這個(gè)字符串對象的地址哈希值?在這個(gè)過程中,可以引導(dǎo)學(xué)生逐步查找對應(yīng)的API,如圖1所示。最后可以進(jìn)一步查看Object類和String類對應(yīng)辦法的實(shí)現(xiàn)源碼。知道了這個(gè)思路后,學(xué)生豁然開朗,開始著手解決問題。

在教學(xué)實(shí)踐中,我們常常激勵學(xué)生按照這種辦法去找解決思路,而不是直接給出答案。得益于Java的開源,在Java程序設(shè)計(jì)語言的教學(xué)活動中,我們也激勵學(xué)生查看javac編譯器或者JVM的即時(shí)編譯器的實(shí)現(xiàn)源碼。學(xué)生通過這種學(xué)習(xí)方式,在長期使用一門程序設(shè)計(jì)語言后,最終能夠駕馭語言,敘述類似計(jì)算機(jī)方式的思考與設(shè)計(jì)。

3結(jié)語

在兼顧學(xué)科性和社會有用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論