?

程序設計課程中計算思維和應用能力培養問題研究

2016-11-10 08:16鑒萍陳宇峰李鳳霞
計算機教育 2016年7期
關鍵詞:非計算機專業應用能力計算思維

鑒萍 陳宇峰 李鳳霞

摘要:針對非計算機專業學生對程序設計課程重視程度不夠,從概念到知識再到知識運用能力的過渡脫節等問題,以c語言課程為例,結合教學實踐,對計算思維和應用能力培養相關問題進行深入探討,提出以“培養普適思維”激發學生興趣,以“成就感”維持學生良好學習狀態,從原理性內容出發把握概念講解的深度和廣度,以及能力培養一切從設計出發等教學建議和教學方法,以期對非計算機專業程序設計課程改革有所啟發。

關鍵詞:程序設計課程;非計算機專業;計算思維;應用能力

0.引言

計算機程序設計課程如何從應試教育向應用能力培養轉變已是老生常談。國家教委高教司《對加強工科非計算機專業計算機基礎教學工作的幾點意見》中提到,計算機技術基礎這一層次教學的主要任務是“使學生掌握計算機軟、硬件技術的基礎知識、基本思想和基本方法;培養學生利用計算機處理問題的思維方式和利用軟、硬件技術與先進工具解決本專業與相關領域中一些問題的初步能力”。多年來,經過一線教師和教學研究者大量的探索和實踐,通過多層次、多方面的改革,計算機程序設計課程的教學和培養效果在逐步改觀,但就學生對計算機語言的綜合應用能力來說,距離最終的培養目標還有一定距離。若干年來對非計算機專業學生的問卷調查以及持續追蹤訪談顯示,現實中真正理解計算機算法和程序設計內涵的學生只有少數;而在真實應用場景下,能主動或潛移默化地使用計算思維并成功解決專業問題的學生更是鳳毛麟角。顯然,在計算思維滲透和計算機程序語言應用能力培養方面,一線教師和教學研究者還有很大的努力空間。

1.存在的問題

(1)對學生學習程序設計語言課程的思想和動機還需進一步引導。很多非計算機專業特別是非信息類專業的學生認為程序語言的學習與自身專業無關,只是為了拿到學分而學習,依靠背習題、背程序來達到通過考試的目的。針對這樣的問題,一般的做法是在教學內容和教學方法上將學生的專業知識和程序設計課程教學相結合,建立面向專業的教學模式。但筆者在教學實踐中發現,即使在課程設計中融入專業因素,學生因為缺乏本專業的知識基礎,并不能獲得真實有效的體驗;同時,在學生周圍又鮮有典型的、可供參考的真實案例,最終這種教學模式在落實時效果并不令人滿意。

(2)由于計算機基礎知識的掌握程度參差不齊,很多學生對一些重要概念的理解只停留在表面,不能體會其內涵,使用時容易出錯,更談不上靈活運用。比如,有些學生對C語言中“變量”的理解還停留在對數學中變量的認識上,還有一些學生對“數據的存儲方式”和“數據的輸入、輸出方式”等概念模糊不清,這些都為后續正確進行程序設計埋下隱患。

(3)經過不斷的改革、實踐、再改革,依然難以完全抹去“注入式”教學的痕跡。由于學時的限制,教師在每一節理論教學課上要灌輸大量的概念和知識,整個教學過程中學生很少有思考的時間和空間,能夠理解課上給出的典型例題已屬不易。不經過一定的啟發和幫助,大部分學生很難將學到的知識和真實應用結合起來,往往是上課都聽懂了,課后的編程題卻不會做。

(4)一些專門設計的有針對性的題目沒有達到預想的訓練效果。借助網絡教室平臺,筆者所在教學團隊結合教學內容,配合教學單元,精心設計了大量能體現知識點和技能點的習題供學生課下練習,希望通過這些題目能讓學生真正掌握某些數據類型的使用場合,理解特定算法解決特定問題的真諦。但是,由于之前在概念理解、知識掌握、知識運用等環節所出現的問題沒有解決,再加上學生課程科目多,學習負擔重,實驗環節逐漸演變為只要能在實驗截止時間之前提交答案即可,甚至有學生不惜全部抄襲,以保證獲得平時成績。

