運算(計算)思維(Computational Thinking) &程式語言初探

一.運算思維(Computational Thinking)

1.計算(運算)概念

計算是指“資料”在“運算符號”的操作下,按“規則”進行的資料變換。 簡單的例子:從小時候開始學習和訓練的算術運算,如“1+2=3”到國中較複雜的例子:對 ax2+bx+c=0 方程式求解等.由

算盤----->>-----加法器-->>-----計算機-->>----電腦---->>-----雲端

2.科學與思維

一般而論,三種科學對應著三種思維:
a.理論科學 ←→理論思維: 理論思維又叫推理思維,以推理和演繹為特徵,以數學學科為代表。
b.實驗科學 ←→實驗思維: 實驗思維又叫實證思維,以觀察和總結自然規律為特徵,以物理學科為代表。
c.計算科學←→計算思維: 計算思維又叫構造思維,以設計和構造為特徵,以電腦學科為代表

3.CT的概念

CT的本質是抽象(Abstract)自動化(Automation)。它是如同所有人都具備“讀、寫、算”(簡稱3R)能力一樣,都必須具備的思維能力。

英文期刊https://www.cs.cmu.edu/~15110-s13/Wing06-ct.pdf

(1)CT的特徵

計算思維是甚麼
計算思維不是甚麼
是概念化
不是程序化
是根本的
不是刻板的技能
是人的思維
不是計算機思維
是思想
不是人造物
是數學與工程思為的思維與融合
不是空穴來風
面向所有人.所有領域
不侷限於計算學科

解說

範例

資料來源

http://mooc.zut.edu.cn/nodedetailcontroller/visitnodedetail?knowledgeId=3472021

(2)CT進一步理解

a.陳國良教授的理解

(1)計算思維是利用泛指的計算(CS、CE、C、IS、IT等)的基礎概念,求解問 題、設計系統、理解人類行為的一種方法(Approach),是一類Analytical Thinking。它融合(Share)了數學思維(求解問題的方法)、工程思維 (設計、評價大型複雜系統)和科學思維(理解可計算性、智慧、心理和人類行為)。

(2)計算時的抽象概念比數學、物理科學中的意義要豐富和複雜;抽象是分層的為此要定義介面和關係;抽象最終要在受限的物理世界中實現的。

(3)計算是抽象的自動執行;自動化隱含著需要某類電腦(可以是機器或人, 或兩者的組合)去解釋抽象。

(4)從操作側面上,計算涉及到回答“如何尋找一台電腦去求解問題?”隱含地回答此問題就是確定合適的抽象,選擇合適的某類電腦去解釋執行該抽 象,後者的過程就是自動化。所以計算思維的本質是抽象與自動化(2A)

(5)計算的三種驅動力是科學、技術和社會,三者互相作用影響:科學的發現催生技術發明促進社會應用;反之,技術發明產生新的社會應用促進新的科學發現。

b.唐培和教授的理解


廣西科技大計算思維導論

c.其他觀點

(1)ISTE

CT is a problem-solving process that includes (but is not limited to) the following characteristics:(CT是一個問題解決的過程,包括但不限於下面的特色)

Formulating problems in a way that enables us to use a computer and other tools to help solve them(把問題型塑成一個可以讓我們用電腦和其他工具去解決的樣子)

Logically organizing and analyzing data(有邏輯的組織和分析資料)

Representing data through abstractions such as models and simulations(使用模型和模擬,抽象化的表示資料)

Automating solutions through algorithmic thinking(透過演算法的思考將答案自動化)

Identifying, analyzing, and implementing possible solutions with the goal of achieving the most efficient and effective combination of steps and resources(以步驟和資源最有效益的整合為目標,確認、分析、實作可行的答案)

Generalizing and transferring this problem-solving process to a wide variety of problems(一般化和轉移這個問題解決過程到各式各樣的問題)

(2)other

澳洲資訊科技課程將運算思維 定義為「利用數位科技設計與實作演算解法解決問題的思維」(ACARA, ?2013)

