張桂芳,宋乃慶
(1.西南大學 數學與統計學院,重慶 400715;2.廣西教育學院 數學與計算機科學系,廣西 南寧 530023)
現行的高中數學課程標準已經將算法納入基礎知識的范疇,同時也指出,“算法除作為本模塊的內容之外,其思想方法應滲透在高中數學課程其它有關內容中,鼓勵學生盡可能地運用算法解決相關問題.”[1]然而,課程標準并沒有對算法概念做界定,它雖然明確提出了“滲透”算法知識和思想的宏觀要求,但沒有具體的行動指南或說明,算法知識和思想的“滲透”只能依靠教材編寫人員和教師的自主發揮.雖然各版本的數學教材各自給出了算法概念,但一線教師還是存在不少的疑惑,如,哪些課程內容可以與算法相結合,怎么結合;算法知識的滲透與其它部分的教學內容、教學目標如何協調……[2]而落實算法知識在數學課程中的滲透、實現中小學數學課程中“算法”內容與思想的整體連貫協調、促進學生算法知識的持續發展,是一個亟待解決的現實課題.這里試圖對此進行一些探討.
為了獲得對算法概念的清晰認識,這里將從當前數學教材對算法的界定開始.
人教版高中數學必修3,用二元一次方程組求解步驟說明了算法的含義,并指出,“這些步驟就構成了解一般二元一次方程組的算法,我們可以根據這一算法編制計算機程序,讓計算機來解二元一次方程組.”并且這樣解釋算法概念:古代算法指用阿拉伯數字進行算術運算的過程;在現代指可以用計算機來解決的某一類問題的明確的、有限的程序或步驟,執行完算法就可以解決問題或獲得滿意的近似解[3].這些界定表明:解一般二元一次方程組的數學運算步驟構成了一個算法,即數學算法,而將這些算法翻譯為計算機可以執行的操作步驟,就成為計算機算法,編制出來的計算機程序只是算法的計算機語言描述;當人們應用數學來解決問題時,首先是建立數學算法,然后為了利用計算機來代替人完成其中的某些工作,才需要進一步根據數學算法來開發計算機算法.
北師版高中數學必修3[4],給出的算法的界定是:“在解決某些問題時,需要設計出一系列可操作或可計算的步驟,通過實施這些步驟來解決問題,而這些步驟稱為解決這些問題的算法.”此外,還界定了算法思想:通過“設計出一系列可操作的步驟、以便按順序執行這些步驟之后能完成任務”的途徑來解決問題的思想,就稱為程序化思想或者算法思想.此后,在算法一章的“小結”中又對算法概念做了限定:本章所指的算法基本上是能在計算機上實現的算法……現代算法的作用之一是使用計算機代替人完成某些工作,這是學習算法的重要原因之一.這些界說把算法看成了可以“機械執行”的、步驟有限的問題解決的程序.這套教材中的算法主要側重于數學算法,但也注意盡量讓學生了解將數學算法轉化為計算機算法交給計算機執行的重要性.
從這兩個版本教材對算法概念的界定來看,至少可以獲得幾點認識:
(1)算法是用以解決問題的數學操作步驟序列.它指向問題解決,且具有不同的層次,既包含各種基本運算的操作程序,又包含那些將基本運算組合而成的復雜運算序列,如,解二元一次方程組的算法當中就含有多種基本算術運算.
(2)算法本身具有不同的層次,人們總是先有數學算法,然后才將它翻譯為計算機算法的.解決問題的數學操作步驟的描述稱為數學算法,而那些用計算機能夠識別的方式對數學模型及它所要處理的數據進行的描述看做計算機算法.
(3)數學算法是一個比計算機算法含義更廣的概念.首先,數學算法可以通過手工操作、機器或器具操作[5]實現.計算機算法是數學算法的運行方式之一,也是最先進、最有前景的方式.其次,也許一些數學算法暫時還不能或者不容易轉換為計算機算法.比如,中國古代數學中蘊涵了豐富的算法思想[6],但那時還沒有計算機、更沒有相對應的計算機算法.再次,針對某一個問題,數學算法可能遠遠早于計算機算法出現(如天氣預報算法)……
(4)算法的設計,就是將解決問題的過程設計為可計算、操作的有限步驟序列的過程.
(5)算法思想就是指,通過建立一個有限步驟序列來逼近問題的解決的思想,主要體現于將解決問題的過程算法化(即組成算法的那一系列步驟或程序的設計和開發)中,實際上就是如何選擇、排定各種數學運算解決問題的過程,即構造數學應用的過程.
由此可見,算法本質上是數學的應用,是用數學知識解決問題的步驟或程序;算法的概念具有豐富的層次性.
從數學的起源來看,人類創造的數學大體可分為兩種類型,一種是以歐幾里得的《幾何原本》為代表的西方數學,它以形式化、公理化、演繹推理為思想特色;另一種是以中國《九章算術》為代表的東方數學,它以模型化、算法化、歸納推理為思想特色.正是站在中國古代數學蘊涵的豐富算法思想的基礎上,吳文俊先生開創了舉世公認的機器證明的“吳方法”.算法充斥著數學科學本身:幾何中有計算方法,算術和代數更有計算方法,分析中也有無窮小的計算方法,統計中有各種數據處理方法……可以說,有數學計算,就有算法.從數學本體看來,算法是數學內在規定的組成部分.數學為各門科學提供的解決問題的方法,其實就是一種算法,甚至有學者說“數學是一門算法科學”[7].算法的滲透幾乎可以結合所有的數學領域來分散實現.
事實上,很多國家都肯定了算法初步知識和思想作為公民的常識和素養[1]的觀點,并且將算法作為中小學數學課程的必修內容[8].如,荷蘭的數學課程將非標準的算法納入了教學目標體系,鼓勵學生獨立思考與創造多樣性的算法,小學階段要求學生在理解算法的基礎上應用計算器解決計算問題,中學階段則要求在多種算法中進行選擇.法國則從初中就要逐步導出編程及算法的概念,高中就要求學生討論數值問題與算法,并通過算法的教學訓練幫助學生把數學實驗和數學推理結合起來,培養學生嚴謹的素質.而德國巴伐利亞州的中學(9~10年級)也教學數學算法及其開發、以及將解決問題的算法闡述成計算機程序、簡單數值過程等的內容.美國從小學開始滲透算法思想,要求6~8年級的學生能夠建構和分析進行分數、小數、整數運算的算法;高中則要求學生創造出算法程式,并進行分析.韓國也在其數學課程內容中安排算法內容,有部分滲透,也有專門介紹.日本高中數學教材也對算法思想作了較系統的介紹.可見,算法可以分布在基礎教育不同階段的數學課程里,研究者不應該僅僅局限于高中階段來滲透算法知識和思想,而要重視學生算法能力的連貫培養,將有關算法的內容,適時、適量地穿插在各個階段的數學教學中、或者提煉出來、或者適時點撥、或者僅僅是有意識地“埋下種子”.從而使整個數學課程里的算法內容,得到連貫的體現,并促進學生在算法方面的連貫發展.
從計算機科學領域看,“學習計算方法的目的是為了使用它……而從計算方法的計算公式到在計算機上實際運行,兩者之間還有距離,這是數學能力與計算機應用技術能力之間的距離,也與計算機的運行環境和編程工具有關.”[9]因而,很多計算方法(計算數學)著作及教材,一般都是立足于如何填補從“計算公式”到“在計算機上實際運行”兩者之間的距離,將自己的主要任務和內容定為:根據所要解決的問題選擇、修改或創建某種計算公式,給出部分基本常用的計算公式的算法描述,并引導學習者編制相應的程序交由計算機運行以獲得問題的解,或者對這些基本算法進行改編.因而,其課程內容的基本點是順序、選擇、循環3種邏輯結構;內容主體是各種基本計算公式的算法描述;難點主要體現為,如何在算法描述中簡潔地用“循環”和“迭代”等計算機操作執行計算公式規定的計算步驟;體例主要是采用案例驅動形式.另一方面,通過分析現行高中數學課程標準[1]及一些版本的高中數學教材中對“算法初步”內容的規定,不難看出,“一些計算公式的算法描述”、“將算法翻譯為某種語言程序”、“運行程序”,也正是高中數學課程中算法部分的內容主體.這不禁讓人們有一種“中學數學課程中的算法內容就是計算數學的微縮簡化模型”的感覺.
從上述關于計算方法(計算數學)課程學習目的的描述以及各種著作的內容結構,可以看出,計算數學的靈魂在于算法的設計和開發.設計算法實際上就是建立合適的數學算法,而這一環節的實現要求設計者必須具備高超的應用數學解決問題的能力.因而,為算法的設計和開發奠定相應的數學基礎(即善于根據問題建立相應的數學運算序列),應該成為數學學科的任務,而不能期望其它學科代勞.從基礎教育的奠基性、數學教育本身的價值來看,這種算法的奠基性知識,才是基礎教育階段的數學課程與信息技術課程,與屬于計算機專業的計算數學課程相互區別和聯系的地方,也是基礎教育階段的數學課程應該為學生將來的發展和社會生活所應提供的基礎知識.而如果僅僅固守于當前中國高中數學課程中設置的算法內容,就會局限于算法本體的學習,這是不夠的.
如上,基礎教育數學課程中的算法內容應該以“算法設計及其開發的數學基礎”為核心.而這種數學基礎其實分布很廣,它至少應該包含兩個部分:
(1)算法的本體知識(如算法的概念、算法的描述、算法的實現等);
(2)算法的設計開發知識(主體是應用數學解決問題的知識).
對此,中國現行的高中數學課程標準的處理是:將算法內容納入到普通高中數學課程的“雙基”范圍之內,和強調對于計算的教學要重在算法的把握,而非“繁瑣的計算、人為技巧化的難題和過分強調細枝末節的內容”[1].這實際上包含了3個處理:
(1)對于算法的本體知識的處理,即采用設置獨立章節專門進行集中顯性教學的形式,這在數學課程必修3當中的“算法初步”部分已經落實了.
(2)對于算法的設計開發方面的知識,則需要通過諸如“強調對于計算的教學要重在算法的把握、摒棄繁瑣的計算、人為技巧化的難題和過分強調細枝末節的內容”、“把算法融入到數學課程的各個相關部分,整合的基本原則是有利于學生認識數學的本質”……的方式來落實.實際上就是在應用各種數學知識解決問題的過程中分散隱性“滲透”算法的教學形式.這兩種處理,前者主要是通過課程設置、教材編寫來體現的,而后者則只能在課程實施過程中通過廣大數學教師的實踐來體現.
(3)算法教學需要遵循的基本原則應是——“促進學生認識數學的本質”、理解數學思維方式,而不是純粹地學習一些算法的外在形象.這就勾勒了一幅“算法不應僅僅作為一個獨立的知識內容,還應該滲透在其它相關部分”的立體畫面,里面經緯分明,顯隱配合.
為了獲得對算法知識在整個中小學數學課程中的全局認識,還需要考察算法在小學及初中階段如何進行滲透的問題.
《義務教育課程標準實驗教科書·小學數學·三年級下冊·教師用書》(人教版)在第五單元中提出了這樣的教學建議:把計算教學融合在解決實際問題的過程中,讓學生通過解決實際問題學習計算方法;讓學生主動探索經歷計算方法的形成過程,促進學生理解計算過程與算理,體會計算的意義和作用;加強估算,鼓勵算法多樣化.這些教學建議,既強調了“加強估算”、“提倡算法多樣化”的課程理念,又體現了“算法就是數學應用”的本質.再如,義務教育數學課程標準在第一學段與第二學段的數與代數內容標準中也都對“與他人交流各自算法”做了要求,意在讓學生理解自已和他人的多種算法,從而選擇較合理的基本算法(算法優化).在義務教育數學課程標準[10]附錄中所提供的實例,也隱含了算法思想的滲透.如例31[10],課程標準建議引導學生運用嘗試的辦法探索規律,解決問題,并建議提供3種參考解決方法:(1)列表法;(2)增減法;(3)列二元一次方程組法.此外,諸如心算和估算(除法中的試商等)、多位數加減法的豎式算法、分數的加減法(先通分再加減)之類的教學內容中就已經天然地滲透著算法知識和思想.可見,在小學階段,算法知識的滲透,其核心是在解決問題過程中實現計算方法的多樣化,在訓練學生的基本運算技能的同時逐步培養一般化的算法思想.
初中階段,在人教版數學教材(七上)的一元一次方程一章,配有下圖(圖 1),以幫助學生借助框圖體會反思的過程.再比如,義務教育數學課程標準在第三學段提供了教學實例“估計方程的解”(用二分法借助計算器進行)[10].這里的目的不是要求出方程的精確解,而是讓學生通過解決問題初步了解求方程的數值解的算法,感受應用數學解決問題的算法思想.這就為將來形成(解方程的)算法概念奠定了感性基礎.此外,中國義務教育數學課程標準提出的各個學段的“問題解決”課程目標,均有類似這樣的描述:“從不同角度尋求分析問題和解決問題的方法的過程,體驗解決問題方法的多樣性,掌握分析問題和解決問題的一些基本方法”,“在與他人合作和交流過程中,能較好地理解他人的思考方法和結論”“能針對他人所提的問題進行反思,初步形成評價與反思的意識”.可見,在初中階段滲透算法知識和思想的途徑,就是讓學生感受和經歷解決問題的思考方法的多樣化,并適時提升學生的認識.

