[摘 要]程序設(shè)計是一門實踐性很強的課程,其強調(diào)技能和思維的訓(xùn)練。文章從程序設(shè)計課程在線實踐教學(xué)的問題出發(fā),針對如何訓(xùn)練編程技能、提升計算思維能力和做好在線實踐教學(xué)進(jìn)行了實例研討,列舉了五種引導(dǎo)方法,旨在使學(xué)生能按教學(xué)要求進(jìn)行程序設(shè)計實踐。
[關(guān)鍵詞]實踐教學(xué);程序設(shè)計;在線教育
[中圖分類號]G642;TP311 [文獻(xiàn)標(biāo)識碼]A [文章編號]1008-7656(2021)05-0034-06
引言
程序設(shè)計是計算機(jī)類專業(yè)的一門核心基礎(chǔ)課程,也是一門實踐性很強的課程。學(xué)習(xí)這門課程需要掌握復(fù)雜的語法規(guī)則,還需要能動手編寫程序解決問題。對于初學(xué)程序設(shè)計課程的學(xué)生,剛開始能讀懂例題程序,但動手寫程序卻感覺較難,需要課程教師手把手指導(dǎo)編寫程序。通過在線教育學(xué)習(xí)的學(xué)生,程序設(shè)計課程的整個教學(xué)環(huán)節(jié)全部在網(wǎng)絡(luò)上完成。怎樣有效引導(dǎo)在線教育的學(xué)生學(xué)習(xí)該課程,強化他們的動手編程技能,做好這門課程的實踐環(huán)節(jié),需要進(jìn)一步探討。
一、程序設(shè)計課程的在線教學(xué)現(xiàn)狀
程序設(shè)計課程是一門比較難學(xué)的課程,因此,很多高校對這門課程的教學(xué)模式、方法等方面作了很多研究,提出各種教學(xué)改革措施。
(一)程序設(shè)計課程的在線實踐教學(xué)現(xiàn)狀
大部分開設(shè)有程序設(shè)計課程的普通高校,都使用了在線評測系統(tǒng)作為學(xué)生實訓(xùn)編程作業(yè)與考試提交的平臺。在線作業(yè)與考試評測系統(tǒng),即在線評測(online judge,OJ)系統(tǒng),該系統(tǒng)最早是應(yīng)用于ACM國際大學(xué)生程序設(shè)計競賽,隨著多年的發(fā)展和應(yīng)用,很多高校也搭建起自己的OJ系統(tǒng),用于開展程序設(shè)計類課程實踐教學(xué),例如浙江大學(xué)的ZOJ、北京大學(xué)的POJ、杭州電子科技大學(xué)的HDUOJ等,這些高校的評測系統(tǒng)很好地應(yīng)用在程序設(shè)計課程的教學(xué)中[1]。其中,使用率較高的是北京大學(xué)的在線評測系統(tǒng),實訓(xùn)編程練習(xí)的題庫也較多。由此可見,程序設(shè)計課程使用在線評測系統(tǒng)作為實踐教學(xué)輔助系統(tǒng),有利于訓(xùn)練學(xué)生的編程技能,也為教師省去了許多批改程序作業(yè)的工作,提高了教學(xué)效率,也便于教師開展實踐教學(xué)。
在成人高等院校中,對于程序設(shè)計課程,由于成人學(xué)生是利用業(yè)余時間學(xué)習(xí),存在學(xué)習(xí)時間相對較短、督促不足等情況[2],很多成人學(xué)校對該課程的考核側(cè)重于理論方面,采用傳統(tǒng)的選擇、填空、閱讀程序問答題等考核方式,實踐編程方面的訓(xùn)練不足。
(二)程序設(shè)計課程的在線實踐教學(xué)指導(dǎo)主要采用的方式
隨著在線教育的發(fā)展,程序設(shè)計課程也在線上開展實踐教學(xué),主要的教學(xué)指導(dǎo)方式有使用遠(yuǎn)程視頻課堂介紹課程中的具體實踐、實踐輔助教學(xué)平臺、用互動交流平臺指導(dǎo)、實訓(xùn)過程自動提示與評判等。實踐輔助教學(xué)平臺主要是提供給學(xué)生編程實訓(xùn)作業(yè)提交與編程實踐操作考試的平臺,目前大多還是使用在線評測系統(tǒng)(OJ)。實踐互動交流平臺主要是使用QQ群、QQ遠(yuǎn)程協(xié)助、遠(yuǎn)程操控、TeamViewer、向日葵等遠(yuǎn)程工具,以及釘釘、微信群等各種社會性交互工具作為在線互動交流平臺[3]。而使用專門在線教學(xué)平臺的院校,一般相應(yīng)的平臺提供有交流互動的論壇,教師與學(xué)生可以在論壇交流,例如,MOOCs教學(xué)交互主要發(fā)生在MOOC論壇中[4]。實訓(xùn)過程自動提示與評判,是程序設(shè)計過程中使用單元測試模塊測試學(xué)生的程序,給予錯誤信息和啟示性提示,從而讓學(xué)生獲得即時反饋和成績[5]。
二、在線程序設(shè)計課程實踐教學(xué)存在的問題
(一)在線教育學(xué)生的知識水平各異
參加在線教育學(xué)習(xí)的學(xué)生,知識水平各異,他們的自學(xué)能力相差也較大,而且成人教育學(xué)生存在工學(xué)矛盾的緣故,可以用于自主學(xué)習(xí)的時間較少,因此,完全參照普通高校的教學(xué)方法不太適用。
(二)部分在線程序設(shè)計課程的實踐訓(xùn)練效果需要提升
對于初學(xué)程序設(shè)計的學(xué)生,面對各種復(fù)雜的語法,如何獨立編程解決問題,是一件較困難的事,需要教師在旁邊引導(dǎo),手把手教學(xué)生操作,提示學(xué)生如何入手寫程序,并及時糾正學(xué)生寫程序出現(xiàn)的各種錯誤操作。而對于沒有教師在旁邊指導(dǎo)的在線教育學(xué)生,很難把程序設(shè)計課程學(xué)好,這也是很多在線教育開展實踐性較強的課程效果不理想的主要原因之一。
使用OJ系統(tǒng)作為程序設(shè)計實踐教學(xué)平臺,對于實施面授課程開展程序設(shè)計教學(xué)的學(xué)生,提供了較好的編程訓(xùn)練平臺。而對于通過遠(yuǎn)程在線教育授課的學(xué)生,這種僅僅在在線評測系統(tǒng)上提供實訓(xùn)題目、提交程序、反饋程序結(jié)果對錯,而沒有教師在旁邊實時指導(dǎo)的學(xué)習(xí)模式,學(xué)生在做編程實訓(xùn)時,會出現(xiàn)寫程序作業(yè)題無從下手的情況,或是沒有嚴(yán)格遵循在線課堂教師講的編程思路和操作方法設(shè)計、編寫與調(diào)試程序。動手編寫程序的技能原本就不容易掌握,導(dǎo)致在線教育學(xué)生學(xué)習(xí)程序設(shè)計課程的效果不太理想,實際動手設(shè)計、調(diào)試程序的能力需要加強。
(三)有效在線輔導(dǎo)的人力和時間成本偏高
前文提到的使用單元測試實現(xiàn)自動提示和自動評判的方法應(yīng)用于程序設(shè)計過程中[5],提示指導(dǎo)側(cè)重于檢測、判定學(xué)生設(shè)計程序作業(yè)的結(jié)果,給予學(xué)生程序作業(yè)打分以及錯誤提示信息,對學(xué)生的編程過程提供了有效的幫助。但教師需要花費較多的時間在編程的準(zhǔn)備工作中,實現(xiàn)方法不夠便捷;另一方面,出現(xiàn)學(xué)生看到編程實訓(xùn)作業(yè)無從下手或者未按照編寫規(guī)則書寫程序的情況。
在線互動答疑,是為在線教育學(xué)生提供輔導(dǎo)的平臺,學(xué)生遇到問題可以通過答疑平臺提問。而作為初學(xué)者,當(dāng)不知道如何入手時,提出的問題大多是“這題怎么做?”“我不會做,怎么辦?”等,表現(xiàn)出沒有思路。這時在答疑平臺的指導(dǎo)教師,需要大量時間對學(xué)生一對一回復(fù),引導(dǎo)學(xué)生一步一步地做實踐題目。如果簡單地發(fā)給學(xué)生正確的實踐程序題答案,就達(dá)不到訓(xùn)練學(xué)生編程技能的效果。這樣的在線答疑、輔導(dǎo)方式需要耗費大量的人力和時間,但實際較難真正指導(dǎo)到位。如何彌補在線教育缺少指導(dǎo)教師做實踐提示和引導(dǎo)的不足,讓自學(xué)程序設(shè)計的初學(xué)者更容易掌握用程序解決問題的技能,找到一種便捷、有效的引導(dǎo)方法,是一個值得探討的問題。
三、基于技能和思維訓(xùn)練的實踐教學(xué)方法探討
(一)編程技能和思維訓(xùn)練的重要性與方法
周以真教授認(rèn)為,計算思維是運用計算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行問題求解、系統(tǒng)設(shè)計、以及人類行為理解等涵蓋計算機(jī)科學(xué)之廣度的一系列思維活動[6]。程序設(shè)計課程是計算思維教學(xué)的重點,尤其程序設(shè)計算法是解決問題的方法,是計算思維的內(nèi)容[7]。而這解決問題的方法需要通過一系列的強化訓(xùn)練才可以培養(yǎng)出來。計算思維的核心是抽象,而程序設(shè)計是從總體設(shè)計到細(xì)化實現(xiàn)的過程,是從抽象描述到具體實現(xiàn)的過程。程序設(shè)計方法中強調(diào)的逐步求精技術(shù),更是設(shè)計過程的抽象表現(xiàn)。程序設(shè)計實踐教學(xué)的目標(biāo)就是要學(xué)生學(xué)會抽象的設(shè)計方法,并用抽象思想指導(dǎo)實踐操作過程的每一步。抽象教育的另一個內(nèi)容是要強化學(xué)生的歸納、抽象能力。
在線教育課程通常是一位教師面對眾多學(xué)生的教學(xué)模式,實踐教學(xué)過程,教師較難通過網(wǎng)絡(luò)長時間遠(yuǎn)程實時指導(dǎo)多個學(xué)生,很多時候就是學(xué)生自己獨立思考及動手實踐。為了讓學(xué)生在做程序?qū)嵱?xùn)習(xí)題時,可以像面授課堂的實訓(xùn)操作一樣,在有引導(dǎo)的狀態(tài)下做編程實訓(xùn),需要在設(shè)計實訓(xùn)題目時,在題目中給學(xué)生一些提示的信息,引導(dǎo)和啟發(fā)學(xué)生分析問題、設(shè)計程序的框架,讓學(xué)生遵循在線課堂教師講的編程思路,強化訓(xùn)練學(xué)生的編程技能,訓(xùn)練他們自覺地用計算思維指導(dǎo)程序設(shè)計實踐。
學(xué)生的技能學(xué)習(xí)是一個循序漸進(jìn)的過程,在設(shè)計實踐編程題目時,要根據(jù)課程針對不同的知識點,從入門到提升階段分別設(shè)計不同層次的實踐編程題目,讓學(xué)生從入門開始,循序漸進(jìn)地做題訓(xùn)練、提升編程技能。
(二)實踐編程題目設(shè)計案例
設(shè)計編寫程序是一個逐步擴(kuò)展程序、逐步填空的過程[8]。在設(shè)計實踐編程題目時,要按照這個思路設(shè)計提示,引導(dǎo)學(xué)生遵循計算思維,用逐步求精的程序設(shè)計方法解答題目。
1. 強化訓(xùn)練用計算思維解決問題
“a+b問題”是入門級的實訓(xùn)編程題目,對初學(xué)程序設(shè)計的學(xué)生,關(guān)鍵要讓他們遵循“自頂向下、逐步求精”的設(shè)計方法,圖1所示的提示在于引導(dǎo)學(xué)生寫程序時,采用逐步擴(kuò)展的方式設(shè)計程序。引導(dǎo)學(xué)生編寫程序遵循“保證書寫程序的每一步編譯是正確的”[8]的操作方法。
2. 訓(xùn)練程序語句的編寫規(guī)則
在程序設(shè)計課程中,讓學(xué)生養(yǎng)成良好的編寫程序習(xí)慣尤其重要,在程序擴(kuò)展過程中間的每一步,保證程序都能正確通過編譯,而且可測試運行,那樣可以避免少出錯。下頁圖2通過引導(dǎo)方式強化if條件復(fù)合語句框架的編寫規(guī)則、操作過程,讓學(xué)生在實踐訓(xùn)練中用這樣逐步填空的方式設(shè)計程序,減少編譯錯誤。引導(dǎo)學(xué)生在長期的實踐訓(xùn)練中掌握逐步求精的程序設(shè)計方法和操作方法。
3. 引導(dǎo)學(xué)生使用通用框架解決新問題
程序設(shè)計課程的語法規(guī)則繁多,課堂講授的某些新知識時會出現(xiàn)一次呈現(xiàn)太多程序語法規(guī)則的情況,學(xué)生難以全部記住,以致于在聽課時似乎明白了,但由于語法規(guī)則多,到實踐編寫程序時,卻不知從何入手編寫程序,未能做到靈活應(yīng)用課程學(xué)習(xí)的新知識,沒有真正掌握相應(yīng)新知識的使用。為了讓學(xué)生更容易掌握新知識,圖3是在設(shè)計實踐編程題目時,給予的提示讓學(xué)生回想起課堂講授的順序掃描字符串的方法,引導(dǎo)學(xué)生學(xué)會寫程序讀取字符串的單個字符。通過解決圖3“單詞變換”題目的問題,讓學(xué)生用已學(xué)知識的通用框架解決新問題,從而強化學(xué)生設(shè)計循環(huán)控制語句的能力,引導(dǎo)學(xué)生學(xué)會用循環(huán)編寫程序讀取字符串中各個字符的方法。
4. 從解決具體問題中訓(xùn)練歸納、抽象的能力
程序設(shè)計除了有正確的思想方法,要實現(xiàn)設(shè)計,還需要學(xué)習(xí)了解編程語言知識細(xì)節(jié)[8]。在用程序解決問題時,經(jīng)歷從具體問題中歸納、再抽象的過程。圖4的“計算存款收益”題目引導(dǎo)學(xué)生從解決本金為1000元計算一年、二年、三年后的本息總額的具體問題入手,再歸納、抽象化到計算本金為M元n年的通用問題,讓學(xué)生遵循、體會這樣的認(rèn)知過程,更好地培養(yǎng)學(xué)生計算思維的能力。
5. 引導(dǎo)學(xué)生學(xué)習(xí)設(shè)計函數(shù),訓(xùn)練分解問題的能力
學(xué)好程序設(shè)計,就需要學(xué)習(xí)解決問題的方法。解決問題是一個逐步細(xì)化的過程。在設(shè)計程序時,采用的自頂向下逐步求精的方法,就是把復(fù)雜的問題分成多個獨立的小問題, 逐步細(xì)化,直到小的問題可以較好地解決為止。在這樣設(shè)計過程中,把復(fù)雜問題分解,在程序?qū)崿F(xiàn)中,就是分解成獨立的模塊,進(jìn)行模塊化設(shè)計。用函數(shù)式編程可以較好地實現(xiàn)模塊化設(shè)計程序。因此,學(xué)會用函數(shù)設(shè)計與編寫程序,是學(xué)習(xí)程序設(shè)計課程的重要功課。而對于初學(xué)者,不習(xí)慣運用函數(shù)設(shè)計方法,如下頁圖5中的習(xí)題,目的就是引導(dǎo)學(xué)生正確設(shè)計函數(shù),習(xí)慣于用函數(shù)實現(xiàn)逐步求精設(shè)計過程。
四、結(jié)語
經(jīng)過近幾年的實踐教學(xué),使用文中的這種方法設(shè)計在線評測系統(tǒng)的編程實踐題目,比單純提供問題描述的題目,學(xué)生更容易獨立動手編程,同時也能讓學(xué)生養(yǎng)成用正確的思維和操作方法指導(dǎo)編程實踐的良好習(xí)慣,較好地訓(xùn)練及提高學(xué)生的程序設(shè)計實踐技能。對于在線程序設(shè)計課程的教育,可節(jié)省在線答疑、指導(dǎo)的成本,對培養(yǎng)學(xué)生程序設(shè)計技能也是一種有效的方法。
[參考文獻(xiàn)]
[1]苗桂君,劉勇,許南山,等.在線評測系統(tǒng)在程序設(shè)計類教學(xué)中的應(yīng)用研究[J].計算機(jī)教育,2016(9):157-162.
[2]張偉龍,孟玉琴.ACM在線評測系統(tǒng)在成人高等教育程序設(shè)計類課程中的應(yīng)用初探[J].中國新技術(shù)新產(chǎn)品,2010(6):45.
[3]孟凡樓,高永存.計算機(jī)工程類課程在線教學(xué)研究與實踐[J].教育教學(xué)論壇,2020(44):243-244.
[4]孫洪濤,鄭勤華,陳麗.中國MOOCs教學(xué)交互狀況調(diào)查研究[J].開放教育研究,2016(1):72-79.
[5]張治國.在程序設(shè)計學(xué)習(xí)過程中使用單元測試實現(xiàn)自動提示和自動評判[A]. Science and Engineering Research Center.Proceedings of 2021 International Conference on Modern Education and Humanities Science (ICMEHS2021)[C].Science and Engineering Research Center:Science and Engineering Research Center,2021:4.
[6]Jeannette M. Wing. Computational thinking[J]. Communications of the ACM, 2006, 49(3) : 33-35.
[7]龔沛曾,楊志強.大學(xué)計算機(jī)基礎(chǔ)教學(xué)中的計算思維培養(yǎng)[J].中國大學(xué)教學(xué),2012(5):51-54.
[8]趙馮平,張翠蓮,黃鐳.基于知識與能力導(dǎo)引的程序設(shè)計課程作業(yè)在線評測系統(tǒng)[J].廣西廣播電視大學(xué)學(xué)報,2020(2):19-23.
[作者簡介]張翠蓮,廣西開放大學(xué)工程師,碩士,研究方向:計算機(jī)課程教學(xué)。
[責(zé)任編輯 韋書令]