關(guān)鍵詞:Java編程;實(shí)時(shí)反饋;課堂點(diǎn)擊器;求解和評(píng)估
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2024)28-0133-04
0 引言
Java程序設(shè)計(jì)是各高校普遍開設(shè)的課程,但在目前的教學(xué)中存在很多問(wèn)題。教學(xué)內(nèi)容不能與時(shí)俱進(jìn),教學(xué)方法單一,導(dǎo)致學(xué)生學(xué)習(xí)興趣低下,不能完全掌握編程思想和技能[1];程序設(shè)計(jì)應(yīng)該訓(xùn)練學(xué)生的計(jì)算思維和創(chuàng)新思維能力,但目前大多數(shù)Java編程課程專注于具體的語(yǔ)法結(jié)構(gòu),忽視了學(xué)生解決復(fù)雜問(wèn)題的思維能力[2];課時(shí)分配不合理,考核方式簡(jiǎn)單粗暴,學(xué)生的反饋不夠[3];很多研究提出了線上線下的混合教學(xué)模式,線上課程優(yōu)勢(shì)明顯,資源豐富,學(xué)習(xí)時(shí)間靈活,可以反復(fù)學(xué)習(xí)[4];文獻(xiàn)[5]提出了小班教學(xué)模式,可以更好地關(guān)注每個(gè)學(xué)生,更多地進(jìn)行課堂互動(dòng)。計(jì)算思維和創(chuàng)新思維能力的訓(xùn)練需要長(zhǎng)期的訓(xùn)練,除了學(xué)生課外自主學(xué)習(xí)外,課堂的引導(dǎo)對(duì)初學(xué)者非常重要,能夠大大降低學(xué)生入門的難度,減少學(xué)生時(shí)間的浪費(fèi)。其中,Java各個(gè)知識(shí)點(diǎn)的理解對(duì)思維訓(xùn)練起著重要的作用。但是Java的知識(shí)點(diǎn)繁多,如果學(xué)生在課堂中不能及時(shí)理解,課后往往失去了繼續(xù)學(xué)習(xí)的興趣。因此如果能在課堂上及時(shí)得到學(xué)生的反饋,教師就能掌握學(xué)生學(xué)習(xí)動(dòng)態(tài),針對(duì)相應(yīng)問(wèn)題進(jìn)行進(jìn)一步的講解。本文介紹基于Java開發(fā)的課堂點(diǎn)擊器系統(tǒng),允許學(xué)生課堂中實(shí)時(shí)對(duì)提出的問(wèn)題進(jìn)行反饋,教師可以快速了解學(xué)生的理解水平,同時(shí)提出一種與之對(duì)應(yīng)的新的教學(xué)方法:求解和評(píng)估教學(xué)方法。
1 課堂點(diǎn)擊器系統(tǒng)簡(jiǎn)介
課堂點(diǎn)擊器是一個(gè)用于組響應(yīng)系統(tǒng)的可擴(kuò)展框架。這樣的系統(tǒng)可以快速收集課堂上所有學(xué)生的反饋。這種系統(tǒng)的常見使用是在上課期間,教師用投影儀投影一個(gè)選擇題,學(xué)生可以使用點(diǎn)擊器,通過(guò)按下點(diǎn)擊器上的一個(gè)按鈕來(lái)提交答案。教師可以立即看到以直方圖形式匯總的回答,并可以進(jìn)一步講解直到學(xué)生理解該問(wèn)題。點(diǎn)擊器系統(tǒng)通過(guò)兩個(gè)Java RMI進(jìn)行教師和學(xué)生之間的通信。教師控制課程,并通過(guò)投影儀呈現(xiàn)可視化效果。學(xué)生解決問(wèn)題并給出評(píng)估。系統(tǒng)采用Java語(yǔ)言編寫,可以在任何支持Java的設(shè)備上運(yùn)行,如手機(jī)等。系統(tǒng)背后的主要思想是基于軟件的點(diǎn)擊器能夠支持比傳統(tǒng)硬件點(diǎn)擊器更豐富的交互。在該點(diǎn)擊器中,可以靈活擴(kuò)展問(wèn)題的類型,多項(xiàng)選擇題只是一種可擴(kuò)展的問(wèn)題類型。例如,點(diǎn)擊器提供了一個(gè)插件,支持所謂的文本突出顯示問(wèn)題,向?qū)W生提供一個(gè)問(wèn)題和一段文本,然后必須突出顯示文本中的所有相關(guān)部分。這類問(wèn)題比多選題更豐富,因?yàn)閷W(xué)生必須自己構(gòu)建解決方案,而不是從教師預(yù)先確定的一組解決方案中挑選。多選問(wèn)題的優(yōu)點(diǎn)是它們的解決方案可以很容易地匯總在直方圖中。更復(fù)雜的問(wèn)題需要不同形式的聚合和可視化。點(diǎn)擊器系統(tǒng)向教師提供所有個(gè)人解決方案的列表。為了擴(kuò)展到更多的學(xué)生,針對(duì)新問(wèn)題類型的插件可以提供解決方案的聚合。
2 編程技能學(xué)習(xí)
用Java語(yǔ)言編程意味著要學(xué)習(xí)許多相互關(guān)聯(lián)的技能。文章描述了四種這樣的技能,并展示了如何擴(kuò)展點(diǎn)擊器系統(tǒng)以增加對(duì)教學(xué)的支持。教師可以根據(jù)自己課堂上的需求選擇其中的技能。學(xué)習(xí)編程的學(xué)生還需要掌握許多其他技能,點(diǎn)擊器系統(tǒng)允許在未來(lái)增加對(duì)這些技能的支持。四種技能如下。
2.1 語(yǔ)法
語(yǔ)法結(jié)構(gòu)及其名稱是較為抽象的,這也是編程語(yǔ)言的一項(xiàng)基本組成。談?wù)撜Z(yǔ)法結(jié)構(gòu)、命名概念并識(shí)別它們的能力是學(xué)生看到的編程內(nèi)容之一,也是磨煉學(xué)生抽象技能的第一步。點(diǎn)擊器系統(tǒng)中已經(jīng)提供了文本突出顯示問(wèn)題類型,它為檢查學(xué)生對(duì)語(yǔ)言語(yǔ)法的理解提供了一種直接的方法。圖1(a) 顯示了一個(gè)文本突出顯示問(wèn)題,其中文本對(duì)應(yīng)一段Java源代碼,該問(wèn)題對(duì)應(yīng)突出顯示特定語(yǔ)法結(jié)構(gòu)的請(qǐng)求。例如,教師可以要求學(xué)生突出顯示所有注釋、所有字符串文字、所有方法體、條件語(yǔ)句中的所有條件或與方法調(diào)用相對(duì)應(yīng)的點(diǎn)。這些問(wèn)題不一定局限于語(yǔ)言語(yǔ)法,還包括對(duì)字段的所有讀取訪問(wèn)、最終變量的所有使用或所有接口方法調(diào)用的高亮顯示。
2.2 類型
類型是像Java 這樣的語(yǔ)言不可分割的一部分。Java程序員的一項(xiàng)重要技能是能夠推斷任意表達(dá)式的類型。點(diǎn)擊器系統(tǒng)開發(fā)了這樣的功能,允許學(xué)生練習(xí)和測(cè)試該技能。圖1(b) 顯示了這樣一個(gè)類型問(wèn)題。教師編寫Java代碼片段,并突出顯示一個(gè)表達(dá)式。然后,學(xué)生需要決定突出顯示的表達(dá)是否合法,如果合法,則需要確定其類型。
2.3 控制流
對(duì)于剛開始編程的人來(lái)說(shuō),挑戰(zhàn)之一是理解控制流。在基于結(jié)構(gòu)化編程原理的語(yǔ)言中,學(xué)生需要理解順序、選擇和循環(huán)的基本概念。Java語(yǔ)言為選擇提供if 和switch語(yǔ)句,為循環(huán)提供for、while和do-while循環(huán)。解釋一個(gè)概念的一個(gè)有用的方法是使用多種表示法。以控制結(jié)構(gòu)為例,可以使用兩種這樣的表示:控制結(jié)構(gòu)的源代碼以及控制流程圖。為了評(píng)估學(xué)生是否理解特定的控制結(jié)構(gòu),要求他們將包含該結(jié)構(gòu)的源代碼翻譯成控制流程圖。圖1(c) 顯示了在學(xué)生的點(diǎn)擊器上呈現(xiàn)這樣的問(wèn)題。將Java源代碼與控制流圖并排顯示。最初,圖形是不完整的(它只包含入口和出口節(jié)點(diǎn))。學(xué)生必須通過(guò)添加必要的節(jié)點(diǎn)和邊來(lái)完成圖形。
2.4 編碼
前三項(xiàng)技能,即理解語(yǔ)言的語(yǔ)法、類型和控制結(jié)構(gòu),是編程所必需的基本組成部分。然而,編程教學(xué)的最終目標(biāo)是使學(xué)生能夠?qū)⑿枨筠D(zhuǎn)換成實(shí)現(xiàn)代碼。評(píng)估這些技能的直接方法是要求學(xué)生實(shí)際完成這項(xiàng)任務(wù)。圖1(d) 顯示教師編寫要求并提供代碼的框架。學(xué)生通過(guò)完成代碼來(lái)解決問(wèn)題。
3 求解和評(píng)估教學(xué)方法
課堂中,教師可以提出問(wèn)題,每個(gè)問(wèn)題由三個(gè)階段組成:求解(solve) 、討論(discuss) 和展示(reveal) 。在求解階段,學(xué)生單獨(dú)在點(diǎn)擊器上解決問(wèn)題,并提交他們的解決方案。在討論階段,教師展示提交的解決方案的總體可視化,并主導(dǎo)對(duì)問(wèn)題和不同解決方案的討論。在展示階段,教師最終展示正確的解決方案(或其中一個(gè)正確的解決方法)。
這種方法的關(guān)鍵問(wèn)題是學(xué)生解決問(wèn)題所花費(fèi)的時(shí)間不均衡。雖然有些學(xué)生通常在一分鐘內(nèi)完成,但其他學(xué)生則需要更長(zhǎng)的時(shí)間。由于速度快的學(xué)生不得不等待速度慢的學(xué)生,他們將注意力從課程主題轉(zhuǎn)移到了無(wú)關(guān)的活動(dòng)上。為了有效地利用學(xué)生的等待時(shí)間,在求解階段之后添加了一個(gè)新階段:評(píng)估(evalu?ate) 。提交問(wèn)題后,學(xué)生會(huì)收到另一個(gè)學(xué)生提交的解決方案,需要評(píng)估該解決方案并提交評(píng)估。在評(píng)估階段,學(xué)生可以持續(xù)評(píng)估其他學(xué)生的解決方案,直到教師進(jìn)入討論階段。三階段示意圖如圖2所示。
請(qǐng)注意,評(píng)估階段的目標(biāo)根本不是讓教師評(píng)估學(xué)生的解決方案。對(duì)于許多問(wèn)題,點(diǎn)擊器系統(tǒng)可以自動(dòng)評(píng)估解決方案的正確性(例如,將其與正確解決方案進(jìn)行比較,或者自動(dòng)檢查某些屬性,例如提交的Java 代碼是否編譯)。讓學(xué)生評(píng)估其他學(xué)生的解決方案,除了讓他們?cè)诘却俣容^慢的學(xué)生時(shí)保持專注之外,目的是讓他們從其他人常犯的各種錯(cuò)誤中吸取教訓(xùn),以加強(qiáng)他們對(duì)問(wèn)題的理解。
當(dāng)學(xué)生創(chuàng)建并提交評(píng)估時(shí),他們實(shí)際上并沒(méi)有收到任何對(duì)自己解決方案的評(píng)估。他們也不會(huì)收到關(guān)于他們的解決方案是否正確的直接信息。這樣做的目的是在討論階段引發(fā)課堂范圍內(nèi)對(duì)錯(cuò)誤和正確方法的討論。假如學(xué)生收到了對(duì)自己解決方案的評(píng)估和更正,他們會(huì)研究這些評(píng)估,而不是參與課堂討論。
4 案例研究
這里通過(guò)課堂案例討論了第二節(jié)中編程技能的四個(gè)問(wèn)題,并分析了學(xué)生在解決和評(píng)估階段的行為。案例中,學(xué)生以匿名模式使用該系統(tǒng)。匿名模式下,系統(tǒng)為每個(gè)學(xué)生分配一個(gè)數(shù)字標(biāo)識(shí)符,該標(biāo)識(shí)符和學(xué)生的對(duì)應(yīng)關(guān)系不公開。雖然系統(tǒng)也支持學(xué)生實(shí)名的模式,但研究發(fā)現(xiàn)匿名模式可以鼓勵(lì)學(xué)生參與。他們更愿意提交可能不正確的解決方案,而且他們不會(huì)試圖通過(guò)看其他人的解決方案來(lái)作弊。這種方式更能反映數(shù)據(jù)的真實(shí)性。此外,一旦學(xué)生發(fā)現(xiàn)其他人也會(huì)犯錯(cuò),他們參與課堂討論的意愿就會(huì)顯著提高。
4.1 語(yǔ)法
圖3顯示了一個(gè)語(yǔ)法問(wèn)題,用來(lái)檢查學(xué)生是否理解變量的聲明和使用之間的差異,以及實(shí)例變量、局部變量和參數(shù)之間的差異。圖4顯示了16個(gè)學(xué)生求解和評(píng)估的時(shí)間線。x 軸表示時(shí)間(0~4分鐘)。y 軸對(duì)應(yīng)每個(gè)學(xué)生解決問(wèn)題的時(shí)間間隔。
圖4顯示,提出的求解和評(píng)估教學(xué)方法是成功的,因?yàn)閷W(xué)生們確實(shí)花了大部分等待時(shí)間來(lái)評(píng)估其他人的解決方案。
4.2 類型
圖5顯示了一個(gè)類型問(wèn)題,用來(lái)檢查學(xué)生對(duì)多維數(shù)組的理解。圖6中的時(shí)間線顯示了21名參與學(xué)生的進(jìn)度。當(dāng)教師在大約3.5分鐘后進(jìn)入討論階段時(shí),一些學(xué)生甚至7分鐘后仍然在評(píng)估。雖然大多數(shù)學(xué)生提交了預(yù)期答案(int[]) ,但相當(dāng)一部分學(xué)生發(fā)現(xiàn)這個(gè)表達(dá)式是不合法的。通過(guò)討論,學(xué)生們發(fā)現(xiàn)了問(wèn)題中的一個(gè)錯(cuò)誤:在Java中,有些表達(dá)式不能構(gòu)成表達(dá)式語(yǔ)句(只允許賦值表達(dá)式、遞增/遞減表達(dá)式、方法調(diào)用和對(duì)象實(shí)例化)。這表明了評(píng)估和討論階段可以更深入地理解問(wèn)題,并能擴(kuò)展到其他問(wèn)題上。
4.3 編碼
圖7顯示了一個(gè)求和問(wèn)題,測(cè)試對(duì)數(shù)組、嵌套循環(huán)和局部變量的理解程度。圖8顯示,前幾行在5到6分鐘出現(xiàn)了一分鐘的間隔。造成此間隔的原因是在此時(shí)間間隔內(nèi)沒(méi)有人提交新的解決方案。因此,已經(jīng)評(píng)估了之前提交的所有解決方案的學(xué)生不得不等待。這一問(wèn)題有待后續(xù)改進(jìn)。很多學(xué)生在解決方案中使用了for each循環(huán),在隨后的討論中自然過(guò)渡到了對(duì)for each循環(huán)的討論中。實(shí)踐證明這種討論能加大各知識(shí)點(diǎn)之間的相互銜接。
4.4 控制流程
圖9顯示了一個(gè)控制流問(wèn)題,測(cè)試了對(duì)嵌套for循環(huán)的理解。圖10顯示了19名參與學(xué)生的解決和評(píng)估階段的時(shí)間表。可以看到,速度最快的學(xué)生在大約4.5分鐘后提交了一個(gè)解決方案,而速度最慢的學(xué)生需要16分鐘以上。結(jié)果顯示第一個(gè)提交的解決方案在許多方面都是錯(cuò)誤的,說(shuō)明最快的學(xué)生不一定總是最好的學(xué)生,提交的文件也顯示出學(xué)生缺乏根本的理解:循環(huán)的邏輯錯(cuò)誤。看到這個(gè)解決方案,教師可以立即提出在課堂上討論和澄清的要點(diǎn),即保證循環(huán)中的邏輯正確性。
5 應(yīng)用效果分析
在實(shí)際應(yīng)用中對(duì)學(xué)生在課堂中的表現(xiàn)、學(xué)生的使用效率以及所犯的錯(cuò)誤進(jìn)行了統(tǒng)計(jì)和分析。分析的目的有兩個(gè):1) 希望提供關(guān)于如何在課堂上更有效地使用課堂點(diǎn)擊器的信息。2) 希望報(bào)告對(duì)學(xué)習(xí)早期階段(在課堂中,而不是在隨后的考試中)的觀察結(jié)果。通過(guò)記錄所有問(wèn)題、解決方案、學(xué)生評(píng)估、解決問(wèn)題過(guò)程中的一些細(xì)節(jié)數(shù)據(jù),可以得出如下結(jié)論:
(1) 解決不同問(wèn)題所需時(shí)間不同。并非每個(gè)問(wèn)題都需要相同的時(shí)間。根據(jù)統(tǒng)計(jì)數(shù)據(jù)表明,類型問(wèn)題所需時(shí)間最短,而控制流問(wèn)題花費(fèi)的時(shí)間最多。這個(gè)看起來(lái)是正常的,因?yàn)橥茢啾磉_(dá)式的類型通常比繪制控制流圖簡(jiǎn)單得多。另外,不同的編碼問(wèn)題之間所花費(fèi)的時(shí)間相差也很大,這反映出哪些編碼問(wèn)題較為復(fù)雜。
(2) 學(xué)生在不同問(wèn)題上的解決能力不同。每個(gè)問(wèn)題都需要學(xué)生給出解決方案,通過(guò)對(duì)這些解決方案正確性的評(píng)估,反映出在循環(huán)控制流上的得分較低,其次是選擇控制流??梢愿鶕?jù)這個(gè)結(jié)果增加相關(guān)問(wèn)題的數(shù)量和難度。
(3) 解決方案的質(zhì)量和所花的時(shí)間不一定正相關(guān)。對(duì)有些問(wèn)題,解決質(zhì)量與學(xué)生解決問(wèn)題的時(shí)間呈負(fù)相關(guān)。這表明學(xué)生解決問(wèn)題的時(shí)間越長(zhǎng),解決方案的預(yù)期質(zhì)量就越低。因此,很難根據(jù)學(xué)生解決問(wèn)題所花費(fèi)的時(shí)間來(lái)預(yù)測(cè)解決方案的質(zhì)量。分析其原因,主要是因?yàn)閷?duì)相關(guān)知識(shí)點(diǎn)的理解出現(xiàn)偏差,導(dǎo)致對(duì)問(wèn)題的分析出現(xiàn)了偏差。
(4) 學(xué)生相互之間的評(píng)估極大地提高了學(xué)生對(duì)問(wèn)題的理解。如果學(xué)生自己的解決方案是正確的,他對(duì)其他學(xué)生的評(píng)估絕大部分都是對(duì)的;相反,如果自己的方案錯(cuò)誤,則有近一半的學(xué)生對(duì)其他學(xué)生的評(píng)估是對(duì)的。這說(shuō)明這些學(xué)生通過(guò)對(duì)其他學(xué)生的評(píng)估來(lái)反思自己的方案,從而找到自己方案的錯(cuò)誤。因此,實(shí)際中應(yīng)該更多地讓學(xué)生相互評(píng)估。
(5) 實(shí)時(shí)發(fā)現(xiàn)學(xué)生的錯(cuò)誤。這些錯(cuò)誤包括:混淆關(guān)鍵字、注釋使用錯(cuò)誤、缺少語(yǔ)句結(jié)束符、變量賦值錯(cuò)誤、變量作用域超范圍等。
使用中對(duì)教師和學(xué)生的感受也做了調(diào)查問(wèn)卷。教師的觀點(diǎn)如下:1) 確定發(fā)布的問(wèn)題。與任何教學(xué)活動(dòng)一樣,使用該系統(tǒng)前需要大量的準(zhǔn)備工作。教師必須選擇或創(chuàng)建要使用的問(wèn)題。問(wèn)題的選擇應(yīng)該非常慎重,不能太難或太易,一個(gè)具體問(wèn)題的目標(biāo)應(yīng)該是解除學(xué)生的疑惑,引發(fā)討論,從而理解知識(shí)點(diǎn)。2) 確定發(fā)布問(wèn)題的數(shù)量。問(wèn)題太多,使得問(wèn)題的解決和討論時(shí)間不夠充分。最有用的方法是只使用少量的問(wèn)題,大約兩到三個(gè),并將每個(gè)問(wèn)題的復(fù)雜性降至最低。與傳統(tǒng)教學(xué)相比,這個(gè)方法需要一些額外的討論時(shí)間,但能夠更好地滿足學(xué)生的需求,極大地節(jié)省了學(xué)生自己摸索的時(shí)間。
學(xué)生的觀點(diǎn)如下:1) 非常同意實(shí)時(shí)反饋方式。因?yàn)橹R(shí)點(diǎn)繁雜,每個(gè)知識(shí)點(diǎn)及時(shí)有效地被解決是必要的,能極大地節(jié)省課外自學(xué)時(shí)間。2) 評(píng)估和討論階段非常有用。評(píng)估階段能更好地幫助他們理解問(wèn)題,發(fā)現(xiàn)自己解決方案中的錯(cuò)誤;討論時(shí)可以提出他們想在課堂上討論的新問(wèn)題或不確定的問(wèn)題,同時(shí)教師給出的相關(guān)解決方案對(duì)他們有很大的啟發(fā)。
6 結(jié)束語(yǔ)
文章提出的課堂實(shí)時(shí)反饋的教學(xué)方法,與課堂點(diǎn)擊器系統(tǒng)相結(jié)合,提供了一個(gè)直接了解學(xué)生理解水平的視角,將傳統(tǒng)的課堂講授轉(zhuǎn)變?yōu)檎n堂上有效的雙向交流。該方法代表了一種基于問(wèn)題的學(xué)習(xí)形式,幫助教師根據(jù)學(xué)生的需求自然地引入新的主題。這種關(guān)于學(xué)生理解水平的即時(shí)反饋,為學(xué)習(xí)和評(píng)估與編程相關(guān)的技能提供了具體支持,并將學(xué)生學(xué)習(xí)中的錯(cuò)誤轉(zhuǎn)化為所有學(xué)生的學(xué)習(xí)機(jī)會(huì)。根據(jù)實(shí)際應(yīng)用中的統(tǒng)計(jì)和對(duì)教師學(xué)生的問(wèn)卷調(diào)查,這種方法顯著改善了教學(xué),激發(fā)了學(xué)生的學(xué)習(xí)積極性和參與感,并獲得計(jì)算思維和創(chuàng)新思維的能力。