圖1 教材配圖
由上,學生進入高中學習專門的算法內容之前,就已經在很多課程內容中對算法知識有所感受和積累了.研究者不應忽略這些基本經驗的存在.算法初步知識和思想作為公民的常識和素養之一,就不應在學生的數學發展過程中出現斷裂和憑空突擊的情形.因此,數學課程需要落實學生的算法素養的培養與學生數學發展的整體協調,需要從小學起重視算法知識和思想的連貫培養、滲透,需要注重調動學生已有的數學算法經驗、注重算法的開發和應用的學習,以提高學生的邏輯思維能力.另一方面,由于在義務教育階段,算法知識主要是隱含在數與代數、圖形與幾何、統計與概率、綜合與實踐這些領域的各種具體課程內容背后的,具有潛隱性,所以這一階段的算法內容主要呈現為分散“滲透”的形式,體現為數學算法的開發、多樣化;學生主要是感受和積累經驗.至于算法的集中教學,則只有等到學生具備相應的數學基礎和計算機知識基礎、邏輯思維發展到一定的程度才可以進行.正因為如此,中國的數學課程標準及各版本數學教科書,都把算法的集中教學安排在高中階段.總之,要實現中小學數學課程中的“算法”內容與思想的協調,就要兩手都要抓:(1)高中數學課程中的算法內容適合采用集中顯性教學與分散隱性滲透相結合的方式;(2)義務教育數學課程中的算法內容,宜采用分散滲透為主的形式.
綜上,由于算法是高中數學課程的核心概念和基本思想之一,其教學自然也應該遵循課程標準的“注重體現基本概念的來龍去脈”的要求,主要以解決問題的過程為載體來學習設計程序框圖、體會算法思想、掌握算法初步知識、提高邏輯思維能力.初中階段則主要是初步感受算法思想.小學的算法發展,主要應定位為:感性積累一些具體算法實例、發展對運算、數量關系的理解等,這其中需要教師點撥、鋪墊,將潛隱的和基本的算法知識轉換為學生可以感受的形式,融入學生的基本數學活動經驗中去.如,運用相逆的運算、數量關系解決問題,進行數量比較(數學課程標準教學實例2[10])等.即,在義務教育階段,算法知識與思想的滲透,最終可能需要落實在算法多樣化和優化意識的培養上.但由于義務教育階段算法知識的潛隱性,合理的教學方式可能主要是分散點撥、啟發、提煉的形式.這樣,從小學到高中,各階段算法知識的教學就體現為“從經驗到理論知識”的上升歷程.
總之,數學課程除了需要在高中階段專門集中教學算法知識并在其它相關知識中滲透算法思想,還需要從小學起重視算法思想的連貫培養,實現算法知識的顯性教學與隱性滲透的結合.在高中集中顯性教學算法知識的同時,數學課程需要具有讓學生在不同學段中積累算法知識與經驗,將各學段相互聯系,促成學生持續發展的全局視野.這是把握算法知識在整個基礎教育數學課程中連貫一致、螺旋上升、逐步提高的發展脈絡,是落實學生算法知識與相關數學知識的整體、協調發展的需要.
[1]中華人民共和國教育部.普通高中數學課程標準(實驗)[M].北京:人民教育出版社,2003.
[2]陳國芳.高中數學新課程中算法教學現狀的調查與分析[J].數學教育學報,2006,15(4):65.
[3]普通高中課程標準實驗教科書《數學3》(必修)[M].北京:人民教育出版社,2004.
[4]普通高中課程標準實驗教科書《數學3》(必修)[M].北京:北京師范大學出版社,2004.
[5]徐斌艷.學生算法概念建構中的認知結構研究[M].上海:華東師范大學出版社,2003.
[6]吳文俊.數學機械化[M].北京:科學出版社,2003.
[7]郝一江.結構不是數學的本質[J].數學教育學報,2004,13(1):38.
[8]鮑建生,周超.數學學習的心理基礎與過程[M].上海:上海教育出版社,2009.
[9]張韻華.數值計算方法和算法[M].北京:科學出版社,2000.
[10]中華人民共和國教育部.義務教育數學課程標準(2011年版)[M].北京:北京師范大學出版社,2012.