理解編程語(yǔ)言只需四個(gè)詞-編程知識(shí)體系介紹(帶python及scratch案例)

學(xué)習(xí)編程有時(shí)候會(huì)給人一種高深莫測(cè)的錯(cuò)覺,容易讓人“敬而遠(yuǎn)之”。事實(shí)并非如此,學(xué)習(xí)編程其實(shí)就是學(xué)習(xí)一種語(yǔ)言——一種與機(jī)器對(duì)話的語(yǔ)言。編程語(yǔ)言與人類語(yǔ)言有著很多相似的東西,只要你懂了機(jī)器的語(yǔ)言構(gòu)成,學(xué)習(xí)編程的過(guò)程就像結(jié)交一個(gè)好朋友。 而你編寫程序的過(guò)程就像與老朋友聊天一樣有趣。這章我們就先從整體上認(rèn)識(shí)一下編程語(yǔ)言的體系,很多編程語(yǔ)言都符合這個(gè)標(biāo)準(zhǔn)。


1. 編程體系概述

很多編程語(yǔ)言的主體部分都可以概括為四個(gè)部分:數(shù)據(jù)、運(yùn)算、控制和執(zhí)行。Scratch和Python也不例外。

通過(guò)設(shè)置或者從外界偵測(cè)獲得數(shù)據(jù),然后對(duì)獲得數(shù)據(jù)進(jìn)行運(yùn)算,根據(jù)運(yùn)算結(jié)果用條件判斷和循環(huán)等方式進(jìn)行控制,最后執(zhí)行相應(yīng)的程序,實(shí)現(xiàn)相應(yīng)的功能或效果,如圖4.1所示。

編程體系示意圖

比如從Scratch的代碼模塊分類中我們可以看到數(shù)據(jù)、運(yùn)算、控制三個(gè)模塊;而運(yùn)動(dòng)、外觀、畫筆等模塊則可以歸為“執(zhí)行”部分;“偵測(cè)”模塊是獲得數(shù)據(jù)的一種方式;“事件”是綜合運(yùn)用了數(shù)據(jù)、運(yùn)算、控制的一種方式;“更多模塊”主要是用函數(shù)進(jìn)行封裝,是提高效率的方法。Python與Scratch類似,Scratch的方法都能在Python中找到對(duì)應(yīng)的實(shí)現(xiàn)方式。

后面我們用幾個(gè)案例來(lái)說(shuō)明一下這個(gè)編程系統(tǒng),讓大家加深理解。

1.1 案例一:自動(dòng)駕駛汽車

假設(shè)我們?cè)O(shè)計(jì)一輛能夠自動(dòng)駕駛的汽車,能夠根據(jù)周圍的環(huán)境自動(dòng)調(diào)整速度和方向,完成駕駛。這個(gè)過(guò)程就用到了我們上述的編程系統(tǒng)。

數(shù)據(jù)部分:偵測(cè)與前后左右車輛或障礙物的距離,獲得數(shù)據(jù);提取當(dāng)前的速度和方向等數(shù)據(jù);

運(yùn)算部分:根據(jù)需求對(duì)獲得的數(shù)據(jù)進(jìn)行處理;

控制部分:根據(jù)運(yùn)算結(jié)果制定控制計(jì)劃,如根據(jù)車距合理提高或降低行駛速度;根據(jù)計(jì)算結(jié)果判讀是否具備改變行駛方向的條件。

執(zhí)行部分:根據(jù)控制計(jì)劃作出實(shí)際的操作,達(dá)到最終的結(jié)果。

1.2 案例二:我們完成一個(gè)愿望

我們完成一個(gè)愿望的過(guò)程,其實(shí)也是在運(yùn)行上述編程系統(tǒng),只不過(guò)我們沒有發(fā)覺而已。比如我們要完成籌備一次旅行的的過(guò)程。這個(gè)過(guò)程涉及很多內(nèi)容:身體條件準(zhǔn)備、財(cái)務(wù)條件準(zhǔn)備、生活及工作的安排、出行計(jì)劃的制定、出行方式的選擇等。上述的每一個(gè)部分都在默默的運(yùn)行上述系統(tǒng),為了簡(jiǎn)單說(shuō)明問(wèn)題,我們只提取其中的“財(cái)務(wù)準(zhǔn)備”來(lái)說(shuō)明問(wèn)題。