英格蘭在運算課程中的定義則為「一種凌駕於電腦軟硬體之上,能針對系統與問題 提出思考架構的思維模式」(DOEE, 2013)

Google則將其定義為「一種包含許多 特性的問題解決過程,如:邏輯化的排序與分析資料、用循序的步驟產出解法,以及特定特質,如:能自信處理複雜度與開放式問題」(Google, 2015)。

(3)麻省理工副校長演講

計算思維的本質是抽象.自動化.演算法(3A)

?

(4)BBC

資料引用

http://www.bbc.co.uk/education/guides/zp92mp3/revision

說明

(1)拆解 (Decomposition)

活動設計-拆解練習

哈佛大學公開課程計算機科學CS50

https://www.youtube.com/watch?v=yQVTijX437c

(2)模式識別(Pattern Recognition)

活動設計-規律性練習

遊戲學校找出規律性

https://www.youtube.com/watch?v=SixLnIDV1yY

(3)抽象化 ( Abstraction)

活動設計-抽象的概念練習

什麼是抽象?它是指把現實中的事物或解決問題的過程,通過化簡等方式,抓住其關鍵特徵,降低其複雜度,變為計算裝置可以處理的模型,是一種方法.也是概念

a.藝術領域

b.電腦領域

資料庫

繪圖

對圖1中一朵花進行分析,8個花瓣具有相似性,那麼可以把一片花瓣繪製(抽象)為圖2中的樣子(當然還有繼續抓特徵並繼續完善的餘地)。然後建模,即將8個花瓣圍成360°,每個花瓣圍繞下端的中心點旋轉45°即可實現。通過程式設計實現“自動化”繪製(如圖3),最終達到圖4的效果。如果繪製出來的效果距離抽象的物件(花)太遠,可以繼續修改完善圖2中的單個花瓣,直到滿意為止

原文連結:https://read01.com/RmPKmM.html

https://www.youtube.com/watch?v=RdzYOtxhuDc


(4)設計演算法 (Algorithm Design)

活動設計-演算法練習

常見演算法(適合高中以上)

https://www.youtube.com/watch?v=N91oCQbWUvA

總結

引自蔡淑玲老師

(3)台灣

運算思維:一張圖看懂機器翻譯(人工智慧)的原理

a.師大資工

綜合各種不同的定義,運算思維定義為「能有效應用運算方法與工具解決問題之思維能 力」

資料來源:國教院-運算思維與中小學資訊科技課程師-林育慈* 國立臺灣師範大學資訊教育研究所助理教授 吳正已 國立臺灣師範大學副校長

b.台大資工洪士灝教授的理解

計算思維中最重要的概念之一,是能夠將計算「抽象化」與「具體化」的能力,例如與影像相關的演算法那麼多,我不需要知道各種演算法長得什麼樣子,但我知道影像壓縮演算法可以幫我省下傳輸時間,影像辨認演算法可以幫我了解影像裡面有什麼物件(以上是抽象化),而這些演算法早已經有聰明的專家實作出來,我們可以透過網際網路,利用資料中心的雲端服務來使用這些演算法(這是具體化)。

會寫程式不代表一定懂計算思維,反過來說,懂運算思維不見得會寫好程式,那又如何?話說寫程式也只是初步,資訊世界還很寬廣,如果懂得資訊世界的運作,心中有運算思維之後,或許有人會想閱讀程式去更加理解資訊世界,或許有人會想學習用程式設計改變周遭世界,或許會想改進資訊系統的架構,或許會想到新的應用、新的商業模式,或許會用計算思維去解決各類學術研究上的問題,不要過於強調程式設計而框限住學習內容和未來的發展性

台大開放課程計算機概論

c.成大資工蘇文鈺教授-投入偏鄉程式教育用程式啟動孩子的未來

(3)日常生活中的CT

人們在日常生活中的很多做法其實都和CT不謀而合,也可以說CT從生活中吸收了很多有用的思想和方法。我們來看一些例子。

