董 玥
(北京師范大學(xué)附屬實(shí)驗(yàn)中學(xué) 北京 100032)
信息技術(shù)的迅猛發(fā)展,對(duì)教育帶來(lái)重大挑戰(zhàn),發(fā)展學(xué)生核心素養(yǎng)的內(nèi)容成為課程改革的課程目標(biāo)。依據(jù)新課標(biāo)的要求,信息技術(shù)學(xué)科的核心素養(yǎng)主要包括信息意識(shí)、計(jì)算思維、數(shù)字化學(xué)習(xí)與創(chuàng)新、信息社會(huì)責(zé)任四個(gè)方面,這無(wú)疑對(duì)信息技術(shù)教育教學(xué)提出了很高的要求,需要對(duì)課內(nèi)外學(xué)習(xí)內(nèi)容做出很大程度的改變。特別是要將各類青少年編程、機(jī)器人編程課程走進(jìn)中小學(xué)課程和課外實(shí)踐課程,來(lái)推進(jìn)信息技術(shù)教學(xué)改革。
計(jì)算思維由美國(guó)卡內(nèi)基·梅隆大學(xué)周以真教授提出,認(rèn)為計(jì)算思維是利用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行為題求解、系統(tǒng)設(shè)計(jì)以及人類行為理解的思維活動(dòng)[1-3]。從教學(xué)目標(biāo)來(lái)看,中小學(xué)的信息技術(shù)和編程教育,需要以思維訓(xùn)練提升核心素養(yǎng)為指導(dǎo)思想,重點(diǎn)培養(yǎng)學(xué)生運(yùn)用計(jì)算機(jī)解決實(shí)際問(wèn)題的能力[4-5]。這樣計(jì)算機(jī)編程為學(xué)生帶來(lái)的提高不僅僅是技術(shù)層面的模擬,而是上升到思維訓(xùn)練層面,在中小學(xué)信息技術(shù)課程中極為重要。
從中小學(xué)信息技術(shù)教育的目標(biāo)來(lái)看,計(jì)算機(jī)編程課程重點(diǎn)培養(yǎng)編程思想和解決實(shí)際問(wèn)題的能力。掌握程序設(shè)計(jì)的基本常識(shí)和主要思想,形成運(yùn)用計(jì)算思維方法解決問(wèn)題的能力,為進(jìn)一步學(xué)習(xí)其他知識(shí)和未來(lái)發(fā)展打下堅(jiān)實(shí)的基礎(chǔ)。
編程教育無(wú)論是針對(duì)小學(xué)生,還是中學(xué)生,其實(shí)都是有很好的實(shí)施途徑和手段的,適合各個(gè)年齡段學(xué)生的學(xué)習(xí)。學(xué)生對(duì)于編程的興趣比很多純機(jī)器人硬件的搭建更濃厚,這是由編程語(yǔ)言的嚴(yán)謹(jǐn)性和可糾錯(cuò)性以及硬件連接的不確定性共同決定的。無(wú)論對(duì)于小學(xué)生還是中學(xué)生,當(dāng)面臨硬件的搭建再結(jié)合編程一起實(shí)現(xiàn)效果的時(shí)候,往往會(huì)出現(xiàn)很大困難,學(xué)生會(huì)不知所措,不知道是硬件出了問(wèn)題還是軟件的編寫出了問(wèn)題。這種時(shí)候,教師想幫助學(xué)生糾錯(cuò)其實(shí)也是很困難的,往往解決一個(gè)或者一組學(xué)生的問(wèn)題,就會(huì)花費(fèi)很多時(shí)間,以至于無(wú)暇管理其他同學(xué),這在信息技術(shù)課堂上是經(jīng)常會(huì)遇到的難題。因此在開展中小學(xué)編程教育的時(shí)候,對(duì)于初學(xué)者,我們還是建議以最簡(jiǎn)單且單一化的程序語(yǔ)言編程作為入門課程,盡量減少學(xué)生的課堂負(fù)載。讓學(xué)生通過(guò)基本的結(jié)構(gòu)化模塊語(yǔ)句或者代碼編寫,先把程序的語(yǔ)言的基本方法和算法思路學(xué)會(huì)學(xué)懂,把基礎(chǔ)打好后,再結(jié)合實(shí)際的生活場(chǎng)景,配合各種開源硬件或者機(jī)器人套裝教具,來(lái)實(shí)現(xiàn)軟硬件的結(jié)合。這樣學(xué)生起步較快,基礎(chǔ)牢靠,教師在課堂實(shí)施上,也便于把編程語(yǔ)言全面細(xì)致的給學(xué)生進(jìn)行講解。
結(jié)合中小學(xué)生的認(rèn)知水平和課時(shí)設(shè)置,編程課程建議可以結(jié)合Scratch 編程、Python 編程、C/C++編程進(jìn)行系列設(shè)置。核心部分,以流行的、通用的開源腳本語(yǔ)言——Python 作為編程語(yǔ)言來(lái)講授“高級(jí)程序設(shè)計(jì)語(yǔ)言”,讓學(xué)生學(xué)會(huì)如何利用Python 和計(jì)算思維來(lái)解決典型的實(shí)際問(wèn)題[6]。
結(jié)合Python 語(yǔ)言特點(diǎn),在教學(xué)進(jìn)度的安排上,課程可以采取“問(wèn)題驅(qū)動(dòng),急用先學(xué)”的施教策略,在培養(yǎng)解決具體實(shí)際問(wèn)題的意識(shí)和能力基礎(chǔ)上,強(qiáng)調(diào)學(xué)生的操作訓(xùn)練[4]。
(1)授課教師需要將計(jì)算思維貫穿到課程過(guò)程,做到授課內(nèi)容與大綱相符。學(xué)生要求認(rèn)真聽課、積極思考、完成作業(yè)和實(shí)驗(yàn)。
(2)學(xué)好Python 程序設(shè)計(jì)重在實(shí)踐。講授和學(xué)習(xí)過(guò)程都將貫穿實(shí)踐環(huán)節(jié),要求學(xué)生積極參與課堂的學(xué)習(xí)討論,獨(dú)立思考,認(rèn)真完成課后作業(yè)。
(3)必要的知識(shí)記憶,是學(xué)好一門語(yǔ)言的有效途徑,學(xué)生需要通過(guò)對(duì)典型代碼的記憶,對(duì)成熟代碼的閱讀分析,培養(yǎng)編程實(shí)踐和解決問(wèn)題的能力。
另外,Python 綜合了多種高級(jí)程序設(shè)計(jì)語(yǔ)言的特性,在熟練使用的基礎(chǔ)上應(yīng)進(jìn)行其原理的探究和理解,然而這些內(nèi)容與后續(xù)中小學(xué)編程語(yǔ)言課程(C/C++)有一定交叉,教學(xué)時(shí)注意避重,做好鋪墊,點(diǎn)到即可。
課程內(nèi)容設(shè)置,根據(jù)學(xué)生的實(shí)際信息技術(shù)水平和計(jì)算機(jī)應(yīng)用水平,實(shí)現(xiàn)模塊化組織,課程內(nèi)容通過(guò)程序設(shè)計(jì)的基本思想和一般方法的講授。實(shí)現(xiàn)四個(gè)層次的單元化教學(xué)。
第一個(gè)層次課程內(nèi)容,初步認(rèn)識(shí)Python 程序設(shè)計(jì),基本編程環(huán)境。
介紹計(jì)算思維理論,鼓勵(lì)學(xué)生多思考,培養(yǎng)解決問(wèn)題的能力。介紹基本的Python編程環(huán)境安裝和語(yǔ)言基礎(chǔ),了解編程基礎(chǔ)知識(shí)。
計(jì)算思維理論的介紹,主要內(nèi)容包括介紹計(jì)算機(jī)解決問(wèn)題的能力,計(jì)算思維理論;程序設(shè)計(jì)的硬件基礎(chǔ),語(yǔ)言必要性及要解決的問(wèn)題,Python 可以解決哪些實(shí)際問(wèn)題,培養(yǎng)興趣和好奇心。講解語(yǔ)言基礎(chǔ),介紹開發(fā)環(huán)境配置與安裝過(guò)程,開發(fā)自己的第一個(gè)Python 程序,簡(jiǎn)單了解編程基礎(chǔ)知識(shí)。目前很多Python 的編程環(huán)境供學(xué)生選擇和使用,學(xué)生可以通過(guò)個(gè)人電腦直接安裝程序,但可能會(huì)面臨下載更新各種庫(kù)函數(shù)和工具包的困難,這需要教師做有針對(duì)性的專門指導(dǎo)。當(dāng)然,學(xué)生也可以通過(guò)互聯(lián)網(wǎng),利用在線平臺(tái),以解決版本更新、模塊庫(kù)添加,參數(shù)配置等問(wèn)題。
第二個(gè)層次,培養(yǎng)利用Python 解決基本問(wèn)題的能力,計(jì)算思維的初步應(yīng)用和培養(yǎng)。
從計(jì)算機(jī)能處理的數(shù)據(jù)類型入手,解決Python 編程的適配范圍。從程序設(shè)計(jì)的基本邏輯和流程控制入手,提高學(xué)生利用計(jì)算思維和編程解決復(fù)雜問(wèn)題的能力。
數(shù)值類型等方面,以實(shí)際計(jì)算問(wèn)題案例需要,介紹Python的各種數(shù)值類型,演示如何通過(guò)運(yùn)算符解決數(shù)學(xué)計(jì)算問(wèn)題;Python 簡(jiǎn)單文件讀寫、圖片、數(shù)值等趣味文件讀取顯示;程序的流程控制方面,引出并講授Python 程序的三種流程結(jié)構(gòu),學(xué)習(xí)控制結(jié)構(gòu)的綜合應(yīng)用,以實(shí)際應(yīng)用需求為背景引出,重點(diǎn)講授關(guān)系和邏輯運(yùn)算、分支結(jié)構(gòu)、for 循環(huán)、whⅰle 循環(huán)的知識(shí),著重培養(yǎng)面向問(wèn)題的決策流程及控制能力。當(dāng)然,Python 語(yǔ)言的語(yǔ)法結(jié)構(gòu)比較自由,不像C 語(yǔ)言那樣格式特別的嚴(yán)謹(jǐn)和規(guī)范。對(duì)于初學(xué)者而言,很多規(guī)則容易忽略,反而增大了程序出錯(cuò)的幾率和糾錯(cuò)的難度。在這個(gè)問(wèn)題上,教師一定要特別的注意,在學(xué)生一開始學(xué)習(xí)編寫程序的時(shí)候,就一定要把Python 語(yǔ)言的規(guī)則給學(xué)生講解清楚,包括縮進(jìn)、中文字符和英文字符的區(qū)分等等,讓學(xué)生打好基礎(chǔ),盡量避免因程序書寫不規(guī)范甚至錯(cuò)誤給學(xué)生帶來(lái)的畏難情緒和挫敗感。
第三個(gè)層次,培養(yǎng)Python 的數(shù)據(jù)結(jié)構(gòu)和函數(shù)模塊復(fù)用概念,提升計(jì)算思維解決復(fù)雜問(wèn)題的處理能力。
從計(jì)算機(jī)如何處理稍微大型的任務(wù),從函數(shù)與模塊的代碼服用與管理入手,從復(fù)雜數(shù)據(jù)的結(jié)構(gòu)化管理入手,介紹主要的數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用能力。
函數(shù)與模塊部分,介紹怎么編寫大型Python 程序文件;函數(shù)的聲明、定義和調(diào)用;數(shù)據(jù)結(jié)構(gòu)方面,針對(duì)中小學(xué)的認(rèn)知水平,從如何管理復(fù)雜數(shù)據(jù)入手;介紹什么是Python 的數(shù)據(jù)結(jié)構(gòu);列表、元組、字典及字符串?dāng)?shù)據(jù)結(jié)構(gòu)及操作。
由于Python 語(yǔ)言的功能非常強(qiáng)大,可以導(dǎo)入非常多的工具庫(kù),因此在使用的時(shí)候,可以完成很多任務(wù),包括可視化,機(jī)器學(xué)習(xí)等。教師可以通過(guò)一些具體的實(shí)例,讓學(xué)生去逐一接觸和掌握這些工具庫(kù)的使用方法和功能。由于現(xiàn)在中小學(xué)人工智能課程的興起,利用Python 語(yǔ)言進(jìn)行人工智能的教學(xué)非常普遍,因此教師也可以將人工智能課程中的一些非常經(jīng)典的實(shí)例作為Python 教學(xué)的資源展示介紹給學(xué)生,讓學(xué)生體會(huì)到Python 語(yǔ)言在人工智能方面的強(qiáng)大應(yīng)用。
第四個(gè)層次,培養(yǎng)Python 的處理文件和Python 類的基本思想。
主要從計(jì)算機(jī)程序運(yùn)行輸入輸出的角度,介紹文件的必要性和使用方法,為完成相關(guān)任務(wù)提供數(shù)據(jù)保存手段。通過(guò)對(duì)繁雜數(shù)據(jù)的進(jìn)一步歸類,教會(huì)學(xué)生用抽象方法進(jìn)行不同信息的歸類、分層次組織。
本層次對(duì)學(xué)生的要求其實(shí)是很高的,多數(shù)學(xué)生對(duì)于軟件的使用和編程語(yǔ)言的編寫掌握起來(lái)并不是非常的困難,但是一旦要涉及到各種文件的輸入輸出,完成文件的關(guān)聯(lián)與保存,就會(huì)出現(xiàn)不知所措,找不到方法或者不明白彼此的邏輯關(guān)系的問(wèn)題。在介紹這些方面知識(shí)的時(shí)候,教師又很難將整節(jié)課都只單一的講解這方面的知識(shí),因?yàn)闊o(wú)論從課時(shí)安排還是課程內(nèi)容設(shè)計(jì)方面,這部分內(nèi)容都不是屬于重點(diǎn)章節(jié)。因此,教師就很有必要在平時(shí)的學(xué)習(xí)中,盡量將這些知識(shí)滲透到每一次的編程教學(xué)中,讓學(xué)生多練多理解,遇到具體問(wèn)題具體操作,隨時(shí)學(xué)習(xí),隨時(shí)記憶,提高學(xué)生學(xué)習(xí)的效果和效率。
文件編程實(shí)踐主要內(nèi)容為介紹文件的主要作用及基本讀寫;類和對(duì)象通過(guò)案例,向?qū)W生介紹體驗(yàn)面向?qū)ο蠊芾?;什么是Python 面向?qū)ο?,有何特點(diǎn);類的屬性和方法定義,對(duì)象的創(chuàng)建和使用,舉例解決實(shí)際問(wèn)題,深入淺出了解面向?qū)ο蟮母拍?、各類屬性以及各類方法的定義和使用、繼承。
編程課程,需要通過(guò)動(dòng)手實(shí)驗(yàn),進(jìn)行編程互動(dòng),強(qiáng)化和應(yīng)用計(jì)算思維,同學(xué)自己動(dòng)手安裝Python 開發(fā)環(huán)境,編寫第一個(gè)程序。學(xué)會(huì)使用函數(shù)和模塊迭代解決原有程序問(wèn)題,實(shí)驗(yàn)包括各類數(shù)據(jù)結(jié)構(gòu)定義、存取、訪問(wèn)等使用操作,嘗試解決實(shí)際數(shù)據(jù)問(wèn)題,進(jìn)行趣味性的Python 編寫,培養(yǎng)學(xué)生興趣。課程實(shí)驗(yàn)主要還是面向全體學(xué)生的信息技術(shù)教學(xué),因此在難度的設(shè)置上,盡量要保證讓大多數(shù)學(xué)生都能夠接受。在課堂教學(xué)的設(shè)計(jì)上,盡量強(qiáng)調(diào)趣味性與知識(shí)性相結(jié)合,實(shí)操性與原理性相結(jié)合,過(guò)程性評(píng)價(jià)和考試性評(píng)價(jià)相結(jié)合,讓學(xué)生能夠以一種比較輕松愉快的情緒來(lái)完成對(duì)Python 語(yǔ)言的學(xué)習(xí)。畢竟無(wú)論是初中還是高中的學(xué)生,在信息技術(shù)課程的學(xué)習(xí)時(shí)間都是相對(duì)比較少的,除了課上的學(xué)習(xí)時(shí)間,一般情況是沒有額外時(shí)間來(lái)完成信息技術(shù)的家庭作業(yè)的。這就要求教師要盡量把課堂教學(xué)和需要完成的作業(yè),都安排在課內(nèi)進(jìn)行,必須將講授,練習(xí),考核做合理的設(shè)計(jì)和安排。
根據(jù)學(xué)習(xí)的程度,可以更進(jìn)一步,層次化教學(xué),培養(yǎng)學(xué)生利用Python 解決實(shí)際問(wèn)題的能力,促進(jìn)計(jì)算思維與實(shí)際問(wèn)題的結(jié)合,做到簡(jiǎn)單解決實(shí)際應(yīng)用的目標(biāo)。對(duì)學(xué)有余力的同學(xué),使用Python 編寫GUI 實(shí)戰(zhàn),利用Python 中文信息處理基礎(chǔ)實(shí)戰(zhàn)編程,利用Python 圖像處理基礎(chǔ)實(shí)戰(zhàn)編程,Python數(shù)據(jù)庫(kù)編程實(shí)戰(zhàn)。對(duì)于高中階段的學(xué)生,隨著高中新課標(biāo)的發(fā)布和新課改的進(jìn)行,在人工智能,開源硬件和數(shù)據(jù)處理等選修模塊,Python 語(yǔ)言都有很強(qiáng)的應(yīng)用性和實(shí)踐價(jià)值,可以通過(guò)課外小組和分類分層走班制的途徑,讓對(duì)編程有濃厚興趣并且能力較強(qiáng)的學(xué)生,或者是選修過(guò)人工智能,開源硬件或者數(shù)據(jù)處理的學(xué)生,進(jìn)一步利用Python 語(yǔ)言,來(lái)完成這些模塊的實(shí)踐和創(chuàng)新,將Python 語(yǔ)言的功能做到跨領(lǐng)域跨平臺(tái)的最大化應(yīng)用。
總體上看,程序設(shè)計(jì)的方法是信息學(xué)科的重要基礎(chǔ)工具和思維方法。通常的編程教育,缺乏對(duì)編程過(guò)程中本身固有的邏輯思維和計(jì)算思維訓(xùn)練,對(duì)于無(wú)編程基礎(chǔ)的基礎(chǔ)教育學(xué)生,純粹的簡(jiǎn)單訓(xùn)練容易造成學(xué)生學(xué)習(xí)興趣下降熱情不高。通過(guò)計(jì)算思維目標(biāo)下的信息技術(shù)課程,對(duì)計(jì)算機(jī)編程課程內(nèi)容和講授方法的梳理,對(duì)綜合信息素養(yǎng)的提升非常重要,后續(xù)需要更多思考和實(shí)踐探討[7]。