以上問題環環相扣,最根本原因還是從概念到知識再到以程序設計為體現的知識運用能力過渡出現了脫節,學生主動或被動地陷于“一步跟不上,步步跟不上”的惡性循環。

2.學生思想引導

c語言程序設計作為計算機基礎教學課程,面向的是工、理、管、經不同學科背景的大學一年級學生。非計算機專業的大一學生,對自身專業有大致的了解,但具體到將來可能遇到的問題類型和研究方法,則接觸甚少。例如,化學相關專業的學生,所了解的專業內容不外乎是反應方程式和瓶瓶罐罐,但不知道很多分支問題的研究(如計算化學領域的問題)需要計算機編程作為輔助手段。從這個角度出發,很多教學研究者提出了面向專業的教學模式,在教學內容和教學方法上將學生的專業知識和程序課程教學相結合,以提升學生的學習興趣。更具體的,還可以將特定學科的常用語言工具(如計算化學常用的Fonran語言)與c語言做類比,展示將c語言程序設計作為基礎,計算機程序語言一通百通的特性。

面向專業教學是一種比較直觀的提升非計算機專業學生對程序設計課程重視程度的策略,但很多時候在實際教學中并不能達到預期的效果。大一學生還沒有進入專業知識的學習,對用程序語言解決本專業問題沒有真實的感受;而因為多方面的原因,高年級學生里能夠從基礎程序設計學習中獲益并獲得專業能力提升的樣本又很少——畢竟在很多專業領域,編程不是必需的,再加上現今計算機應用軟件發展迅猛,功能日益強大,用戶體驗比想象的更友好,現成的軟件就可以解決問題,為什么還要自己去寫程序實現呢?這樣,學生本身沒有真實體驗,又沒有正面的樣本做參考(有時還可能接觸到負面的樣本),除了應付考試以外,很難有認真學習的動力。

學習一門程序設計課程,不是學習一門語言,而是培養計算思維方式和計算機應用的能力。培養計算思維是面向非計算機專業開展計算機基礎教學的主要目的,應該讓學生了解,計算思維和數學思維一樣,是一種思維方式和需要掌握的思維能力。計算思維所涵蓋的邏輯思維、算法思維、抽象思維以及工程思維通過改變人的思考方式,賦予未來的工作和生活一個更高的起點,從而使工作和生活更高效。計算思維將成為每一個人的技能組合成分,具有普適意義,而這種計算思維能力可以在程序設計的訓練過程中潛移默化培養出來。從這一角度講,開設計算機基礎課程的目的和開設數學類課程的目的是類似的。舉一些貼近實際的例子,讓學生們相信計算機課程和數學課程一樣重要,像計算機科學家一樣思考是十分必要和奇妙的事情,這是提高學生對課程重視程度的第一步。

學生的思想和態度需要引導,更要保持。程序設計對大多數學生來說是一個全新的領域,入門時遇到挫折是必然的。當學生重復遇到困難又解決不暢時,退縮和厭煩心理就占了上風,畢竟學生所修課程多,學習任務重,難有毅力和時間花費在這樣一門“非傳統意義上的主課”上面。未解的困難逐漸堆積,形成惡性循環,學生最后不得不通過抄襲來完成練習,草草了事。在筆者以往所收集的調查問卷中,這種情況非常普遍。曾有學生在給課程的建議中提到:“老師要引導學生在編程的過程中找到幸福感與成就感”,這可能是解決這一問題唯一有效的辦法。

學生在編程中獲得成就感是綜合因素作用的結果,要加強整個教學過程的各個環節,提升學生的學習質量。當學生遭遇學習困難或編程受挫時,教師不僅要指出概念或語法上的錯誤,更應指出其在理解問題或設計程序時存在的思維誤區,幫助學生實現學習和修正能力的內化,避免這道題的問題解決了,下一道又不會的情況,以免影響學生的自信心,導致其無法產生戰勝困難以后的成就感。

另外,程序設計作為實踐性課程,學生獲得成就感的體驗會比其他課程更為鮮明;但同時,挫折感和挫敗感也會更加強烈。為了防止出現“破罐子破摔”的情況,可采用“基線教學”的辦法:“做好教學過程的每一環節,幫助學生每階段都達到基本教學要求?!苯處熞冻龈嗟臅r間和精力,關注學生的學習動態和進展情況,讓學生的學習狀態和思想狀態保持良性循環。