CT
日常生活
演算法
食譜可以說是演算法(或程式)的典型代表,它將一道菜的烹飪方法一步一步地羅列出來,即使不是專業廚師,照著食譜的步驟也能做出可口的菜肴。這堙A食譜的每一 步驟必須足夠簡單、可行。例如:“將土豆切成塊狀”、“將 1 兩油入鍋加熱”等都是可行的步驟,而“使菜肴具有神秘香味”則不是可行的

模組化
很多菜譜都有“勾芡”這個步驟,與其說這是一個基本步驟,不如說是一個模塊,因為勾芡本身代表著一個操作序列——取一些澱粉,加點水,攪拌均勻,在適當時候倒入菜中。由於這個操作序列經常使用,為了避免重複,也為了使菜譜結構清晰、易讀,所以 用“勾芡”這個術語簡明地表示。這個例子同時也反映了在不同層次上進行抽象的思想。
搜尋
如果要在英漢詞典中查一個英文單詞,相信讀者不會從第一頁開始一頁頁地翻看, 而是會根據字典是有序排列的事實,快速地定位單詞詞條。又如,如果現在老師說請將本書翻到第 8 章,讀者會怎麼做呢?是的,書前的目錄可以幫助我們直接找到第 8 章所在的頁碼。 這正是電腦中廣泛使用的索引技術。

回溯
人們在路上遺失了東西之後,會沿原路邊往回走邊尋找。或者在一個岔路口,人 們會選擇一條路走下去,如果最後發現此路不通就會原路返回,到岔路口選擇另一條路。這種回溯法對於系統地搜索問題空間是非常重要的。
緩衝
假如將學生用的教科書視為資料,上課視為對資料的處理,那麼學生的書包就可以視為緩衝存儲。學生隨身攜帶所有的教科書是不可能的,因此每天只能把當天要用的教科 書放入書包,第二天再換入新的教科書。
多工平行
廚師在燒菜時,如果一個菜需要在鍋中煮一段時間,廚師一定會利用這段時間去 做點別的事情(比如將另一個菜洗淨切好),而絕不會無所事事。在此期間如果鍋堛熊皛搨n 加鹽加佐料,廚師可以放下手頭的活兒去處理鍋堛熊獢C就這樣,雖然只有一個廚師,但他可以同時做幾個菜。

教學活動設計:說看看以下兩種情形是否為符合運算思維CT?

a.中醫VS西醫

b.食譜VS精確的食譜

(4)CT應用於各領域

(5)CT重要性及影響

隨著現代科學的形成和發展,人們對CT的作用和意義的認識也越來越提升。在目前的社會,使用CT考慮和陳述問題已經成為越來越熟悉和普遍的事實。CT成為一個現代人所必須具備的素質。周以真教授認為,CT是 21 世紀每一個人都要用的基本工具,它將會像數學和物理那樣成為人類學習知識和應用知識的基本組成和基本技能。當CT真正融入人類活動的整體時,它作為一個問題解決的有效工具,人人都應當掌握,處處都會被使用。而CT是無處不在的,提供了理解世界的智力工具,在人類社會中具有永久的價值。這些都肯定了CT在人類思維活動中 的地位以及在當前科學發展中的重要意義

資料引用參考網站


http://thefoos.com/wp-content/uploads/2015/11/Hour-of-Code-Curriculum-Trad-Chinese.pdf


http://labs.xjtudlc.com/cs4hs/2014/reading/jsswybcddjsj.pdf


http://www.wsbookshow.com/uploads/bookfile/201410/9787517023548_1.pdf


http://www.3dwoo.com/showBookDetail.asp?nb=41196


http://www.ccf.org.cn/resources/1190201776262/digital/cnccpdf/chenguoliang2011-12-12-10_03_14.pdf


http://mooc1.chaoxing.com/nodedetailcontroller/visitnodedetail?courseId=&knowledgeId=81787331

https://www.youtube.com/watch?v=Bb7kebfTwUY&index=2&list=PLcS355A8KwuUh574KJQOY_0qD9UKS1mHt

(6)CT相關活動.測驗.檔案

不插電的資訊科學下載

國際運算思維能力測驗

運算思維相關檔案下載

(7)CT相關網站

https://computationalthinkingcourse.withgoogle.com/unit?lesson=8&unit=1

