吳小菁
(福建江夏學院,福建 福州 350108)
軟件工程專業是以培養復合型軟件工程人才為目標,是一門借鑒傳統工程的原則和方法,將計算機科學、數學和管理科學巧妙地結合起來,開發和維護軟件產品的學科.因此,在高校中,計算機科學技術與軟件工程專業所設置的課程會有些交叉,即使開設的課程相同,也必須在教學上進行調整,以適應軟件工程專業知識領域和人才培養目標的需求.本文以軟件工程專業開設的程序設計類課程為例,為了取得良好的教學效果在教學內容、教學模式、實踐環節、考核方式等方面進行改革.
程序設計類課程是軟件工程專業一門重要的專業基礎課,它以計算機語言為基礎,運用程序設計邏輯及特定的算法進行程序設計能力的培養.該課程具有很強的實踐性,但是高校的課程教學僅僅建立在對語言本身的認識上,課程教學理念嚴重滯后于實際需要,教師不愛上,學生不愛聽,以至于教學效果不理想.現在的軟件工程專業學生擁有的優勢越來越少,就業壓力也越來越大,應該在程序設計類課程傳授中樹立新的語言教學理念,語言知識傳授只能夠占到整個程序設計類課程教學工作的1/3,另外兩個2/3應該分別是引導學生去思考、去探索,進行研究性學習.學生的學習激情被激發出來,就會超越課堂時空的限制,學生才能夠超越自己的老師.
2.2.1 任務提出
課堂教學中,教師具有與以往教學不同的角色與職責,教師自己要事先開發出項目,精心設計任務,創設問題情境,任務驅動下的教學流程讓學生在自身認知經驗的基礎上自主地體驗一個程序需要運用的知識,尤其是如何更好的運用在實際問題中.教師這個階段主要扮演學習者、研究者、引導者、指導者的角色.在課堂教學實踐中,教師的作用主要體現在以下幾點:
(1)設置學習情景;
(2)必要的教學示范;
(3)設計學習活動;
(3)引導學生利用學習資源;
(4)組織監督教學過程;
(5)學習階段的總結.
2.2.2 自主探索
在編寫程序過程中讓學生自己進行探索性的學習,程序設計中的成果能極大地增加學生的成就感、培養學生程序設計的興趣,并達到更加牢靠地鞏固理論知識的目的.選出較優秀的程序設計案例,進行答辯,老師與其他學生做為答辯委員,制作者用適當的語言清晰地表達其思考過程及程序設計方法.
2.2.3 教師點評
回顧知識點,總結知識重點難點,給學生充分的自我評價的機會,調動學生的學習積極性,減少他們的挫敗感,鼓勵他們大膽嘗試新方法、新技術,用多種方法解決問題,培養創新能力.
2.2.4 任務解決
通過學生的自主交流、探索與教師的點評,得出最佳的解決方案.

表2-1 研究性學習策略與傳統學習的比對
本人設計一個完整的案例,從算法方面具體說明了研究性學習策略在程序設計課程中的應用,以下的案例是《C++程序設計語言》中遞歸編程技術的學習.
3.1.1 教學設計思路
學生對程序設計大都有一種懼怕的心理,總認為程序設計太難了.遞歸法是程序設計中的一個難點內容,在教學過程中,如何才能解決程序設計本身枯燥、難懂這個問題?本案例通過游戲法導入,激起學生學習的興趣,然后讓學生進行研究,對程序設計過程中如何培養學生的邏輯思維能力和抽象思維能力給予了適當的關注.學生在對自己的游戲過程的分析和總結,也得出了遞歸法的算法思想,然后編寫、調試程序.這樣一點一點地揭開遞歸法的“神秘面紗”,學生就不會感覺到算法深不可測,也增加了他們學習程序設計課程的信心.
3.1.2 教學過程
3.1.2.1 情景創設
游戲規則:設A、B、C是3個光盤桿.開始時,在桿A上有一疊共3個光盤,這些光盤自下而上,由大到小地疊在一起.各光盤從小到大編號為1,2,3,如圖3-1所示.現要求將桿A上的這一疊光盤移到桿B上,并仍按同樣順序疊置.在移動光盤時應遵守以下移動規則:規則(1):每次只能移動1個光盤;規則(2):任何時刻都不允許將較大的光盤壓在較小的光盤之上;規則(3):在滿足移動規則(1)和(2)的前提下,可將光盤移至A,B,C中任一桿上.
游戲開始:同桌一組開始做游戲,學生很高興地投入到游戲中.

