南京師范大學附屬揚子中學 張 沁
計算思維(Computational Thinking)于2006 年由美國卡內(nèi)基·梅隆大學計算機科學系主任周以真(Jeannette M. Wing)定義為:計算思維是運用計算機科學的基礎概念進行問題求解、系統(tǒng)設計,以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。可以理解為,計算思維是利用計算機求解問題的一種思維活動。2017 年,我國教育部制定的《普通高中信息技術課程標準》(以下簡稱《新課標》)中,首次提出了學科核心素養(yǎng),并把計算思維作為高中信息技術學科的四大核心素養(yǎng)之一?!缎抡n標》指出,計算思維是個體運用計算機科學領域的思想方法,在形成問題解決方案的過程中產(chǎn)生的一系列思維活動。而算法與程序實現(xiàn),即利用計算機對問題的求解,是對計算思維的體現(xiàn)。
在高中信息技術課程結構中,將“數(shù)據(jù)與計算”作為必修部分的模塊1。由此可見,“數(shù)據(jù)與計算”在整個高中信息技術學科教學中占據(jù)重要地位。該模塊中關于“算法與程序實現(xiàn)”內(nèi)容的學業(yè)要求為:依據(jù)解決問題的需要,設計和表示簡單算法;掌握一種程序設計語言的基本知識,利用程序設計語言實現(xiàn)簡單算法,解決實際問題。算法即解決問題的方法和步驟,它是程序的靈魂。而程序則是算法思想的體現(xiàn)。目前,在高中信息技術課程教學中,“算法與程序實現(xiàn)”這部分內(nèi)容的教學一直是比較難以處理的內(nèi)容。學生對此內(nèi)容比較陌生,長期缺乏計算思維的訓練,他們不知道如何利用計算思維分析問題,更談不上解決問題。而“計算思維”的提出,使信息技術課程教學從注重實踐操作的技術素養(yǎng)層面上升到注重思維素養(yǎng)培養(yǎng)的層面。因此,對于此內(nèi)容的教學如何開展?如何培養(yǎng)學生的計算思維?我將以《循環(huán)結構》這一節(jié)課為例,探索算法與程序的教學方法以及培養(yǎng)學生計算思維的方法。
本節(jié)課《循環(huán)結構》是教科版高二信息技術選修《算法與程序設計》教材的第二章的第三節(jié)的第三部分內(nèi)容,既是對前面學習內(nèi)容的鞏固,例如界面操作、Visual Basic 基本語句的掌握,也是對下一章《算法的程序實現(xiàn)》學習的基礎。程序的基本結構有順序結構、選擇結構和循環(huán)結構,掌握程序的基本結構是學習算法和程序設計必須掌握的內(nèi)容。經(jīng)過前面內(nèi)容的學習,學生已經(jīng)初步熟悉了Visual Basic 界面,對編程有了初步的了解和嘗試,已經(jīng)學習了基本操作(如程序的保存、運行)、數(shù)據(jù)的輸出(如print 語句)、順序結構和選擇結構的特點等。
帶領學生回憶上節(jié)課的內(nèi)容,如:Visual Basic 的界面、程序的保存與運行、數(shù)據(jù)的輸出等。
教師提問1:如何在窗體上單擊一次,打印出1 個“*”符號?(click事件、print 語句)
生:給出程序:
得到預期的運行結果。
【設計意圖】
復習上一節(jié)課的知識點,并為后面的學習做鋪墊。這個任務的難度較低,容易實現(xiàn),學生能夠輕松掌握,降低其畏難情緒,引起學生的興趣。
教師提問2:如何在窗體上單擊一次,打印出10 行“*”符號?
【設計意圖】
學生利用目前掌握的知識,思考、修改問題1 的程序,能夠較容易地解決此問題,提高學生學習的積極性。學生認識到“;”的作用。如果加分號,下次輸出就會緊接著輸出。如果不加分號,下次輸出就會換行輸出。在程序實現(xiàn)時,要注意程序語句的使用規(guī)范,根據(jù)實際問題,使用相應的程序語句。
教師提問3:如何在窗體上單擊一次,打印出100 行“*”符號?甚至1000 行“*”符號?
生1:思考,感到困惑。
生2:重復執(zhí)行print“*”語句100 次,但是這樣寫程序,行數(shù)太多了,人工操作很難實現(xiàn)。能讓計算機自動執(zhí)行嗎?
表1
【設計意圖】
與學生目前掌握的知識產(chǎn)生沖突,激發(fā)學生的學習興趣,引出本節(jié)課的內(nèi)容——循環(huán)結構。
師:剛才有同學說重復執(zhí)行print“*”語句100 次,但是手動編寫100行重復的代碼,太耗費精力了?人工操作很難實現(xiàn)。如何讓計算機自動執(zhí)行print“*”語句100 次呢?我們可以使用循環(huán)結構。
師:循環(huán)結構For…Next…語句講解(略)。
教師提問4:給出程序片段:
如何修改程序,實現(xiàn)在窗體上單擊一次,打印出10 行“*”符號?
生:學生思考、探究、嘗試,修改程序,查看運行結果。
表2
【設計意圖】
設計打印“10”行,方便驗證循環(huán)語句的結果是否正確。學生先運行教師提供的程序,觀察程序的運行結果,體會循環(huán)結構中各語句的作用。然后,學生修改部分程序即可實現(xiàn),上手快,初步感受循環(huán)結構的使用方法。并且,不同的學生,給出了不同的解決方法,體會到程序實現(xiàn)的自由與樂趣。
師:引導學生思考,引入兩個變量,雙重循環(huán)。一個變量i 控制“*”的行數(shù),一個變量j 控制“*”的個數(shù)。
師:給出程序片段:
生1:思考,怎樣修改程序,使“*”打印3 行。
生2:每行“*”的個數(shù)以2 遞增,即:“*”的個數(shù)為1、3、5,“*”的個數(shù)為奇數(shù),可以利用步長來控制。
生3、生4、生5:觀察老師給出的程序片段,思考現(xiàn)有程序和實際問題的關聯(lián)之處,修改,嘗試。
【設計意圖】
教師給出程序片段,學生思考,修改程序,試錯,最終得到預期的結果。開闊了學生的思維,學生提出了不同的解決方案,即不同的算法,使學生們感受到程序的樂趣和魅力。在程序和算法教學中,應提供給學生想象的空間,應鼓勵學生大膽思考、嘗試、實踐,不拘泥于某一種“標準答案”。
表3
【設計意圖】
通過互相關聯(lián)的小任務,層層遞進,激發(fā)學生主動參與,積極思考,考查學生綜合運用知識的能力。學生由淺入深,由易到難,逐漸理解算法的意義,掌握程序實現(xiàn)的方法。從而,有效地培養(yǎng)了學生的計算思維,學生漸入佳境。
計算思維的培養(yǎng)有助于提高學生發(fā)現(xiàn)問題和解決問題的能力,提高學生綜合運用知識的能力。目前,程序設計語言有很多種,如Visual Basic、C、C++、Python 等,無論哪種程序設計語言,它們都是利用計算機來解決實際問題,都需要將具體的問題抽象化,它們的內(nèi)在是相通的,算法是程序的核心。通過程序教學,可以有效地培養(yǎng)學生的計算思維。在程序教學中,應注意以下幾點:
良好的課堂引入使教學事半功倍,這就需要老師精選合適的實例。比如在本節(jié)課的開始,我設計的第一個小問題是如何在窗體上單擊一次,打印出1 個“*”符號?學生知道是用Print“*”這條語句。接著提問如何單擊一次,打印出10 行“*”符號?學生很容易就想到用10 行Print“*”語句。接著我再次提問如何單擊一次,打印出100 行“*”符號?甚至1000行“*”符號?這個問題與學生此時的認知水平產(chǎn)生沖突,學生會想到用100 行Print“*”語句,但人工這樣做,工作量太大了,不易實現(xiàn)。怎樣解決此問題呢?從而引出本節(jié)課的內(nèi)容——循環(huán)結構,也就順理成章了?!芭d趣是最好的老師”,在程序教學中,應讓學生主動參與,變被動為主動,讓學習成為學生的一種自主的需要。學生有了興趣和熱情,學習的積極性提高了,學習的效果自然也會提高。
程序設計的語句一定要解釋到位,有些地方特別容易被忽視。如果不解釋到位,程序的運行結果就會大相徑庭。正所謂,差之毫厘,失之千里。比如:本節(jié)課的一個知識點,“;”的含義一定要使學生理解。如果Print“*”后面加了“;”就是緊接著輸出后面的語句,運行下來的結果就不是10 行“*”,而是一行10 個“*”,容易被人忽略的“;”使程序的運行結果完全不一樣。我們在程序教學中,一定要注意將基礎的知識點解釋到位,程序語句的規(guī)范使用,這樣才能避免因一些小問題而導致程序運行結果達不到預期的效果。
在本節(jié)課的開始,結合上一節(jié)課的知識點,通過簡單的任務,學生能夠利用現(xiàn)有知識輕松地解決實際問題,使學生體會利用程序解決問題的過程。再通過下一個任務,與學生現(xiàn)有知識產(chǎn)生沖突,激發(fā)學生積極思考,探尋解決問題的方法,引出本節(jié)課的知識要點。在這之后,又通過與上一個任務關聯(lián)的任務,激發(fā)學生聯(lián)想,思考,找出并分享解決問題的不同的方法。通過多個層次分明,互相關聯(lián)的任務,由淺入深,由易到難,符合學生的認知規(guī)律,使學生能夠在任務的解決中,逐漸理解算法的意義,逐漸掌握程序設計的方法,即利用計算機解決問題的能力,從而有效地培養(yǎng)學生的計算思維。
程序實現(xiàn)是靈活的,千變?nèi)f化的,具有不唯一性。同一結果,不同的程序語句同樣都能實現(xiàn),這就是程序的樂趣和魅力所在。我們應給與學生們想象的空間,引導學生積極思考,勇于嘗試,不斷完善和改進程序。例如本節(jié)課,對于同一任務,學生找到了各自的解決方法,并通過程序的分享,開闊了學生的視野,體會到程序設計的樂趣,條條大路通羅馬。
總之,在對學生計算思維的培養(yǎng)中,應注重知識遷移能力的培養(yǎng),使學生能夠綜合分析實際問題,并采用合適的方法來解決問題。應注重學生的體驗,激發(fā)學生的學習興趣,讓學生積極思考,主動參與,從而有效地培養(yǎng)學生的計算思維。