https://www.google.com/edu/resources/programs/exploring-computational-thinking/

http://blog.orangeapple.tw/posts/what-is-computational-thinking/

http://www.bauhinia.org/index.php/zh-HK/analyses/391

資訊通識教育以及計算思維的教學法(洪士灝教授)

賴和隆老師

張原禎老師

謝東森老師

呂聰賢老師

蔡淑玲老師


二.演算法(Algrothm)

1.演算法的定義

用來解決問題方法及步驟,簡單來說,就是找出解答的方式,好比一個"精確的食譜" ,把我們所遭遇到的問題的解決方法,藉由有系統與條理的方式一步一步的解釋清楚。從上述我們可以知道幾件事情:

a.演算法是用來解決問題

b.演算法將解法分解成不同步驟

c.演算法的解決問題的步驟是精確的,不靠人類的直覺與猜測

因為上面的幾個特性,我們才能夠藉由將演算法編寫成程式利用電腦做運行計算,來解決我們生活上的問題。

(1)狹義演算法:執行者是人.出現了一些不明確的內容

活動設計-找出下圖中不明確.模擬兩可的內容

a.食譜

(2)廣義演算法:執行者是電腦.不能出現了不明確的內容.如食譜中的少許.適量.差不多.模棱兩可內容

演算法的表示方式

EX:

while (我還沒死) {
問女朋友要不要嫁給我;
if (答案=YES) {
拿出戒指;
break;
}
else
delay(1天);
}
去結婚;

參考網站

http://210.240.9.7/mod/page/view.php?id=218

活動設計-練習將生活中的例子(自然語言)轉換為流程圖或抽象的虛擬碼或圖形

以上採用自然語言來描述.但感覺有點囉唆及冗長

 

例子2

 

例子3

決策評估

解決 ”怎麼由板橋到高雄的交通問題

a.評估指標

今天如果某人希望用最短的時間從板橋到高雄,我們所期待的就是以最少通勤時間為主,評估指標就是最短時間;如果某人想要的是最節省的方式,那評估指標就是花最少的錢。演算法中的評估指標非常重要,這指標將用來計算評估你解答的品質,用以找出最好的答案。當然,評估指標可以是綜合指標,也就是可以把兩個以上的指標放入一個評估的算式中

b.合理假設

當有了好的評估指標後,你就可以把有可能的 “怎麼由板橋到高雄台北” 方式,來套入評估指標中計算,但這其中有個非常大的問題,底下直接用舉例的方式說明。

如果說 “怎麼由板橋到高雄” 我們以最短時間來做為評估指標,我們就要開始考慮飛機、高鐵、火車、客運、開車…等交通方式來評估,大部分的朋友一定會選擇高鐵,但如果不計成本來說,高鐵不一定是最快速的,今天如果請 F1 車手開著頂級跑車由板橋載你到高雄呢?或是有直升機專程接送呢?

所以在這樣的狀況下,我們要有基本假設,把目前某人能力範圍外的選項拿掉,例如說他有懼高症,那我們就會把直升機選項拿掉;他不想花超過 2000 元,就可能把頂級跑車選項拿掉…,這樣所找到的解,才會是合理又正常的解

但有沒有人想要便宜又快速的方式由板橋前往高雄呢?這絕對有,在這狀況下,我們又要回到評估指標那邊,把時間與花費做成一個綜合性的指標,簡單說,就是把時間與花費都加上權重來衡量。這時候你可以問那個麻煩的人說,速度與金錢對你由板橋前往高雄的重要性,如果速度佔 70% 重要,金錢佔 50% 重要,那你的評估指標就可以做成

速度* 70% 金錢 * 50%

c.選擇演算法

有了評估指標、基本假設後,接下來就要擬定演算法了,就是把有可能的選項一一放入評估指標中,看看哪個比較好就選哪一個,這就是所謂的窮舉法

窮舉法對於小型的題目(專案)來說,是非常好用的方式,因為你不用花時間去思考其他演算法,因為使用窮舉法所花的時間都比你驗證其他演算法來的短,但對於大型題目(專案)來說,窮舉法就不是個好方法

