王若龍
(濮陽市食品藥品信息中心,河南 濮陽 457000)
程序設計是計算機類專業的重要課程之一,以程序設計為主要目標,涵蓋數據存儲、編程軟件的運用及程序實現等內容。對于計算機科學,計算思維是基本素養。從程序設計課程教學中可知,計算思維是關鍵能力。結合計算機技術及應用,了解和掌握計算機的思維方式,對于設計高質量的軟件程序至關重要。所謂計算思維,可以解釋為運用計算機科學來求解問題、設計系統和理解人類的行為。產出導向理念(Outcome Based Education,OBE)打破傳統教學“重知識、輕能力”格局,關注學生自主學習意識的激發,引入工程教育專業認證體系,注重學生間的合作與交流,變革教法,啟發學生的計算思維,面向科學評價,持續提升課程教學質量。為此,計算機專業學科教育要重視學生計算思維的培養,指向計算思維,運用產出導向理念,改革現有程序設計課程教學模式,促進高校工程教育質量的全面提升。
周以真教授認為,計算思維是一種借助于約簡、嵌入、轉化、仿真等方法,將看似難以解決的問題,重新闡述為能夠被解決的一種思維方法。計算思維,關鍵在于抽象和自動化,提煉重要內容,刪去不重要的細節,借助于計算機自動化運作系統,解決實際復雜問題。教育部高等教育司《關于開展新工科研究與實踐的通知》(教高司函〔2017〕6 號)中,將“工程教育”理念作為新工科課程改革的指導新思想。計算思維以科學計算為指導,重視邏輯、抽象、推理、綜合。
在程序設計課程體系中,計算思維具有不同的層級特點。在計算表示層,主要完成對數據的存儲方式、數據的描述與表示,如字符集、數據類型、變量、數組、指針、類或對象等;在計算處理層,主要實現程序的控制與數據的操作,包括程序設計的基本規則和方法;在計算分析層,主要包括算法分析、結構化程序設計,面向對象設計思想等;在計算實現層,主要包括對算法的實現、算法程序的表示,調適與驗證程序的穩定性等;在計算優化層,通過時間復雜度分析、空間復雜度分析,優化程序設計流程和方法。在計算思維與程序設計課程融合中,要把握適度原則,避免過度強調程序設計的繁雜語法和規則、限制學生思維的主動性和能動性。培養計算思維要結合課程內容,啟發學生關注復雜問題的分解與解決,提高學生綜合素養和程序設計專業能力。
程序設計課程作為計算機專業基礎課,包括數據存儲、數據表示、數據處理、程序設計、程序實現和程序優化等內容。因此,強調產出導向理念與計算思維的培養,在程序設計課程教學中需要把握3 個方面。
知識灌輸、一刀切的無差別育人模式,既會抑制學生的創新意識和創造力,又不利于計算思維的培養。結合學情,了解學生的認知、起點、學習需求,強調“因材施教、能者多學”原則,設置分層次、有梯度的學習任務,讓每個學生的能力都能夠獲得提升。
在程序設計課程中,要明晰課程特點,體現學生專業技能的培養。增加實踐性課時,特別是引入真實項目或任務,鼓勵學生分工協作、合作探究、歸納總結,提升其程序設計綜合能力。
傳統教學目標以“了解”“理解”“熟悉”“掌握”等為要求,考核學生的能力缺乏量化,導致教學效果不理想。據調研,很多高校程序設計課程缺乏明晰、準確、完善的考核評價體系。應立足計算思維,細化評價內容,著力培養學生利用計算機程序設計解決實際問題的能力。在評價上,要啟發學生發現、分析問題,尋求不同算法,激活學生思維;通過算法比較,增強學生自覺意識。鼓勵重構問題,培養學生思維的深度。
落實工程教育專業認證培養理念,以學生為中心,以產出為導向,從人才職業需求和必備能力方面“反向設計”課程教學模式,突出基本知識、專業技能、綜合素質的協調發展。
在產出導向理念下,對于程序設計課程育人目標的設定,要明晰“具備解決復雜軟件工程能力”的人才定位。程序設計本身具有多種學科交叉、綜合性特征,對數學、自然科學等知識的學習,要體現學生計算思維的培養,能夠結合程序設計具體實踐問題,優化程序設計語言的表示方法,順應程序設計模塊結構特點,通過抽象、歸納、遞歸、回溯等算法設計,獲得自上向下的程序設計思路。計算思維的培養,通過對程序設計目標、程序編寫過程、程序執行、驗證與調適分析,解決具體問題。注重程序語言規范、程序算法的表示、程序設計方法的掌握,更要能夠銜接軟件工程領域,提高學生在編程中養成必備的職業素養,如合作意識、團隊精神,具備多學科背景下的程序設計編程能力,能夠結合編程項目,展開自主學習、自主探究,適應軟件行業人才發展需要。教師在關注程序設計課程教學時,要確立“具備解決復雜軟件工程能力”的人才目標,以產出導向為指引,對教學各個環節進行優化和變革,提升軟件人才綜合素養。
程序設計課程涵蓋的知識點、程序設計規則與算法較多。要想實現正確的程序輸出,就需要做好數據的表示和處理。在教學中,針對過多的講解程序規則、算法等內容,學生反而會被這些知識點所束縛,導致計算思維受限。程序設計課程可以讓學生自主認識相關規則和算法,自主體認程序設計的數據表示和處理方式,培養學生的計算思維。要將自主學習融入程序設計各個環節,要強化學生自主學習意識和能力。例如對于常量、變量的討論,與數據二進制存儲有關,如果圍繞二進制展開知識點講授,學生依然存在搞混現象,教學效果不理想。應給予學生自主學習的機會,讓學生自己去探索和感知二進制補碼存儲的規律。教師通過有效的引導,化解學生學習中的疑難問題。參照產出導向理念,根據程序設計教學目標,要引領和啟發學生主動進行自主學習,如在任務設計與布置中,結合學情,鼓勵學生自主學習。針對結構體知識的講解,安排學生在課下學習“共同體”“枚舉類型”,引入作業,讓學生對自己的學習成效進行考核。程序設計課程非常適宜學生半自主學習,由師生協同,整合課程學習資源,鼓勵學生持續改進自主學習模式。隨著學生學習能力的提高,教師要減少干預與監控。同樣,注重因材施教,結合學生自身學習興趣、方向,拓展其知識面,提升學生解決復雜工程問題的學科能力。
程序設計課程教學中有結構化分析方法、面向對象分析方法等??紤]到程序設計的教學效率,教師要注重學生間的合作與交流,鼓勵學生以團隊形式參與分組討論,共同提升計算分析能力。一般情況下,團隊教學模式有三種。第一種是以分塊協作為主,將一項復雜的程序設計任務分解為若干模塊,團隊各成員相互協作,各自完成相應的模塊。第二種是主輔協作,由能力強的學生與能力弱的學生合作,對任務進行難易度劃分,各負其責。第三種是結對協作,圍繞程序設計任務,引入角色互換方式完成合作。不同協作方式的應用要與課程實際相聯系。每個人在面對程序設計任務時,其思維意識、思維能力是有限的。引入小組合作,發揮團隊的力量,有助于學生從思維碰撞中形成計算思維與分析能力。比如,對于一個數,通過素數因子乘積的方式來表示這個數。很多學生在分解該數時,會采用雙重循環程序結構來實現。利用外循環,窮舉因子;利用內循環,判斷該數是否為素數。這一設計思路,看似沒有紕漏,但少數學生在對素數因子進行分解時,無須再判斷其是否為素數。也就是說,利用單循環結構即可解決該問題。通過學生分組探討,能夠開闊學生計算思維的視野,在遇到程序設計等問題時,多鼓勵學生團隊協作,從不同想法的碰撞中激發計算思維,提高學生程序計算分析能力。
計算思維的培養,要強調學生計算實現能力的獲得。在教學過程中,教師要善用啟發式教學,引領學生展開思維訓練。在程序設計課程中,針對知識型問題,可以將知識嵌入程序設計,分析程序,體認知識。比如,對邏輯運算符的使用,很多學生在程序設計時,易犯錯誤集中在邏輯與左側表達式值為“0”,或者邏輯或左側表達式值為“1”時,右側表達式不再執行。教師利用具體程序,讓學生通過執行程序,對比執行結果,反思該知識點,促進學生對邏輯運算符的正確理解。對于分析型問題,教師要突出學生思維的發散。對程序流程的控制,程序設計的流程,有順序結構、選擇結構、循環結構等。對于順序結構,在不使用中間變量條件,交換兩個數的方法。形如“a=a+b;b=a-b;a=a-b”。運用編程語句,如何來交換兩個數,啟發學生去體會順序結構的數據流向,幫助學生掌握順序結構的編程方法。同樣,對于選擇結構,可以從最大公約數的求解方法中來驗證。對循環結構,可以通過除法運算實例,加深學生對程序流程的控制。計算思維在培養中,要注重問題的遞進性。例如“百錢百雞”問題,利用三重循環,將公雞、母雞、小雞的數量控制在“0~100”之間,每次累進“1”,窮舉所有情況。對于該設計思路,請同學們思考:是否需要對三重循環的常量都設定為“0~100”,是否需要每次都累進“1”,是否必須用“三重循環”來實現。鼓勵學生拓展思維,優化程序設計算法,以便提高程序運算效率。在計算思維培養中,學科知識的交叉與融合,面對程序設計任務,不能孤立地看待問題,要結合多種學科知識,強調學生數學思維分析能力的養成。數學思維為計算思維創造基礎,程序設計中的計算思維很多情況需要轉換為數學方式來完成,如合數的分解,從“2”開始,直到合數的平方根結束,作為循環判斷的是否整除的條件。
產出導向下,程序設計課程教學要歸結于對實際問題的解決。結合程序設計課程,引入具體的編程項目,讓學生能夠參與編程,對程序進行驗證、優化,提高程序設計的正確性、可行性、高效性。在程序設計中,對所編程序需要進行調試、驗證。如何選擇調試工具,如何驗證程序的合理性,如何結合錯誤提示來改進和糾正程序內容,如何設置程序運行斷點,如何利用單步執行來分析程序中變量的合理性等等。通過編程實踐,對程序進行輸出結果調適,再反過來優化編程方法,如對于“N 個字符串有序輸出”任務,需要明晰字符串的存儲方式,設定字符串的排序過程。對于不同字符串,根據其長度不同,可以選擇不同的存儲方式,如靜態數組,需要預先定義數組的大?。粚τ谝攵鄠€變量來存儲字符串,可能影響程序的可讀性。對字符串的排序,從字符串大小比較、交換位置中,可能會帶來運算效率問題。因此,引導學生利用指針數組,利用交換數組元素,而不交換字符串,能夠實現算法的優化,提高學生編程設計優化能力。
計算思維的培養具有長期性、漸進性特點,要融入程序設計課程教學全過程。重視產出導向理念的指導,從程序設計基礎知識、編程項目實例開發中,完善教學評價,增強學生自主學習、團隊協作能力。將計算思維與數據分析處理能力協同起來,讓學生能夠融入計算思維,關注問題的解決過程,為后續課程學習奠定基礎。