邊楚女
大家也許或多或少看過白巖松、汪涵或何炅主持的節(jié)目,他們主持各成風(fēng)格,但有一個(gè)共同特質(zhì),就是他們的主持很舒服,很走心,很接地氣。他們?yōu)槭裁醋層^眾看明白、聽走心了呢?我想應(yīng)該是他們精心的案頭工作、深厚的文化底蘊(yùn)、清晰的主持邏輯和從觀眾出發(fā)考量的人文情懷走進(jìn)了觀眾的心。教學(xué)與主持有很多相通的地方,值得我們對比反思。很多年前,我聽過一位物理老師的一節(jié)課,至今仍記憶猶新。這位老師給我留下的最深印象是上課思路特別清晰,話不多,語速不快,句句聚焦要點(diǎn),學(xué)生的學(xué)習(xí)積極性都被帶動(dòng)起來,感覺45分鐘的課一眨眼就結(jié)束了。試想,如果教師沒有從學(xué)生角度出發(fā)的教學(xué)設(shè)計(jì),沒有清晰的上課思路,沒有簡潔明快的語言,課又怎么能讓學(xué)生聽懂呢?
接下來,以《自定義函數(shù)》一課為例,聊一聊我是如何努力讓學(xué)生“聽懂”這節(jié)課的,這是一節(jié)有一定設(shè)計(jì)難度的課,分享出來供大家討論、批評和指正。我設(shè)定這一課時(shí)的主要教學(xué)目標(biāo)為:理解函數(shù)的概念,了解函數(shù)在模塊化程序設(shè)計(jì)中的作用;通過遞進(jìn)式的四個(gè)任務(wù),初步掌握自定義函數(shù)的構(gòu)造方法和應(yīng)用;進(jìn)一步理解模塊化程序設(shè)計(jì)思想的應(yīng)用價(jià)值。
● 課堂教學(xué)
1.梳理回顧常見函數(shù)
經(jīng)過一段時(shí)間學(xué)習(xí),特別是前一節(jié)課《過程——走進(jìn)模塊化思想》的鋪墊,學(xué)生們初步了解了VB程序設(shè)計(jì)的模塊化思想:每個(gè)模塊分工合作,各自完成相應(yīng)任務(wù),模塊之間也可以相互調(diào)用??梢栽倏纯茨銈兪煜さ臉?biāo)準(zhǔn)函數(shù)(如下頁表),事實(shí)上這些函數(shù)也是程序模塊,只不過這些程序模塊已經(jīng)編好,被事先放入VB程序中,需要的時(shí)候直接調(diào)用就可以了,所以這些函數(shù)也被稱為內(nèi)部函數(shù)。例如,程序中有a=Abs(x)語句,當(dāng)程序運(yùn)行到這個(gè)語句時(shí),會(huì)自動(dòng)調(diào)用VB程序內(nèi)部的Abs函數(shù)模塊,然后把計(jì)算好的值送到Abs(x)調(diào)用點(diǎn)上,再把值賦給a。
教學(xué)闡析:本節(jié)課的重點(diǎn)是自定義函數(shù)的構(gòu)造和應(yīng)用,事實(shí)上學(xué)生熟悉的標(biāo)準(zhǔn)函數(shù)也是一種自定義函數(shù),只不過程序員事先編好了這些函數(shù)的程序模塊供用戶調(diào)用。為了讓學(xué)生有清晰的認(rèn)知,教師切入課堂主題時(shí)一定要讓其明白函數(shù)的本質(zhì),而不要在內(nèi)部函數(shù)和自定義函數(shù)上糾結(jié)。上表中還列出了函數(shù)名的關(guān)聯(lián)英語,因?yàn)橐郧霸谥v解這些函數(shù)時(shí)就已經(jīng)告訴學(xué)生標(biāo)準(zhǔn)函數(shù)命名的“英語情結(jié)”,這次梳理回顧時(shí)統(tǒng)一展示出來,能強(qiáng)化學(xué)生的“望文生義”,促進(jìn)他們進(jìn)一步理解和記憶這些函數(shù)。
2.引入自定義函數(shù)
除了這些內(nèi)部函數(shù)外,我可不可以過過程序員的癮,由自己來構(gòu)造函數(shù),在需要時(shí)隨時(shí)調(diào)用呢?當(dāng)然可以。學(xué)生們可以依據(jù)如下的格式來構(gòu)造一個(gè)函數(shù)。
Function 函數(shù)名(參數(shù)表) As 類型名
語句塊
(說明:語句塊中至少有一個(gè)語句是“函數(shù)名=表達(dá)式”,這樣,表達(dá)式的結(jié)果才能作為函數(shù)的返回值)
End Function
這些根據(jù)實(shí)際需要構(gòu)造的函數(shù),我們有個(gè)約定俗成的名字叫“自定義函數(shù)”。
教學(xué)闡析:自定義函數(shù)的格式比較抽象,不建議花時(shí)間講解,實(shí)踐操作才是最好的“講解”。因此,我只是把這個(gè)格式展示給學(xué)生,然后通過具體的實(shí)踐任務(wù)來理解這個(gè)格式應(yīng)用。
3.完成“絕對值函數(shù)”的構(gòu)造和應(yīng)用
我們不妨先來構(gòu)造一個(gè)絕對值函數(shù),也許學(xué)生會(huì)奇怪,這個(gè)函數(shù)不是已經(jīng)有了嗎?呵呵!你懂的?。ㄍnD一會(huì),讓學(xué)生先消化一下再進(jìn)行說明)。然后我嚴(yán)格按照這個(gè)格式來完成絕對值函數(shù)的構(gòu)造。在代碼窗口輸入“Function jdz(x As Double) As Double”,F(xiàn)unction是函數(shù)的英語,它有“功能”的意思,暗喻函數(shù)本身就是一個(gè)功能模塊。我把絕對值函數(shù)名改成了jdz,可以嗎?Why not?雖然我們從標(biāo)準(zhǔn)函數(shù)的取名中能感受到“正?!钡某绦騿T通常是以函數(shù)的英文縮略來表示函數(shù),但事實(shí)上你完全可以取一個(gè)自己喜歡的個(gè)性化名字。
參數(shù)表中的x類似于數(shù)學(xué)中的自變量,這個(gè)自變量是什么類型的,你就定義它是什么類型。由于絕對值函數(shù)的自變量值一般為實(shí)數(shù),所以你可以將其定義為Double類型。As后面的類型名該怎么定義?你只要思考jdz(x)的值是什么類型,也就是說,絕對值計(jì)算好后的值是什么類型,就定義成什么類型,這里定義為Double,我想你們肯定能夠接受。
接下來輸入語句塊內(nèi)容,具體代碼如下頁圖1所示,在前面的函數(shù)格式結(jié)構(gòu)中有一個(gè)說明:語句塊中至少有一個(gè)語句是“函數(shù)名=表達(dá)式”,這樣,表達(dá)式的結(jié)果才能作為函數(shù)的返回值。這句話表達(dá)比較籠統(tǒng),我試著這樣解釋幫助學(xué)生理解:“函數(shù)的目的是什么,當(dāng)然是想得到一個(gè)值,所以表達(dá)式計(jì)算好后要把值給函數(shù),然后這個(gè)函數(shù)值會(huì)被送到其他程序模塊中調(diào)用該函數(shù)的調(diào)用點(diǎn)上?!睂W(xué)生不理解也沒關(guān)系,多練習(xí)幾次就能明白。我演示講解完后,學(xué)生自主完成絕對值函數(shù)構(gòu)造。
函數(shù)構(gòu)造好了就要發(fā)揮作用。我現(xiàn)在想求|a|和-a2+|a|-2的值,該怎么調(diào)用剛剛構(gòu)造好的函數(shù)?我邊輸入圖1調(diào)用模塊的程序邊講解調(diào)用方法,并問學(xué)生:“Command1_Click模塊在調(diào)用函數(shù)時(shí)用了jdz(a),而不是jdz(x),為什么?”
在學(xué)生完成調(diào)用模塊的程序后,我讓學(xué)生用F8鍵逐語句調(diào)試程序,感受函數(shù)的執(zhí)行過程。然后讓學(xué)生把jdz(a)改成jdz(x),再用F8調(diào)試,發(fā)現(xiàn)出現(xiàn)“Byref參數(shù)類型不符”錯(cuò)誤警示,學(xué)生若有所思。
教學(xué)闡析:這個(gè)任務(wù)的重點(diǎn)是讓學(xué)生初步了解函數(shù)構(gòu)造結(jié)構(gòu),努力理解“對Function函數(shù)名(參數(shù)表) As 類型名”和“至少有一個(gè)語句是函數(shù)名=表達(dá)式”這兩個(gè)實(shí)踐難點(diǎn),并了解函數(shù)調(diào)用的原理。在具體的教學(xué)中,雖然我心里非常清楚這些教學(xué)目標(biāo),但并沒有刻意強(qiáng)調(diào)難點(diǎn),更沒有扯著嗓門告訴學(xué)生這個(gè)有多么多么重要,而是很放松地進(jìn)行聊天式演示講解。因?yàn)榻處煹娜蝿?wù)就是把復(fù)雜的問題簡單化,深入淺出地讓學(xué)生輕松理解難點(diǎn)。反復(fù)地刻意強(qiáng)調(diào)只會(huì)給學(xué)生造成緊張的心理暗示。
PS:我在巡視時(shí)發(fā)現(xiàn),學(xué)生自定義絕對值函數(shù)的名稱真是百花齊放。是呀!給學(xué)生一個(gè)空間,他們就會(huì)釋放想象和創(chuàng)意!
4.完成“最大公約數(shù)函數(shù)”的構(gòu)造和應(yīng)用
接下來的任務(wù)是讓學(xué)生給程序填空,該程序先構(gòu)造“求兩數(shù)最大公約數(shù)”函數(shù),然后再調(diào)用該函數(shù)求出三個(gè)數(shù)的最大公約數(shù),程序共有兩個(gè)空(如圖2)。當(dāng)學(xué)生完成填空后運(yùn)行程序,發(fā)現(xiàn)出現(xiàn)了“賦值號左邊的函數(shù)調(diào)用必須返回變體或?qū)ο蟆钡腻e(cuò)誤(如圖3)。在學(xué)生經(jīng)過思考調(diào)試改正錯(cuò)誤后,我再與他們交流:在構(gòu)造函數(shù)時(shí),左邊的函數(shù)名不能加參數(shù)表,但在調(diào)用函數(shù)時(shí),必須要有參數(shù)表,參數(shù)名以當(dāng)前模塊的變量名為準(zhǔn)。
教學(xué)闡析:兩個(gè)填空遞進(jìn)式地深化了函數(shù)的理解難點(diǎn),填完空后運(yùn)行程序產(chǎn)生的錯(cuò)誤又引發(fā)了知識沖突,學(xué)生在解決知識沖突的過程中進(jìn)一步突破難點(diǎn),夯實(shí)知識基礎(chǔ)。而且參數(shù)表從第一個(gè)任務(wù)的一個(gè)變量變成兩個(gè)變量,拓展了學(xué)生的認(rèn)知,為后面的學(xué)習(xí)搭建了支架。
5.完成“判斷閏年”任務(wù)
緊接著學(xué)生要完成一個(gè)“判斷閏年”程序的改錯(cuò)任務(wù),這個(gè)程序是讓用戶在文本框1中輸入一個(gè)年份,如果是閏年,文本框2顯示紅色,否則顯示藍(lán)色。程序代碼和運(yùn)行結(jié)果界面如圖4所示。
這個(gè)任務(wù)先由學(xué)生自主研究。學(xué)生的研究過程模擬如下:先運(yùn)行程序,出現(xiàn)“參數(shù)不可選”錯(cuò)誤警示,并指向leap="yes"位置,這是調(diào)用函數(shù)的模塊。錯(cuò)誤原因是函數(shù)名后沒有加參數(shù),把leap改成leap(y)或leap(a),改成leap(y)的學(xué)生調(diào)試時(shí)出現(xiàn)了“ByRef參數(shù)類型不符”,錯(cuò)誤原因是調(diào)用時(shí)的參數(shù)沒有用調(diào)用模塊的變量參數(shù)名,所以leap(a)才是對的。繼續(xù)調(diào)試,出現(xiàn)了“賦值號左邊的函數(shù)調(diào)用必須返回變體或?qū)ο蟆钡腻e(cuò)誤,這是前一個(gè)任務(wù)的同類錯(cuò)誤,學(xué)生把兩個(gè)leap(y)改成leap后再調(diào)試,發(fā)現(xiàn)出現(xiàn)“類型匹配錯(cuò)誤”提示,leap="yes"語句出現(xiàn)黃色警示,可是錯(cuò)誤真的在這個(gè)語句嗎?你們覺得呢?
教學(xué)闡析:“判斷閏年程序”的改錯(cuò)任務(wù)集中凸顯了函數(shù)的三個(gè)關(guān)鍵點(diǎn):一是“Function函數(shù)名(參數(shù)表) As類型名”語句的正確使用;二是對語句塊中至少有一個(gè)語句是“函數(shù)名=表達(dá)式”的理解和運(yùn)用;三是其他模塊調(diào)用函數(shù)時(shí)參數(shù)的正確使用。通過前兩個(gè)任務(wù)的鋪墊和本任務(wù)的提升,學(xué)生基本厘清函數(shù)的構(gòu)造和運(yùn)用。
6.完成“四舍五入函數(shù)”編寫
學(xué)生要完成的最后一個(gè)任務(wù)是編寫“四舍五入函數(shù)”。為助力學(xué)生建構(gòu)該函數(shù)的結(jié)構(gòu),我提供給學(xué)生兩道他們以前做過的練習(xí)題:
習(xí)題1:在計(jì)算平均重量x時(shí),結(jié)果中產(chǎn)生了許多位小數(shù),若需要對x保留一位小數(shù),并對第二位小數(shù)進(jìn)行四舍五入,則下列表達(dá)式中正確的是:
(A)Int(x*10+0.5)/10
(B)Int(x*100+0.5)/100
(C)Int(x*10)/10
(D)Int(x+0.5)
習(xí)題2:銀行給用戶計(jì)算利息時(shí),結(jié)果中會(huì)產(chǎn)生很多位小數(shù),但在支付時(shí),是以“元”為單位,按“分”結(jié)算的,即結(jié)果保留二位小數(shù),并對第三位小數(shù)進(jìn)行四舍五入。假設(shè)結(jié)算的利息是x元,上述算術(shù)問題的表達(dá)式應(yīng)是:
(A)Int(x*10+0.5)/10
(B)Int(x*100+0.5)/100
(C)Int(x*100)/100
(D)Int(x*100+0.5)/10
一些學(xué)生在較短時(shí)間里完成了任務(wù),另一些學(xué)生還陷在困惑中,于是我把三個(gè)注釋語句給他們看(如圖5),這給了他們一些靈感,所以又有一些學(xué)生做出來了,但還有一些學(xué)生依舊找不到方向,這時(shí),我再把答案展示給學(xué)生,并講解原理和方法。
教學(xué)闡析:課堂最后,學(xué)生獨(dú)立經(jīng)歷函數(shù)構(gòu)造和調(diào)用的完整實(shí)踐過程,有利于培養(yǎng)其解決問題的整體能力。同時(shí),分層、分步提供幫助,滿足了不同層次學(xué)生的學(xué)習(xí)需要。
● 課堂綜述
在與同行交流時(shí),大家普遍認(rèn)為《自定義函數(shù)》這節(jié)課在教與學(xué)兩個(gè)層面上都有一定難度。那怎么讓學(xué)生真正聽懂——聽得輕松,學(xué)得扎實(shí)呢?我試圖從三個(gè)方面來把握:一是在教學(xué)設(shè)計(jì)上充分吃透教材文本,深度理解教學(xué)內(nèi)容,站在學(xué)生的角度反復(fù)推敲和實(shí)踐,梳理出自定義函數(shù)的關(guān)鍵點(diǎn)和難點(diǎn)。二是在把握教學(xué)關(guān)鍵點(diǎn)和難點(diǎn)的前提下,設(shè)計(jì)真正有效的任務(wù)。通過多次實(shí)踐和選擇,我確定了學(xué)生要完成四個(gè)任務(wù)。這些任務(wù)以模仿實(shí)踐、初步理解難點(diǎn)、鞏固關(guān)鍵點(diǎn)、自主實(shí)踐為推進(jìn)邏輯,螺旋上升,層層遞進(jìn)落實(shí)關(guān)鍵點(diǎn),突破理解難點(diǎn)。三是上課實(shí)施時(shí)主要是讓學(xué)生通過實(shí)踐操作來真正掌握函數(shù)的構(gòu)造和運(yùn)用,而不是通過不斷地分析、強(qiáng)調(diào)來“說懂”學(xué)生,因?yàn)閷W(xué)生不是教懂的,而是通過自我學(xué)習(xí)“學(xué)懂”的。這節(jié)課主要是讓學(xué)生初步掌握函數(shù)的構(gòu)造和應(yīng)用,下節(jié)課則會(huì)通過幾個(gè)提升任務(wù)讓學(xué)生從更大的格局和視野來理解函數(shù)的應(yīng)用價(jià)值。
● 觀點(diǎn)總結(jié)
“讓學(xué)生聽得輕松明白、學(xué)得扎實(shí)有效”,這句話簡單明了,卻需要教師用最大的智慧、最實(shí)的行動(dòng)和最真的反思去詮釋。一節(jié)課上,如果教師能真正站在學(xué)習(xí)者的角度開展教學(xué)設(shè)計(jì),有由淺入深、層層遞進(jìn)、邏輯清晰的教學(xué)過程,有語言簡練、指向性明確的有效語言,有讓學(xué)生放松學(xué)習(xí)的氛圍,有讓學(xué)生主動(dòng)思考實(shí)踐的空間,學(xué)生就能更好地明白這節(jié)課應(yīng)該怎么去學(xué)?!敖虒W(xué)過程本質(zhì)上就是認(rèn)識的過程”,因此,所謂的“聽懂”,不是把學(xué)生講懂、教懂,更不僅僅是我教你做,而是要激發(fā)學(xué)生主動(dòng)開展自我認(rèn)知、積極投入實(shí)踐來實(shí)現(xiàn)自我發(fā)展。教師要做的是幫助學(xué)生澄清問題邊界,提供問題解決支架,助力學(xué)生更好地通過實(shí)踐來建構(gòu)知識體系。
偉大的物理學(xué)家愛因斯坦曾說過,“教育,是人們遺忘了學(xué)校灌輸?shù)乃兄R后,仍能留存的東西”。我聽懂了:很多所謂的知識會(huì)被淡忘或不斷更新,但那些真正生發(fā)于學(xué)生自我的體悟,能成長為學(xué)生生命中堅(jiān)實(shí)的力量,伴其行走天涯,笑傲江湖。
2016年4月28日,我發(fā)了一條微信:舉重若輕,這是上課的最高境界。我無心再去闡析這條微信,因?yàn)榇藭r(shí)的我,雖心有猛虎,卻更愿細(xì)嗅薔薇!因?yàn)?,學(xué)生正在靜靜聆聽……作為一線教師,都不可避免會(huì)探討一個(gè)問題:什么樣的課才算是一節(jié)好課?我曾提出過一節(jié)好課的標(biāo)準(zhǔn):學(xué)生聽得懂,學(xué)生有興趣,學(xué)生有發(fā)展。一節(jié)課,首先應(yīng)該做到的是“學(xué)生聽得懂”——讓學(xué)生聽得輕松明白,學(xué)得扎實(shí)有效。每一位教師都在努力達(dá)到這個(gè)要求,但不可否認(rèn),在聽課時(shí)常會(huì)邂逅這些場景:由于教師沒有清晰的課堂邏輯和執(zhí)教思路,所以學(xué)生聽得糊里糊涂,他們不清楚“老師到底想讓我們做什么”“老師想帶我們到哪里去”;教師情緒高漲,嗓門洪亮講個(gè)不停,把學(xué)生當(dāng)成被動(dòng)接受知識的容器,學(xué)生雖聽得累卻只能默認(rèn)教師的“權(quán)威”;一些本可以用幾句話講明白的問題被繞得很復(fù)雜,教學(xué)重點(diǎn)被教師反復(fù)強(qiáng)調(diào),學(xué)習(xí)難點(diǎn)被渲染得很玄乎,學(xué)生的思考和學(xué)習(xí)背上心理負(fù)擔(dān);課堂上充滿低層次的你問我答和教師一言堂的“霸權(quán)主義”,學(xué)生看似在聽,在配合教師做出反應(yīng),事實(shí)上并沒有真正進(jìn)入學(xué)習(xí)狀態(tài);等等。不知我們是否聽到,這些場景的背后有很多學(xué)生在無聲吶喊:“親愛的老師,你的課,我聽不懂!”這些讓學(xué)生聽不懂的課,到底是哪里出了問題呢?