鄭戟明
[摘 要]計算思維是國內(nèi)外各界重點關(guān)注的一種較先進的教育理念。計算思維也為高校程序設(shè)計課程的教學提供了一條新途徑??梢愿鶕?jù)程序設(shè)計課程的特點,將程序設(shè)計的理論與計算思維的原理有機結(jié)合起來,并把計算思維中各種功能有效地運用到課堂教學的各個環(huán)節(jié)中。把計算思維融入課堂教學對培養(yǎng)學生的計算思維能力和創(chuàng)新能力有著積極的作用。
[關(guān)鍵詞]計算思維;Python;程序設(shè)計;課堂教學
[中圖分類號] G642 [文獻標識碼] A [文章編號] 2095-3437(2016)08-0127-03
一、引言
2006年,美國CMU大學周以真(Jeannette M.Wing)教授在美國計算機權(quán)威期刊《Communications of the ACM》上發(fā)表并定義了計算思維(Computational Thinking)。[1]周以真教授認為:計算思維是運用計算機科學的基礎(chǔ)概念去求解問題、設(shè)計系統(tǒng)以及理解人類行為,它包括了涵蓋計算機科學之廣度的一系列思維活動。計算思維就是通過約簡、嵌入、轉(zhuǎn)化和仿真等方法,把一個看起來困難的問題重新闡釋成一個我們知道如何求解的問題;計算思維采用抽象和分解的方法來控制龐雜的任務或設(shè)計巨型復雜系統(tǒng)。它是基于關(guān)注點分離的方法,它是選擇一種合適的方式陳述一個問題,或者是選擇合適的方式對一個問題的相關(guān)方面建模使其易于處理。計算思維利用啟發(fā)式推理尋求解答,就是在不確定情況下的規(guī)劃、學習和調(diào)度。計算思維將成為每一個人的技能組合成分,而不僅僅限于科學家。[4]
計算思維能力是多種學科人才必須具備的基本素質(zhì),其概念一經(jīng)提出就引起了國內(nèi)外科學界和教育界的廣泛關(guān)注。近年來,國內(nèi)外學者從不同的角度對計算思維的含義、特點和培養(yǎng)方法進行了探索和研究。中國科學院院士、中國科學技術(shù)大學陳國良教授指出:在大學中,計算思維不僅能振興大學計算教育,而且會令科學與工程領(lǐng)域創(chuàng)造出革命性的研究成果。[2]朱亞宗教授將計算思維、實驗思維和理論思維歸結(jié)為人類三大科學思維方式。[3]
二、Python語言
Python語言是一種面向?qū)ο?、直譯式計算機程序設(shè)計語言,Python語法簡捷、清晰和易讀。Python是開源的語言,具有豐富和強大的類庫,同時具有優(yōu)良的可擴展性和平臺可移植性,它能夠很輕松的把用其他語言制作的各種模塊輕松地聯(lián)結(jié)在一起。
Python語言的主要特點:
(一)簡單易學
Python有極其簡單的語法,容易上手,易于學習,非常適合初學者,也特別適合專家使用。一個好的Python程序?qū)W⒂诮鉀Q問題本身,而并不是沉迷于語言語法。
(二)免費、開源
Python的使用者可以自由地發(fā)布這個軟件的拷貝,閱讀它的源代碼,對它做改動,把它的一部分用于新的自由軟件中。
(三)可移植性、可擴展性、可嵌入性
Python可以被移植到各種不同的平臺上,如Linux、Windows、Macintosh等等,以及Google基于linux開發(fā)的android平臺。Python可以將部分程序用C或C++編寫,然后在Python程序中使用它們。使用者也可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。
(四)面向?qū)ο?/p>
Python支持面向過程和面向?qū)ο蟮木幊獭?/p>
(五)豐富的庫
Python除了標準庫以外,還有許多其他高質(zhì)量的庫,如wxPython、Twisted和Python圖像庫等等。
目前我國高校主要把C語言和VB語言作為程序設(shè)計課程所用語言。這些程序設(shè)計語言歷史較久,功能強大,特點突出。但是這些程序語言進行程序開發(fā)工作量較大,難度相對較高,特別是對于非計算機專業(yè)和文科院校專業(yè)的學生更是如此。
Python語言是一種簡潔、易讀的程序語言,具有可擴展性和可移植性的特點。同時Python是開源的語言,擁有豐富的庫,為開發(fā)提供了極大的便利。目前國內(nèi)外采用Python語言作為程序設(shè)計課程語言的高等院校日益增多。
三、Python程序設(shè)計課程的計算思維
程序設(shè)計課程是很多非計算機專業(yè)學生的一門必修課,同時也是一個訓練學生計算思維很好的平臺。[5]本文嘗試在Python程序設(shè)計課程的教學過程中,引入計算思維的先進理念,把程序設(shè)計知識以一種新的方式教授給學生,通過把計算思維融入Python程序設(shè)計課程教學中,實現(xiàn)逐步引入計算思維的基本概念和方法,使學生理解計算思維的理念,學會運用計算思維的方法,去發(fā)現(xiàn)問題,然后尋找解決問題的途徑,最終解決問題。這樣通過本課程的學習,達到培養(yǎng)學生計算思維的能力,提高學生解決問題的能力和創(chuàng)新能力的目的,為程序設(shè)計課程探索一條新的教學途徑。
在實際工作中,當需要解決一個大型問題時,往往都會首先考慮怎么對問題進行分解化簡。如現(xiàn)代制造業(yè)中的離散制造,就融合了計算思維的本質(zhì),把一個龐大的生產(chǎn)問題,按照產(chǎn)品的功能進行層層分解,使一個龐大的問題分解成一個個子問題,更便于人們在生產(chǎn)過程中進行處理和控制。計算思維就是通過約簡、分離、嵌入、啟發(fā)等方法,把復雜的問題分解并解釋成若干簡單問題,從而降低難度,便于分析和解決問題。
在Python程序設(shè)計教學過程中,運用這種分解或分層的方法,以程序設(shè)計理論為出發(fā)點,把人的思維融入程序設(shè)計解決問題。學生不再只是面對抽象的程序設(shè)計的理論與算法,更多的是將注意力集中在分解問題和解決問題的過程中,同時還可以將各自專業(yè)和學科知識融入其中。
四、Python程序設(shè)計課程中計算思維應用
在計算思維解決問題的方法中,關(guān)鍵是把問題化簡和分離,也就是將復雜而龐大的問題按照較為合理的方法進行分解簡化,問題最終將被分解成多個模塊,或者多個階段,然后再針對這些模塊或階段去逐個找出解決方法,最終解決整個系統(tǒng)的問題。
事實上這種把問題化簡和分離的方法,非常適合在Python程序設(shè)計課程中應用。教師在教學中把各個問題分解簡化,學生面對的不再是整個完整的問題,而是一個個相對容易解決的小問題和小模塊,所以學生只需要把每個小問題解決好了,那么也就掌握了Python程序設(shè)計的方法和過程。下面以Python程序設(shè)計課程中的一個問題為例,來說明Python程序設(shè)計課程中的計算思維應用。
現(xiàn)在需要用Python程序設(shè)計中的列表來處理數(shù)據(jù)。教師首先把列表問題分解成創(chuàng)建列表、添加數(shù)據(jù)、顯示數(shù)據(jù)等幾個問題,然后逐步解決這些問題,最終實現(xiàn)運用列表處理數(shù)據(jù)的目的。
(一)創(chuàng)建列表
現(xiàn)有一些關(guān)于汽車基本信息的數(shù)據(jù),需要根據(jù)這些數(shù)據(jù)先去創(chuàng)建關(guān)于汽車品牌的一個列表。在創(chuàng)建列表過程中,教師會讓學生重點關(guān)注一下幾個問題:列表的結(jié)構(gòu)、列表的存儲方式、列表中數(shù)據(jù)項的處理方法。
創(chuàng)建一個名為“cars”,關(guān)于汽車品牌的列表。
cars=[“大眾”,“通用”,“豐田”,“福特”]
通過創(chuàng)建列表這一問題,使得學生掌握創(chuàng)建列表的基本方法,了解列表中數(shù)據(jù)項的數(shù)據(jù)類型問題,同時也讓學生知道列表中數(shù)據(jù)項存儲方式是類似于數(shù)組的。在解決創(chuàng)建列表問題的基礎(chǔ)上,教師可以進一步把問題加以擴展,如列表中數(shù)據(jù)項的顯示、列表中數(shù)據(jù)項的添加、列表中數(shù)據(jù)項的刪除等等,這樣又讓學生掌握了列表中數(shù)據(jù)項的處理方法。
(二)添加數(shù)據(jù)
在創(chuàng)建了關(guān)于汽車品牌的列表后,現(xiàn)在需要為它增加一個生產(chǎn)年份的數(shù)據(jù),而且要求數(shù)據(jù)要添加在每一個汽車品牌后面。在這一問題中,教師提示學生要關(guān)注解決問題的不同方法。
方法一:運用“insert”和“append”命令,向“cars”列表中直接添加所需要的數(shù)據(jù)。
cars.insert(1,“2012”)
cars.insert(3,“2010”)
cars.insert(5,“2000”)
cars.append(“2014”)
這種方法需要用到“insert”和“append”命令,而且還要分別計算每個生產(chǎn)年份在整個列表中的位置。
方法二:從頭重新創(chuàng)建“cars”列表。
cars=[“大眾”,“2012”,“通用”,“2010”,“豐田”,“2000”,“福特”,“2014”]
這種方法相對比較簡單,只需重建列表。
添加數(shù)據(jù)問題解決后,讓學生進行總結(jié)討論,這兩種方法的優(yōu)缺點,使學生了解對應不同的需要和不同的列表,可以采用不同方法來解決問題。
(三)顯示數(shù)據(jù)
進入顯示數(shù)據(jù)階段,教師首先要求學生把上述所建的“cars”列表中的數(shù)據(jù),按品牌和年份分別顯示出來,用“print”命令顯示出來,這一任務學生很容易完成。
print(cars[0],cars[1])
print(cars[2],cars[3])
print(cars[4],cars[5])
print(cars[6],cars[7])
然后教師再提出一個問題,如果“cars”列表中添加了新的數(shù)據(jù)項,也需要顯示出來,怎么解決?學生解決的方法往往是增加“print”語句,接著我們再問學生:如果列表中增加的數(shù)據(jù)項有很多項,那怎么解決?是不是要添加很多條“print”語句呢?
上面這個問題往往會難住學生,教師就可以適時的提出用迭代方法來處理列表中的數(shù)據(jù),引入“for循環(huán)”語句可以非常方便解決這一問題。
for each_item in cars:
print(each_item)
用迭代方法方便解決問題后,我們還可以讓學生考慮用“while循環(huán)”語句編寫迭代代碼。
cars=[“大眾”,2012,“通用”,2010,“豐田”,2000,“福特”,2014]
number=0
while number print(cars[number]) number=number+1 顯示數(shù)據(jù)問題解決后,學生在此過程中掌握了通過迭代來實現(xiàn)顯示列表中數(shù)據(jù)的方法,同時初步了解了循環(huán)語句的用法。 (四)思維啟發(fā) 經(jīng)過前面三個階段的學習,學生已經(jīng)基本掌握了列表處理數(shù)據(jù)的方法,同時也從中了解了與計算思維相關(guān)的一些知識。為了讓學生更好的理解計算思維的本質(zhì),教師需要把計算思維方法中的思維啟發(fā)引入教學過程中,讓學生多思考,多尋求解決問題的方法,從而達到培養(yǎng)學生應用計算思維能力的目的。 具體實施方法是,以前面三個階段的學習為基礎(chǔ),再給學生提出一系列與列表相關(guān)的問題,如運用列表知識來解決企業(yè)銷售的問題、超市商品價格查詢問題等。學生要解決這些問題,光靠前三個階段的知識是遠遠不夠的,由于課堂時間有限,所以教師應鼓勵學生課后去思考,去尋找解決問題的方法。經(jīng)過一階段后,教師再去檢查學生完成任務的情況,當然學生完成的情況可能不是很理想,存在很多問題,這都是很正常的。教師提出一系列與列表相關(guān)問題,其目的主要是關(guān)注學生思考探索問題的過程,而不是解決問題的結(jié)果。在學生經(jīng)過自己思考探索之后,教師在學生結(jié)果中挑選一些典型例子,進行講解分析,最后引出正確的解決問題的方法和思路。通過這些訓練,學生思考問題、解決問題的能力會有很大提高,學生也慢慢學會使用計算思維的各種方法來思考和解決問題。 學生計算思維的基本技能的培養(yǎng),不可能單單通過課堂教學就能完成,實際的鍛煉是最好的方法。所以教師應當多鼓勵學生參加一些創(chuàng)新項目和應用能力大賽,通過項目和大賽磨煉和挑戰(zhàn)自己,參與的學生都受益匪淺,感到自己各方面的能力都得到了鍛煉。學生的這些收獲往往是在課堂上老師所不能給予的。計算思維能力的培養(yǎng)最終要靠學生自己在學習、實踐活動過程中逐步掌握和形成。 五、結(jié)束語 要讓學生掌握好計算思維的基本技能,必須把計算思維的培養(yǎng)融入整個教學過程中。從Python程序設(shè)計課程教學嘗試來看,計算思維方法能很好的培養(yǎng)和訓練學生思考和解決問題的能力,使學生較好的掌握教學內(nèi)容,使教學效果良好,這表明了把計算思維融入程序設(shè)計課堂教學的可行性和有效性。所以,教師都有必要從計算思維的理念出發(fā),積極主動地參與到教學過程中,把計算思維的各種方法和自己的課程有機的結(jié)合起來,從而達到培養(yǎng)學生計算思維的能力的目的。 [ 注 釋 ] [1] Wing J M.Computational Thinking[J].Communication of the ACM,2006(3):33-35. [2] 陳國良,董榮勝.計算思維與大學計算機基礎(chǔ)教育[J].中國大學教學,2011(1):7-11,32. [3] 朱亞宗.論計算思維——計算思維的科學定位、基本原理及創(chuàng)新路徑[J].計算機科學,2009(4):53-55. [4] 周以真.計算思維[J].中國計算機學會通訊,2007(11):83-85. [5] 孫家廣.計算機科學的變革[J].中國計算機學會通訊,2009(2):6-9. [責任編輯:鐘 嵐]