鄭長宏+郭建+譚樂婷
STEAM課程可以粗略地分為兩條主線:知識學習主線和項目任務主線。知識學習主線多是通過求解例題讓學生學習基本知識、基本技能和基本思想,為項目任務主線的學習奠定基礎。因此,STEAM課程設計中的例題設計顯得尤為重要。筆者總結多年的信息學奧林匹克競賽、機器人、圖形化編程教學經(jīng)驗,特別是近年來在全年級開展的STEAM模塊化系列課程之“C++編程基礎”的實踐研究,得出以下例題設計策略。
● 鋪墊例題,讓學生學會分解任務以降低難度
STEAM課程的教育目標之一是培養(yǎng)學生分解任務的能力。在STEAM課程中,教師主要引導學生完成任務(或項目),但很多時候這些任務的難度較大,不太容易一次就完成,所以需要把任務分解為難度相對較低、更容易完成的子任務。在設計例題時,教師也可以將其分解為多道子例題,把包含基礎知識的例題放到前面作為鋪墊,由易到難逐步提升。
案例一:比較兩個變量的大小,由小到大輸出。
在學習第4講《if語句與關系表達式》一課時,筆者準備了這樣一道例題:輸入兩個不相等的數(shù)a和b,由小到大輸出。解題方法之一:如果ab,則先交換a和b的值,然后輸出a和b。解決這個題目有兩個關鍵點:一是使用if語句對條件進行選擇,二是交換變量a和b的值。學生認為交換變量a和b的值只需要這樣兩條賦值語句:a=b;b=a。然而,這樣執(zhí)行的結果是錯誤的,因為a和b的值最后都是b的值。為了解決這個難點,筆者花了不少時間來給學生講解如何交換兩個變量值。結果,教學超時,沒有完成教學任務。
解決策略:把這道題的兩個任務分解開,把交換兩個變量a和b值的問題放到第3講《變量的定義與賦值》中,同時,筆者設計了這樣一道例題:請輸入變量a、b的值,然后交換變量的值,再輸出。學生通過第3講的學習,清楚地理解了交換兩個變量的值需要用到第三個變量臨時存儲數(shù)據(jù),代碼如下:
t=a;a=b;b=t;
在學習《if語句與關系表達式》比較兩個數(shù)大小的時候,教師可以用這樣的偽代碼將程序表示如下:
if(b>a) 交換a和b的值;
輸出a的值,輸出b的值;
有了前面的鋪墊,學生理解起來就容易多了。
● 優(yōu)化例題,讓學生體驗項目優(yōu)化的過程
STEAM課程強調(diào)項目式學習,項目的設計與制作過程就是一個不斷優(yōu)化的過程。教師可以把例題設計得有些小缺陷,讓學生在解題的過程中不斷思考,不斷優(yōu)化,同時體驗項目優(yōu)化的過程。
案例二:寶庫密碼問題的兩次改進。
筆者在第7講《計數(shù)循環(huán)與for語句》中設計了這樣一道例題A:富翁有個寶庫,輸入密碼才可以打開。如果密碼正確,則提示“寶庫即將打開,請稍后……”;如果密碼錯誤,則提示“密碼錯誤,請重新輸入密碼”!并再次輸入密碼,但只能輸入三次。請用程序模擬這個寶庫密碼。
這道例題就是一個小小的項目,類似于手機輸入密碼解鎖屏幕,或銀行ATM取款的過程。如果直接這樣設計例題,沒有給學生優(yōu)化改進這個項目的機會,學生就失去了思考的原動力,能力的培養(yǎng)有限。
解決策略:筆者把這道例題簡化成了一個不完善的例題B:富翁有個寶庫,輸入密碼才可以打開。如果密碼正確,提示“寶庫即將打開,請稍后……”;如果密碼錯誤,則提示“密碼錯誤”!請用程序模擬這個密碼寶庫。筆者把這道例題設置在《if語句與關系表達式》一課中,當學生調(diào)試成功以后,有位學生提出這樣的疑問:“老師,輸入錯誤密碼,程序要終止,這時還要再運行一次程序,才能輸入正確密碼。這太麻煩了,如何才能在輸入錯誤密碼之后,程序報錯但不停止運行,直接再次輸入密碼呢?”筆者在全班表揚了這位勤于思考的學生,也順理成章地在第5講《while語句與邏輯表達式》用例題B的改進版例題C作為引入。
改進后的例題C是這樣的:富翁有個寶庫,輸入密碼才可以打開。如果密碼正確,提示“寶庫即將打開,請稍后……”;如果密碼錯誤,則提示“密碼錯誤,請重新輸入密碼”!請用程序模擬這個密碼寶庫。學生使用while語句調(diào)試成功以后,又提出問題:“密碼錯誤可以一直輸入密碼,直到密碼正確。我同桌都把我的密碼試出來了!”筆者:“那怎么優(yōu)化呢?”學生:“我覺得應該限定次數(shù),比如三次,手機就是這樣的?!?/p>
筆者又順勢設計出了較為完善的例題,也就是最開始的第7講的例題A。
于是,例題B只判斷密碼是否正確;例題C判斷密碼是否正確,如果錯誤要求重新輸入密碼;例題A判斷密碼是否正確,如果密碼錯誤要求重新輸入,但只能輸入三次。
通過對例題B、C、A三個版本的設計,讓例題不斷優(yōu)化。這不僅讓學生的思考步步深入,還讓學生體驗到了STEAM項目優(yōu)化的過程。
● 多解例題,讓學生從多角度思考問題
一題多解,能夠讓學生從多個角度觀察問題、思考問題,在STEAM教學過程中可多加運用。
案例三:三個變量a,b,c排序的問題。
為了引入if語句的嵌套和邏輯表達式,筆者設計了例題:給a、b、c三個數(shù)排序,由大到小輸出。
首先,筆者給出了較為困難的使用if語句的嵌套的解法一:先判斷a>b,再分情況判斷b>c,然后再分情況判斷a>c。具體求解思維導圖如圖1所示。
學生看到上面的層疊關系就覺得很難,再看到密密麻麻的程序代碼時,更感覺是一頭霧水。筆者順勢引導學生學習第二種解法:利用學過的數(shù)學知識,不難分析出這樣六種關系:①a>b>c;②a>c>b;③b>a>c; ④b>c>a;⑤c>a>b;⑥c>b>a。
可以用六條不帶else的if語句解決,思路如下:
① if(a>b>c),輸出“a>b>c”;
② if(a>c>b),輸出“a>c>b”;
③ if(b>a>c),輸出“b>a>c”;
④ if(b>c>a),輸出“b>c>a”;
⑤ if(c>a>b),輸出“c>a>b”;
⑥ if(c>b>a),輸出“c>b>a”;
但是新的問題來了,C++語言雖然允許類似“a>b>c”的表達式,但“a>b>c”并不表示“a>b并且b>c”。于是,筆者引入邏輯運算符和邏輯表達式“a>b&&b>c”來表示“a>b并且b>c”。
筆者帶著學生總結了解法一的主要特點是if語句的嵌套,解法二的主要特點是分情況討論。當學生認為問題圓滿解決的時候,筆者又提出:“我們可以綜合解法一和解法二的特點,設計一個既簡單又不需要邏輯運算符的解法?!蓖ㄟ^思考,有學生綜合了解法一的嵌套和解法二的分情況討論,得出了解法三:運用不帶else的if語句的嵌套,用偽代碼表示如下:
① if(a>b)if(b>c),輸出“a>b>c”;
② if(a>c)if(c>b),輸出“a>c>b”;
③ if(b>a)if(a>c),輸出“b>a>c”;
④ if(b>c)if(c>a),輸出“b>c>a”;
⑤ if(c>a)if(a>c),輸出“c>a>b”;
⑥ if(c>b)if(b>a),輸出“c>b>a”;
同一例題,從多個角度思考,運用不同的方法求解,拓寬了學生思維的廣度。
● 改編例題,讓學生注重解決問題的過程和方法
STEAM教育是注重過程和方法的教育。教師通過改編例題可以讓學生關注解題的過程和方法,而不僅僅是答案。
案例四:1到100的整數(shù)和求解問題。
在for循環(huán)的經(jīng)典例題中,“求1+2+3+……+100的和”是最常見的例題。筆者也使用過這道例題來講解for語句,但學生往往看到這道題就想到它的結果是5050。因為這道題在數(shù)學課上已經(jīng)學習過了,利用求等差數(shù)列和的方法(首項+末項)×項數(shù)÷2可以輕松算出結果。但為了讓學生掌握for語句計數(shù)循環(huán)的方法,即通過for循環(huán)和語句“sum=sum+;”把每一個數(shù)加起來,筆者把例題改編成求20+21+23+……+108,改編后,學生不容易一眼算出結果,就把注意力集中到使用for語句求解的問題上來。
● 美化例題,讓學生領略編程之美
在“C++編程基礎”教學中,筆者注重美化例題,把藝術教育融入到C++代碼的字里行間和程序格式的排列縮進之間,讓學生在潛移默化中領略編程之美。
案例五:編寫一個小小的計算器程序。
排版優(yōu)美的程序代碼,不僅利于閱讀,而且可以感受到C++的代碼之美。在學習if語句和switch語句的時候,有這樣一道例題:編寫一個小小的計算器程序,輸入變量a和b,再輸入+、-、*、/中的一個符號,完成相應的計算,輸出答案。筆者在講解該例題時,特別強調(diào)書寫的規(guī)范性,即代碼的縮進與對齊,程序部分代碼如圖2所示。
以上是編寫程序時體現(xiàn)出的代碼美感,還可讓程序輸出結果也體現(xiàn)出美感。
案例六:運用二重循環(huán)輸出圖形符號。
學習循環(huán)語句的嵌套可以通過使用二重循環(huán)輸出特定的圖形符號來練習。筆者設計了如圖3所示的圖形,編制例題,讓學生學習二重循環(huán)的使用。
由此可見,美化例題是讓例題在設計中融入藝術教育,讓學生潛移默化地感受編程之美。
合理運用例題設計策略精心設計例題,讓學生在STEAM課程中學習方法,培養(yǎng)思維,增長能力。這需要教師不斷探索,不斷實踐。endprint