資料來源:

http://article.isunfar.com.tw/posts/information/%E7%94%B1%20AlphaGo%20%E7%9C%8B%E6%BC%94%E7%AE%97%E6%B3%95%20%E8%81%8A%E8%81%8A%E6%BC%94%E7%AE%97%E6%B3%95%E6%9C%80%E5%9F%BA%E6%9C%AC%E7%9A%84%E5%85%83%E7%B4%A0/23231

例子3.選填志願的評估指標

(1)務實面對現實

1.參考100年北聯排序(滿分36分)

(2)校風及學生競爭力(大學升學率)

101-104大學升學率

104高中升大學升學率

103高中升大學升學率

102高中升大學升學率

101高中升大學升學率

(3)交通便利性

(4)家人的期待與自我期許

2.演算法的重要性-是程式設計的靈魂

程式=演算法+資料結構

程式=演算法+資料結構+程式設計方法+語言工具和環境

用十分鐘學會《資料結構演算法和計算理論》

3.演算法相關書籍

改變世界的九大演算法

演算法統治全世界

4.演算法相關新聞

Google 的人工智慧系統AlphaGo 阿爾法狗打敗人類圍棋冠軍,在三月九日到十五 日的五戰圍棋對弈中取得首勝,為人工智慧發展寫下重要里程碑。 中國圍棋(西方稱為Go)的歷史悠久且複雜無比,南韓棋王李世是全 球最佳棋士之一,他自十二歲成為職業棋士以來,已拿下十八個世界冠軍頭銜。他表示,因為人有犯錯的風險,所以可能無法打敗AlphaGo。現年 三十三歲的他在第一場對弈登場前說:「人之所以為人,是因為他們會犯錯。」 人為錯誤不僅是他唯一的弱點。李世表示,人類棋手對弈時可揣摩對方的反應與心理,但這次看不到這些線索,讓他頗不習慣。 反觀AlphaGo 這個機器棋手則有許多優勢。它從十萬多場圍棋比賽中模仿高手的棋譜,然後和自己下棋,從錯誤中「學習」。Google 的DeepMind 團隊也設計一套程式,讓AlphaGo 可以預測每一步棋對比賽的長遠影響, 從而判斷哪步落子會必勝。


三.為何要學習程式語言?

1.學習程式語言的動機



2.學習程式語言的目的

(1)具體來說,程式設計可以培養的思維技能之一是解決問題

(2)解決問題的步驟包括定義問題、將問題細分、以及建立模型,與此相對。

(3)在學生編寫程式時,同樣需定義問題,即程式目的為何,還有將問題分解為不同階段的小程式,如編寫多個物件,並賦與它們不同功能,最後則觀察問題規律,掌握問題核心部分,成為日後解決相似問題的模型。

3.程式語言納入正式課程相關報導

http://www.ithome.com.tw/news/106150

http://udn.com/news/story/9/1627492


四.程式語言

1.何謂程式語言

人與人透過語言溝通,如果我們需要電腦來幫我們做事,就必須想辦法與電腦溝通。

程式語言就是人與電腦溝通的工具。為了讓電腦能夠完成工作,電腦專家就為程式語言制定一套特定的格式與語法規則,指揮電腦完成工作。 不同類型的程式語言,語法格式就不同,就如同中文英文法文,語法是不一樣的。 簡單的說程式就是許多叫電腦做事的指令程序

程式設計是用程式語言把求解特定問題的演算法描述出來的指令

2.台灣中小學推動程式語言概況

(1)圖像式程式語言

a.Scratch

b.谷歌與麻省理工正在合作開發下一代Scratch-Scratch Blocks

(2)文字型程式語言的種類

a.程式語言與金庸小說中的絕世武功

