彭源,孫超超
(上海電力大學計算機科學與技術學院,上海 200090)
隨著計算機技術的發展,程序設計已經成為許多理工學科的研究中必不可少的一項基本技能。在我校,高級程序設計C++課程一直是計算機專業,信息安全專業以及網絡工程專業一年級學開設的一門專業基礎課程。其他部分學科也將其納入基礎課的范疇。課程的任務是介紹C++面向過程的編程知識,主要培養學生的動手編程能力和軟件設計的邏輯思維能力,為后繼課程的學習和工作打下基礎。
由于學生之前從未接觸過面向對象程序設計的思想,從計算機程序設計語言和面向對象的角度考慮問題存在著一定的障礙,同時,這門課程,內容多,動手能力要求較高,因此在接受和掌握的過程具有一定的難度。
一門課程的教學,不僅需要老師對本門課程有深入的了解和細致的備課,在教學方法上也應該不斷改進,盡量從學生理解的角度出發,改進教學方法,使得學生易于接受和理解,從而提高教學的效果。下面是對理論教學方法改進的一些思考。
面向對象的程序設計方法雖然比起以前面向過程的語言更為人性化,但對于學生而言,仍覺得十分抽象,在具體的教學實踐中,選擇一些學生生活中較為熟悉的概念和實例,會幫助學生更好地理解和掌握抽象的知識點。在教學手段上采用“問題驅動式”的教學,以課堂上動態編程、問題和結果動態呈現的方式組織教學內容。
例如,對程序設計時“如何表示人這個概念”的問題進行分析,引導對概念進行抽象的思路。人都具有姓名、性別等屬性,也可以進行諸如吃飯、休息等行為,從而引出Human 類的概念和定義如下:

和現實中一個具體的人進行對應,引出對象的概念。并定義對象如下:
Human Jane;
學生是人這個概念中的一種特殊的情況,除了具有人的所有屬性和行為之外,也具有自己特有的行為和屬性,如具有學號,可以進行寫作等行為。從而引出繼承的概念并定義如下:

