官术网_书友最值得收藏!

1.2 計算思維

沒有最好的程序語言,只有最合適的程序語言。程序語言只是工具,在設計程序時應根據(jù)需要對程序語言進行選擇,并無特別規(guī)定。一般可從如下4點判斷程序語言選擇是否恰當。

·可讀性高:閱讀與理解都相當容易。

·平均成本低:成本考量不局限于編碼的成本,還包括執(zhí)行、編譯、維護、學習、除錯與日后更新等成本。

·可靠性高:所編寫出來的程序代碼穩(wěn)定性高,不容易產(chǎn)生邊界錯誤(Boundary Error)。

·可編寫性強:可以針對需求比較容易地編寫出程序。

程序設計的本質(zhì)是數(shù)學,而且是較為簡單的數(shù)學應用。對于程序設計,過去我們非常看重計算能力。但隨著信息與網(wǎng)絡科技的高速發(fā)展,計算能力的重要性已慢慢降低,反而現(xiàn)在特別注重計算思維的培養(yǎng)。我們可以這樣形容:“雖然學習程序設計不等于學習計算思維,但程序設計的過程就是一種計算思維的表現(xiàn),而且要學好計算思維,程序設計絕對是最佳的途徑之一。”

2006年,美國卡內(nèi)基梅隆大學周以真(Jeannette M.Wing)教授首度提出了“計算思維”的概念。她提到計算思維是現(xiàn)代人應該具備的一種基本技能,所有人都應該積極學習。隨后谷歌公司也為教育者開發(fā)了一套計算思維課程(Computational Thinking for Educators)。這套課程提到了培養(yǎng)計算思維的4個方面,分別是分解(Decomposition)、模式識別(Pattern Recognition)、歸納與抽象化(Pattern Generalization and Abstraction)和算法(Algorithm)。雖然這并不是建立計算思維的唯一方法,但是通過這4個方面,我們能更有效率地深化利用計算方法與工具解決問題的思維能力,進而建立計算思維。

1.2.1 分解

許多人在編寫程序或解決問題時,往往不知道如何分解問題。如果一個問題不進行分解,一般會較難處理。當我們面臨一個復雜的問題時,可以先將其分割成許多小問題,再將這些小問題各個擊破;小問題全部解決之后,原本的大問題也就解決了。例如,一臺計算機發(fā)生機器故障了,可以將整臺計算機逐步分解成較小的部分,再對每個部分的各種元器件進行檢查,如圖1.2所示。程序員在遇到問題時,通常會考慮所有可能性,將問題逐步分解后進行解決,久而久之,這樣的邏輯就變成他的思考模式了。

圖1.2

1.2.2 模式識別

將一個復雜的問題分解之后,我們常常能發(fā)現(xiàn)小問題之間共有的屬性以及相似之處,這些屬性稱為模式(Pattern)。所謂模式識別,就是在一堆數(shù)據(jù)中找出特征(Feature)或規(guī)則(Rule),并用其對數(shù)據(jù)進行識別與分類,甚至作為決策時的判斷條件。在解決問題的過程中找到模式是非常重要的。模式可以讓問題的解決簡單化,當問題之間有共有屬性時,往往更容易被解決。

當描述完一只狗后,我們可以依照狗的共有屬性輕易地描述其他狗,如狗有眼睛、尾巴與4只腳,而唯一不一樣的地方是每只狗都有或多或少的獨特之處。識別出模式之后,便可用此模式來解決類似的問題。知道所有的狗都有這些屬性后,當想要畫狗的時候便可將這些共有的屬性加入,這樣就可以很快地畫出很多只狗。

1.2.3 歸納與抽象化

歸納與抽象化的目的在于過濾以及忽略掉不必要的特征,讓我們可以把注意力集中在重要的特征上,將問題具體化。通常這個過程開始會收集許多的數(shù)據(jù),然后借由歸納與抽象化把特性以及無法幫助解決問題的模式去掉,留下相關以及重要的共有屬性,直到建立一個通用的解決問題的規(guī)則。由于歸納與抽象化沒有固定的模式,因此會隨著需要或?qū)嶋H狀況而有所不同。例如,把一輛汽車抽象化時,每個人都有各自的分解方式,汽車銷售員與汽車修理師對汽車抽象化的結果可能就會有差異。

1.2.4 算法

算法不但是人類利用計算機解決問題的技巧之一,也是程序設計領域中最重要的部分,常常是設計計算機程序的第一步。算法就是一種計劃,每一個指示與步驟都是計劃過的,這個計劃里面包含解決問題的每一個步驟和指示。

日常生活中也有許多事情都可以利用算法來描述,如員工的工作報告、寵物的飼養(yǎng)過程、美食的食譜等,甚至連我們平時經(jīng)常使用的搜索引擎都必須借由不斷更新算法來運作,如圖1.3所示。

圖1.3

在程序設計里,算法更是不可或缺的一環(huán)。了解了算法的定義后,我們繼續(xù)說明算法必須符合的5個條件,如圖1.4和表1.1所示。

圖1.4

表1.1 算法應符合的5個條件

算法的主要目的是供人們閱讀,以了解所執(zhí)行的工作流程與步驟。

常用的算法表示法為一般文字敘述,如中文、英文、數(shù)字等,特點是使用文字或語言敘述來說明算法步驟。有些算法則是利用可讀性高的高級語言(如Python、C語言、C++、Java等)或虛擬語言來描述。

Tips 虛擬語言是一種接近高級語言的語言,也是一種不能直接放進計算機中執(zhí)行的語言,一般需要一種特定的預處理器或者手動轉(zhuǎn)換,才能變成真正的計算機語言。經(jīng)常使用的虛擬語言有Spark、Pascal等。

當然,流程圖也是一種相當通用的算法表示法,即使用某些圖形符號來表示程序解決流程。為了實現(xiàn)流程圖的可讀性及一致性,通常使用美國國家標準學會(American National Standards Institute,ANSI)制定的統(tǒng)一圖形符號。一些常見的圖形符號如表1.2所示。

表1.2 一些常見的圖形符號

例如,輸入一個數(shù)值并判斷其是奇數(shù)還是偶數(shù)的流程圖如圖1.5所示。

圖1.5

Tips 算法和程序有所不同,因為程序不一定滿足有限性的要求。如操作系統(tǒng)或計算機上運行的程序,除非關機,否則永遠在等待循環(huán),這也違反了算法的有限性要求。

主站蜘蛛池模板: 海门市| 伊吾县| 喀喇沁旗| 辛集市| 崇仁县| 小金县| 革吉县| 阳东县| 黎平县| 洛南县| 新平| 卓尼县| 三原县| 嵩明县| 郑州市| 卫辉市| 泊头市| 云浮市| 勃利县| 凉山| 巫溪县| 庐江县| 宁晋县| 若尔盖县| 于都县| 北川| 无为县| 汝州市| 铜川市| 鄂州市| 南投县| 凌源市| 阳谷县| 栖霞市| 白河县| 乐亭县| 余江县| 睢宁县| 德钦县| 三台县| 绍兴市|