數(shù)據(jù)部分:通過(guò)各種途徑了解到某地旅游的各種數(shù)據(jù):最佳旅游天數(shù)、日均消費(fèi)額、各個(gè)消費(fèi)項(xiàng)目、最佳出行日期等數(shù)據(jù)。

運(yùn)算部分:對(duì)獲得的數(shù)據(jù)進(jìn)行運(yùn)算,總共需要多少資金,還有多長(zhǎng)時(shí)間進(jìn)行準(zhǔn)備,每天需要攢錢多少等。

控制部分:根據(jù)運(yùn)算結(jié)果制定自己的準(zhǔn)備計(jì)劃,如每天需獲得多少資金,通過(guò)哪些項(xiàng)目進(jìn)行節(jié)約資金或獲得資金。

執(zhí)行部分:嚴(yán)格執(zhí)行上面制定的計(jì)劃并最終獲得

1.3 案例三:我們的身體本身

讓我們驚訝的是我們的身體本身也在默默地按照編程系統(tǒng)不停運(yùn)行。身體的觸覺、聽覺、視覺、嗅覺、痛覺等系統(tǒng)都符合編程系統(tǒng)的設(shè)置。這里我們以視覺為例進(jìn)行說(shuō)明。

數(shù)據(jù)部分:我們通過(guò)各個(gè)感覺器官獲得外部的各種刺激,不一定折算成我們熟悉的阿拉伯?dāng)?shù)值,但一定以某種“數(shù)據(jù)”形式傳遞給我們的大腦。例如我們感受到的光的強(qiáng)度。

運(yùn)算部分:我們的大腦根據(jù)獲得的“數(shù)據(jù)”進(jìn)行各種精密運(yùn)算,得到我們身體需要的“數(shù)據(jù)”。例如我們將獲得的光的強(qiáng)度的數(shù)據(jù)傳遞給大腦,大腦將這個(gè)強(qiáng)度數(shù)據(jù)與眼睛能夠承受的光強(qiáng)度數(shù)據(jù)進(jìn)行比較運(yùn)算。

控制部分:根據(jù)大腦的運(yùn)算結(jié)果進(jìn)行判讀,形成對(duì)器官的不同指令。例如根據(jù)運(yùn)算結(jié)果制定眼睛睜眼、瞇眼、閉眼的不同指令。

執(zhí)行部分:我們的身體根據(jù)“控制”部分的指令產(chǎn)生相應(yīng)的反應(yīng)或動(dòng)作。例如執(zhí)行大腦對(duì)眼睛額指令,當(dāng)光線強(qiáng)的時(shí)候,眼睛按照指令進(jìn)行瞇眼或閉眼。

2 數(shù)據(jù)

中國(guó)古代哲學(xué)(比如《易經(jīng)》)認(rèn)為世間萬(wàn)物可以從“象、數(shù)、理”三個(gè)維度進(jìn)行描述,這是有一定道理的。比如說(shuō)我們?nèi)粘S闷罚隳芸吹竭@個(gè)東西,說(shuō)明他有一定的具象,同時(shí)你也可以從長(zhǎng)寬高、重量、方位等數(shù)據(jù)進(jìn)行描述,同時(shí),這個(gè)東西為什么是這個(gè)樣子(“象”),為什么是這個(gè)數(shù)據(jù)(“數(shù)”)一定有他存在的道理,及所謂的“理”。 所以,從某種層面上說(shuō)我們的世界是一個(gè)“數(shù)據(jù)”的世界,我們?cè)谶@里討論的“編程”更是一個(gè)離不開數(shù)據(jù)的小世界,計(jì)算機(jī)最底層的代碼只不過(guò)是在處理“0”與“1”兩個(gè)數(shù)字。

在編程語(yǔ)言中數(shù)據(jù),一部分由程序捕獲,一部分由編程者給定。需要我們注意的是,這里的數(shù)據(jù)不僅指數(shù)學(xué)中所指的各個(gè)數(shù)字,也包括字符串、布爾值等其他內(nèi)容。更具體的內(nèi)容,我們會(huì)在下面的章節(jié)中詳細(xì)學(xué)習(xí)。