C 比之九陰真經,學會並掌握指標,天下無敵。
C++ 比之龍象般若功,有十三層,但修煉不易,無人超過第十層。
C# 比之彈指神通,高手運用手指的巧勁就能施展。
Java 比之獨孤九劍,敗中變化出的招式,不限平台的 JVM 。
JavaScript 比之胡家刀法,六字訣變幻莫測,瀏覽器上都能運作。
Objective-C 比之六脈神劍,獨家不傳絕技。
Perl 比之龍爪手,少林正宗武學,幾乎 Linux 高手必備。
PHP 比之黯然銷魂掌,需要深厚內力才能使出。
Python 比之降龍十八掌,簡單卻威力強大。
Ruby 比之乾坤大挪移,這要用過了才會知道。
Swift 比之一陽指,六脈神劍的精髓,本來同樣是獨家不傳絕技,不過現在 open source 了。

b.程式語言與魔戒小說中的人物

這裡看原尺寸圖檔1666x1841

c.程式語言排行榜

Google 受夠了 Java,將改用 Apple 推出的程式語言 Swift

d.該學何種語言


e.什麼是程式設計

f.python自學

Communitysocial grouping

https://tw.pycon.org/2016/zh-hant/

Online平台

https://repl.it/languages

Book

Teach Your Kids to Code

http://yehnan.blogspot.tw/search/label/Python

Web

http://pala.tw/begin-to-learn-python/

http://openhome.cc/Gossip/CodeData/PythonTutorial/HelloWorldPy3.html

http://tech.marsw.tw/blog/2014/09/03/getting-started-with-python-in-ten-minute

http://pydoing.blogspot.tw/2012/10/python-tutorial.html

Python與數據分析

https://www.facebook.com/LearnFunTeam/

Video

3.台灣大學推動程式語言概況

http://www.tiobe.com/tiobe_index?page=index

那些年,我們一起被當的程式

 

計算機程式設計 (Computer Programming) - 劉邦鋒

4.如何透過程式設計發展國中小學生的CT

「低門檻,高極限」為選擇運算思維學習工具的重要原則,希望學生不需經過太多低階技巧的學習便能上手,而能將學習焦點放在高階思維視覺化程式設計工具(如Scratch與Greenfoot)讓學習者容易地學會程式設計,且能專注於設計與創作,經歷創作、修改與使用的歷程, 學生可體驗與應用運算思維,更進一步可接續一般的程式語言 (如Python、Java、Scheme與C),以逐步發展運算思維(Grover & Pea, 2013)

程式設計的內容(與學科知識相關或生活經驗有關),不應只著重成果(完成遊戲/專題報告),需在學習過程(歷程)中幫助學生掌握不同的能力

資料引用

http://www.inside.com.tw/2016/03/07/skills-thinking-of-programmer

 


五.運算思維(Computational Thinking)VS程式語言

思考問題比操作來得重要,如果能在思考中產生興趣並且有正確的觀念

1.基於計算思維培養的Scratch教學

以“想像、創作、分享”為主題的Scratch,趣味性、易學性、實踐性、創新性都適合中小學生,特別是作為簡單易學的編程工具,用拖動指令塊代替敲代碼,學生可以避開程式設計語言語法的學習和調試,集中精力對問題進行求解,這為學生電腦思維的培養提供了便利條件。筆者以《大魚吃小魚》一課為例,就如何培養學生的計算思維同大家一起探討。學生此前已經學會了Scratch中常見的指令塊,本節課是Scratch的綜合應用課。課程任務是:在10秒鐘內記錄大魚吃掉小魚的總條數。
  

(1)利用面向物件的方法抽象出問題求解的模型

   計算思維作為一種思維過程,很難用知識描述的方式顯性呈現出來。其中方法是計算思維的重要內容。計算思維的方法可分為數學方法和工程方法,其中數學方法涉及抽象、遞迴、證明、形式化表達等,工程方法包括系統方法、分治法、面向過程和面向物件方法等。教師通過這兩類方法的傳授,把有關計算思維的相關思維特徵和方法分解到每一個具體的教學內容之中。

   “大魚吃小魚”遊戲實現起來比較複雜,因為它不是一個結構化很強的問題,沒有明確要求先做什麼再做什麼,前後邏輯性不是很嚴密,小魚在遊,大魚也在遊,時間還在走,當小魚碰到大魚,要被吃掉,其他小魚依然不受影響,繼續遊,時間繼續走。程式中出現了幾個並行的流程時,如何進行任務統籌呢?如何貼近實際進行程式的優化提高效益呢?利用求解的順序步驟很難解決問題,這需要從另外一個思路思考問題求解的方法——面向物件的方法。把問題抽象出“物件+觸發事件”模型,分析遊戲中涉及哪些物件,這些物件的初始狀態是什麼,哪些物件是靜態的,哪些物件是動態的,動態物件的激發事件是什麼,調試運行後,是否達到最初的預期,沒有達到如何優化。學生從具體的事例中抽象出電腦能夠解決的模型,從而達到解決問題的目的。