教學重點在于如何引導學生了解類是什么、有什么作用;一般類如何構成,為什么如此設計,類在設計的時候需要注意哪些問題等。通過實際教學,發現此種方法對學生的理解和掌握有著良好的促進作用。
隨著技術的日新月異,各種多媒體教學手段在課堂上占據了越的比重越來越大,本課程中,利用了雨課堂等課堂互動輕應用工具,將學生“低頭族”的工具手機,變成課堂回答問題、教師掌握學習情況、日常考核和反饋的工具;同時、作業的提交、資料的發放、師生即時消息的傳遞等也可以通過互動工具進行,從而強化了教師、學生之間的即時的課堂互動和溝通。
在課程學時較為有限的情況下,綜合利用線上資源,突出重點、兼顧全面:具體措施如下:
在有限的理論授課環節著重于關鍵知識點的理解,同步線上C++面向對象程序設計等國家精品課程;對于一些重過程、操作性的知識:例如程序調試步驟、項目中文件的組織等內容,以提供錄制或剪切的課后微視頻和在線視頻為主進行掌握,并在課程開展的過程中以一定的手段對知識點的掌握情況進行核實。
引入翻轉課堂模式,由學生進行項目的報告和講解,師生共同討論。結果證明,每個學生都能充分發揮主觀能動性,能動積極主動完成匯報和互評等,同時互評的成績也體現了公開、公平、公正。
為了避免“一考定終身”的情況,考核被分散到課程開展的各個時刻,包括課堂回答問題、翻轉課堂成績、及階段性的項目考核和期末考核等。先進的互動應用工具可在課堂過程中及時、定時的分發問題和回收學生答案,為課堂考核提供了技術支持;在翻轉課堂考核中采用教師主導,學生整體匿名評分的方式進行考核;項目考核鼓勵學生在課堂已有知識的基礎上進行延伸,教師根據學生實際完成情況進行打分;期末考核著重于重點概念和知識點的掌握情況。通過以上多角度、過程化的考核,可較為全面和客觀的評價學生的掌握情況。
C++程序設計是一門對動手能力要求很高的課程,大一的學生剛從高中進入大學校園,基本上學習模式仍處在聽課,理解知識點、做練習題的階段,對上機沒有太多的重視,而把時間多花在寫作業上。導致規則記得很牢,但實際編程卻總是出錯的狀況。
動手能力的培養,首先需要學生的重視,在教學過程中,應著重強調動手能力培養的重要性。同時通過以下方式,調動學生的對動手的積極性和糾正動手能力培養過程中的一些不好的習慣。
很多學生對打游戲有著天然的興趣,通過堵和壓的方式并不能有很好的改觀,反而使其更加上癮。不如采取疏和引導的方式,在學習任務已經完成的情況下,可以適量的打會游戲作為放松,同時漸進地將其興趣和好奇心由打游戲引導到自己設計游戲,編程實現一些小游戲上來。
興趣是最好的老師,當學生開始對游戲究竟是如何實現好奇的時候,學習的動力就非常足了。
程序的書寫格式是學生在學習初期經常會忽略的一個問題。雖然在課程中強調了程序應當按照鋸齒形的結構,每行一個語句進行書寫,但由于程序的書寫格式并不會影響到程序的執行,在學生絞盡腦汁、對出錯的程序來回修改的同時,很少有學生會注意到書寫的格式問題。
在編程的初期,由于程序比較簡單,不規范的書寫格式帶來的影響還不能顯見,這也是學生不重視格式的一個原因。但在后期,程序比較復雜的情況下,程序的易讀性變差,從書寫格式不規范的學生的情況來看,部分學生就開始放棄,而且出錯的原因中,由于格式不規范而導致大意出錯的情況屢屢出現。
程序的格式是一個習慣的問題。對于教師,針對于學生的特點,需要在實驗的過程中,反復提及格式書寫的重要性。當學生出現此類錯誤時,需要再次強調。以引起學生高度的重視,最終形成良好的習慣。
在程序中,‘{’和‘}’、‘[’和‘]’、‘(’和‘)’等都是成對出現的,在學生的程序設計過程中,經常會有‘}’多了或者少了的情況,針對于此,因當要求學生在寫出‘{’的同時就寫出‘}’,然后回過頭來在填充一對花括號里面內容。這有悖于常規的如作文、作業等的書寫順序,但卻是一個很好的防治程序出錯的辦法
學生在編程中,經常會出現想當然的情況,在實驗過程中,針對學生出現的問題,要考慮到他們出錯的原因,指出本質上的錯誤。培養其轉變思路,從計算機理解程序的角度來考慮問題。
以學生經常犯的一個錯誤為例:C++中,5/2 結果是2,而不是數學中的2.5。其原因在于同樣是“/”作為除運算符在C++中的表示,當左右兩個操作數均為整數的時候表示的是整除;有操作數為浮點數時,才表示的是數學中常見除運算。因此,若要得到2.5,需將其中的一個操作數如5 改成5.0,在解答此本題的同時,更重要的是告訴其結果為2 的原因,引導其思維的改變,從計算機處理的角度而不是常理的角度出發來思考問題。
課后學習也是學習的一個組成部分,對于學生鞏固知識具有舉足輕重的作用。
C++語言規則多、雜,通過有限時間的編程練習,并不能囊括所有的知識點。上機編程之外,作業也是很重要的一環,沒有作業的鞏固,很難希望學生課后仍記得很牢。
同時,作業中的程序對學生編程思路的開展也有很好的幫助,課堂上受學時的限制,很多編程思路無暇提及,可以展現在作業中。學生做題的同時,實際上就接受了此思考問題、解決問題的辦法,有助于學生開闊思路、提高解決問題的能力。
大量的程序實例對學生來說非常必要,在學語言的過程中,語句的規則比較重要,換個題目,可能學生就不知道應該如何書寫了,通過例題程序,學生可以方便的找出合適自己的程序結構,在學習的初期,實例這根拐杖是有必要的。
通過教學實踐也發現,書上的例題程序遠不能滿足學生的需求,經常會有學生要求給出更多的實例程序以供參考。
在教學的最初,需要注意觀察班級的情況,著重培養個別興趣濃厚的學生,通過鼓勵和表揚以及引導他們解決疑難問題等方式提高他們的學習積極性,并從中培養出一些優秀的學生。
此種做法的好處一是可以帶動整個班級的學習氣氛。學生的競爭意識都比較強,有尖子生作為標尺,可以對他們形成一定的壓力,也是他們努力學習的動力。另外一個好處是這些學生可以給其他同學提供幫助,在教學的后期,以這些優秀的學生為中心,組成若干學習小組,以強化學生課后的交流,從而提高整個班級的掌握水平。
C++程序設計是一門實踐性很強的課程,在教學過程中,不僅要課堂上傳授理論知識,而且也要在實驗中著重培養動手能力。在教師采取一定措施,不斷改進教學質量的同時,學生的學習態度也是非常關鍵的,可以通過各種方式調動學習的積極性。