摘要:本文以筆者多年教學經驗為基礎,結合美國當代教育心理學家加涅的教學理論和學習層級說,探討該教學理論在教學設計中的具體應用。
關鍵詞:加涅;學習層級說;逐級向上,教學設計
1加涅教學理論
羅伯特#8226;M#8226;加涅博士(Robert M. Gagne 1916- 2002)是美國當代教育心理學家,在教學系統設計領域是一位真正的巨匠[1]。
加涅提出了學習層級說,認為知識是有層次結構的,教學要從基本的子概念、子技能出發,逐級向上,逐漸學習到高級的知識技能。在以他們的思想為基礎進行教學進程設計時,教師首先對要學習的內容進行任務分析,逐級找到應該提前掌握的知識,而后分析學生既有的水平,確定合適的起點,設計出向學生傳遞知識的方案;在展開教學時,讓學生從低級的基本知識技能出發,逐級向上,直至達到最終的教學目標[2]。
2教學設計
本人經過多年的教學實踐,深知第一次課的重要性。第一次課既要讓學生對本門課程有基本的了解,又要調動學生的學習興趣,同時,還要讓學生找出本門課程與其已經學習過的其他課程之間的相似之處,以增強學生的學習興趣;而C語言程序設計課程是各高校為理工科學生開設的一門程序設計類課程,由于該課程是大學生接觸到的第一門程序設計類課程,所以,教師要考慮如何幫助學生建立程序設計的思想、如何結合其他各門課程的知識、如何通過第一次的講解使學生對此門課程的性質、任務有概要性了解,從而達到快速入門的目的。筆者在多年講授此門課程的基礎上,結合加涅的學習層級說的基本思想,為C語言的第一次課設計了幾個案例式的教學過程,并將它們應用在每一次的教學過程中,達到了預期的效果。
案例1:輸出信息
(1) 提出問題。
在屏幕上輸出“Hello!”信息。
(2) 基本的子概念。
寫出如下程序:
#include
void main(void) /* 這是C程序主函數的函數頭 */
{ /* 一對大括號之間是C主函數的函數體 */
printf(\"Hello!\"); /* 這是C語言的輸出函數 */
}
在VC環境下展示這個程序的運行結果后,重點介紹其中printf函數的功能,其可以將雙引號中的信息在屏幕上原樣顯示,并強調函數的結構是由函數頭和函數體組成。
(3) 逐級向上。
逐級向上,繼續提出新的問題,在屏幕上顯示\"Welcome to Beijing!\",學生自然會想到將雙引號中的信息Hello!替換為Welcome to Beijing!,正如學生所預測的那樣,屏幕上輸出了相應的信息,這樣的結果立刻調動了學生的學習興趣。在這之后,教師繼續提出新問題,并在屏幕上顯示\"北京歡迎您!\",學生經過短暫的思考后,自然會提出切換到中文方式輸入信息。
(4) 最終的教學目標。
經過兩次逐級向上,進而拋出一個一般性的問題,教師在屏幕上輸出任意的信息,學生自然可以掌握printf函數輸出信息的功能,從而達到這個案例的教學目標。布置作業:在屏幕上輸出“新年快樂!”的信息,以強化掌握的知識,并給學生一個展現自已能力的機會。
案例2:算術四則運算
(1) 提出問題。
利用C語言程序進行加法的計算。
(2) 基本的子概念。
首先從數學出發,提出加法運算的4個要素:加數、被加數、和、加。其中加數和被加數是待加工的原始數據,加是實施加工的操作,和是加工的結果。
寫出如下程序:
#include
void main(void)
{
short int x,y,z;/* 說明3個數據 */
x=24; /* 輸入2個原始數據 */
y=12;
z=x+y;/* 利用2個原始數據進行加法運算,得到結果交給z */
printf(\"z=%d\",z); /* 將結果z輸出在屏幕上 */
}
在VC環境下展示這個程序的運行結果后,重點介紹數據的加工流程,即說明數據、輸入數據、加工數據、輸出數據。本題的輸入數據是x和y,加工過程是“+”,輸出數據是z,并強調輸入在先,加工在輸入之后,輸出一般在后的處理流程;而printf函數中的“%d”可暫時不講,只是告訴學生這是一個C語言必需的格式符。
(3) 逐級向上。
逐級向上,繼續提出新的問題,如何利用C語言程序進行減法的計算?啟發學生分析減法與加法同樣具備4個要素,只是具體的操作是減,其他過程應該與加法一致,學生自然會讓教師將程序中的“+” 修改為“-”,運行后達到了減法的目的。
繼續提出新的問題,如何利用C語言程序進行乘法的計算?同時提出一個問題,即“╳”,這個符號如何解決,絕大多數學生都知道用“*”代替,這樣很自然地解決了乘法問題。進而在24和12的后面加3個0,將數據24和12改為2個較大的數據,請學生設想結果。學生一般都會按照已知的數學知識報出答案,接著運行程序卻得出了負數,這個答案根據學生的數學知識是不可能有的。此時方解釋“short int x,y,z;”這條語句的作用是說明3個短整型數據,而系統則為這3個短整型數據分配2個字節的存儲單元,而2個字節的存儲單元所能存放的數據是有范圍的,當數據的大小超過了這個范圍時,則出現了上述問題。此時當學生正在思考數據的范圍問題時,將語句“short int x,y,z;”中的“short”刪除,運行程序得出了正確的結果。再解釋“int x,y,z;”語句,系統為這3個一般整型數據分配4個字節的存儲單元,盡管4個字節的存儲單元所能存放的數據是有范圍的,但此范圍比2個字節的應大一些,此時只需要強調數據范圍的概念,而這是計算機中的數據與數學中的數據的不同。通過這個問題向學生傳遞一種信息,即數據類型不同其性質也不同。而數據的類型極其相關的問題在后續課程中解釋,為以后的內容留一些懸念。
繼續提出新的問題,如何利用C語言程序進行除法的計算?同時提出一個問題,即“÷”,這個符號如何解決,同樣,大多數學生都知道用“/”代替,這樣很自然解決了24除以12的問題。進而將24和12 互換位置,請學生設想結果,學生一般都會按照已知的數學知識報出答案0.5,而程序運行的結果又一次出乎學生的意料,此時再次解釋“int x,y,z;”這條語句的另一層意義是說明3個整型數據,即不使用小數,從而不可能得到小數的值,及時提出問題:如何才能獲得小數的值呢?當學生在思考時,將“int”改為“float”,“%d”改為 “%f”,再一次運行程序達到了小數的值,解釋“float”的含義是浮點數據,即保留一定的小數位,通過這個問題再一次向學生傳遞了這樣的信息,即數據類型不同其范圍不同、性質不同、格式符也不同。
逐級向上,繼續拋出新的問題:計算2個數的平均數。提出問題將語句“z=x+y;” 改為“z=x+y/2;”可否實現,根據已知的數學知識,學生自然會提醒你將“x+y”加括號以區分它們的優先級。
(4) 最終的教學目標。
經過一次又一次問題的逐級向上,實現了最終的教學目標:進行簡單的算術運算,并了解了數據類型。布置作業:編寫程序計算同寢室4個學生的平均年齡和平均身高,同時告知學生已經會對數據進行加工和處理了,下面只是要通過實驗證明自己的能力。
案例3:找出2個數中的最大數
(1) 提出問題。
利用C語言程序找出2個數中的最大數。
(2) 基本的子概念。
首先從數學出發,提出找出2個數中的最大數的4個要素:2個數、確定2個數中誰最大、輸出最大數。與四則運算相同的是2個原始數據,1個結果,不同的是加工過程。而2個數中的最大數有2種可能:前者最大或后者最大,將這2種可能轉化為語句描述如下:如果(if)前者大于后者,則前者最大;否則(else)后者最大。
寫出如下程序:
#include
void main(void)
{
int x,y,z; /* 說明3個數據 */
x=24;/* 輸入2個原始數據 */
y=12;
if(x>y)
z=x; /*前者大于后者,則前者最大*/
else
z=y;/*后者大于前者,則后者最大*/
printf(\"z=%d\",z);/* 將結果z輸出在屏幕上 */
}
解釋x>y可理解為數學中的不等式,if和else的含義與英語相同,學生非常容易接受這種描述形式。
(3) 逐級向上。
逐級向上,繼續提出新的問題,如何利用C語言程序找出2個數中的最小數。學生當然會積極的參與,提出將“x>y”改為“x
反復運行這個程序,而每一次的結果都是相同的,啟發學生發現本程序的弱點,其原始數據是固定的,因而其答案也是固定的。逐級向上,繼續提出新的問題:可否實現任意2個數的大小問題,而不是固定2個數的大小問題?顯然應該在“x=24; y=12;”這2條語句上想辦法。將此2句修改如下:
printf(\"please enter 2 data: \");/* 提示輸入2個數據 */
scanf(\"%d%d\",x,y);/* 輸入2個原始數據 */
運行程序,請學生給出2個數據,驗證程序得到正確結果,提示學生還需輸入其他的不同的測試數據,如:前者大于后者、前者小于后者、前者等于后者,只有輸入各種測試數據方能測試程序的多種可能。在學生對語句“scanf(\"%d%d\",x,y);”有了直觀的認識后解釋此語句的作用,至于格式符、地址符可留在以后解釋,此時只強調語句的功能,而應淡化語法。
(4) 最終的教學目標。
經過一次又一次問題的逐級向上,實現了最終的教學目標:對分支程序有了一點了解,并了解了數據類型。布置作業:由鍵盤任意輸入3個數據,輸出其中的最大數和最小數,并給學生一些提示,如果比較2次將如何?
經過3個案例的逐級向上的講解,達到了以下幾個方面的效果:一是讓學生知道什么是程序,其與數學、英語有著較大的聯系,而這2種知識他們已經研習了數年;二是達到了快速入門的目的,避免了傳統教學方式在基本內容上盤帶過多的缺點;三使學生認識到數據類型使用不當會帶來一定的問題,而問題本身則由后續的內容解決;四是讓學生熟悉了數據加工的一般流程,即說明、輸入、加工、輸出;五是調動了學生的學習熱情,而這正是學習每一門課程的關鍵。
3結語
教學設計所研究的是如何設計教學以及怎樣確保效果好、效率高、富有吸引力的教學的實施,以幫助學習者達到教學目標[2]。教學設計理論就是運用促進學生的學習和發展的明確指導去改進和優化教與學的全過程和結果的理論[2]。教學設計理論可以應用于不同層次的教學系統的設計,如一門課程、一個單元,甚至一節課。
教師在進行教學前,應仔細考慮在特定的時間里計劃教學的內容是什么,其次要考慮有哪些可以利用的案例。同時應盡可能做到所選案例可以調動學習者在學習過程中的強烈興趣;同時在學習過程中及時進行強化,并給予學生鼓勵[3]。
以上是筆者在教學過程中,根據教學設計理論,具體結合加涅的學習層級說,即按照知識的層次結構,從基本的子概念子技能出發,逐級向上,逐漸學習到高級的知識技能,直到達到最終的教學目標,設計出的第一次課使用的案例。按照這種教學模式,經過多次的使用和改進,不僅降低了學習的難度,而且增加了學生的信心和課堂的互動,調動學生學習的積極性,通過一次課即達到了快速入門的目的。
參考文獻:
[1] 加涅. 教學設計原理[M]. 5版. 上海:華東師范大學出版社,2008.
[2] 張劍平. 現代教育技術[M]. 北京:高等教育出版社,2004.
[3] 李明. 斯金納教學理論在程序設計課程中的應用[J]. 計算機教育,2008(14):75-76.
Applications of Theory of Learning Hierarchy in Instructional Design
XUAN Shan-li, LI Ming, LENG Jin-lin
(School of Computer and Information, Hefei University of Technology, Hefei 230009 , China)
Abstract: In this paper, the author based on many years of teaching experience, combined with Gagne’s instructional theory and the theory of learning hierarchy that explored this theory in instructional design of teaching in the specific application.
Key words: Gagne; theory of learning hierarchy; top-down by level; instructional design
(編輯:郭小明)