教學片段1:

   師:遊戲中有哪些對象?
   生:一條大魚,許多條小魚,背景,被吃小魚計數器、計時器。
   師:它們初始狀態是什麼?
   生:計數器初始化為零,計時器初始化為零。舞臺背景選擇與“海底世界”類似的畫面;大魚初始位置為隨機(如圖1);小魚初始狀態為遊動(如圖2)。
   師:分析完後,有哪些物件處於初始狀態?並思考將要發生哪些事件?
   生:事件1,當鍵盤上的方向鍵被按下的時候,大魚的遊動會發生變化;事件2,當大魚碰到小魚的時候,小魚被吃掉,被吃小魚計數器自增1;事件3,如果計時達到10秒,遊戲結束,並顯示被吃小魚的條數。


教學片段2:
   師:大魚(碰到鍵盤上的方向鍵)觸發什麼事件?
   學生操作如圖3所示。
   師:如何模擬大魚吃掉小魚的情境。現實中看到的場景是大魚張開嘴巴,小魚消失……
   生:可以使用“碰到”大魚的時候,小魚“隱藏”的方式,類比小魚被吃掉的場景(如圖4)。
   師:很好,同學們已經學會使用“仿真”方式來解決問題。其實電腦仿真是一種很好的思路。例如,實體機器人因為成本高,難以普及,所以市場上出現了仿真機器人,也能讓初學者體驗到機器人的搭建和感測器應用等功能。當時間達到規定時間10秒時,遊戲結束。

   學生執行如圖5所示操作。


   在教師的引導下,學生對實現大魚遊動的程式進行了簡化,抽象出通過按鍵控制大魚橫縱坐標值的變化,大魚吃小魚的場景,仿真為小魚碰到大魚時則消失,並抽象為Scratch功能塊——隱藏,計數變數自增1。學生在觸發事件的處理過程中,不斷使用簡化、仿真等計算思維的方法把現實問題轉化成Scratch的功能塊,從而達到利用電腦解決問題的目的。

(2)利用debug優化調試程式

   計算思維是通過冗餘、糾錯的方式,在最壞的情況下進行預防、保護和恢復的一種思維。當學生在Scratch中編寫腳本進行程式設計時,糾錯優化是始終伴隨其中的。當學生運行程式發現與預期的情況不同時,糾錯的行為就開始了,他們會去尋找到底哪里出現了問題,糾錯就是通過測試和調試去實現,而糾錯同樣是計算思維的重要概念之一。

   教學片段3:
   師:在調試中,發現小魚遊動的畫面非常機械,如何改進?
   生:在小魚遊動的程式中,添加 可以使小魚遊動的畫面更加自如。
   師:當小魚隱藏後,遊戲重新開始時,原先被吃掉的小魚不再出現,那麼如何修改?
   生:在小魚初始化程式塊中添加。
   師:上述實現的是一條小魚,實際情況中,應該有好多小魚,那麼如何修改?
   生:其他小魚與第一條小魚的不同點是外觀不同(大小、形狀、顏色),相同點是功能相同(來回遊動,碰到大魚消失)。
   師:外觀不同,可以通過選擇圖庫中不同的角色,也可以複製原角色,利用Scratch自帶的圖片編輯工具填充不同的顏色區域。功能相同意味著腳本相同,可複製獲得,利用代碼複製可以簡化編程工作。調試運行後,發現複製腳本能讓許多小魚具有相同的位置和狀態。這麼多小魚不可能從同一點出發,不符合實際情況。利用亂數字模組可以解決小魚起點出現在相同位置的問題。