3 運(yùn)算

運(yùn)算指的是對(duì)各類數(shù)據(jù)進(jìn)行相應(yīng)的處理,這里既包括我們傳統(tǒng)意義上的加減乘除、取模、求余、比較大小等數(shù)據(jù)運(yùn)算,也包括或、且、非等邏輯運(yùn)算。

邏輯運(yùn)算在程序設(shè)計(jì)中與數(shù)據(jù)運(yùn)算一樣重要。特別是在條件判斷的控制部分,發(fā)揮著舉足輕重的作用。就像三個(gè)人投票決定某件事:兩種相反的意見的關(guān)系互為“非”,如“同意”與“不同意”;幾個(gè)人只要有一人同意即可通過(guò),幾個(gè)人的意見之間的關(guān)系就是“或”; 幾個(gè)人都同意才可以通過(guò),不同人的意見之間的關(guān)系為“且”。

4 控制

控制指根據(jù)運(yùn)算的結(jié)果調(diào)整、制定相應(yīng)的指令或計(jì)劃。主要包括兩個(gè)方面:條件控制與循環(huán)控制。

條件控制就像一個(gè)“看門人”,控制符合什么樣條件的人才能進(jìn)入;條件控制也可以是“談判者”,守住心中的底線,在什么樣的一個(gè)數(shù)值范圍內(nèi)可以接受條件并完成交易。

循環(huán)控制就像一個(gè)喜歡動(dòng)腦的“機(jī)靈鬼兒”,最不想干的就一遍又一遍地反復(fù)做同樣的工作,于是他將問(wèn)題簡(jiǎn)化,制定了一個(gè)自動(dòng)程序,一按按鈕,就可以翹著二郎腿曬太陽(yáng)去了。

在接下來(lái)的章節(jié)中我們會(huì)詳細(xì)了解這些“看門人”、“談判者”和“機(jī)靈鬼兒”。

5 執(zhí)行

“執(zhí)行”部分的語(yǔ)句最為豐富。是直接呈現(xiàn)最終結(jié)果的命令。在各種編程語(yǔ)言中,執(zhí)行部分的語(yǔ)句也是種類和數(shù)量最多的部分。如在Scratch系統(tǒng)自帶的代碼分類中的運(yùn)動(dòng)、外觀、聲音、畫筆等幾個(gè)部分都可以歸結(jié)為“執(zhí)行”部分。

這就像一個(gè)企業(yè)的人事結(jié)構(gòu),出主意提想法的是少數(shù)人,真正將想法實(shí)現(xiàn),變?yōu)檎嬲a(chǎn)品的的是占比最多的專業(yè)人才,這些專業(yè)人才在執(zhí)行任務(wù)的過(guò)程中也需要相互合作。在企業(yè)里,專業(yè)人才就相當(dāng)于編程系統(tǒng)中的“執(zhí)行部分”。編程的過(guò)程與管理一個(gè)企業(yè)出奇相似,如果我們從學(xué)習(xí)編程的過(guò)程中領(lǐng)悟了管理思維,這算是額外收獲。

6 提高效率

在本書的后面章節(jié),我們還會(huì)學(xué)到提高編程效率的兩大利器:“函數(shù)式編程”和“面向?qū)ο缶幊獭?。大家首先要明白一點(diǎn):這兩個(gè)利器非常好用、對(duì)提高編程效率的作用無(wú)可替代,但是對(duì)于編程實(shí)現(xiàn)的功能來(lái)說(shuō),并沒有添加新的東西。也就是說(shuō)我們完全可以不通過(guò)這兩大利器完成相應(yīng)的功能,所以大家學(xué)習(xí)的時(shí)候不要有心理壓力,我們只是換了一種更高效的程序編寫方式。也許你的心中還有疑慮,既然可以選擇不用,為什么還要學(xué)習(xí)他們?相信你看了后面章節(jié)的案例就會(huì)有了答案:太方便太強(qiáng)大了,沒有理由不用。

7 Scratch案例——無(wú)人駕駛汽車

詳見鏈接 Scratch案例——無(wú)人駕駛汽車

8 Python案例——喝墨水的小烏龜

詳見鏈接 Python案例——喝墨水的小烏龜

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容