方其桂
(安徽省教育科學(xué)研究院,安徽 合肥 230061 )
程序設(shè)計是各類高校計算機專業(yè)主要課程,傳統(tǒng)的教學(xué)模式以編程語言的語法教學(xué)為主線,通常是教師先講解編程用到的語句,再通過練習(xí)鞏固所學(xué)的語法規(guī)范。教師講解時學(xué)生難以掌握大量的專業(yè)名詞,等到上機實踐時,往往要么無從下手,要么只是將書上程序搬運到計算機中,遇到實際問題無法編寫出相應(yīng)程序。
在程序設(shè)計類課程中開展項目學(xué)習(xí),引導(dǎo)學(xué)生經(jīng)歷發(fā)現(xiàn)問題、分析問題和解決問題,將知識建構(gòu)、技能培養(yǎng)與思維發(fā)展,融入解決問題的過程中。其主要過程分為“項目選題”“項目分析”“項目規(guī)劃”“實施項目” “項目支持”和“評價總結(jié)”等階段,如圖1 所示。與傳統(tǒng)教學(xué)模式相比,能有效提高學(xué)生分析問題和解決問題的能力。
圖1 程序設(shè)計項目學(xué)習(xí)流程圖
將項目學(xué)習(xí)模式應(yīng)用于程序設(shè)計課程教學(xué)中,首先教師要依據(jù)課程目標(biāo)和實際情況設(shè)計項目。項目是教學(xué)活動的核心,項目合適與否,對教學(xué)效果將會產(chǎn)生直接的影響。項目必須讓學(xué)生在規(guī)定的教學(xué)時間內(nèi)完成,因此,項目的選題非常重要。項目的選題立足點是教學(xué)目標(biāo),同時要充分考慮學(xué)生的實際[1]。
程序設(shè)計教學(xué)目標(biāo)是讓學(xué)生通過學(xué)習(xí),更好地運用計算機高級語言編寫程序,解決實際問題,提高思維能力,重點在于培養(yǎng)學(xué)生的計算思維。目前各類高校程序設(shè)計語言大多數(shù)有Python、C、Java 等,教師在教學(xué)之前,首先需要將這些編程語言在教學(xué)中的相關(guān)知識點整理成體系,然后對知識進行合理切片,融入相應(yīng)的項目中,項目不能過大或過小,使之能在一次課(可能是二節(jié)課連上)中讓學(xué)生達(dá)成教學(xué)目標(biāo),如一般情況下,一次課很難完成“圖書管理系統(tǒng)”之類大項目,但是如果把項目設(shè)定為“兩個數(shù)比較大小”,又很難覆蓋太多知識點。要搞清楚項目對應(yīng)的知識點,要讓學(xué)生在項目學(xué)習(xí)后,能掌握這些知識,并能運用知識解決簡單問題,提升學(xué)生的計算思維[2]。
首先要了解學(xué)生的情況,項目要建立在學(xué)生已有知識和能力的基礎(chǔ)之上。因此要了解學(xué)生的興趣愛好、學(xué)習(xí)條件。也就是說,項目要貼近學(xué)生的興趣點,符合學(xué)生的能力,讓學(xué)生有能力解決。學(xué)生真實世界中遇到的問題往往是復(fù)雜的,教師需要緊緊圍繞教學(xué)目標(biāo)進行改造,使其變得簡單易行,規(guī)模可控,讓學(xué)生跳一跳能夠夠得著,才能激發(fā)其參與的積極性。另外,項目需要有一定的探究性或啟發(fā)性,否則會造成學(xué)生參與興趣不濃、積極性不高的現(xiàn)象,進而導(dǎo)致學(xué)生在規(guī)定時間內(nèi)難以保證項目的完成。例如,教師可以將Python 的turtle 庫設(shè)計成創(chuàng)意繪圖項目,如在國慶節(jié)時繪制國旗、情人節(jié)時繪制一朵玫瑰花等,很受學(xué)生的歡迎。
項目分析是項目學(xué)習(xí)中的關(guān)鍵環(huán)節(jié),通過分析,發(fā)現(xiàn)問題、找出解決問題的方法,培養(yǎng)學(xué)生的思維能力。教師對項目的背景、目標(biāo)要求、相關(guān)的知識點進行詳細(xì)分析,適當(dāng)講授項目中的重點和難點,幫助學(xué)生理解項目,知道要做什么,要學(xué)習(xí)知識,練習(xí)的技能,達(dá)到的目標(biāo),以此培養(yǎng)學(xué)生的思維能力。
項目的價值在于它貼近生活實際,實際生活的項目都是比較復(fù)雜的,不是簡單的數(shù)學(xué)題,要從真實的情境中將解決問題條件分析出來,將無關(guān)的因素去除,便于后面構(gòu)建數(shù)學(xué)模型。在分析項目問題時,要明晰項目中可能涉及的知識和項目背景知識,弄清楚程序設(shè)計課程內(nèi)容中所蘊涵的應(yīng)用情境。例如分析“出租車計收費”項目的已知條件時,為了便于理解出租車是如何收費,可以采用圖示的方法理解題目已知條件。
鼓勵學(xué)生就項目提出各種各樣的問題,因為提出問題也是一種能力,而且這種能力比解決問題的能力可能更為重要。教師需要通過提問、頭腦風(fēng)暴、分組討論等各種方式,將學(xué)生的思維活動激發(fā),讓學(xué)生盡可能就項目提出各種各樣的問題,即使解決問題的方法很簡單、考慮不夠全面也應(yīng)受到鼓勵。
項目學(xué)習(xí)的最終目標(biāo)是解決問題,在解決問題的過程中提升學(xué)生的信息素養(yǎng),培養(yǎng)學(xué)生利用信息技術(shù)解決問題的能力。解決什么樣的問題,做到什么程度,需要定位,就是要確定學(xué)習(xí)的目標(biāo)。通過師生共同討論,分析出項目最終要解決什么樣的問題,其結(jié)果用什么方式輸出。只有明確起點和終點,才有可能找到解決問題的路線和方法。比如分析“走迷宮”項目,要找出走出迷宮的最優(yōu)路徑,首先要知道迷宮結(jié)構(gòu)數(shù)據(jù)是如何存儲,然后根據(jù)不同的存儲形式設(shè)計不同的算法。另外,通過項目目標(biāo)分析,學(xué)生要知道解決什么問題,在解決這個問題自己需要的知識儲備、解決問題的方法,以及解決問題中可能遇到的問題。而教師要知道在學(xué)生解決問題的過程中給他們能提供什么樣的幫助及學(xué)習(xí)資源等[3]。
在確定好編程的目標(biāo)任務(wù)之后,需要學(xué)習(xí)基礎(chǔ)知識,然后研究編程思路、分析編程算法,制訂出程序編寫的實施方案。
以前高校的程序設(shè)計課程以教授編程語言的知識為主,強調(diào)的是知識的學(xué)習(xí),現(xiàn)在則將培養(yǎng)計算思維作為重中之重。以訓(xùn)練思維為主的項目學(xué)習(xí),也離不開知識的學(xué)習(xí),需要知識作為解決問題的支撐,因此在項目學(xué)習(xí)之前,教師需要教授學(xué)生一些基本知識作為準(zhǔn)備,當(dāng)然,這種教授方式可以是教師講解,作為項目學(xué)習(xí),更主要是教師課前準(zhǔn)備相關(guān)知識的微課,不同學(xué)生根據(jù)需要進行自主學(xué)習(xí),隨學(xué)隨用,學(xué)習(xí)效率相對比較高。這些準(zhǔn)備知識主要是相關(guān)命令、語句、函數(shù)等的基本格式、語法和基本使用方法。例如分析“智能胖瘦分析程序”項目時,除了數(shù)學(xué)知識外,還需要用到If 語句、float()浮點數(shù)轉(zhuǎn)換、“/”除運算符等相關(guān)知識。這些知識不需要講得太多,它的學(xué)習(xí)主要是通過后面的項目實施來讓學(xué)生深入領(lǐng)會。
通過討論、觀察、閱讀、實踐、分析、探究、實驗等各種學(xué)習(xí)活動,找到項目解決的基本思路,也就是要完成這個項目,編寫這個程序需要哪幾步,每一步解決什么問題,用什么方式解決,其解決思路可以讓學(xué)生分步驟寫出,有的復(fù)雜項目為了便于理解、表述,最好用思維導(dǎo)圖工具梳理思路。
編程的核心是算法,是將生活中的實際問題轉(zhuǎn)變成能用程序解決。規(guī)劃編程算法要做的,也就是要將計算機的處理問題過程具體描述出來,讓計算機知道做什么和怎么做的具體步驟。通常,為了便于讓人們清晰直觀了解算法,編程時大多數(shù)使用流程圖來描述算法。
對于復(fù)雜項目,教師需要引導(dǎo)各項目小組對項目進行分解、細(xì)化,制訂出項目計劃,包括項目主題、任務(wù)清單、小組成員及分工、時間安排、工作步驟和方法等。項目計劃是整個教學(xué)過程的重要依據(jù),計劃制訂是不是合理,直接關(guān)系到項目完成的效果優(yōu)劣。如果項目內(nèi)容較多,也可以考慮將大項目分解為若干的子項目。
復(fù)雜項目一般要分組進行,需要將其進一步細(xì)化,形成一個初步可行的方案,包括制定任務(wù)分配表及進度表等。
項目實施是項目學(xué)習(xí)的核心環(huán)節(jié),對于程序設(shè)計,需要在本環(huán)節(jié)編寫出程序,然后調(diào)試、優(yōu)化,最終目標(biāo)是讓每個學(xué)生能順利完成項目。此處應(yīng)該注意,每個同學(xué)根據(jù)任務(wù)分配表選擇任務(wù)時,有的同學(xué)負(fù)責(zé)編程、有的同學(xué)負(fù)責(zé)程序測試,有的同學(xué)負(fù)責(zé)制作演示文稿進行匯報等,在各項目的實施中選擇不同類型的任務(wù),達(dá)到各方面鍛煉的目的。
學(xué)生根據(jù)前面所學(xué)的基礎(chǔ)知識,將算法用程序設(shè)計語言的不同命令、語句表現(xiàn)出來,集合到一起,就構(gòu)成程序。在這個過程中,教師要擺正自己的位置,以一個參與者的身份,走進學(xué)生小組之中,幫助他們解決問題,不能直接演示編寫代碼的過程。特別是在編程學(xué)習(xí)到中后期,由于學(xué)生學(xué)習(xí)的命令越來越多,掌握的算法逐步豐富,因此不同學(xué)生編寫的程序?qū)休^大差異,這個是好現(xiàn)象,教師不需要強迫學(xué)生編寫的程序完全一樣,那樣學(xué)生就變成編程代碼的搬運工,只是簡單將紙上的程序錄入編程語言中,完全失去編程的意義。對于較大的項目、較復(fù)雜的程序,最好通過分組教學(xué)來實施,即組內(nèi)成員經(jīng)過充分研究、討論、探究,形成程序,這樣也能培養(yǎng)學(xué)生團隊協(xié)作、人際溝通等能力。
大多數(shù)情況下,編程不會一蹴而就,一次就能運行通過,需要通過調(diào)試找出程序中的語法錯誤、邏輯錯誤,分析錯誤原因并改正。對于大的程序,需要分階段進行調(diào)試。這個過程非常符合人們?nèi)粘I钪刑幚韱栴}的方法。所以,合理運用程序調(diào)試工具調(diào)試程序可以培養(yǎng)學(xué)生的耐心和發(fā)現(xiàn)問題、分析問題和解決問題的能力。教師可以把編程語言調(diào)試工具的使用制作成微課,供學(xué)生隨時學(xué)習(xí),掌握調(diào)試的基本方法。
用不同語言編寫一個程序能訓(xùn)練學(xué)生思維的廣度,用多種方法解決一個問題可以訓(xùn)練學(xué)生思維的深度。由于一個項目可以由多種算法寫出不同的程序解決,教師要引導(dǎo)學(xué)生掌握算法效率分析的方法,對程序進行優(yōu)化,通過不斷優(yōu)化,訓(xùn)練學(xué)生的思維。如“我要站在誰后面”項目要求學(xué)生了解各種排序的方法。教師可給幾種排序的算法基本思想,讓學(xué)生根據(jù)自己對各種排序算法的理解程度,自主選擇算法進行研究,并根據(jù)所選算法分組,再通過討論、學(xué)習(xí)相應(yīng)的算法,完成程序的編寫,再分小組匯報,比較各種算法。匯報的過程是同學(xué)們比較的過程,同學(xué)們接觸不同的排序算法,各抒己見,并與先前自己編寫的程序進行對比,很快能發(fā)現(xiàn)可以根據(jù)不同的情況選擇不同的算法,如排序的量較大時,則應(yīng)采用快速排序,它是目前基于比較的內(nèi)部排序中被認(rèn)為是最好的方法。程序設(shè)計課程的教學(xué)重點是訓(xùn)練學(xué)生的思維,提高學(xué)生解決問題的能力。更重要的是,讓學(xué)生將算法解決的思路和方法,遷移到生活中類似問題的解決之中,有利于培養(yǎng)學(xué)生的發(fā)散性思維能力,還有利于訓(xùn)練學(xué)生思維的嚴(yán)謹(jǐn)性。
項目學(xué)習(xí)主要是由學(xué)生自主探究學(xué)習(xí)完成,在學(xué)習(xí)過程中,需要給其提供足夠的支持,使其能夠順利開展學(xué)習(xí)。
項目學(xué)習(xí)的重要目標(biāo)是要掌握相關(guān)知識與概念,但這些知識與概念只是作為工具在項目中使用,從外表難以看出知識體系,為了彌補這一缺位,教師需要將本項目涉及的知識進行歸納、總結(jié)。學(xué)生在前面的完成項目中已經(jīng)對所涉及的知識有了一定的感性認(rèn)識,再學(xué)習(xí)這些知識就水到渠成,容易很多。而且,通過這部分學(xué)習(xí),可以幫助他們形成編程知識體系,掌握學(xué)科的核心概念和原理。例如,教師可以把知識點與項目結(jié)合起來,與學(xué)生一起在完成項目的過程中,用思維導(dǎo)圖工具,繪制課程的知識圖譜,整體上把握知識體系。
由于編程項目對學(xué)生的抽象思維能力要求比較高,而且程序本身也有較高的要求,如程序中符號、縮進稍不注意就會出現(xiàn)南轅北轍的計算結(jié)果,因此,教師需要對程序中的重點語句、容易出現(xiàn)問題的語句進行講解,降低編程難度,讓學(xué)生盡快調(diào)試通過程序,讓其收獲成功的喜悅,保持學(xué)習(xí)編程序的興趣。同時,教師要創(chuàng)造條件、營造良好的互幫互助的氛圍,同伴之間的學(xué)習(xí)往往更容易釋疑解惑。
項目學(xué)習(xí)中,學(xué)習(xí)的主體是學(xué)生,不是教師,教師不用不停講解與演示。但學(xué)生畢竟是在學(xué)習(xí)全新的知識與技能,學(xué)生在自主探究過程中肯定會遇到各種各樣的問題,因此教師有必要針對學(xué)生會遇到的主要問題制作相應(yīng)的微課,供學(xué)生在遇到問題時自主學(xué)習(xí)。更為主要的是,自主學(xué)習(xí)不是自由學(xué)習(xí),這種學(xué)習(xí)是按教師預(yù)設(shè)的學(xué)習(xí)方案展開的,因此,教師要提供學(xué)生學(xué)習(xí)方案。項目完成時,教師需要組織學(xué)生對作品進行評價,因此要準(zhǔn)備評價量規(guī)和評價表。為了讓學(xué)生方便使用這些資源,最好能借助一定的教學(xué)平臺,將這些資源有組織地存放到教學(xué)平臺上[4]。
在項目學(xué)習(xí)后期,學(xué)生編寫出預(yù)定的程序之后,需要教師對其進行評價,總結(jié)項目學(xué)習(xí)過程的得失,同時讓學(xué)生交流分析問題、解決問題的方法。
讓學(xué)生將完成的項目在小組或全班進行展示,展示內(nèi)容包括:其編程思路及方案、算法、如何學(xué)習(xí)編程中用到的知識、程序的核心代碼、遇到的困難和問題,交流編程過程的感悟,組織學(xué)生自評和互評。教師對各小組進行過程性和總結(jié)性評價。項目學(xué)習(xí)評價不以成績檢測來評價學(xué)生,評價的重點不再是學(xué)到了什么知識,而是應(yīng)用知識解決真實問題的能力。需要指出的是,雖然項目學(xué)習(xí)最理想的情況是每個學(xué)生(或小組)都能夠提交出最優(yōu)化的程序,但是,如果學(xué)生的程序不是很成功,也不能說明項目學(xué)習(xí)沒有取得好的效果。如果學(xué)生在項目中確實學(xué)到了知識,掌握了技能,并且能夠知道程序不成功的原因以及改進辦法時,可以說他的學(xué)習(xí)是成功的,已經(jīng)達(dá)到了項目學(xué)習(xí)的目標(biāo)。
教學(xué)中,教師應(yīng)組織學(xué)生通過多種數(shù)字化平臺提交作品及相關(guān)文檔(設(shè)計思想、技術(shù)文檔、交流文稿等),開展項目成果的交流與評價,并選擇典型成果進行課堂展示和交流評價。
通過評價,同學(xué)和老師能提出一些建設(shè)性的意見,據(jù)此改進、完善程序。
項目總結(jié)的主要任務(wù)是讓學(xué)生總結(jié)項目學(xué)習(xí)中的成功與失敗之處,有助于學(xué)生下一個項目的學(xué)習(xí),并幫助教師提高項目學(xué)習(xí)實施的質(zhì)量。在評價的基礎(chǔ)上引導(dǎo)學(xué)生完善、改進程序,完成知識與能力的迭代,再通過總結(jié),盡可能將項目所學(xué)向外延伸,擴展所學(xué)的價值??偨Y(jié)典型算法,尤其是總結(jié)出常見錯誤,避免以后再犯類似錯誤。
項目總結(jié)的主體應(yīng)當(dāng)是學(xué)生,包含個人和小組。教師要鼓勵和引導(dǎo)學(xué)生從自我建構(gòu)知識、掌握技能、學(xué)習(xí)情況(包括學(xué)習(xí)態(tài)度、時間觀念、認(rèn)真程度)等方面對項目進行小結(jié)。項目小組也應(yīng)當(dāng)從項目任務(wù)執(zhí)行過程中的分工情況、協(xié)作能力、創(chuàng)新能力、項目完成情況等方面進行總結(jié)。
通過對項目活動總結(jié),對項目進行完善,同時對項目學(xué)習(xí)過程的得失進行總結(jié),為下一個項目學(xué)習(xí)奠定良好基礎(chǔ)。學(xué)生通過一系列目標(biāo)式學(xué)習(xí)活動后,一定要及時引導(dǎo)其對學(xué)習(xí)過程中的成功或失敗經(jīng)驗進行反思,使之能遷移應(yīng)用到與其相關(guān)的其他問題解決之中。
程序設(shè)計課程傳統(tǒng)教學(xué)過程是講授編程知識,根據(jù)范例上機訓(xùn)練,考查的是知識的記憶力。項目學(xué)習(xí)的過程是項目選題、項目分析、項目規(guī)劃、實施項目、項目支持、項目評價等,訓(xùn)練的是計算思維,培養(yǎng)的是創(chuàng)新精神和實踐能力。有趣的項目可以提高學(xué)生的學(xué)習(xí)積極性,靈活的項目可以培養(yǎng)學(xué)生自主學(xué)習(xí)的能力,綜合性的項目可以訓(xùn)練學(xué)生的計算思維,提高學(xué)生的核心素養(yǎng)[5],實用性的項目可以培養(yǎng)學(xué)生利用學(xué)習(xí)到的知識與技能解決實際問題的能力,從而達(dá)到預(yù)期的實踐教學(xué)效果。因此,項目學(xué)習(xí)非常適合在各類高校程序設(shè)計教學(xué)中推廣,讓學(xué)生真正成為學(xué)習(xí)的主體。當(dāng)然,要克服我們一直習(xí)慣的教學(xué)模式,前面的路任重道遠(yuǎn)。