在Scratch教學中,如果教師不把分析的過程、思考的過程及優化的過程呈現出來,那麼學生也僅僅獲得知識,因缺乏必要的思維訓練,他們也無法獲得舉一反三、觸類旁通的能力以及普適的技能。讓學生從本質上和全局上來建立對問題的解決思路,便於學生進入到類似問題的求解中。

(3) 利用約簡、仿真等方法抽象出事件的處理過程

   計算思維的本質是抽象和符號化,在Scratch數位作品創作過程中,無論是動畫故事的編制還是遊戲的開發,都需要把具體的問題抽象成符號或物件,並使用指令塊把相應的問題“計算”出來。Jeannette M.Wing教授認為這種能將一個問題清晰、抽象地描述出來,並將問題的解決方案表示為一個資訊處理流程的思維過程就是計算思維的訓練過程。計算思維是通過約簡、嵌入、轉化和仿真等方法,把一個看似困難的問題重新闡釋成一個人們知道怎樣解決的問題。電腦類比大魚吃小魚這一現實問題,怎樣讓學生經歷一個通過約簡、嵌入、轉化、仿真等方式進行化難為簡的過程,體會計算思維的本質——抽象和自動化,是計算思維培養的突出表現。

在《大魚吃小魚》一課中,當學生完成了大魚吃一條小魚的任務,吃其他小魚的情況,要重複做嗎?在同類問題再出現時,演算法思維就可以介入,沒必要每次從頭思考,而是採用每次都行之有效的解決方案。看到問題的核心——各小魚的觸發事件相同,所以在Scratch中通過複製角色,就可以完成許多“功能”小魚的製作。如此設計後,發現每條小魚的“初始狀態”相同,這不符合實際情況。為了更加逼真體現,筆者用亂數設定小魚們出現的位置,同樣,調試糾錯的訓練也出現在小魚遊動的程式塊中。

   人之發展,首在思維,因此培養人的科學思維能力必然是教育的核心內容。思維的培養不可能研究思維本身,只能借助載體來表達思維,從而揭示思維的內在實質。科學的思維方式不是先天生成的,需要後天的培養,如數學課中的邏輯思維、物理課中的實證思維。反過來,具備了某種思維能力的人,也會影響自身的行為模式。要想計算思維成為大眾的基本技能和普適思維,要經過長期的培養,更需要思維訓練的載體。作為基礎教育中的資訊技術課程,其具備了得天獨厚的條件——學生可以近距離接觸電腦科學。本文中的Scratch教學就是一次有益的嘗試,通過一節Scratch綜合應用課,讓學生親歷了面向物件解決問題的方法,簡化、仿真等抽象手段實現觸發事件的過程,最後通過調試來糾錯優化程式塊。學生在教師的引導下不斷思考如何解決問題並親歷計算思維之抽象及自動化的本質。

2.技術為外功,思維乃內力

金庸的武俠小說中有一個普遍的規律,那就是武功必定以內力為根基。

比如張君寶與崑崙三絕何足道在少林寺的那場經典之戰中,張君寶能夠 「以少林拳中最平淡無奇的拳招,化解了最繁復的敵招」,始終不落下風,所恃者不過內力之渾厚爾。

另外的著名戰例還包括少林寺小和尚虛竹 VS 吐蕃國師鳩摩智以及聚賢莊蕭峰 VS 玄難。內力達到登峰造極空前絕後的第一高手莫過於少林寺的掃地僧

電腦程式所特有的思維(Thinking)就是工程師的「內力 」,思維能力不濟,功能再強大的程式語言也無用武之地

當面對一個數學或電腦問題,一要想的明白,二要算的準確,三要寫的清楚

 

參考資料

http://www.inside.com.tw/2016/03/07/skills-thinking-of-programmer

m.tw/2016/03/07/skills-thinking-of-programmer">http://www.inside.com.tw/2016/03/07/skills-thinking-of-programmer