袁麗華 朱笑


摘 ?要:文章首先介紹了C語言課程的地位和作用,并分析了C語言教學存在的問題。結合多年一線教學經驗,提出了多點適合C語言教學并滿足于人才培養的教學方法。第一,采用承上啟下的教學模式幫助學生接受新知識,同時兼顧應用和鞏固已有的知識。第二,采用任務驅動的教學方法,激發學生的學習興趣,培養學生創新能力。第三,注重實踐環節教學,引導學生建立算法思想和編程思維方法,訓練提高學生的計算思維能力。第四,建立自主學習模式,培養學生自學能力。
關鍵詞:計算思維;任務驅動;實踐教學;自主學習
中圖分類號:G642 ? ? ?文獻標志碼:A ? ? ? ? 文章編號:2096-000X(2021)13-0104-04
Abstract: Firstly, this paper introduces the status and function of C Language course, and analyzes the problems existing in C Language teaching. Combined with many years of teaching experience, this paper puts forward teaching methods suitable for C Language teaching and satisfied with talent training. First, the teaching mode of connecting the preceding and the following is adopted to help students accept new knowledge while simultaneously applying and consolidating existing knowledge. Second, the task-driven teaching method is adopted to stimulate students' interest in learning and cultivate students' innovation ability. Thirdly, paying attention to practical teaching will guide students to establish algorithm thinking and programming thinking methods, train and improve students' computational thinking ability. Fourth, the establishment of independent learning mode can train students' self-study ability.
Keywords: computational thinking; task-driven; practical teaching; autonomous learning
一、課程地位和作用
計算機與原子能、半導體、激光器合稱為20世紀的四大發明,計算機的應用早已滲透到了各個領域和各門學科之中。面向非計算機專業學生的計算機方面的教育,涉及的專業面廣,人數眾多,影響深遠,意義重大,它將直接影響我國各行各業的計算機應用的發展水平。自20世紀90年代以來,C語言迅速在全球普及和推廣,無論是國內還是國外,無論是計算機專業還是非計算機專業,不僅是本科教育甚至職高教育,C語言程序設計被定位為基本的計算機課程,C語言程序設計在計算機教育和計算機應用中發揮著重要作用。C語言具有許多優點,可以高度歸納為四點:1. 同時具有高級語言和低級語言的優點,屬于一種中間語言;2. 是一種函數化的程序設計語言,非常適合結構化程序設計;3. 提供了豐富的數據類型、運算符以及庫函數;4. 直接與內存打交道,使修改、編輯其他程序與文檔變得簡單輕松。因此,C語言既適用于編寫系統軟件,又適合編寫應用軟件。
現在許多高校把C語言作為第一門計算機語言進行程序設計教學,其目的是培養學生具備初步的高級語言程序設計技能,為學生掌握編程技術和計算機思維能力打下堅實的基礎,并為今后學習其他計算機軟件編程奠定知識基礎。例如,南昌航空大學測控技術與儀器專業C語言課程的教學大綱指出,“《C語言》是測控技術與儀器專業的一門專業核心課,也是一門理論性、技術性很強的主干課程。本課程的主要任務是引導學生初步接觸算法、軟件編程等學科知識,學習C語言語法。通過本課程的學習可以使學生掌握結構化程序設計的方法,確立程序設計的思維方式,培養和提高學生的應用程序開發能力,并為數據結構、C++、單片機原理等后續課程的學習打下基礎。”
二、教學存在的問題
(一)思維方式的挑戰
人類在認識世界和改造世界的科學活動過程中離不開思維活動。科學思維是指在人類科學活動中所使用的思維方式[1]。科學的思維方式分為三種,即邏輯思維、實證思維和計算思維。歐美國家很重視對國民的計算思維能力的培養,將其融入到從育兒教育、中小學教育到大學教育中。Angeli等人發現利用教育機器人可以發展幼兒的計算思維[2]。Heintz等人于2016年發現,小學教育中引入計算思維、編程和數字素養課程已成趨勢[3]。Henderson等認為,計算思維作為現代科學、技術、工程和數學(即STEM)學科的核心,在K-12中開展計算思維培養的時代已然到來[4]。Francisco等指出通過編程方法或計算思維來培養學生的邏輯思維能力和解決問題的能力,以使學生參與有意義的學習,從而發展有用的思維技能和數字能力[5]。
在我國,通過高考選拔的學生,邏輯思維得到了充分訓練和加強,習慣數理化學科中以推理和演繹為特征的邏輯思維方式。另一方面,加強了理化生的實驗培養和鍛煉了學生的實證思維能力。然而,計算思維方面就顯得非常薄弱,雖然中學開設了信息技術課程,但課時少,同時又有高考的壓力,信息技術往往被當做一門副課,得不到學校和學生重視。對于剛入校的大一新生而言,C語言是一門全新的課程,缺乏相關的計算機基礎知識,算法思想和編程的思維方式都有待建立。
(二)學生缺乏學習興趣
不少學生學習C語言困難大,缺乏學習興趣。大一新生在沒有開設計算機文化基礎課程的前提下,直接學習C語言,對學生而言是一個全新的挑戰。C語言教學課時少、進度快,學生無法及時消化所學內容。以南昌航空大學測控技術與儀器專業為例,C語言理論教學為48學時,每周4學時,所選用的教材是清華大學譚浩強著的《C程序設計(第四版)》[6],要求12周的時間要講授十章教學內容。上課節奏快、強度大,不少學生跟不上老師的教學進度,容易出現畏難、退縮、厭學的情況。王東旭指出,在實際學習過程中,由于C語言語法要求嚴謹,學生無法靈活運用,同時學生往往對于編程中出現的錯誤無法理解,造成了學生的困惑[7]。學生學習的興趣不高,最終導致學習效果不好,教學質量不理想。
(三)傳統講授方法單一
高江勇考察當前大學課堂教學實踐時發現,從表面上來看,教師似乎在費勁地教,學生似乎也在無聲地學,但實際上教師的教并不能真正地吸引和引導學生的學,學生的學也無法反饋和激勵教師的教,可以說學生的學幾乎與教師的教無關,這種沉默式的教學已經成為當下大學課堂的普遍現象[8]。C語言的教學也存在類似問題,大多數教師采用傳統單一的講授方式授課,師生之間缺乏溝通與交流。由于學時緊,教學任務重,教師基本上采用滿堂灌的方式上課,參照著授課計劃,忙著趕教學進度,沒能顧及學生在教學中的反饋,忽略了學生是學習的主體。被動聽課的學生缺乏主動性和能動性,在沉悶的課堂中學習,感覺非常的枯燥乏味,無法激發應有的學習興趣。
三、教學方法的探討
(一)承上啟下的教學模式
C語言知識點和語法不像數學物理這類學科的邏輯性強,初學時會感覺知識點繁多零散,不好記憶。聽課的時候,似乎不難懂,但在實踐編程時,就很難正確靈活應用。采用承上啟下的教學模式,可以幫助學生學習和理解新知識,同時兼顧應用和鞏固已有的知識。搭建合理的知識點構架,幫助學生融會貫通所學知識。
例如,在C語言第一節新課介紹C程序時,指出C語言的最大特點就是函數化的語言,至少包含一個主函數。函數是由函數首部和函數體構成的,函數首部介紹函數名、函數類型、是否有參數,如果有參數的話,就介紹參數類型以及參數個數。函數體完成函數功能的定義,包括聲明部分和語句部分。在后續的程序實例中,多次重復,讓學生熟悉和建立函數的基本知識,到系統學習函數時,就不會陌生,為進一步學習奠定基礎。
所有的變量要“先定義,后使用”。定義包括給變量取名和指定變量的類型。變量有四種基本類型,整型、字符型、單精度浮點型和雙精度浮點型。要求學生熟練掌握四種基本類型的定義方法、輸入輸出使用的格式,以及所占的字節數,參見表1所羅列的信息。能夠依據求解的任務要求定義合理的數據類型變量,通過scanf函數給變量賦值,應用printf函數輸出結果。后續所學的數組變量、指針變量以及結構體類型的定義仍然是以這四種基本類型為基礎進行定義。
表1 數據的基本類型
學習數組時提醒學生要結合循環結構來編程,用循環語句可以將一維數組元素遍歷一遍,用循環嵌套則可將二維數組元素遍歷一遍。這樣,在學習新章節數組內容時,復習了循環結構,加深了解循環結構的應用。
(二)任務驅動的教學方法
任務驅動教學法是一種建立在建構主義教學理論基礎上的探究式教學方法,旨在培養學生的創新意識、創新精神、研究性學習能力和實踐動手能力[9-10]。任務驅動教學法通過任務的牽引,激發學生的學習興趣,充分調動學生的自覺能動性,從而促進知識原理、細節的理解與掌握,進而提高學生分析問題、解決問題的能力和實踐創新能力[10-11]。任務驅動的教學方法能為學生提供實踐體驗和感悟問題的情境,圍繞任務展開活動,以任務的完成狀況驗證學習活動的效果。在教學任務設計上必須貼近學習和生活,從身邊的事情入手,任務必須具有較強的實用性、新穎性和吸引力。只有這樣,才能將復雜、難以理解的知識概念變為學生感興趣的東西,并構建輕松愉快的學習環境,從而激發學生學習熱情,提高學生與教師的互動性,讓每名學生主動、充分參與教與學的過程,取得事半功倍的教學效果[10]。例如,第七章數組的學習,設計的任務如下:
電視臺舉辦配音大賽,以10位選手,3位評委為例介紹相關任務,每位評委將對10個作品進行打分。打分的形式不限,可以讓1位評委一次性打完10位選手的分數然后輪到下一位評委打分直到結束,也可以讓3位評委輪流給作品打分,打完第一位選手的分再輪流給第二位選手打分,以此類推直到結束(打分方式參見表2的示例)。表3羅列了任務的具體要求。
任務可分為三階段來實施完成:第一階段為獨立思考階段。趙勤認為思考在學習中具有至高無上的地位,學習如果處于被動,不獨立思考,必致心中無所得[12]。獨立思考是指學生通過個人的努力去完成任務,最大限度調動自身能動性和創造力。獨立思考并非要求學生所做的都是原創性,當今信息時代,學生要善于通過檢索獲取信息、整合信息、分析信息、過濾信息、精煉信息、利用信息來獨立解決所下達的任務。另外,要照顧到不同層次的學生,讓每位同學都能參與到任務之中,不會因為任務難而放棄,在這一階段中允許學生依據自己的能力自降難度,完成任務中的部分要求。這樣,能保證人人都參與任務,每位同學都能積極思考,動手編程解決力所能及的問題。第二階段為團結協作階段。在第一階段的基礎上,分小組協作繼續完成全部任務要求,每個小組4到5人。小組成員聚在一起討論交流,各自介紹自己完成的情況,存在的問題,互相取長補短,共同完成任務。第三階段是任務評價階段。在第二階段結束后,教師要把控好學生的合作完成過程,不能單一地用最終的結果來評價任務完成的效果。另外,任務評價不只是教師對學生做出的評價,也包括了學生之間的相互評價,以及學生的自我評價等[13]。最后,對整體情況做個總結分析,有助于培養學生分析問題和解決問題的能力。表3中的任務要求5最能反映學生的編程能力,各小組使用了不同的算法完成任務,例如,有的小組采用降序排序,取前三名完成要求;有的小組則連續采用三次打擂法,求第二名和第三名時結合continue語句完成;有的小組求算每位選手贏對手的次數,取前三位來完成任務。引導學生通過計算耗時分析算法的優劣,培養學生的分析能力。
(三)注重實踐環節教學
C語言是實踐性很強的一門課程,實踐環節教學并非僅僅是指導學生的上機操作實驗,而且還應當貫穿于整個理論教學之中。上課的例題除了用PPT講解外,還需要演示程序生成的整個過程,包括編寫源程序文件(.c)、翻譯成目標文件(.obj)、連接成可執行文件(.exe)、運行可執行文件,以及驗證結果判斷程序是否正確合理。因此,在課堂上不主張演示一個已經編寫好的源程序,不僅讓學生觀看程序運行結果,而是應該現場帶著學生一塊編程,一起調試,引導學生建立算法思想和編程思維方法,訓練提高學生的計算思維能力。
如果程序有語法錯誤,編譯時系統會用英文在調試信息窗口中給出相應錯誤的信息,很多學生初學時不習慣英文的表述,甚至有些學生看不懂英文,需要幫助學生理解英文表述的錯誤提示信息,指導學生依據提示信息修改程序,提高學生調試程序的能力。
引導學生采用不同的算法編程,提高學生分析問題和解決問題的能力,例如,階乘問題可以用不同方法編程,比如累乘方法、遞歸調用、靜態存儲。組織學生分析比較不同算法的特點,提高學生編程思維能力。另一方面,引導學生活學活用,舉一反三,掌握規律,將編程思想融會貫通,解決類似問題。例如,排序是很常見的一類問題,教材給出了數值型數據的排序,有冒泡法和選擇法。可以引導學生應用排序的思想解決字符串的排序問題,同時提醒學生要注意字符串處理有別于數值型數據,要求學生思考如何解決字符串之間的比較,以及兩個字符數組之間的存儲交換問題。
(四)建立自主學習模式
C語言學時少,教學內容被壓縮,光靠課堂教學,學生是無法全面系統掌握C語言程序設計的知識。退一步講,就教師所教授的內容,除了課堂教學外,學生還需要進行大量的實踐訓練,包括編程訓練和上機訓練,才能真正領悟和掌握所學知識,才能靈活運用所學知識解決實際問題,結合相關專業知識,解決專業領域中的問題。
因為C語言是實踐性很強的一門課程,所以C程序設計是非常適合自學的一門課程。學生可以通過編程來鞏固和加深對知識點的理解,可以通過上機操作來檢驗判斷的正誤。教師應當倡議和引導學生建立自主學習模式,培養學生自學能力,鍛煉和提升學生的計算思維能力。在上第一堂C語言課時,教師可以推薦學生安裝手機版的C語言編程軟件c4droid,能夠方便學生上機而不受時空的限制,可以充分利用碎片時間學習。同時利用互聯網的便利,建立自學QQ群或微信群,為學生釋疑,及時解決學生自主學習時遇到的問題。
培養學生自學能力,可以方便學生在需要時自學另一種語言。大四做畢業設計時,很有可能不采用C語言編程,而是使用其他語言或軟件編程,比如MATLAB、ImageJ、有限元分析等等,在今后工作時,可能要使用專用的分析軟件,有了C語言設計的基礎,以及自主學習的能力,可以很快上手掌握其他語言或軟件。
四、結束語
國家建設需要大力發展信息產業,需要大批能將信息技術應用于本領域的新型專門人才,而高校教育擔負著培養計算機應用人才的重任。C語言課程主要是學習程序設計的方法,為將來程序設計進一步的學習和應用打下基礎。教師通過教學改革幫助學生建立C語言語法知識體系,培養學生分析問題和解決問題的能力,建立起自主的學習模式,達到持續學習乃至終身學習的最高境界,為國家培養創新綜合型人才奠定基礎。
參考文獻:
[1]李廉.計算思維——概念與挑戰[J].中國大學教學,2012(1):7-12.
[2]Angeli C., Valanides N. Developing young children's computational thinking with educational robotics: An interaction effect between gender and scaffolding strategy[J]. Computers in Human Behavior, 2020,105(Apr.):105954.1-105954.13.
[3]Heintz F, Mannila L., Frnqvist T. A Review of Models for Introducing Computational Thinking, Computer Science and Computing in K-12 Education[C]//2016 IEEE Frontiers in Education Conference (FIE). IEEE, 2016.
[4]Henderson P B, Cortina T J, Hazzan O, et al. Computational Thinking[C]// The 38th ACM SIGCSE Technical Symposium on Computer Science Education. New York, NY: ACM Press, 2007:195-196.
[5]Francisco José García-Pealvo, Antònio José Mendes.Exploring the computational thinking effects in pre-university education[J]. Computers in Human Behavior, 2018,80(3):407-411.
[6]譚浩強.C程序設計(第四版)[M].北京:清華大學出版社,2010.
[7]王東旭.C語言程序設計課程教學探索[J].湖北農機化,2019(14):46.
[8]高江勇.高質量本科教學的發生——為何需要及何以實現互動式教學[J].高等教育研究,2020,41(1):84-90.
[9]汪永偉,蘇會芳,劉育楠.基于任務驅動的信息安全技術課程教學研究[J].教學管理與教育研究,2016(5):35-36.
[10]蘇會芳,汪永偉,張玉臣,等.任務驅動教學法在應用型計算機課程教學中的應用——以Visual Basic程序設計課程為例[J].中國教育技術裝備,2019(10):69-71.
[11]劉紅梅.任務驅動式案例教學法的構建與應用[J].江蘇高教,2016(4):71-73.
[12]趙勤.學生獨立思考能力培養的探討[J].教學與管理,2013(27):69-71.
[13]柳玉英,王平,劉青,等.環境分析化學教學中研究生自主學習能力培養的探索與實踐[J].大學教育,2019(12):41-44.
基金項目:國家自然科學基金委員會“CFRP層壓板脈沖紅外熱波檢測的缺陷特征提取及其檢測概率研究”(編號:51865038);江西省自然科學基金委員會“混合激勵檢測復合材料缺陷的紅外熱波方法研究”(編號:20151BAB207058);江西省教育廳科學技術項目“先進復合材料層壓板沖擊損傷的紅外熱波檢測研究”(編號:GJJ150730)
作者簡介:袁麗華(1970-),女,漢族,江西南康人,博士,副教授,研究方向:激光與紅外檢測技術。