李海波
(華僑大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 福建廈門 361021)
大學(xué)新生面向?qū)ο缶幊棠芰Φ奶岣叻椒?/p>
李海波
(華僑大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 福建廈門 361021)
面向?qū)ο缶幊掏ǔJ谴髮W(xué)新生的必修課,是重要的計(jì)算機(jī)專業(yè)基礎(chǔ)課。針對近幾年教學(xué)過程中暴露出的種種問題,通過分析大學(xué)新生的思維特點(diǎn)以及該課程特點(diǎn),提出相應(yīng)的對策,即從轉(zhuǎn)變思維模式入手,訓(xùn)練編程能力,再加強(qiáng)課程實(shí)訓(xùn)環(huán)節(jié),三位一體從根本上提高新生的編程能力。通過對比,幾屆新生的編程能力有明顯提升。
面向?qū)ο螅痪幊蹋淮髮W(xué)新生
面向?qū)ο缶幊淌怯?jì)算機(jī)科學(xué)與技術(shù)、軟件工程學(xué)科的一門重要的基礎(chǔ)必修課,也是未來從事這些專業(yè)的程序開發(fā)基礎(chǔ)[1]。面向?qū)ο?Object Oriented,OO)是一種程序設(shè)計(jì)模式和思想,是上個(gè)世紀(jì)90年代軟件開發(fā)方法的主流,也是當(dāng)前計(jì)算機(jī)界關(guān)心的重點(diǎn)[2]。目前,面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開發(fā),擴(kuò)展到很寬的范圍[3]。支持面向?qū)ο蟮恼Z言很多,對大學(xué)新生來說,所接觸的第一個(gè)面向?qū)ο缶幊陶Z言就是C++語言。在教學(xué)過程中我們發(fā)現(xiàn),大多數(shù)學(xué)生反映這門課非常難,面對程序語句不知所措,而且經(jīng)常無法擺脫數(shù)學(xué)上的習(xí)慣,比如一些符號和概念,學(xué)到面向?qū)ο蠛诵牟糠謺r(shí),至少一半學(xué)生處于掉隊(duì)狀態(tài)。因此,思維模式的扭轉(zhuǎn)必須潛移默化地融入到這門課的教學(xué)中,才能提高新生對面向?qū)ο笠约癈++語言的理解能力,為其他后續(xù)課程打好基礎(chǔ)。本文首先分析大學(xué)新生存在的一些問題,然后從幾個(gè)方面探討和研究如何提高新生面向?qū)ο蟮木幊棠芰Γ⑻岢鼍唧w的方法改善該門課的教學(xué)質(zhì)量。
大學(xué)新生剛剛結(jié)束高中時(shí)代步入大學(xué),學(xué)習(xí)方式仍然以老師教為主,尚未建立主動(dòng)思考和自學(xué)的習(xí)慣,而且潛意識里“范圍”的概念根深蒂固,教學(xué)大綱、教材內(nèi)容的范圍演化為思維模式的限制,問題就更加嚴(yán)重,久而久之,滋生惰性。面向?qū)ο缶幊踢@門課中,C++的語法規(guī)則是固定的,但由此演繹出的編程思路是無窮的,從這點(diǎn)意義上講,該門課更需要?jiǎng)?chuàng)造精神和創(chuàng)造力。
通過多年的教學(xué)經(jīng)驗(yàn),基本概念的講解是面向?qū)ο缶幊虇⒚呻A段的重點(diǎn)。面向?qū)ο蟪绦蛟O(shè)計(jì)教材在講解基礎(chǔ)知識時(shí),雖然章節(jié)編排上盡量保證知識理解的循序漸進(jìn),但內(nèi)容上不可避免地會(huì)有交叉,比如函數(shù)一章雖然重點(diǎn)講函數(shù)的語法規(guī)則以及編寫方法,但第一章就會(huì)出現(xiàn)一個(gè)主函數(shù)main(),這就不得不在第一章簡單解釋“函數(shù)”這一概念。
(一)建立高級語言的規(guī)則
新生在編寫C++程序時(shí),運(yùn)用表達(dá)式時(shí)仍然受數(shù)學(xué)的影響,比如課堂練習(xí)時(shí),經(jīng)常把除法寫成“÷”,上機(jī)訓(xùn)練時(shí)仍然試圖把π、∑、≠、√等數(shù)學(xué)符號寫入程序,經(jīng)常想當(dāng)然地認(rèn)為C++中的各種數(shù)據(jù)類型和數(shù)學(xué)的差不多,遇到數(shù)值類型轉(zhuǎn)換的時(shí)候自然難以理解。究其原因,主要還是數(shù)學(xué)習(xí)慣在作怪,但C++初學(xué)時(shí)采用的例子、算法等大多是數(shù)學(xué)公式,這更加深了學(xué)生的混淆。面對這樣的情況,我們還是應(yīng)該強(qiáng)化基本表達(dá)式的訓(xùn)練,努力扭轉(zhuǎn)數(shù)學(xué)符號的習(xí)慣,在新生的頭腦中建立起一套高級語言的規(guī)則。
(二)理解面向?qū)ο?/p>
面向?qū)ο缶幊?Object-Oriented Programming OOP)提供了一種新的模型。在這種模型里,編程的思考方式不再是針對功能的先后步驟而是完成某項(xiàng)功能的要素與參與對象。它傾向于仿真模擬現(xiàn)實(shí)世界,提出了類和對象這兩個(gè)概念,我們將現(xiàn)實(shí)世界中實(shí)際存在的事物按類劃分,同類中的事物具有相同的屬性。面向?qū)ο蟮谋举|(zhì)是更接近于一種人類認(rèn)知事物所采用的哲學(xué)觀計(jì)算模型[4]。在具體編程過程中,我們并不急于去研究功能,而首先分析完成這項(xiàng)功能所需要的要素。
這是一種思維模式的巨大轉(zhuǎn)變,這種轉(zhuǎn)變甚至可以概括成:面向過程的編程模式做的是動(dòng)詞(功能)的分解,面向?qū)ο缶幊套龅氖敲~(對象)的分解。若要理解面向?qū)ο笏枷耄紫纫斫獬橄蟮母拍詈头椒ǎ@是學(xué)習(xí)面向?qū)ο缶幊痰那疤岷突A(chǔ),因?yàn)槊嫦驅(qū)ο笫且环N思想和模式,遠(yuǎn)高于編程語言本身。抽象是具體到一般的過程。雖然它是一個(gè)簡單的概念或者方法,但是要領(lǐng)悟其中的涵義不能單停留在編程語言上,應(yīng)該用一種邏輯思維的角度來思考抽象是什么。接下來考慮實(shí)現(xiàn)抽象的方法,比如分類,就是一種抽象,除了對靜態(tài)屬性特征抽象外,還要考慮類的行為特征以及類間的交互方式,這樣的抽象才較完整。抽象的思想建立以后,就容易理解繼承和多態(tài)。最后,要讓學(xué)生了解這些知識的最終目的,比如軟件復(fù)用、需求的變化,這都是抽象的主要目的。
(一)注重程序思維的形成
新生頭腦里幾乎沒有程序的思維習(xí)慣。按照奧蘇貝爾的認(rèn)知結(jié)構(gòu)學(xué)習(xí)理論和構(gòu)建主義的學(xué)習(xí)理論,學(xué)生作為學(xué)習(xí)的主體,與學(xué)習(xí)客體的交互中,構(gòu)建自己的知識結(jié)構(gòu)[5]。教師在教學(xué)過程中必須讓學(xué)生具有明確分析和解決問題的整體思路,而不僅僅是知識點(diǎn)的傳授。程序設(shè)計(jì)思維并不是一朝一夕就能夠形成的,依賴于理性的事件。學(xué)生要運(yùn)用算法描述自己的解題思路,并通過計(jì)算機(jī)表達(dá)出來,最后經(jīng)調(diào)試才能驗(yàn)證思路的正確性。按照西蒙的觀點(diǎn),學(xué)習(xí)就是系統(tǒng)在不斷重復(fù)的工作中,對本身能力的增強(qiáng)或者改進(jìn),使得系統(tǒng)在下一次執(zhí)行任務(wù)或者類似任務(wù)時(shí),會(huì)比現(xiàn)在做得更好或效率更高[6]。因此,只有反復(fù)上機(jī)實(shí)驗(yàn)才能訓(xùn)練程序思維。
(二)訓(xùn)練題目分析能力
在編程訓(xùn)練過程中還存在這樣的情況:程序設(shè)計(jì)語言已熟練掌握,范例程序也能讀懂,簡單的數(shù)值性計(jì)算問題也可以獨(dú)立編程求解,但是面對一個(gè)真正的應(yīng)用問題時(shí),仍不知從何入手。他們所反映出來的問題就是邏輯思維能力的欠缺。面向?qū)ο蟪绦蛟O(shè)計(jì)教材里,絕大多數(shù)習(xí)題都已給出明顯的算法,比如1到100的累加和、華氏溫度到攝氏溫度的轉(zhuǎn)換等題目,從軟件工程角度,這類題目的需求分析和系統(tǒng)設(shè)計(jì)已完成,學(xué)生的任務(wù)就是程序?qū)崿F(xiàn)。但還有一些應(yīng)用題目并沒有給出明顯的實(shí)現(xiàn)方法,需要經(jīng)歷需求分析和系統(tǒng)設(shè)計(jì)兩個(gè)步驟,比如“猴子選大王”問題。用程序?qū)崿F(xiàn)這類問題,就是要訓(xùn)練學(xué)生的問題分析。
(三)訓(xùn)練邏輯思維能力
從初學(xué)者看待編程,往往注重語句和語法,并認(rèn)為照搬教材例子就可以編出程序。一旦要求用程序去實(shí)現(xiàn)新的類型題目時(shí),往往無從下手,沒有任何思路,或者仍舊照搬那些早已不合時(shí)宜的例子。其真正原因還是沒有把邏輯架構(gòu)和編程解題思路放在學(xué)習(xí)重點(diǎn)上,不具備編程的抽象思維能力。程序設(shè)計(jì)是邏輯思維比較縝密的一門學(xué)科,需要勤加思考,只讀別人的程序或者沒有自己的分析都是不可取的,通常建議新生在做編程練習(xí)時(shí)暫時(shí)擺脫教材,獨(dú)立思考。此外,程序設(shè)計(jì)是一門涉及知識領(lǐng)域比較寬泛的學(xué)科,軟件從業(yè)者更是從工程的角度來看待一個(gè)軟件的設(shè)計(jì)和生產(chǎn)過程。教師在教學(xué)過程中應(yīng)該不斷地灌輸這種思想。
(四)加強(qiáng)上機(jī)實(shí)驗(yàn)環(huán)節(jié)
編程能力不僅體現(xiàn)在思路上,還體現(xiàn)在動(dòng)手能力上。動(dòng)手能力差是新生普遍存在的問題,程序編譯時(shí)出錯(cuò)后不知所措,更覺得老師沒講過計(jì)算機(jī)英語,看不懂英文錯(cuò)誤提示理所應(yīng)當(dāng)。久而久之就會(huì)演變成不喜歡動(dòng)手,最后造就了眾多的編程“思想家”,調(diào)試程序則蛻變過成了“想程序”。衡量編寫程序能力的一個(gè)重要指標(biāo)就是調(diào)試程序的能力,這要求教師在實(shí)驗(yàn)指導(dǎo)書中要明確程序調(diào)試的目的和要求,并在學(xué)生上機(jī)實(shí)驗(yàn)時(shí)親自指導(dǎo),獲得學(xué)生上機(jī)的第一手反饋才能知道問題所在,才能不斷改善理論課的教學(xué)方法。
(五)精選實(shí)驗(yàn)題目并提高趣味性
學(xué)習(xí)態(tài)度決定最終的學(xué)習(xí)效果,新生剛?cè)雽W(xué),學(xué)習(xí)態(tài)度都很認(rèn)真,一旦在該門課陷入困境并產(chǎn)生厭煩情緒,學(xué)習(xí)由主動(dòng)驟然變?yōu)楸粍?dòng),學(xué)習(xí)效果可想而知。為了提高編程能力,加強(qiáng)學(xué)習(xí)熱情和興趣,在編程題目的選擇上要下足工夫。教材上提供的基礎(chǔ)編程,基本都是已給出算法,學(xué)生的任務(wù)就是實(shí)現(xiàn)算法,無需做需求分析,不僅枯燥而且也缺乏挑戰(zhàn)性和趣味性。應(yīng)該選取一些有實(shí)際應(yīng)用的題目,經(jīng)簡化后作為實(shí)驗(yàn)題目,明確程序的用途后,可調(diào)動(dòng)學(xué)生的思維積極思考需求。
培養(yǎng)新生運(yùn)用所學(xué)知識解決實(shí)際問題,并增強(qiáng)對程序設(shè)計(jì)的理解并體驗(yàn)團(tuán)隊(duì)的合作精神,可通過課程綜合實(shí)訓(xùn)的方式進(jìn)行[7]。對于綜合實(shí)訓(xùn)的內(nèi)容安排、指導(dǎo)以及考核都要以綜合實(shí)訓(xùn)為目的。在對實(shí)訓(xùn)內(nèi)容安排上,綜合考慮題目難度、實(shí)用價(jià)值以及學(xué)生的興趣,由學(xué)生按小組自由選取題目,最后形成實(shí)驗(yàn)報(bào)告。此外,有些學(xué)生思想活躍,希望按照自己的想法實(shí)現(xiàn)自擬題目,可由教師把關(guān)并給予大力支持。
實(shí)訓(xùn)環(huán)節(jié)做得好,可促使新生強(qiáng)烈的成就感和自豪感,這是最好的原動(dòng)力,可以很好地激發(fā)他們的潛能,使他們的算法設(shè)計(jì)能力、程序設(shè)計(jì)能力和程序調(diào)試能力得到快速的提升,因此確定一個(gè)能激發(fā)學(xué)生興趣的題目很重要。
對比幾屆的新生的實(shí)施效果看,通過注重初學(xué)教育,加強(qiáng)課內(nèi)實(shí)踐,重視綜合實(shí)訓(xùn),并且嚴(yán)格實(shí)訓(xùn)組織和內(nèi)容選擇,不僅能提高學(xué)生對面向?qū)ο蟮睦斫猓€能提高程序設(shè)計(jì)的興趣,并極大加強(qiáng)了學(xué)生的實(shí)踐動(dòng)手能力以及解決問題的能力,培養(yǎng)了學(xué)生的創(chuàng)新精神。
[1]呂雅麗.面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)課程教學(xué)改革的研究與探索[J].現(xiàn)代企業(yè)教育,2012(20):123-124.
[2]張海林.計(jì)算機(jī)專業(yè)中的C語言教改方案探討[J].中國校外教育,2010(4):168.
[3]Booch,G.面向?qū)ο蠓治雠c設(shè)計(jì)(第3版)[M].北京:電子工業(yè)出版社,2012:20.
[4]龍軍.面向?qū)ο蟪绦蛟O(shè)計(jì)中類和對象教學(xué)方法的探討[J].新教育,2012(10):50.
[5]王鵬遠(yuǎn),蘇虹.高校非計(jì)算機(jī)專業(yè)C語言教學(xué)改革和實(shí)踐[J].計(jì)算機(jī)教育,2011(2):15-18.
[6]劉儒德,陳琦.當(dāng)代教育心理學(xué)[M].北京師范大學(xué)出版社,2007(7):119-120.
[7]朱建凱.普通高校計(jì)算機(jī)專業(yè)實(shí)訓(xùn)教改探索[J].長沙大學(xué)學(xué)報(bào),2009(5):112-113.
An approach to improve object-oriented programming ability of freshmen
Li Hai-bo
(College of Computer Science&Technology, Huaqiao University,Xiamen Fujian,361021, China)
Object-oriented programming is usually a required course for freshmen, is an important foundation of computer science courses. In recent years, aiming at many exposed problems in teaching process, by analyzing the characteristics of college freshmen thinking and course characteristics, some appropriate countermeasures are proposed. That is, starting from the transformation of mode of thinking, training, programming skills, reinforcing training curriculum. The approach can trinity improve freshmen programming capabilities fundamentally. By contrast, the programming capability of several sessions freshmen has improved significantly.
Object-Oriented; programming; freshman
G645
A
1000-9795(2014)02-0143-02
[責(zé)任編輯:劉麗杰]
2013-12-15
李海波(1972-),男,黑龍江哈爾濱人,副教授,從事計(jì)算機(jī)應(yīng)用技術(shù)研究。