在程序設計課程教學中,學生思想引導應該是一個持續的過程。計算思維和應用能力的培養為學生學習指明了方向,教師則應幫助學生將對課程的新鮮感和自身的成就感持續保持在一個較高的水平上,而這些又是以各個教學環節的改善和教學質量提升為根本前提的。教師應能將概念、知識和程序設計方法有效地傳遞到學生手上,學生應能依靠自身能力或教師幫助,通過練習、歸納和總結形成知識系統和能力,最終解決問題,獲得成就感。

3.從概念到知識——把握概念講解的“度”

在教與學的過程中,達到一個預先設定的教學目標,教師的付出與學生的付出是成反比的。在學生還沒有形成系統的知識體系和學習能力之前,教師需要幫助學生撥開第一層迷霧,打開從概念到知識的轉化通道,為思維和能力的培養奠定基礎。

由于之前對計算機基礎知識沒有很好地把握,很多學生對計算機相關概念的理解還停留在表面,甚至還沒有跳出傳統的思維定式,用數學的思維方法理解程序語言的概念就是一個比較普遍的現象。為了打破這種固有的思維定式,教師在教學中可以把概念講解地更“深”更“廣”——引入更原理陛的計算機學科知識來對概念進一步闡述,由本質引出現象,滲透計算思維。舉例說明:在c語言課程中,借助計算機組成原理知識,用數據在內存中的存取方式來解釋變量的內涵以及其輸入輸出格式,進而幫助學生更好地理解賦值、自增自減等運算操作的特性——只能對變量進行賦值和自增自減操作;同樣利用變量在內存中的存儲等內容的闡述,將字符數組、字符串常量、字符指針之間的交互關系理清,幫助學生在編程時更準確地使用此類數據類型;通過講述程序的編譯、鏈接及運行原理,解釋函數包括庫函數在內的調用問題;通過解釋學生在實際編程操作中遇到的各類運行錯誤(特別不能忽略一些“隨機”出現的錯誤,例如內存訪問可能隨變量的隨機初始值而成功或不成功),防止學生一知半解和盲目照搬;借助編譯原理知識,解釋數組名到底包含了哪些信息,指針為什么要設定類型——理解指針最重要的一點是理解它的“類型”,“類型”決定存??;同樣利用編譯原理知識,解釋類型轉換的原理——整數和浮點數在計算機中有不同的表示形式,而且使用不同的機器指令來完成運算。C語言程序設計課程中,還有很多內容可以與大學計算機基礎相關內容關聯起來,增強學生知識的系統性。

原理性的或更高級的計算機學科知識可以輔助概念的理解,但針對非計算機專業學生,知識并不是挖得越深、拓得越廣越好。c語言程序設計的理論教學課時原本就比較緊張,擴展知識的講解可能會影響正常的教學進度。另外,對計算機基礎和邏輯思維能力較弱的學生,這也是一個額外的負擔。例如,講授變量存儲類型、動態分配空間等內容時,一些數據結構概念例如堆和棧等,要向只有簡單計算機基礎的學生講清楚不是一件容易的事情;函數嵌套調用的執行過程,也許不用涉及返回地址的堆棧過程;當學生不理解程序編譯、鏈接和運行的本質過程時,編譯器原理的內容可能不需要涉獵過多,因為在基礎階段的程序設計中,基本用不到一個程序由多個源文件組成的情況,工程、源文件、頭文件、接口等概念可能使學生更加混亂。這些都需要在實際教學過程中不斷嘗試和積累經驗。

教學實踐證明,在程序設計課程中,正確地把握概念講解的深度和廣度,能夠有效減輕學生概念和知識的稀疏程度,加快其知識體系的形成和自主學習能力的培養,鞏固計算思維能力。

4.從知識到能力——重在“設計”

