前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的計算機程序設計語言主題范文,僅供參考,歡迎閱讀并收藏。
關鍵詞:課程改革;項目教學;準職業人
中圖分類號:G642文獻標識碼:A文章編號:1009-3044(2011)15-3638-02
Computer Programming Language of the Curriculum Reform
ZHU Geng-shen
(Linhai Secondary Vocational and Technical Schools, Linhai 317000, China)
Abstract: Improve their computer knowledge and practical ability for students to become quasi-professional personnel, vocational schools is the fundamental task of computer teaching.I will Beida Jade Bird programming language "JavaScript" curriculum used in teaching the theory and practice of computer operations, the design of the materials lead me to think about curriculum reform in vocational computer.Beida Jade Bird programming language a "project-oriented" curriculum design, curriculum projects all around the complete step by step, the students in the learning process, but also completed a practical project development, the design is not only recognized the studentsknow the law can fully mobilize the students interest in learning, improve their self-learning ability and the ability to solve practical problems, training of students and better able to adapt to current market demand for skilled software professionals.
Key words: curriculum reform; project teaching; quasi-professional person
目前中職計算機課程體系及課程內容設計存在著許多問題。在我國中職計算機教育中, 專業課程開設不大合理,教材內容設計不與實際應用相結合,程序設計課程教學內容要么過于簡單和籠統,要么過于復雜和高深,導致許多中職學生對編程學習產生嚴重的抵抗情緒,出現厭學、棄學現象,所學的部分程序設計知識和操作技能,對學生畢業后進入社會后所從事的職業沒有任何用處,而真正許多實用性強、專業性強的課程和計算機應用軟件卻又沒有學到。因此,我們必須從以下幾方面對中職計算機課程體系及課程內容進程大力改革。
1 明確學生的培養目標
原來中職學生的培養目標,主要以掌握教材統一指定的理論知識與基本技能為主,學生是否畢業以統考、會考成績決定。畢業后,因培養目標、課程內容、操作技能不能與實際所需對口,導致很多學生難以找到適合自己的工作崗位。
從現在中職的培養目標及定位來說,中職學生應該是社會所需要的擁有一般化專業知識與中級或以上實踐操作技能的準職業人,而不是像大學本科生一樣,擁有很深厚的理論知識與專業技能。這就意味著中職計算機專業的學生,他們畢業后能在專業對口的普通崗位上找到適合自己的工作,而不是去搞科研或編寫大型的計算機軟件。如:機關、企事業中計算機網絡的管理、信息處理的多媒體設計制作、廣告影像行業的圖形圖像處理、設計行業的計算機輔助設計、辦公自動化中的設備應用和公文處理等,都缺少有一定技術水平的準職業人才。因此,在改革中職計算機專業的課程體系與課程內容之前,不能盲目開展,應做好充分的調查分析工作,從計算機專業細化的開設方向到實際應用,必須緊貼現實生活,最大可能的保持與信息技術發展趨勢、社會的用人需求同步。
北大青鳥在開設《JavaScript》課程之前,做了大量的企業調研與社會用人需求分析。調研結果顯示,中國近幾年互聯網行業的高速發展,使越來越多的企業認識到網站運營以及網站推廣的重要性,很多企業目前需要掌握一定的系統維護知識、網頁設計制作知識和網站維護相關知識的復合型技術人才。進一步分析了解這些崗位應具備的IT技能,從而設計出適應于中職學生的計算機課程體系,使學生所學知識具有很強的實用性,保證學生能夠在就業市場中具備競爭力,能夠滿足社會對人才的需求。結合目前中職學生的學習特點,將北大青鳥計算機專業學生的目標定位在培養網站運營人員,并對網站運營崗位從計算機技術層面劃分為三部分:除互聯網公司外的所有企業的網站維護員(涉及到JavaScript知識);網站制作公司的網頁設計師(涉及到JavaScript知識);中小企業網絡維護人員。
2 注重激發學生的學習積極性、培養學生的學習興趣
興趣是學習的內在動力,是學生自學最好的老師。原來的中職教程在內容設置方面,以理論居多,許多內容均滯后于時代的發展,涉及生活實際的知識、技能較少,涉及到實際項目的內容更少;理論作業偏多,實際操作較少;內容排版呆板,例圖、效果圖很少。
關鍵詞:計算機程序設計;教學方法;實踐
大學階段一門很重要的計算機基礎課程――《計算機程序設計》,它是培養學生計算機應用能力最基本的課程,因此計算機程序設計實驗教學是計算機程序設計這門課程中非常重要的實踐環節。計算機程序設計實驗教學的主要目的不僅是對課堂及教科書中知識進行深入理解與驗證,更重要的是要培養學生的思維及實踐能力。但是目前計算機程序實驗教學存在重驗證、輕設計的錯誤思想,這就導致計算機程序設計的實驗效果不佳,學生的學習興趣沒有得到充分的激發,忽略了學生的主體性。隨著教學改革的不斷深入,教師將如何更好的提高計算機程序設計課程的實驗教學效果,充分培養、發揮學生的創造性思維與主觀能動性成為了實驗教學所研究的重點。本文從學生自主學習的角度出發,圍繞著培養學生思維能力這個核心內容來探討計算機程序設計課程實驗教學的方法。
1 重視學生的實驗預習與實驗準備環節
在計算機程序設計實驗時,一些學生在實驗過程中不知所措、毫無頭緒,這就造成學生盲目實驗或無法進行實驗,最終導致實驗無法順利完成,造成這種現象的主要原因就是學生在實驗前沒有深入的預習實驗知識以及實驗準備不充分。為了避免這樣現象的發生,教師應重視學生的實驗預習與實驗準備環節,逐步引導學生進行充分的預習與準備。在計算機程序設計理論教學中,教師應該同時引導學生對實驗知識及實驗準備進行充分的預習,預習的主要內容包括:實驗目的、實驗方法、實驗要求及實驗步驟等,此外,教師還應該要求學生根據自己的實驗內容及要求來收集與了解與本次實驗相關的實驗資料,以此來加深對實驗的了解程度。
另外,學生所選定的實驗內容也十分重要。教師應根據本次試驗的目的與要求來制定實驗內容的范圍,這樣不僅可以避免學生選擇實驗內容的盲目性,而且學生可以依據自身的興趣來選擇可以充分發揮自己創造性思維的實驗內容。因此,教師應依據實驗課的目的及要求來制定自選式及開放式的實驗內容,學生也可以自主的選擇適合于自身的實驗內容。這種開放性的實驗課不僅可以鼓勵學生充分發揮自己的創造性思維從實際問題的角度來自主的設計實驗內容,而且還能夠滿足不同層次、不同興趣的同學都能選到自己感興趣的實驗內容。
2 在實驗環節中著重培養學生的實驗能力
2.1 實驗中常見問題的解決
學生在實驗過程中經常會出現一些自己難于解決的錯誤代碼以及操作錯誤等常見問題,這些問題如果在沒有老師幫助解決的前提下可能會導致學生實驗無法進行下去。由于在計算機實驗教學中教師所帶學生均在60人以上,實驗中出現的問題也各不相同,如果由老師單獨進行指導是根本無法解決全部學生的問題,這也就不可能提高計算機程序設計的實驗效果。針對以上問題,筆者提出了一種有效的解決辦法――教師指導為主,學生互助為輔。
教師在計算機程序設計實驗課中針對學生提出的問題要耐心引導,尊重學生的想法。在指導時應讓周圍的同學一起參加問題的討論,例如:對于試驗中代碼的問題,教師要引導學生注意問題的出處,然后分析這種錯誤是邏輯錯誤還是語法錯誤,耐心教會學生如何從數據結構與算法的角度去分析問題,如何根據系統提示來查找問題的原因,并積極鼓勵討論組的學生主動發表自己的看法,積極討論問題。這樣不僅解決了試驗中的問題,而且可以通過討論組進行互助學習,提高了實驗的效果。此外,教師要總結試驗中出現的共性問題并提出典型的解決方法以供全班同學討論學習,在提高教師自身素質的同時還能激發學生求知欲望及創造性思維能力。
2.2 課堂知識向課外知識的延伸
在課內實驗課程的基礎上,教師應將計算機程序設計實驗向課外實驗進行延伸。學生通過課內實驗中所學到的知識及應用能力可以獨立自主的完成課外實驗,學生在課外實驗過程中出現的問題可以通過網絡與老師進行交流與討論,這不僅可以大大提高計算機程序設計實驗教學的效果,而且可以極為有效的激勵學生的學習興趣及創造性思維。
3 學生自主總結與評價實驗結果
教師應依據學生的實驗能力來制定評價標準,并對學生的報告做出評價,對于學生自主設計的實驗內容、解決方法及實驗總結體會等內容進行額外加分。另外要求學生對自己的實驗進行評價,總結試驗中出現的問題及解決辦法,提出自己的見解及想法,讓同學與教師的評價進行對比,這樣不僅讓學生在老師的評價中找出自己存在的問題,并且能夠使得學生對本次實驗進行及時有效的總結與歸納。
4 總結
教師在計算機程序設計試驗中著重培養學生自主學習的能力,不僅能夠加深學生對理論基礎知識的理解與認識,而且還能有效的提高學生實驗能力、激發學生創新型思維。因此,教師應在計算機程序設計試驗中圍繞培養學生的實驗能力進行深入的研究與改革教學,通過不斷的探索與實踐才能取得較好的計算機程序設計實驗教學效果。
[參考文獻]
[1]龔沛曾,楊志強,顧春華,徐安東.大學生計算機實踐能力培養的改革和實踐[J].中國大學教學,2008,6:16-18.
【關鍵詞】程序設計 計算思維
【中圖分類號】TP30 【文獻標識碼】A 【文章編號】1006-9682(2012)12-0026-02
一、引 言
進入信息時代,計算思維能力的培養越來越得到社會的認可和廣泛關注。計算思維不僅僅屬于計算機科學家,它是每個人應具備的基本技能。就像所有人都具備閱讀、寫作和算術能力一樣,也要學會計算思維。如同其他思維能力獲得途徑一樣,計算思維能力也需要通過系統的培養方案和課程計劃的科學實施才能獲得逐步的提高。[1]程序設計課程除了基本語法外,還涉及問題建模,求解方法評價與取舍,編程實現,程序調試、運行以及結果分析等諸多環節,涉及計算思維多個核心概念問題,它不僅僅是培養學生的編程能力和編程技巧,而且也是培養學生計算思維能力的重要手段。然而在傳統的程序設計語言教學過程中,教師通常比較注重語言語法規則的講解,而程序設計又往往涉及多方面知識,面對程序設計語言中繁雜的語法規則和對解決問題方法的欠缺以及有機結合,很多學生慢慢喪失了學習的興趣,動手能力普遍較差。教學實踐表明,相當數量的學生僅僅停留在書本知識的死記硬套,另外,一些學生雖然實現了某問題的求解,往往也不能做到活學活用,也就更談不上計算思維能力的培養。本文介紹了計算思維的基本概念以及本質特征,結合多年的教學經驗,探索在程序設計課程中融入計算思維的理念,構建以教師為主導、學生為主體、教學內容為載體、突出學生計算思維能力培養為目標的創新型教學模式改革。
二、計算思維及其本質特征
計算思維是當前一個頗受關注的涉及計算機科學本質問題和未來走向的基礎性概念。這一概念最早是由麻省理工學院的Seymour Papert教授在1996年提出的,但是把這一個概念提到前臺來,成為現在受到廣泛關注和認同的代表人物是美國卡內基梅隆大學的周以真教授。周教授認為,計算思維是運用計算機科學的基礎概念進行問題求解、系統設計,以及人類行為理解的涵蓋計算機科學之廣度的一系列思維活動。計算思維是一種遞歸思維和并行處理,是基于抽象和分解原則,利用約簡、嵌入、轉化和仿真等方法形式化地將復雜問題轉化為易于求解問題的思維活動,是按照預防、保護及通過冗余、容錯、糾錯的方式從最壞情形恢復的一種思維,是利用啟發式推理來尋求解答,就是在不確定情況下的規劃、學習和調度的一種思維。計算思維是概念化,不是程序化,是計算機科學不是計算機編程。像計算機科學家那樣去思維意味著遠遠不止能為計算機編程,還要求能夠在抽象的多個層次上思維。計算思維是根本的,不是刻板的技能,是每一個人為了在現代社會中發揮職能所必須掌握的??贪宓募寄芤馕吨唵蔚臋C械重復。計算思維的本質是抽象和自動化。[2]
三、程序設計課程計算思維培養模式
為了有效的在課堂教學中開展學生計算思維能力的培養和訓練,教師要深刻認識和理解計算思維的基本概念和本質特征,在此基礎上,結合程序設計課程的教學內容和教學目標,重新整合教學內容,改進教學方法,構建以教師為主導、學生為主體、教學內容為載體、突出學生計算思維能力培養為目標的創新型教學模式。
1.教學主體
學生和教師是教學活動中兩個重要的角色,相互作用,互相影響。教師起主導作用,引導學生積極參與課堂教學活動,教師要能充分調動學生的積極性和能動性,使其樂于其中,而不僅僅是簡單的知識傳授和編程技能的訓練。教師要將計算思維的思想融入教學過程,努力創建師生平等的教學環境和學習氛圍。學生是教學的主體,學生要在教師的引導下,充分發揮自身的主觀能動性,在教師營造的平等的教學氛圍下,積極創造性地學習,深刻體會各個知識點之間的銜接關系,在舉一反三的過程中逐步獲得計算思維的能力。
2.教學內容
課堂教學內容要能激發學生學習的激情和動手參與的欲望,并且使其能順利地參與。這就要求選取對學生有益的或有意義的教學內容。正如李波教授所說:“要讓學生做些他們感覺有意義的工作”,否則,就不可能引起他們的興趣,那么就不可能學好。[3]同時,選取的教學內容要符合學生現有的接受水平,做到通俗易懂不晦澀。程序設計類課程主要包括算法流程(程序流程)和程序實現兩個內容。算法流程主要學習問題求解方法和求解思路,而程序實現是利用現有計算機資源,編程實現問題求解算法,進行問題求解和仿真。這兩者涉及對求解問題的抽象、分解、約簡、轉化以及問題求解算法實現過程中所涉及到的對計算機資源的理解、問題求解的預置,可能出錯的預防、保護等計算思維的核心概念。教學過程中涉及到如何將這些核心概念貫穿于教學過程中,需要教師對教學內容進行整合和重組,選取能引起學生興趣的典型案例,并根據學生實際情況,分層次、分梯度不斷對其進行進階和拓展訓練,并舉一反三、觸類旁通。
由于是學生的第一門編程語言課程,學生對問題求解方法和求解思路的欠缺是其編程的最大障礙。特別是對于專科班的學生,部分學生即使掌握了編程語言的基本知識,也不能靈活運用。為此在教學的過程中,特別是初期,盡可能采用流程圖的方式進行問題講解和學生練習,用類語言,甚至自然語言進行設計和講解,使學生先掌握問題求解方法和思路,再考慮如何轉化為計算機語言編程實現,在這個過程中盡量發揮學生的主觀能動性和創造性思維,教師在引導學生的過程中要使其知其然、知其所以然,并循序漸進,設計進階和擴展練習,多讓學生思考對于某個問題是否還有其他的解決辦法?這幾種方法的優缺點是什么?對計算機資源有什么特殊的要求等等。使學生在反復問題求解和編程實踐中逐步掌握計算思維的能力。
3.教學方法
為了將計算思維能力的培養融入計算機程序設計教學過程,我們采用任務驅動、問題引導、典型案例、課堂討論、反思與構建以及易于理解的手段組織和開展教學活動。任務驅動根據教學內容設定不同難度的編程任務,通過提出問題,引導學生思考解決方法,設置典型案例特別是核心問題的典型案例,有利于學生舉一反三,易于掌握知識,提升技能。布置專題組織課堂討論,互相學習,能夠取長補短,發現自身不足,激發學生的學習熱情,同時教師也能夠及時掌握學生的知識掌握情況;反思和自我構建就是在教學中,通過綜合性任務,使學生在反復訓練的基礎上對自己所學到的知識進行自我思考和重新組織,以求獲得解決復雜問題和綜合性任務的能力。同時,在教學的過程中要采用易于理解的手段開展教學活動,國防科大非常成功之處在于程序設計課程中引入Lego機器人編程,學生能夠很生動直觀地進行控制程序控制設計與實現,而且樂于其中。雖然我們學校目前還不具備這些條件,但如果能夠做到仿真模擬,也將是一大進步,容易被學生接受。例如,采用Raptor軟件配合算法流程的講解,學生幾乎在沒有掌握計算機編程語言的情況下,能夠獨自實現問題的求解和仿真驗證,同時切身體驗計算機對于問題求解算法的執行過程。由于Raptor軟件是以流程圖的形式設計和執行,而且幾乎沒有編程語言所特有的語法規則,非常容易上手,特別適合初學計算編程的學生使用。
總之,在教學過程中要盡可能地將復雜的計算機學科知識以簡單易懂和趣味化的方式呈現給學生,讓學生在參與中提升能力,在拓展中尋求創新。
4.教學評價
教學評價是教學活動中的重要環節。為了保證提升學生計算思維能力這一教學目標,我們采用了平時教學過程考核和最終測評相結合的考核模式,并非常重視平時考核,平時考核包括課堂參與、作業、項目參與,并采用師生座談,小組考核和自評相結合的方式進行,努力做到公平公正。
同時,教學評價不僅僅是給出一個評價結果,而是要為教學過程的不斷改進提供參考依據,讓教師感知教學活動的得與失,進一步改善教學活動。師生座談能夠使教師和學生各自反思當前存在的問題和癥結所在,及時修正。小組考核能激發學生的學習熱情和組間協作,自我評價能夠讓學生反思學習過程的得與失??傊u價不是目的,而是計算思維能力培養教學活動改進的依據。
四、結束語
計算思維能力的培養是一個系統工程,不可能一蹴而就,也不是靠一兩門課程的學習就能夠獲得,計算機核心知識和理論的不斷積累是理解并建立計算思維的重要條件,而計算思維能力的培養和提升,貫穿于學習者整個學習過程,以及利用計算思維解決實際問題的正反饋,這也是一個動態發展的過程。本文根據計算思維的特征,探討了以計算思維培養為目標的程序設計課程教學模式,并在我校應用,解決了初學者難于理解問題求解方法和流程和入門的難題,為后續課程打下了程序設計基礎和編程基礎,使其計算思維能力得到一定的訓練和提升。
參考文獻
1 陳國良、董榮勝.計算思維與大學計算機基礎教育[J].中國大學教學,2011(1):7~11
關鍵詞:排序;元素;算法
中圖分類號:TP316.2 文獻標識碼:B 文章編號:1002-7661(2013)34-029-02
一、引言
排序就是將線性表中的各元素按關鍵字從小到大(或從大到小)的順序重新排列。在本文里,把作為排序依據的關鍵字稱為排序碼。排序過程一般都涉及到排序碼的比較和元素的移動這兩種基本操作。排序算法的執行時間通常用這兩種基本操作的執行頻度來衡量。在程序設計基礎教學中,排序算法不但是一種基本算法而且還是一種常用的算法,是學生必須掌握的內容。從我多年的程序設計教學中發現往往書中的排序算法的文字描述對學生來說很難理解。程序語言的描述更是不知其所指,這對學生來說很大的打擊了他們學習的積極性,也使得他們很難真正的掌握排序算法,并在實際應用中發揮作用。本文就這一現象問題將排序算法用VC++設計成動態的排序效果生動形象地演示學生看,有助于學生理解并掌握,增強學生學習排序算法的積極性。
本排序動態演示設計的思想是:以一種排序算法作為范例,動態的演示一組數據在這個算法思想下的變化過程,并在動態演示過程中隨時可以調整排序速度以便給學習者有思考的過程,通過動態的演示讓學習者清晰的看到算法的思想。這種動態的演示算法的過程可以推廣到其他排序算法中去,有了這個動態過程的演示,學生就可以輕松的掌握各種算法的思想,并在程序設計的過程中很好的利用。
二、排序算法
常見的排序算法有快速排序、希爾排序、堆排序、選擇排序、起泡排序、折半插入排序、直接插入排序、歸并排序,這些排序算法都各有其優缺點。本文將對起泡排序、選擇排序這兩類進行探討。
1、起泡排序
起泡排序算法的基本思想是:在元素中依次比較兩個相鄰元素的排序碼,若前者比后者大則交換,若前者比后者小則保持不變。先將第一個排序碼與第二個排序碼比較,然后是第二個與第三個比較,直到倒數第二個與最后一個排序碼。比較一輪結束之后,排序碼大的記錄均向后移動。然后開始新一輪的比較,知道一輪比較下來,不再有排序碼的交換發生為止。整個過程就有點像水中的氣泡上升的過程,輕的往上浮,重的向下沉,所以這個算法也叫起泡排序法。算法的步驟如下:
(1)假設要排序的數列為A[1]……A[N],我們把相鄰的兩個數兩兩進行比較。即把A[1]和A[2]比較,對比完后把A[2]和A[3]進行比較,……直到A[N-1]和A[N]比較完為止。在相鄰的兩個數兩兩進行比較的過程中,如果前面的一個數比后面的一個數大,則把這兩鄰的兩個數交換,也就是說,我們把較小的數放在前面,把較大的數調到后面。即,如果在一次比較中,如果A[1]比A[2]大的情況下,把A[1]和A[2]交換,……以此類推,直到一輪A[N-1]和A[N]比較完。
(2)再次重復(1),直到相鄰兩數之間不再發生交換為止。
2、簡單選擇排序
簡單選擇排序算法的基本思想是:從所有元素中選出排序碼最小的元素,將它與A[0]交換位置;然后,在A[1]~A[N]中選出排序碼最小的元素,將它與A[1]交換位置;依次做下去,在進行了N-1次選擇后排序過程結束。這種排序算法比較的次數與前一種排序算法一樣多,但是交換次數要比起泡排序算法少,效率較高。
三、演示方法
1、傳統方式的演示方法
目前大專院校教師在對語言程序設計中排序算法的內容進行講授時一般采用靜態數字輸出方式,如圖1所示。這種方法對于描述排序算法中交換數據的過程不夠形象生動。
圖1 傳統方式的排序演示方法
2、立方柱形的動態演示方法
(1)設計原理
本排序算法動態演示程序是在VC++6.0集成環境下實現,基于對話框類型的MFC應用程序。為了直觀清楚地表現起泡排序與選擇排序的排序過程,程序設計的主界面如圖2所示。
圖2 排序算法動態演示程序主界面
程序主界面是一個對話框,包含控制區,演示區和說明區三個部分。
控制區位于主界面的上方,主要由下拉組合框控件,按鈕控件,滑動控件以及靜態文本框控件組成。下拉組合框控件供選擇產生多少個隨機數進行動態排序演示,按鈕控件用來控制動態排序演示的開始,滑動控件用來控制演示速度,在需要仔細查看演示過程的時候,可以將滑動塊移到最左邊演示。
演示區位于主界面的中間,由上下兩個繪畫窗口(靜態文本框控件)組成,負責將排序中的數據以立方柱形繪制出來,而不是簡單輸出我們通常熟悉的1、2、3等數字符號,顯得更為直觀,比較有動態演示效果。
說明區位于主界面的右邊,由上下兩個靜態文本框控件組成,是對描述排序算法動態演示的簡單說明。
(2)主要實現過程
首先創建一個基于對話框類型的MFC應用程序SortingDemo,在主對話框上添加所需要的控件。然后,在對話框CSortingDemoDlg的初始化函數OnInitDialog末尾加入控件的初始化代碼。
在CSortingDemoDlg.h中的類SortAlgoWindow里定義m_wndSortAlgo1和m_wndSortAlgo2的2個實例,分別實現對起泡(升序)排序和簡單選擇(升序)排序的動態演示。
類SortAlgoWindow是從CWnd派生的一個窗口類,重載WM_PAINT消息,OnPaint方法里面實現更新后的數組元素的繪制。
類SortAlgoWindow的UpdateSoringData方法會更新并重繪排序中的數據。
void SortAlgoWindow::OnPaint()
{ CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CWnd::OnPaint() for painting messages
// 繪制面板底色
// 根據排序中的數組元素,繪制立方柱
// 用紅色繪制發生交換的數據1
// 用藍色繪制發生交換的數據2 }
按鈕控件是用來控制排序動態演示的開始,通過創建2個線程實現起泡(升序)排序和簡單選擇(升序)排序的排序過程,并將排序過程以立方柱形顯示到對應的顯示控件中。
void CSortingDemoDlg::OnBnClickedStart()
{ AfxBeginThread(BubbleSortProc, this);
AfxBeginThread(SelectSortProc, this); }
(3)程序運行
圖3是程序運行時排序過程中的一個截圖,從圖中可以看到,在起泡(升序)排序過程中,相鄰的紅色,藍色2個元素進行了交換,較大的元素向后移動。而在簡單選擇(升序)排序過程中,較小的(藍色)數據被排到了最前面。
圖3 排序算法動態演示程序開始
所有元素按照升序方式排序結束后的最終運行界面如圖4所示。
圖4 排序算法動態演示程序結束
四、結語
我們在進行程序設計中排序算法內容的教學時采用本文中立方柱形方式的動態演示方法講授,由于它的直觀性能夠使得讓抽象的內容不再難以理解,必然能較好地帶動學生學習排序算法的熱情,從而產生良好的效果。
參考文獻:
[1] 譚浩強.語言程序設計(第一版).華大學出版社,2005.
【關鍵詞】計算思維;程序設計;教學研究;教學實踐
【中圖分類號】G434 【文獻標識碼】B
【論文編號】1671-7384(2016)12-0039-04
研究緣起
長期以來,我國的中小學程序設計教學更多定位于程序設計語言的學習,學生無法形成計算科學特有的理解問題和分析問題的思維方式,存在問題如下。
1. 乏味的形式化教材體系,泯滅了學習的興趣
計算機誕生于西方,因此程序設計語言都明顯帶有西方文化的演繹思維特征,如使用巴科斯范式或語法圖等形式化的方式描述語法規則,并影響到了教材的編寫。這種抽象的向學生灌輸程序設計語言語法知識的教材編寫方式,脫離了具體的生活情境,忽視了學生自身的學習特點,容易使他們喪失學習的興趣。[1]
2. 單一的演繹式教學策略,消磨了學習的能力
受教材的影響,無論是BASIC,還是Logo,中小學程序設計教學都是采用講授式的教學方式,教師“灌”,學生“聽”,學生只能處于被動接受的狀態,幾乎沒有動手實踐的機會,課堂上大多數時間都掌控在教師的手中。這種演繹式教學策略,讓學生能夠在較短的時間內掌握所學的知識,卻不能使學生掌握獲取知識的方法,以及進一步學習的能力。
3. 文本的專業化編程環境,阻礙了學習的進程
程序設計離不開編程環境的支持,然而,各種專業的編程環境,包括面向兒童的編程語言Logo,都是基于文本和符號的編程方式,學生必須自己輸入指令,各種各樣的語法錯誤往往導致學生寸步難行,大大延長了程序設計學習的時間,影響了程序設計能力的提高。
思想的源泉
近年來,從學科思維層面構建課程結構和內容逐漸成為人們的共識[2]。這里所說的思維,是指科學思維,主要分為邏輯思維、實證思維和計算思維三類[3]。計算思維起源于計算科學,2006年,卡內基?梅隆大學周以真教授在計算機科學協會(ACM)年會報告中,首次明確提出計算思維的概念:“計算思維是運用計算機科學的基礎概念去求解問題、設計系統和理解人類的行為。它包括了涵蓋計算機科學之廣度的一系列思維活動?!彼J為:“計算思維就是通過約簡、嵌入、轉化和仿真等方法,把一個看起來困難的問題重新闡釋成一個我們知道怎樣解決的問題。”[4]
計算思維不是今天才有的,只是計算機出現后,計算思維才逐漸被認識和強化。當前,計算思維已經超越了傳統的計算機環境,適用于信息技術滲透的每一個角落,但是程序設計仍然是理解計算思維的最佳途徑。在設計問題求解方法時,會用到遞推法、迭代法、遞歸法等;用計算機語言描述求解過程時,會涉及順序、分支和循環三種基本結構;考慮如何響應和處理各種意外情況時,就要用到冗余、容錯、糾錯的方法;在維護和修正程序的過程中,要用到測試和調試的技術。這些技術都是計算思維中的核心概念[5]。
實踐的歷程
1. 建設程序設計教學課程資源
現有的程序設計書籍都是基于演繹思維編寫的,更多適用于成人學習。從2008年起,我們著手編寫適合青少年需要的《程序設計應用》校本教材,努力使其成為小學生愛看、好讀、易懂的程序設計書籍。主要從以下幾個方面進行了嘗試。
一是從教學出發選擇工具,突破復雜編程環境的壁壘。從計算思維的角度看,程序設計語言是描述問題的工具,在設計程序之前,首先要選好工具。通過多年的探索與實踐,我們認為BASIC語言仍然是適合小學生學習的程序設計語言。FreeBASIC(簡稱FB)既保持了BASIC語言簡單易學的傳統,也提供了程序設計開發工具所應具備的輸入、編輯和調試功能,菜單簡潔、清晰,可以較好地突破復雜編程環境造成的學習壁壘。
二是將演繹與歸納相結合,促進知識的主動建構。人類的思維方式一般有兩種:歸納與演繹。歸納是指從各種特殊事例中抽象概括出一般規律;而演繹則是從一般原理出發,通過推導得出個別結論。演繹法是西方文化的內涵,而歸納法反映了東方文化的內涵。受西方演繹思維框架的影響,目前的程序設計教材都是直接從語句的基本格式出發,展開到各個局部細節知識。這對一直接受東方文化熏陶的中國學生來說,理解上有一定的困難。為此,我們從兩個方面采取措施,融合兩種文化差異所帶來的問題:一是用自然語言的體系結構類比程序設計語言的體系結構,首先讓學生從整體上把握程序設計語言的結構,并由此過渡到具體內容的學習[6];二是對于基本語句,先通過一個學生學習和生活中典型問題的程序,歸納出它的基本格式或解決問題的基本規律,再將這些規則或規律應用于相似問題的解決,而不把所有的知識不分巨細都“嚼碎”了“喂”給學生。顯然,這是一種基于計算思維的構造性思維方式,更符合中國學生的認知規律。
圖1 自然語言的基本體系結構 圖2 程序設計語言的基本體系結構
三是強化算法的分析,經歷問題解決的全過程。用程序設計解決問題,關鍵是要找到解決問題的方法――算法。對于初學者來說,往往在看到問題后,粗粗一想就開始動手,很簡單的問題卻寫出一大堆代碼,自己也說不清解決問題的方法和過程。所以,對于每一個編程問題,我們都會從問題的分析和分解開始,首先找出解決問題的算法,再用FB語言編寫程序、實現算法。[7]
程序設計具有很強的實踐性,學習者只有通過大量的編程實踐,才能比較牢固地掌握基本的編程知識和技能,進而編寫出具有“實用”價值的程序。因此,我們為每章都配置了習題,并專門編寫了配套的習題解析,對教材中的習題進行詳細的分析和解答。同時,進一步補充了改錯題、讀程序題、程序填空題等。多數習題創設了貼近學生學習和生活的應用情境,以激發學習者在真實的情境中尋找解決問題的方法。為了檢測學生編程解決問題的能力,我們還使用HUSTOJ系統架設了在線程序評測系統。學生提交的程序在服務器端運行,會有正確、答案錯誤、編譯錯誤、格式錯誤等反饋信息,可以很好地指導學生調試程序。教師亦可很好地檢查學生作業完成情況,并就存在的問題進行解答。
2. 創新程序設計教學策略與方法
融入計算思維,不僅是內容和工具的改變,更應是教學方法、教學方式的改變。近年來,我們總結和歸納了系列的程序設計教學策略與方法。
一是采用案例教學,自主建構程序設計指令集。程序設計的學習主要圍繞環境、語言和應用三個方面的知識和內容展開,語言的學習,其核心主要在于語言規則本身。傳統的程序設計教學主要使用規例法介紹語言規則,即從語句的基本格式出發,詳細講解語句的各個要素,最后舉例說明。我們則在程序設計教學中運用案例教學法,首先對典型程序進行模仿,歸納出語句基本格式或解決問題的基本規律,再將這些規則或規律應用于類似問題的解決。
案例1:定義過程
1.提出問題,呈現任務。分析“俄羅斯方塊”游戲,發現共有七種基本方塊,本節課的任務是學習用Logo語言繪制七種基本方塊。
2.運行程序,分析過程。用定義好的“ZFX”過程示范繪制一個基本方塊,對“過程”作初步講解。
3.范例研習,提取指令。出示“ZFX”過程,為學生揭開教師演示的秘密。再出示“SJX”“WJX”兩個過程,歸納出過程的一般格式。
4.定義過程,嘗試使用。學生嘗試定義繪制正方形的過程,調用過程繪制一種自己喜歡的基本俄羅斯方塊。
5.創意設計,再用過程。從“多層柜”“幸運草”和“好運星”中選擇自己喜歡的圖形進行分析,并完成圖形的繪制。也可以自己定義一個或者多個繪制基本圖形的過程,設計出新的圖形。
在程序設計學習伊始,為學生提供一個需要解決的生活中的具體任務,分析解決這個問題的“程序”,引導學生提取其中的指令,得到一組“指令集”,再將這組“指令集”應用于類似問題的解決,逐漸提高個人“指令集”的復雜程度,最終得到功能強大的指令集。顯然,這種例規法教學更符合中國學生的認知規律。
二是面向計算參與,在創意和計算中學習編程。Scratch是一個可視化編程工具,學生只需要拖動圖形就可以輕松創作出蘊涵著故事情節的游戲和故事等編程制品。然而,許多教師仍然采用傳統的“編寫代碼”的教學思路,并沒有充分發揮Scratch在創意計算上的優勢。2012年,美國賓夕法尼亞大學教育研究生院的YasminB.Kafai教授提出了以“社會化轉向”為特征的培養計算思維的新范式――計算參與,并從三個維度進行了描述:(1)從編寫代碼到創建應用;(2)從設計工具到促進社區;(3)從“白手起家”到再創作他人成果。傳統的程序設計學是通過解決一些看似趣味、其實枯燥的數學題(如農夫過河等)來學習編程?;凇皠摻☉谩钡木幊探虒W方式,學生不再只是編寫代碼,設計功能完整的應用程序成為學習編程的重要任務[8]。“我的Scratch畫圖程序”這節課就采用了“創建應用”程序設計教學方式。
案例2:我的Scratch畫圖程序
教師出示學生Scratch作品范例――“畫一畫”程序。(1)體驗操作,并思考程序中有哪些角色,它們在程序中分別有什么功能。(2)觀察“畫筆工具”角色的主要動作,分析角色的腳本,完成“連一連”,將動作和對應腳本模塊用直線相連。(3)兩人一組,一人負責現有范例程序不變,另一人逐條刪除“畫筆”工具中的相應指令,比較、分析每一個指令的作用。
學生在創作我的“畫圖”程序的過程中,需要“仔細思考用戶與應用程序互動的方式,以及根據意圖實現功能的方式”,知識與技能的學習有機地融入到了設計有意義的“畫圖”程序中來。學生不再只是技術“消費者”,更多的是技術的“生產者”。此外,在他人的基礎上學習編程,一個人也可以編寫相對“復雜”的程序。使用――修改――創作是這種教學策略的基本思路,范例研習引領學生發現別人解決問題的方法,通過修改參數進行模仿設計,進一步理解技術的關鍵要點。在此基礎上,嘗試為游戲添加更多的功能,從而將學到的知識與技能應用到解決實際問題的過程中,使學習變得更加有趣。
三是運用關注點分離,降低問題解決的復雜度。在教學中采用關注點分離方法,就是將復雜問題進行合理的分解,控制問題的復雜性,提高可理解性,再分別仔細研究問題的不同側面(關注點),最后綜合各方面的結果,合成整體的解決方案[9]。“畫組合圖形”就采用了關注點分離的方法。
案例3:畫組合圖形
你會畫組合圖形嗎?這個圖形由哪幾個圖形組成?你準備先畫哪個圖形?小海龜出發時的角度是多少?繪制這個圖形的命令是什么?畫好該圖形后,小海龜的位置在哪個點?你準備把第二個圖形的起始位置確定在哪個點?小海龜出發時的角度是多少?繪制這個圖形的命令是什么?
通過把復雜的組合圖形拆分成兩個簡單圖形――等邊三角形和正方形,實現關注點的分離,也降低了繪制組合圖形的難度,更易于學生理解。
四是基于模式建構,培養正確的程序設計思維方法?,F代大型軟件系統的開發中,工程化的開發控制是軟件系統成功的保證。在我們程序設計教學中,“個性化”方法比較嚴重,同一個算法在不同問題中的描述往往是不同的,學生即使編寫了“大量”的程序,也無法遷移到相似問題的解決過程之中。所謂模式,是指一種經驗和規律,是對相似問題的一種通用解決方案,它是經過充分考驗并證明是行之有效的,能夠遷移并推廣到更廣泛的問題解決與應用中去[10]。以下就是基于模式建構的循環語句教學案例。
案例4:循環語句
循環是程序設計最困難的部分之一,學生往往在這里開始出現分化。主要是由于在使用DO-LOOP語句時,必須自己實現循環的四個部分,這時經常會遺漏修正部分或修正不正確,或者檢查條件設置不正確,造成死循環。應用模式進行循環語句的教學,則可以幫助學生建立起循環結構解決問題的基本模式:初始條件、檢查條件、循環體、檢查條件,學生在解決其他相似問題時,只需要根據具體問題,修改這個基本模式的相應部分即可。應用是無限的,但方法、原理、思想卻是相對固定的,基于模式建構的程序設計學習,有助于學生建立良好的程序設計思維和方法。
3. 探索基于機器人平臺的程序設計教學
雖然Scratch采用了圖形化的編程界面,但是編程的結果也只能呈現在屏幕上,基于機器人平臺,學生則可以把程序下載到機器人里,即時看到編程的“物化”效果,再根據這些反饋修改程序,使程序設計的學習更具有知識性、實踐性、趣味性和直觀性。
例如,在機器人沿線(如黑線)行走的運動中,機器人是根據灰度傳感器測得的黑白色灰度值來判斷是否在線上。理論上來說,在機器人行走的過程中,灰度傳感器測得的灰度值等于黑色灰度值,說明機器人在軌跡線上,測得的灰度值等于白色的灰度值,說明機器人在線下。然而,黑色軌跡線的顏色并不是絕對均勻的,可能也有小塊的白色區域沒涂上白色。因此,為了使機器人能夠比較穩定地行走,應該允許識別黑白色的臨界值有一定的差值。這樣,學生在經歷“思考―實踐―再思考―再實踐”的反復人機交互過程中,體驗了在解決工程問題過程中,為滿足系統的可實施性,而對系統設計中的技術、方案做出合理取舍的一種折衷思維[11]。
實踐成果
至此,我們逐步建立了小學程序設計教學的課程體系。該體系主要由四個模塊組成:把Scratch作為小學生首門程序設計課,學生在制作富有個性的互動媒體作品的過程中,形成信息化情境下解決問題的方法與策略;在用Logo指令控制計算機完成動作的過程中,理解人是如何通過程序指揮計算機解決問題的;通過機器人模塊的學習,理解基于“工程-設計-管理”框架下的模塊化、結構化、逐步求精、測試與調試等軟件工程設計方法。通過FB程序設計課程的學習,學會從問題出發設計算法并編程實現,理解算法和程序設計在解決問題過程中的地位和作用。
作為最重要的計算思維原則之一,關注點分離法是處理復雜問題的一種普適系統方法和原則,在不同模塊教學中都要運用這種思想方法。在基于計算參與的程序設計教學中,學生從使用、“擺弄”他人的編程制品開始學習編程,理解程序設計的基本思想。案例教學指向的思維品質正是計算思維的本質――抽象,用這種方法學習到的“程序設計”,不是陷在陌生的人工語言環境之中,依賴記指令、背結構的程序設計,而是面向貼近生活經驗的、解決現實問題的程序設計。應用模式進行問題的分析與設計,有助于我們運用別人的經驗,特別是專家的經驗來分析、設計和描述問題,并最終解決問題。在實際的教學情境中,這幾種教學方法之間是一種相互支持、互為補充的關系,我們應充分利用它們的優勢,以促進學生的發展為原則來尋求一種最佳的搭配。
參考文獻
[7]曹恒來,沈軍.《程序設計與應用》校本課程開發的實踐與思考[J].教育研究與評論,2015(3).
李藝,鐘柏昌.談“核心素養”[J].教育研究,2015(9).
[5]李廉.計算思維――概念與挑戰[J].中國大學教學,2012(1).
Jeannette M. Wing. Computational Thinking[J]. Communications of the ACM, 2006(3).
[10]沈軍.大學程序設計基礎――系統化方法解析&Java描述[M].南京:東南大學出版社,2015.
王旭卿.從計算思維到計算參與:美國中小學程序設計教學的社會化轉向與啟示[J].中國電化教育,2014(3).
何明昕.關注點分離在計算思維和軟件工程中的方法論意義[J].計算機科學,2009(4).
c語言是典型的結構化程序設計語言,是學習程序設計語言的入門課。通過學習c語言,學生能夠掌握程序設計的基本思想,鍛煉自己的邏輯思維,掌握程序設計方法,初步具備利用計算機解決實際問題的能力。
c語言涉及的概念比較抽象復雜,語法規則多且晦澀難懂。而高職學院學生的基礎相對薄弱,特別是數學功底較差,采用傳統的語言類授課方式,教學效果很不理想,筆者認為,c語言課程的教學內容、教學方法和教學手段等方面有必要進行改革。
一、教學的現狀
(一)學習目的本文由收集整理不明確,學習積極性不高
學生對學習c語言的意義缺乏深刻認識,常常會問“為什么開設c語言課”等問題,認為將來就業時用不上,沒有必要開這門課,學與不學無所謂。
(二)教學觀念陳舊
在目前的課堂教學中,多以教師講授、學生被動接受的單向灌輸為主,不能有效地綜合應用多種授課方式,沒有充分調動學生學習興趣,學生自主學習的內在動力未被激發。
(三)缺乏適合高職教學的教材
現在很多高職院校采用的教材是大學教材,有的雖然是使用標識“高職高專”的教材,但往往是大學教材“簡化版”,并不適合高職學生使用,給組織教學工作帶來了一定的困難。
(四)講授的內容脫離實際應用
傳統的教學過于注重語句、語法等細節的教學,對學生分析問題、解決問題的能力訓練不夠,很多學生在課程結束后, 依然很難獨立編寫程序。
(五)對于實踐教學環節重視不夠
c語言課程是一門實踐性很強的學科,但目前實驗教學存在一些問題:如教師布置與課本中相似的習題,學生就對著教材套用例題,學生不明確上機實驗的目的,上機前不做準備,導致上機后只會抄課本例題,不能舉一反三。甚至有學生在上機時做些和課程關系不大的活動,把“上機實驗”當成了“自由活動”,達不到預期的教學效果。
二、改革探討
高職教育不同于普通高等教育,高職教育是為生產服務一線培養技術應用型人才,而不是培養學術型人才。因此,對高職院校的學生來說, 計算機只是工具,不應該把它作為純理論的課程來學習,而應作為一種應用技能來掌握,重點是培養解決實際問題的能力。依據高職院校的人才培養目標,教學內容以培養學生基礎能力和提高學生學習興趣為原則,對教學計劃進行科學
的調整,突出c語言只是作為初學工具的作用。
(一)明確學習目的
第一次授課時,教師可從不同層面講解學習c語言的重要性。同時,讓學生知道c語言也是計算機等級考試、程序員考試的一個重要內容,學好c語言,可以考取計算機等級證書,提高自身就業競爭力。
(二)修訂教學大綱,編寫和選用適合高職院校教學的教材
根據高職院校培養應用型、技能型人才這一目標,對教材中的內容應進行適當的整合,對c語言中偏難的,對培養基礎能力沒有幫助的知識不講或略講。而對工程實際應用較多,對培養基礎能力有較大幫助的部分進行必要的加強。比如一般c語言教材中的輸入/輸出函數調用語句、分支語句、循環語句、數組、文件就是基礎,而且易學常用,用這些知識就可以達到培養學生基礎能力的要求。
在教學內容上,采用職業程序員的項目流程規范和方法去分析程序,淡化語法, 每學習新語句都是從模仿例題和畫流程圖開始,并且每個例題和作業題都要求學生按照規范的項目流程,把一個程序分為分析、設計、流程、編寫調試、測試幾個步驟來完成最終的程序。
(三)利用多媒體教學手段,把抽象的知識生動化、形象化
利用現有的教學設備與技術,通過多媒體手段,把深奧的理論通過淺顯的例子進行深入淺出的講解。比如:講解遞歸,做一課件形象地演示“漢諾塔”的動態變化過程;講解判斷循環語句時做一段flash動畫來演示這一過程。通過flash動畫演示讓學生了解程序的執行過程,這樣枯燥的理論就變得更直接,學生對知識點的掌握和理解比只是在黑板上空洞、泛泛的講解更容易接受。
(四)引入任務驅動教學方法
傳統的教學過于注重語句、語法等細節的教學,對學生分析問題、解決問題的能力訓練不夠,很多學生在課程結束后, 依然很難獨立編寫程序。任務驅動教學始終把學生作為學習的主體,以任務作為驅動,讓學生通過自己的操作,把書上死的理論變成活的應用,教師的引導、點撥更多的是把知識加以引申,使學生能夠觸類旁通,點面結合、(下轉73頁)
(上接56頁)以點帶面、以舊帶新。在教學過程中,引入日常生活工程實踐的實例,并由此培養學生分析、解決生活和工程問題的能力,提高學生的學習興趣,使學生由專業基礎課的學習順利地過渡到計算機專業課的學習,打下堅實的編程基礎,掌握編程的方法。
(五)強化實驗環節,培養學生創新能力
對學生進行嚴格管理,將上機表現與結業考試成績掛鉤,端正學生上機目的,正確引導上機實驗興趣。
對學生上機給予明確要求,上機前布置適量題目,要求學生選取適當的數據結構,設計程序核心思想,畫出流程圖,寫出完整的上機程序,而不能照搬書本身的例題。只有通過自己動手編寫程序,才能加深對所學內容理解和鞏固,調試自己程序的過程最容易暴露學生學習的不足和缺陷,它可以鞏固學生所學的知識,訓練了學生閱讀程序和編寫程序的能力,也培養了學生認真的學習態度和創新能力。
中圖分類號:G433
文獻標識碼:A 文章編號:1672-7800(2017)006-0220-02
0 引言
《國家中長期教育改革和發展規劃綱要(2010-2020年)》明確指出:為適應國家經濟社會對外開放的要求,需要培養大批具有國際視野、通曉國際規則、能夠參與國際事務和國際競爭的國際化人才[1]。而具有突出的專業文化素質與良好的語言溝通能力,則是擁有全球化競爭能力的國際化人才必須具備的兩大要素。在此背景下,我國高校各專業雙語教學工作的開展得到了強有力的推動。
在經濟與科技競爭全球化、教育國際化潮流的影響下,教育部于2001年8月印發《關于加強高等學校本科教學工作提高教學質量的若干意見》的通知。通知明確指出:為適應經濟全球化和科技革命的挑戰,本科教育要創造條件使用英語等外語進行專業課教學。對高新技術領域的信息技術等專業,更要先行一步[2]。有學者[3]指出,雙語教學是我國高等教育國際化的戰略選擇,也是我國高等教育課程教學改革的重要舉措。
1 現狀及問題
程序設計語言課程是計算機類專業必修的系列專業核心課程,按照開課的先后順序,一般包括《C/C++程序設計”》、《Java程序設計》、《Python程序設計》等課程。由于該類課程在計算機類專業中的基礎地位和重要作用,多年來相關的教學方法改革、師資隊伍建設、教學質量提升策略等內容受到國內各高校的廣泛重視,并取得了一定的進展和成果。
1.1 教學現狀
我國許多高校的計算機類專業程序設計語言課程已開展了雙語教學,部分高水平大學已將雙語教學作為教學質量考核的重要指標。然而,目前全中文的教學方式仍然占據主體地位,雙語教學工作的開展仍有巨大的發展空間。相對而言,985和部分211高校計算機類專業的程序設計語言課程采用雙語教學的比例要超過普通地方院校。與國際主流趨勢相比,我國計算機類專業程序設計語言課程雙語教學仍然只是作為一種輔助手段而存在。這種現狀并不利于面向全球化和國際化競爭的計算機類專業人才培養。
1.2 主要問題
在當前形勢下,我國計算機類專業程序設計語言課程的雙語教學工作較之以往取得了一定的進步,但受教學體制、教育觀念、考核機制等方面的影響,仍然面臨許多問題和困難,總結起來可歸納為如下幾類:
(1)投入較大而產出較小,教師開展雙語教學的積極性和主動性不高。與全中文環境的程序設計語言課程教?W相比,雙語教學需要教師投入更多的時間和精力,尤其是在英文講授、課件制作、教材教輔資料編寫等環節,教師需要投入的工作量至少數倍于中文教學。在當前高校教師工作績效考核機制和職稱評定機制的壓力下,教師需將工作中的相當一部分精力和時間投入到科研當中,而雙語教學工作相關的激勵機制和獎勵辦法又不足以吸引教師,從而導致大部分教師對待雙語教學工作的積極性和主動性較低。
(2)部分學生對于雙語教學具有一定的抵觸心態。由于我國中小學教育存在較大的地域差異,來自于中西部地區特別是貧困地區的相當一部分學生英語基礎較差,尤其是在英語運用的聽、說兩個環節存在較大問題,而雙語教學工作的順利開展首先要求學生能夠聽懂教師的講授并可以采用英語提問,這給教師和學生的雙語教學帶來了巨大的挑戰和困難。經過若干次課堂雙語教學以后,部分聽不懂且說不出的學生自然而然會對雙語教學產生一定的抵觸心理,從而導致教師取得的教學效果尚不如完全采用中文進行教學的方式。
(3)雙語教學的師資隊伍建設存在不連續性。計算機類專業的程序設計語言課程包含多門課程,從而要求具有穩定的師資隊伍。然而,受教師缺乏積極性和主動性、人員變動等方面的影響,大多數高校的計算機類專業程序設計語言課程缺乏穩定的師資隊伍,同時具備英語授課能力和程序設計語言講授能力的教師人數較少,從而導致一些課程在某些年級某些專業開設了雙語教學,而在另一些年級和專業又沒有開設雙語教學的情況。這種師資隊伍建設存在的不連續性,往往會對雙語教學工作的持續開展產生極大的負面影響。
2 對策與建議
如上文所述,計算機類專業程序設計語言課程的雙語教學工作,存在許多問題和困難。然而,在教學過程中,以兩種語言作為教學媒體,并采用有計劃、系統化的方式,對提高學生的整體學識和語言能力都有一定的促進作用[4]。雙語教學是教育國際化的必然趨勢,是培養國際化人才的重要手段,是技術發展與行業準入的客觀要求。因此,在計算機類專業的程序設計語言課程開展雙語教學工作,刻不容緩。考慮到目前存在的問題和困難,結合實踐經驗和成果,建議采用以下策略加以解決。
2.1 分班教學、因材施教、各取所需
由于客觀上學生的英語應用能力存在差異,采用統一的雙語教學顯然不能滿足所有學生的需求,解決問題的關鍵是根據學生個體差異進行分類教學[5]。在對計算機科學與技術、軟件工程、物聯網工程、信息與計算科學等專業的學生進行抽樣調查和需求分析后(見表1),提出分班教學、因材施教、各取所需的策略。
通過分班教學,采用三級階梯型教學。A類型班級的課程講授、實驗環節和考核過程采用全英文教學模式,主要面向英語基礎較好或具有強烈需求的學生。B類型班級主要針對具有一定英語基礎的學生,采用部分內容英語授課、部分內容中文授課的混合模式,其實驗和考核過程環節具體采用哪種語言,可由任課教師根據班級的實際教學情況而定。C類型班級針對英語基礎較差的學生,完全采用中文進行教學。區別于傳統的分班教學模式,這里的分班教學,學生可根據實際情況提出申請,升入或降入不同等級的班級,教師也可根據實際教學情況,建議學生升入或降入不同等級的班級。這種策略,充分體現了以學生為本的教育理念,符合當前學生的具體需求。
2.2 加大激勵措施、提升教師能力、打造穩定隊伍
高水平的穩定的雙語教學師資隊伍,是順利開展雙語教學的關鍵所在。首先,需要提高教師開展雙語教學工作的熱情和積極性,在激勵措施與機制方面對開展雙語教學工作的教師給予適當的政策傾斜和優惠。例如,優先推薦和資助雙語教學課程的相關教研教改課題立項、較大幅度提高雙語教學工作的教學工作量計算、加大雙語教學在職稱評定體系中的權值等。這些問題如能得到有效解決,必將有效提升教師開展雙語教學工作的積極性和主動性。其次,應有計劃、有針對性地對開展雙語教學的教師進行課程培訓和再深造。例如,將教師派遣至英語系發達國家的知名院校計算機類專業進行課程進修和學術訪問,從而提高教師的英語授課能力和專業知識層次,使教師更好地掌握英文授課的方法和藝術;定期開展雙語教學工作研討,邀請相關領域的專家學者進行指導;等等。再次,高校的教務部門、人事部門、教學學院、專業系部與教研室等應形成和建立良性的師資隊伍建設體系,針對不同的程序設計語言課程,有目的、有計劃、有重點地引進或培養2~3名教師,從而形成穩定的師資隊伍,確保雙語教學工作能夠在計算機類專業的程序設計語言課程中得到持?m的實踐與應用。
2.3 拓寬學生視野、提升學生興趣
“興趣是最好的老師”,雙語教學工作的開展,最終是以學生為實施對象,因而盡可能地激發學生興趣尤為重要。在雙語教學過程中,教師應通過自身的人格魅力、語言水平、技術能力等各種方式,向學生展現雙語教學能夠給他們帶來的巨大收獲,通過實際案例告知學生雙語教學在提高他們綜合素質和市場競爭能力方面可以起到的重要作用,從而拓寬學生的視野,提高學生的興趣和積極性,掃除學生主觀上存在的對英語授課的抵觸和恐懼心理。多項事實證明,一旦成功激發學生對于雙語教學的興趣,所產生的教學效果將遠超傳統的中文教學。
關鍵字:程序設計語言教學改革
中圖分類號:G642 文獻標識碼:A 文章編號:1672-3791(2012)02(c)-0000-00
1 概述
計算機程序設計語言,通常簡稱為編程語言,是一組用來定義計算機程序的語法規則。它是一種被標準化的交流技巧,用來向計算機發出指令。
當今計算機程序設計語言種類繁多、共性大、更新速度快,同時軟件工程和項目管理的蓬勃發展使得計算機軟件開發從業人員的職業分工更為明確。從人力資源與社會保障部頒布的“計算機程序設計員國家職業標準”上看,除了要求從業者必須要有扎實的基本功外,還要具備解決問題的綜合能力。因此計算機程序設計員專業的學生在計算機程序設計語言的知識和技能的學習中,不能再僅僅孤立地教授幾門編程語言、幾門相關的專業課程而已,而是要教會學生掌握通過計算機程序設計來解決實際問題的知識和技能,成為一名合格的“軟件藍領”。這就要求我們不能延續傳統的學歷教育方法,計算機程序設計語言教學需要改革,需要一種全新的教學理念和模式。
當前的教學改革更多的體現在教學方法和內容上,“學習領域”、“任務驅動”、“職業崗位導向”、“面向工作”等各種課程設計方法層出不窮。然而,縱觀大部分課程改革,我們發現其教學改革更多體現在獨立的課程中,并沒有在課程與課程的銜接上下功夫。大部分院校均先后開設VB、C、C++、JAVA等多門程序設計語言和數據結構、數據庫管理系統等專業課程,學生雖然學習了多門程序設計語言,然而每一門語言都只學了皮毛,每一門課程都學了基礎,只能完成課堂和課后的作業和練習,而對于能解決什么問題,怎么解決問題,如何綜合解決問題一籌莫展,碰到問題時往往覺得無從下手。
2 程序設計語言教學探索與改革:C語言學習三部曲
C語言是一種計算機程序設計語言。它既有高級語言的特點,又具有匯編語言的特點,同時很多新型的語言都是衍生自C語言,,掌握了C語言,經過簡單的再學習,就可以用其他新型的語言去進行程序開發了。因此,在計算機專業的課程中,只要把C語言學扎實了、學透了,就可以說掌握了計算機程序設計語言的精粹。在課程設計中,我們以C語言為主線,以一脈相承的C語言、C++語言、C#語言為基本知識內容,配合上數據結構、UML、數據庫等相關知識點,提出語言知識入門、語言能力提高、語言技能應用三個階段和應用層次的“C語言學習三部曲”的課程改革方案。
第一階段:語言知識入門――C語言與數據結構整合
1、課程知識要求:
1) 掌握C語言的基本語法,如數據類型,3種語句結構,數組,指針等。
2) 掌握數據基本結構形式和操作,如線性結構,樹形結構,圖形結構,以及數據結點的查找、添加、刪除、排序等操作。
3) 掌握“自頂先下、逐步細化”的結構化程序設計方法。
2、課程技能要求:
掌握如何用計算機解決日常問題,特別是數據的表現形式和動作行為的表現形式。
3、課程設計要點:
將C語言和數據結構進行有機整合,特別是在講解C語言的數據類型時溶入數據結構知識,在講解C語言的語法結構時溶入數據結構的數據操作知識。
4、課程目的:
通過該課程的學習,要求學生掌握基本程序設計思想和理論,學會數據及數據處理由現實世界向計算機世界的轉換方法和過程,學會用計算機程序設計語言描述和解決日常生活中問題。
第二階段:語言能力提高――C++語言與UML工具整合
1、課程知識要求:
1) 掌握C++語言的高級語法知識以及面向對象的概念和形式,如面向對象的三大特征:封裝、繼承、多態,以及模板等概念。
2) 掌握UML知識,掌握利用UML工具(如ROSE)來進行面向對象的分析和建模的方法和過程。
3) 掌握以“抽象與分類”為關鍵的面向對象的程序設計方法。
2、課程技能要求:
掌握如何用計算機解決日常問題,特別是以面向對象的方法來分析和解決問題。該課程要求學生在第一階段掌握了結構化的設計方法后,進一步了解面向對象程序設計方法。
3、課程設計要點:
把C++語言和UML進行有機的整合。將UML作為面向對象程序設計的分析和設計的工具,而將C++語言作為進行面向對象程序設計的編程和實現工具。
4、課程目的:
通過該課程的學習,要求學生掌握面向對象理論,學會面向對象分析(OOA)、面向對象設計(OOD)和面向對象編程(OOP)方法和工具。
第三階段:語言技能應用――C#語言與數據庫操作整合
1、課程知識要求:
1) 掌握C#語言的高級語法知識和軟件架構知識,如集合、委托、托管、、C/S與B/S架構開發方法等。
2) 掌握數據庫操作知識,如SQL語法、、XML等。
2、課程技能要求:
掌握多層架構的數據庫應用系統開發方法。,該課程要求學生在復習第二階段的面向對象的設計方法后,掌握開發.Net應用系統的方法,掌握將數據存儲在數據庫中的方法,以及掌握對數據庫進行查詢、添加、刪除等操作的方法和步驟。
3、課程設計要點:
將C#語言與數據庫操作知識進行有機整合,在講解用C#語言開發基于.Net的多層架構應用系統中,通過講解與LINQ將SQL溶入C#語言。
4、課程目的:
通過該課程的學習,要求學生掌握C#語言和數據庫操作,掌握通用的企業級應用系統的開發方法和過程。
3 結語
教育部部長周濟在2008年度職業教育會議上說到:“以改革創新為強大動力,推動職業教育又好又快發展”。職業教育的生存和發展,離不開教學改革和創新。在進行計算機程序設計語言教學探索與研究中,我們通過走進企業,與企業軟件開發人員的進行密切聯系與溝通,了解市場發展與需求等一系列調研后,提出了改革方案并付諸實施。實踐證明我們的改革思路是正確的,課程改革是卓有成效的。
參考文獻
[1] 譚浩強,“C程序設計”[M],清華大學出版社
Abstract As a fundamental and central course of computer profession, the C programming language directly affect training goal of computer profession. Therefore, Adapting to the development of Computer profession in new situation, the traditional C language programming teaching method and implementation strategy need to reform. In this paper, the author summarize some views on the teaching reform from the teaching experience of C programming language course.
Key words C programming Language; teaching organization; teaching method
“C語言程序設計”課程是計算機專業學生的一門程序設計入門課,是培養學生程序設計思想和能力的技術基礎課,同時也為后續的專業課程奠定了堅實的基礎。其中專業核心課程“數據結構”一般以“C語言程序設計”為輔助教學工具,學生在具備了“C語言程序設計”的基本程序設計思想和方法以及數據結構的基礎知識后,才能進一步學習Visual Basic、Java等高級語言程序設計。因此,必須將“C語言程序設計”課程的教學作為計算機專業培養的核心任務。
1 “C語言程序設計”教學現狀分析
目前,計算機專業“C語言程序設計”課程的教學大多還停留在傳統的教學模式上,主要以教師的“教”為主,教師根據教學內容的組織講授基本的概念、講解例題、布置作業給學生進行上機練習,學生在教師的指導下完成編程練習。在教學的過程中,學生完全處于被動接受的狀態,無法發揮學習的積極性和主動性,以至于大部分學生普遍反映“C語言程序設計”枯燥、難學,缺乏學習興趣,學生普遍的編程能力較差。
由于新生入校后已有的計算機專業基礎知識薄弱,學習方法欠佳,以至于學生在初次接觸“C語言程序設計”這樣抽象難學的程序設計課程時,都會難于正確把握課程的學習方法。因此,任課教師應該準確地分析學生的學習現狀,深究原因,找到解決方法,能夠最大限度地激發學生的學習興趣,引導學生合理有效地學習,并且培養學生分析和解決問題的能力。
2 “C語言程序設計”教學改革
依據培養目標的定位,教師應以培養學生基礎能力和提高學習興趣為原則,合理地開展“C語言程序設計”課程的教學改革。為此,筆者結合“C語言程序設計”的教學體會,提出如下的觀點。
2.1修訂“C語言程序設計”的教學大綱,編寫和選用適合計算機專業的教材
首先,教師應準確定位課程的教學目標和任務,“C語言程序設計”課程的教學目標主要體現在知識、技能和素質三個方面。其知識目標要求學生較好地掌握“C語言程序設計”的基本語法、語句、控制結構以及結構化程序設計的基本思想,這是學習本門課程的核心要求。課程的技能目標體現在使學生認識到算法、良好的程序設計方法及上機實踐的重要性,并且掌握算法設計和結構化程序設計的方法。另外,在素質目標方面要求培養學生利用“C語言程序設計”分析和解決實際問題的能力。其次,教師應結合教學目標和任務合理組織教學大綱。鑒于“C語言程序設計”課程實踐性較強的特點,教師還應根據教學大綱的要求,制定合理有效的實踐教學大綱,制定實踐教學內容和實施方案。實踐教學內容應緊密聯系實際應用,并強調充分調動學生的積極性、主動性和一定的團隊協作能力,另外還應注重培養學生分析和解決實際問題的能力。
依據教學大綱中教學內容的組織和實踐教學的設計,教師應合理地編寫和選用課程的教材。目前,“C語言程序設計”方面的教材甚多,以清華大學譚浩強教授編寫的《C語言程序設計程序設計》一書為代表的一系列優秀教材為課程的教學提供了較好的導向作用。但根據計算機專業的培養目標和課程的定位,教師應對教材的內容進行適當的調整。
另外,在教學過程中教師應嚴格按照程序設計的規范和方法分析和解決應用問題,應培養學生規范的程序設計方法和嚴謹的編程習慣。例如要求學生在日常程序設計練習中按照“問題定義―問題分析―算法設計―編寫程序―上機調試運行”的流程實施,并且在算法設計環節使用規范的程序流程圖描述算法。這樣一系列的措施有助于培養學生良好的編程風格和習慣,為后續其它的程序設計語言的學習夯實基礎。
2.2改革教學組織和實施策略,優化教學結構
由于“C語言程序設計”課程的實踐操作性較強,學生在上機實踐的過程中,不僅可以消化和鞏固課堂所學知識,還可激發和提高學習興趣、鍛煉邏輯思維能力。教師應注重將課本上的理論知識和實際應用問題進行有機結合,提高學生的程序設計能力,進一步培養學生分析問題和解決問題的能力。因此,課程的教學組織主要分為理論教學、上機實踐教學和課程設計教學三個環節。
其中,理論教學主要遵照教學內容的要求, 采用多媒體教學與傳統板書教學有機結合的方式,實施理論與實踐一體化的多媒體教學環境,實現交互式教學。其次,教學中應重視“興趣引導”,激發學生學習熱情,引導學生主動學習。另外,應注重以模擬實踐教學為主線,提高課堂教學的教學效果。
上機實踐教學以課堂理論教學為前導,內容設計應以鞏固和綜合運用主要知識點為主線,內容具備實用性,以循序漸進的任務驅動方式指導學生從簡單的程序設計開始逐漸擴展到完成綜合的程序設計,以由淺入深、由單一到綜合的過程展開,符合學生的認知習慣和知識的拓展,使學生利用所學知識解決實際的問題,培養程序設計的能力。
結合課程的特點,課程設計環節應利用“C語言程序設計”的基礎理論和上機實踐課中學到的編程知識和編程技巧,通過布置具有一定難度、一定編程量的課程設計任務,使學生通過課程設計掌握高級編程語言的知識和編程技術,具備分析問題和解決問題的能力。
2.3秉承合理有效的教學理念,改革傳統的教學方法
傳統的“C語言程序設計”教學方法一般采用灌輸式的單向教學法,學生被動地接收知識,并且教學知識點零散,建構系統的知識體系,另外理論教學和實踐脫節,學生只會紙上談兵,動手實作能力較差,不能利用所學的知識解決實際問題。因此,在教學過程中應重視教學方法的改革?!癈語言程序設計”教學主要采用“任務驅動”、“案例教學”、“講練結合”的教學方法,三種方法有機結合,合理地組織課程的教學。
“任務驅動”教學法要求按照教學目標的要求,圍繞教學內容,合理地安排一個任務。其主要分為三個基本環節,首先提出任務,例如設計判定學生成績等級的程序;進一步分析任務,提出問題的解決方法,主要設計程序的算法;最后解決任務,講授解決任務運用的知識點,例中主要的知識點為選擇控制結構的語法及應用。
“案例教學法”以綜合的“C語言程序設計”程序案例為主線,貫穿所有章節的知識,課程教學具有系統性和連貫性。例如,提出“學生成績管理系統”案例,實現成績的錄入、添加、修改、刪除、查詢、統計和排序等功能。通過分析案例,明確系統的基礎知識和各個功能模塊的相關知識點,如表1所示。
另外,“講練結合”的教學方法主要應用于上機實踐教學環境中,采取邊講邊練的教學互動形式,完成程序設計實例。教師先講解和演示與本次實踐任務相關的應用問題和注意事項,學生按照要求動手完成實踐任務,教師及時了解學生在實踐中出現的問題,加以正確的啟發和指導。最后教師對本次實踐任務的完成情況進行總結,集中反饋出現的問題并提出解決方法。
2.4完善課程的考核方案,合理評價學生的學習成果
鑒于“C語言程序設計”課程理論和實踐并重的特點,課程考核應主要分為理論考核和實踐考核兩大方面。其中理論考核以筆試為主,考試內容應遵照教學大綱和考試的要求,突出課程的主要知識點;實踐考核主要以上機實踐教學環節制定的任務和課程設計為考查對象,客觀地反映學生掌握知識和運用知識的能力。
“C語言程序設計”的課程設計考核應采用學生答辯的形式,從學生運用知識的能力、分析和解決問題的能力、創新能力等方面進行綜合考核。