《中國信息技術教育》:如何正確認識算法在義務教育信息科技內容體系中的地位?
王榮良:算法在計算機科學學科中占據著重要的地位。20世紀初,奧地利數學家哥德爾發表了不完備性定理的論文,其主要觀點是,在任何一個包括傳統意義的算術系統的數學理論內,總有一些命題的真偽無法通過算法的手段來確定。該論文證偽了希爾伯特關于“數學是可判定的”猜想,同時開啟了有關算法能力的研究。截至目前,計算機科學研究的大部分都是可計算問題,包括運用算法實現有效的計算。在大學計算機學科教育領域,算法也是主干課程。義務教育信息科技課程標準雖然沒有明確界定信息科技與計算機科學學科之間的關系,但從算法成為信息科技課程重要學習內容這一事實,可以佐證計算機學科在課程中的重要地位。課程標準規定了有關算法的學習要求,但我們仍然需要思考,學習算法到底是在學習什么?是知道算法有三種結構,還是學習用流程圖表示算法,或者可以判斷一個算法必須有輸入或者輸出?即使是學習用流程圖表示算法,也涉及是學會流程圖的使用,還是以流程圖為工具學習算法。因此,為什么要學習算法,為什么要在信息科技課程中學習算法,仍是一個值得深入思考的問題。
魏雄鷹:我們要認識到,算法的學習并不是很簡單的,學生要理解算法、掌握算法,形成算法學習所特有的思維模式,需要有一個長期的過程。因此,盡管在義務教育信息科技課程體系中,已安排了“身邊的算法”這一獨立模塊,但僅僅一個模塊的學習時間,是很難學好算法的。而作為邏輯主線,算法的學習將貫穿整個義務教育階段,成為核心內容之一。
鮑通:既然是“體系”,就要從整體來看。過去的信息技術,主要就是識別信息、獲取信息、處理信息、輸出信息,可視為一個簡單的信息系統。如今的信息科技,已不再是單純的信息加工,而是賦予了“智慧”能量的智能系統。從簡單的物聯網搭建,到復雜的人工智能,這之間離不開龐大的數據處理,信息的來源、信息分類以及信息的獲取方式等都發生了很大變化。面對錯綜復雜的底層邏輯,如何整合數據提高系統的運行效率、提高安全系數,將是整個智能系統的重中之重。而此時,“算法”的價值得以體現,它將把復雜的問題簡單化,集各路信息為一體,做出更有價值的綜合判斷。義務教育階段的學習,則是引導學生走進今天的科技圈,從實際案例中了解算法的含義以及原理,最終將算法在智能系統中所起到的作用、將這種“精髓”輻射(遷移)到更廣泛的學習乃至實際生活中去,讓自己變得更加優秀。
《中國信息技術教育》:算法與編程教育之間的關系是怎么樣的?在義務教育信息科技課程實施中,應如何正確處理算法和編程之間的關系?
王榮良:依據一般的理解,編程教育主要目標是學習編寫程序,所以,編程教育肯定會涉及算法。通過編程教育,是否一定能有效地達成算法學習的一般性目標,則需要依據編程教育的具體學習內容和教學方法來定。了解算法與編程的關系,可以清晰地知道具體的編程教育課程對算法學習的貢獻。通俗地理解,算法是規定某一任務怎樣完成的一組步驟。數學中的解題步驟是算法,如求解一元二次方程的解題流程;生活中很多做事的步驟也是算法,稱之為生活算法。依據計算機學科對算法的理解,在一臺計算機裝置完成一項任務之前,就要找到完成該任務的算法,并且以該計算機裝置能夠識別的方式編碼、表示、存儲并最終運行。這樣一個算法的表示,就稱為一個程序。開發一個程序,并以該計算機可以識別的形式進行編碼并輸入到計算機之中的過程,就稱為程序設計,也稱為編程。
學習算法,重要的是算法發現,也就是找到完成一個任務的算法,這樣完成該任務的工作就可轉變為遵循算法的指示辦事的過程了。從某種意義上說,解決該問題的智能被編碼到這個算法之中了。當然,算法不一定都需要通過編程表示,當預設的目標是由計算機自動地完成這項任務,才需要編程。算法可以獨立于編程而存在,而編程則是算法的某一種形式的表達。
因此,站在計算機學科的角度來看,一個算法發現的全過程如下:①理解問題;②得到一個解決該問題的算法過程的想法;③形式化地描述這個算法,將它表示為程序;④評估這個程序的正確性和精確度,同時評估它作為解決其他問題的工具的潛力。在此算法發現四步驟中,將算法用程序的形式表達并運行,是特別有意義的環節。
從算法與編程的關系分析來看,在算法學習中融入編程技術,學會用程序表達算法,可以真實地實現用程序驗證算法,有利于學生學習算法,也有利于學生通過算法的學習很好地達成課程目標。
魏雄鷹:編程教育的起起落落,使人們對算法的認識也在不斷發生變化。在中小學計算機課程時代,算法與編程實際上是沒有嚴格區分的,在大眾眼里,學編程等于學算法。中小學的計算機課時非常有限,學生也只能以語言為基礎來初步了解算法的三種基本結構。近幾年,隨著圖形化編程語言的興起,編程教育更偏向于編程作品創作,而算法學習更注重思維上的提升,注重問題解決過程中的抽象、建模與算法的設計、優化等,算法學習與編程教育密切相關,但不完全等同,學算法不等于寫“代碼”。
義務教育信息科技課程標準在“身邊的算法”模塊明確給出了教學提示:本模塊要求學生體驗計算機程序,鼓勵學生從多個方面熟悉程序,不要求每個算法問題都由學生編程實現,閱讀理解、修改運行等也都是有意義的體驗。在開展算法教學時,要注重培養學生利用算法求解簡單問題的能力,形成初步的算法思維。編程主要用于驗證算法,通過編程實現算法,進而能夠對算法的正確性與執行效率進行初步分析。
梁祥:第一,算法與編程是同一件事情(抽象)的兩種屬性。算法是在有限步驟內解決問題所使用的方法,是用作人類表達思想的語言。編程是程序語言將這種思想轉換為計算機可以理解的方式。第二,算法與編程的對比。算法是求解信息處理問題時的一種思維方式。編程是應用編程語言實現算法的過程。其中編程語言是描述信息處理過程的形式語言,而編程則是基于信息的推理活動(計算也是一種推理)。
我認為,義務教育階段應避免將編程及編程語言本身(如語言要素、特征、程序構造、編程技巧等)作為教學目標或重點。教學目標應根據新課程標準,突出算法邏輯主線循序漸進和螺旋式發展的作用。例如,在小學階段通過指揮計算機“做某種動作”“完成某種任務”等多種形式體驗編程;初中階段以能讀懂、運行并欣賞用編程語言書寫的算法及過程,通過實現算法(包括計算、查找與搜索、數據處理、模擬過程、反饋控制等)來學習實踐和掌握編程。
鮑通:算法的概念不局限于編程,生活中也處處離不開算法。算法可以讓編程教育不再是為了編程而學習編程。對于編程教育本身而言,具體還要看編程教育的目標是什么。如果側重培養學生的思維,那么對算法的理解是關鍵(明白算法的含義,簡化復雜問題,尋找最優解決方案,讓事務變得更加清晰有條理,學生可以通過開發小型案例逐步觀察算法的優勢,充分體驗“省時省力”的做法);如果側重培養學生的技能,那么對算法的應用是關鍵(在學習掌握“操作系統原理”的基礎上,結合實際項目,思考如何提高功能模塊的運行效率,如何讓模塊之間盡量保持“低耦合、高內聚”,學會從軟件工程過程的角度思考問題,做整體的軟件設計,以將項目逐步打造成為一個產品為目標)。無論是對思維還是技能的培養,算法學習總歸是編程教育中一個不可缺少的環節,雖然前后側重點不同,但二者相輔相成。
《中國信息技術教育》:如何看待算法與計算思維之間的關系?
王榮良:第一,計算思維是計算機科學的學科思維,算法是計算機學科的核心內容,計算思維與算法,從學理上有著天然的聯系。雖然算法不是計算思維的全部,但是算法學習是很好的計算思維培養的渠道。第二,義務教育信息科技課程標準把計算思維界定為“個體運用計算機科學領域的思想方法,在形成問題解決方案過程中產生的一系列思維活動”。根據課程標準的描述,具備計算思維的學生應有以下兩個特質:其一,能對問題進行抽象、分解、建模,并通過設計算法形成解決方案;其二,能嘗試模擬、仿真、驗證解決問題的過程,反思解決問題的方案,并將其遷移運用到解決其他問題中。前一條特質,“通過算法形成解決方案”說明了算法的核心作用;后一條特質,“解決問題的過程”“解決問題的方案”,都是算法的具體表現。由此可知,在信息科技課程中已將算法作為計算思維培養不可或缺的內容。第三,進一步分析算法發現四步驟,可以發現,對步驟1理解問題,需要待解決問題的學科知識,也需要對該問題進行建模的數學思維,如果學生還具備計算機學科的基礎知識和思想方法,就可思考問題解決的方案是可以在計算機工具的支持下自動完成的。而這正是計算思維的價值所在,可以將具體問題所涉及的學科知識與生活經驗、數學建模以及計算機學科思想方法結合在一起,將思維從步驟1理解問題有效地推向步驟2、步驟3以及步驟4。
魏雄鷹:中小學生學習算法,開展編程教育,不是為了培養“碼農”,而是為了發展學生計算思維,提升全體學生的數字素養。計算思維是指個體運用計算機科學領域的思想方法,在形成問題解決方案過程中產生的一系列思維活動。算法是最能體現用計算機解決問題所特有的思想方法,因此,培養學生的計算思維,學習算法是一條很好的路徑。信息科技課程標準也明確提出,算法是計算思維的核心要素之一。通過學習算法,學生能夠用明確的、可執行的操作步驟描述問題求解方案,能夠用順序、分支和循環三種基本控制結構設計程序解決問題,這些都是計算思維的重要表現。
梁祥:第一,“算法”只是“計算思維”系列有序步驟的一部分。計算思維是一種問題解決的過程,這個過程包括問題表征、數據分析、數據抽象、形成自動化的解決方案、分析試用各種解決方案、擴大解決方案應用范圍等一系列有序步驟。其中通過“算法”的思想(一系列有序的步驟)生成自動化的解決方案只是其中之一。第二,計算思維的培養是一個逐漸積累和不斷優化的迭代過程。在基于計算思維的問題求解模型中,理解問題包括要能正確地提出問題、表示問題。設計求解方案的重點在于要能設計出可以編程實現的算法,在實施求解方案中包括用語言工具實施算法以及調試驗證算法,核查評估環節重在評估求解方案的效率、代價和精度等。只有將問題理解(敘述、表示)和求解(算法設計、實現、評估、優化)看成一個整體,才能體現出計算思維的真正價值,較好地解決編程教育中的碎片化問題。
《中國信息技術教育》:在義務教育階段,將通過哪些方式實施算法教學呢?
王榮良:任何教與學方式的選擇,都是為教學目標服務的。我認為,以計算的觀點學習算法,并且學會以計算的觀點看待世界,是算法學習的一般化方式,也是算法學習的普及性目標。算法發現是算法教學的重要內容。在算法發現四步驟中,每一步驟的落實都要求是可計算的。從“理解問題”階段開始,學生就應該學會基于計算原理及基礎知識對問題進行抽象,并建立可以在計算模型支持的運行環境中執行的操作序列,而不是隨心所欲地編寫執行流程,也不是機械地照搬算法結構,保證每一步操作都是確切可執行的,并能達成預設目標。思想實驗是一種值得提倡的教學方法。所謂思想實驗,就是運用人腦思維而不是實物觀察的實驗過程,從已有且公認的經驗事實出發,并經過一系列的推理推導出最終的結論,用來作為對某一理論的支撐和證明。在算法教學中,可以運用思想實驗的方法,在大腦中確定算法運行環境即計算模型的基礎上,逐步推演算法的每一步操作,得出最終的算法運行結果。思想實驗的過程與結果,可以在真實的計算機上運行算法得到驗證。因此,通過人的大腦,可以將反映真實問題的現實世界與完成對應算法的計算機世界有機結合,使其成為一體。
魏雄鷹:根據我國義務教育階段的教學實際,算法教學可以采用必修與選修相結合、集中學習與融合分散學習相結合的方式。首先,“身邊的算法”作為信息科技課程標準中獨立存在的內容模塊,學生可以在第三學段的信息科技課中系統學習該模塊所安排的算法基礎知識,理解算法對生活的指導意義,學會用算法解決生活中的問題。其次,在一、二年級,可以在信息科技與其他學科融合學習過程中,進行計算思維的啟蒙教育,學生從識別任務實施步驟、能將大問題分解成小問題開始,逐漸培養用算法解決問題所特有的思維方式。最后,除了信息科技課程,還可以利用拓展性課程、選修課、社團活動等形式開展算法學習,尤其是在創客教育、機器人教育、信息學競賽等活動中,算法是這些活動開展的基礎,一些學有余力、對算法與編程特別感興趣的學生,就可以在這類課程中進行深入學習。
梁祥:第一,通過觀察法培養學生描述算法的能力。算法應該源自學生熟悉的應用情境,從身邊可以直接觀察到有序的、能夠完成具體任務的流程。第二,通過對比法培養學生分析算法的能力。分析算法的能力需要教師為學生搭建起學習的支架,可以從最簡單的算法走向一般性描述的抽象臺階。第三,通過編程體驗法培養學生應用算法的能力。要正確引導學生的學習興趣,重點關注學生的學習體驗和獲得感,這樣才能真正實現循序漸進和螺旋式發展。第四,在課程設計上不應過分追求知識體系的系統性。算法關注學生個人經驗與認知發展,在課程設計上,不應過分追求知識體系的系統性,而應根據真實性與體驗性的項目學習需要,讓算法中所涉及的核心思想、形式化或半形式化表示、算法推導的數學及背景知識在學生的知識范圍內,或略微超過學生的知識范圍進行介紹。在教學時應避免直接提出一般化、形式化的算法描述。
鮑通:小學階段可以借助圖形化編程工具來模擬信息系統的算法,多設立一些具有輸入輸出、帶有人機交互性的案例。圖形化編程對于小學生而言比較通俗易懂,但如果僅僅圍繞一些小游戲、小動畫的制作,并不能體現編程的真正意義,因為圖形化程序本身不涉及計算機代碼,它更像多媒體制作工具拖拖拽拽,因此小學階段可以將重點放在對學生“思維”的培養上,注重案例本身的“整體性”和“層次性”,以及教學過程的“研究性”和“完整性”,激發學生悟性“開小門,見大山”,使其充分領悟算法的含義,養成良好的學習習慣。
《中國信息技術教育》:當前,實施算法教學會面臨哪些挑戰?如何破解遇到的困難?
王榮良:義務教育信息科技課程對算法教學進行了整體設計,其學習目標的制訂、學習內容的布局與原有的信息技術課程不可同日而語。在新課程的實施過程中,教師們既要學習、接受新課程所要求的新理念、新內容、新方法,也要克服原課程教學中養成的與新課程教學目標不一致的教學行為慣性。
算法教學面臨的困難會有很多。其中,學生年齡低、認知能力相對弱、缺乏計算機學科相關知識儲備等,都是開展抽象的算法學習所面臨的困難。如何讓學生學好算法,掌握算法最核心的思想方法,需要不斷地探索。因此,教師需要從教學細節中了解學生,發現問題,改進教學方法。
教師需要認識到算法的普遍性以及算法教學對促進計算機科學的理解、培養計算思維的重要性。算法教學,不應該局限于知道某幾個典型算法,也不應該滿足于在某一個編程平臺驗證算法,而應將算法思想滲透到信息科技課程的教學中,算法是作為課程的邏輯線索貫穿于全學段課程學習內容的。因此,廣大教師需要在信息科技課程實踐中,根據不同年齡學生的認知基礎與知識儲備以及算法學習的內在規律,組織梳理算法相關教學內容,在三、四年級能夠為五年級的算法學習提供扎實基礎,在六、七、八年級能夠豐富算法相關知識,提升算法應用能力,支持其他模塊的有效學習,從而確定各年級的算法學習目標,形成立體的算法教學內容體系。
魏雄鷹:算法教學內容有很強的專業性,對教師專業水平要求較高,因此,加強有關算法方面的專業技術學習,是教師們首先要面對的現實問題,這個問題的解決可以從兩方面來考慮:一是建立信息科技教師專業化成長培養體系,明確信息科技教師的專業要求和職業成長路徑;二是信息科技教師自身要加強學習,不斷提升自己的專業水平。其次,算法教學不同于多數信息科技教師所熟知的作品教學方式。在信息技術學科時代,操作性是信息技術課堂最大的特點,但是在算法教學時,如果還是延續這種教學方式,會發現要完成教學任務非常困難。算法教學與作品教學有很大的不同,如何根據算法教學特點,解決思維培養中的難點,提升學生思維水平,是需要全體信息科技教師共同研究的課題。
梁祥:第一,學科教師專業化程度有待提高。具體表現為具有計算機學科專業背景的教師比例不高,不少教師所學專業為教育技術專業,甚至有一部分教師是來自其他學科的兼職教師。第二,算法教學缺乏科學的評價體系。在教育教學過程中,課程、教學和評價是一個有機整體,三者缺一不可。第三,算法教學中存在學段之間銜接困難的情況。隨著課程的進一步落地與實施,特別是在小學和初中同步落地教學的過程中,需要充分考慮不同學段之間的關聯。第四,學生計算思維能力的培養與訓練缺乏方法。在算法教學過程中,目前因沒有教材,一線教師在學生計算思維能力的培養與訓練上缺乏方法,常出現發力不足或發力過猛的情況。
鮑通:以小學階段現狀為例,遇到最大的挑戰就是時間問題。三年級開始了解計算機結構及操作系統,四年級學習WPS文字及WPS演示,五年級開始接觸圖形化編程,六年級學習機器人物聯網。不難看出,實施算法教學最快也要放在五年級下學期,按照每周1課時來計算,時間確實緊迫。要想實施算法教學,前期對基礎知識的鋪墊是必不可少的,而且需要進行系統性的、連貫性的學習。我有兩點建議:一是四年級開始學習圖形化編程;二是2課時合并為1節課(1節課90分鐘),每兩周上一節課,這樣有助于學生對程序的深入研究。