圖3-1 Hanoi塔問題
3.1.2.2 適當引導
引導學生:當光盤數為1、2、3、4等不同的數時,有沒有什么規律?學生在游戲中得出:就是將最后一個盤子挪到B桿子上,將其余的盤子挪到C桿子上.
3.1.2.3 遞歸概念的引入
首先:必須將A最大的盤子移動到B最下面,首先需要借助B將A上面的n-1個盤子移動到C上面就是hanoi(n-1,A,C,B).此時A上面只有一個最大的盤子,C上面按序放著n-1個盤子,B上面有0個盤子.
其次:將A上面的盤子移動到B上面,只需要1步.此時A上面有0個盤子,C上面按序放著n-1個盤子,A上面只有一個最大的盤子.
最后:借助于A柱子將C上面n-1個盤子移到B上面即可就是hanoi(n-1,C,B,A).
總結:就是將最后一個(n-i個,i=0、1、2、3、……)盤子挪到第B上,將其余的盤子挪到第C上(借助第B個位子),一直這樣遞歸下去,而中間的怎樣借助第B將盤子挪到C上不用考慮.數學推導公式為:f(n)=2f(n-1)+1,其中 f(1)=1,f(n)表示將 n個盤子從A柱子移到B柱子的步數.
3.1.2.4 提出問題
試編寫一個程序,用最少的移動次數將塔座A上的n個圓盤移到塔座B 上,并仍按同樣順序疊置.對于給定的正整數n,編程計算最優移動方案,將計算出的最優移動方案輸出到文件output.txt.文件的每一行由一個正整數k和2個字符c1和c2組成,表示將第k個圓盤從塔座c1移到塔座c2上.
如k=3時,輸出為1 A B;2 A C;1 B C;3 A B;1 C A;2 C B;1 A B
3.1.2.5 自主探索
學生設計算法,編寫程序,教師巡視指導.允許學生合交流探討,調試工作可以做為家庭作業,課后完成.通過email把作業成果提交給教師.
3.1.2.6 自動化程序編譯系統批改學生作業
程序在線評測系統可以對作業進行自動編譯,檢查出程序是否存在語法錯誤;另一方面,它還能驗證程序是否能得到正確結果,以及所花費的代價(時間和空間上的).根據處理結果與相應的參數設置,程序在線評測系統能自動給出學生此次編程作業的成績,消除了老師在檢查作業的過程中的主觀因素,增加了學生之間的公平性.
3.1.2.7 答辯
編譯系統評出優秀作業,編寫者在下一次課前做優秀作業的答辯.學生根據編寫的程序,制作PPT,向老師與全班同學展示,并回答老師與同學的提問,答辯通過可以在考核中加分.
3.1.2.8 老師點評
教師對學生在學習過程中的表現進行總結,并引導學生對本課主要知識點進行簡單總結,并提出遞歸法在編程中的其它應用.
3.1.2.9 問題解決


課程設計是實踐教學的重要組成部分,上機實驗大多是消化上課內容,學生們模仿多于創新,不利于培養學生們的啟發式思維和實際解決問題的能力.所以,課程設計是在基本教學內容完成之后的綜合練習,一般兩個星期內完成.課程設計強調設計出的系統具有實用性、完整性和創新性,有一定規模和功能相對完整.學生們通過集中時間的強化學習和訓練,能更好的貫穿和總結軟件開發思想和技術,鍛煉了分析、修改和設計程序的動手能力,并能夠在實訓的過程中培養團隊精神.
程序設計能力占50%.
課程設計說明書完成情況占20%.
口頭答辯占20%.
其他(考勤、課堂紀律等)占10%.
大學本科教學作為大學教學工作的中心工作,承擔著高素質人才的培養重任,理應改變以往傳統的傳遞性教學模式,用全新的教學理念指導自己的教學實踐.經過教學過程的實踐與學生反饋,引入研究性的這種教學方法收到了良好的效果,增強了學生解決問題的熱情,從而提高了學習效率.因此大學生都需要具備這樣一種研究性學習的意識和精神,以此響應國家、社會對創新人才的培養需求和大學生自身全面發展的需要.
〔1〕蔡曉麗,陳舜青,丁志云.計算機語言類課程實踐環節教學改革探討[J].常州工學院學報,2010(6):63-96.
〔2〕馬華,陳振.應用型本科院校程序設計課程實驗教學改革研究[J].計算機教育,2011(4):19-22.
〔3〕駱斌,王浩然.軟件工程專業程序設計類課程的設計[J].吉林大學學報,2005(23).
〔4〕付沙.高校程序設計課程教學改革與實踐[J].計算機教育,2010(2):21-24.
〔5〕常本勤.基于問題的學習模式在程序設計類課程教學中的應用[J].計算機教育,2010(2):125-127.
〔6〕于鋼.研究性學習課程的教學策略[J].教育探索,2003(06):33-34.