學生在學習過程中還存在這樣一大類問題,“明明上課聽懂了,可就是不會做編程題”;還有很多學生對編程并非沒有辦法,只是想出的辦法和使用的“工具”(包括數據類型、語句、函數等)總是比較“低級”,不能充分利用計算機和計算機語言的優勢,一些專門設計的有針對性的課后習題也就形同虛設。一方面,學生基礎概念和語法規則掌握不牢固,再加上練習少、認真讀程序少,自身沒有經過“訓練一思考一總結一再訓練”的消化提煉過程;另一方面,教師在學生從知識到應用能力的轉化過程中應該發揮更有效的作用,擺脫傳統的“語法是對是錯”的傳授模式,一切從設計出發。

程序設計課程本應重視“設計”,這也不是一個創新性的提法,但筆者在教學實踐中發現還有一些細節問題需要加強。

首先,教師在授課時應轉變思想,讓學生明白“程序設計=數據結構+算法”,程序對錯是次要的,關鍵是有沒有用對數據結構和算法。例如,授課時可以突出知識的系統性和特殊性,讓學生體會到c語言的創始者當時是如何既從計算機的角度又從人的角度來設計這門語言的,學生需要發揮主觀能動性,以更好地利用這門語言。針對一個目標問題(例如螺旋圖形的打?。?,采用哪種數據結構或類型更方便快捷?很多時候不用指針也能解決某一個問題,為什么用指針會更好?什么問題用結構類型來解決會更漂亮?為什么用一個標志變量會讓程序的結構性更強?解決這些問題的思想或經驗不是靠單純的例題講解就能讓學生掌握的,在整個教學過程中,需要教師從一個程序員“將計算機語言為我所用”的角度,持續地對學生進行啟發和引導。

其次,要充分把握課堂例題講解的機會,讓學生體驗優秀程序的設計過程;同時將計算機的工作方式和人腦的工作方式做比較,把程序語言經常使用的一些算法、技巧作為例子,指導學生掌握計算機語言解決實際問題的特點,啟發他們創新更多的解題思路和算法,學會“像計算機科學家一樣思考問題”。

還有一點經常被授課教師所忽略:教師應注意問題講解時的描述角度和措辭,防止可能出現的“誤導”。例如,嚴格來講,并不是省略類型的函數就是“int”型函數,而是計算機會認為它是“int”型函數,那么在程序設計時,如果選擇使用“int”型的函數,則可以在代碼編輯時省略類型符。同樣,并不是函數返回值的類型就是函數類型,或者函數返回值類型和函數類型一致,而是通常根據需求這樣設計。如果通過判斷下面程序的輸出來闡述函數返回值隱式類型轉換,教師應該強調它是為完成實數的加和并取整來設計的,否則只能作為單純的原理闡述——畢竟如果沒有特殊的需求,為什么要多此一舉進行隱式轉換呢?

教師在設計基礎練習題時也應注意從程序設計的角度出發,防止選擇填空等基礎練習與編程練習發生脫節。

授課教師在任何教學環節都要銘記“設計”一詞,用教師的思維方式去影響學生的思維方式,讓學生從一開始就把程序設計看成一個“寫作”問題,經過不斷的練習達到靈活和熟練掌握,讓編程解決問題成為一種習慣,最終實現從知識向應用能力的轉化。

5.結語

程序設計課程中學生思維能力和應用能力培養可以歸納為圖1所示的過程。教師要在概念到知識的轉化、知識到能力的轉化兩個環節發揮關鍵的指導作用,持續關注學生的思想狀態。學生經過反復的練習、思考和歸納,當面對一個新的應用問題時,能夠選擇合適的數據類型和算法進行組織,具備靈活的應用能力;并且,在出現錯誤時,又能指出問題所在,具有扎實的基礎知識。計算思維則在這個持續、重復的過程中潛移默化地養成。

“課程改革成敗的關鍵,最主要的是教師教育觀念的改變?!雹璨粩喔陆虒W理念,提高自身素質,也是包括筆者在內的廣大教育工作者首要堅守的職責。

猜你喜歡
非計算機專業應用能力計算思維
非計算機專業計算機基礎教學的總結與思考
高校非計算機專業計算機網絡基礎教學改革探究
淺談如何提高經濟管理類本科生的應用能力
高等數學教學培養學生應用能力的探討
基于計算思維程序設計的軍事案例研究
民族高校C語言程序設計課程教學改革的研究
算法的案例教學探析
淺談藝術專業學生計算思維能力的培養
數學課堂中實施生活化教學的研究
非計算機專業VF課程優化教學研究
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合