




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