什么是編程?
很多人覺(jué)得編程是門(mén)高深莫測(cè)的學(xué)問(wèn), 擔(dān)心自己學(xué)不來(lái). 實(shí)際上, 編程雖然不是隨便能學(xué)會(huì)的技能, 但是也沒(méi)有那么難. 因?yàn)? 普通人已經(jīng)具備了很多編程需要的基礎(chǔ). 為什么這么說(shuō)?
1. 編程也是一門(mén)語(yǔ)言
和我們?nèi)粘J褂玫闹形?、英語(yǔ)一樣, 編程語(yǔ)言也是一門(mén)用于溝通的語(yǔ)言.
只不過(guò)"編程語(yǔ)言"是和計(jì)算機(jī)溝通的語(yǔ)言.
而"程序", 就是使用計(jì)算機(jī)能夠理解的語(yǔ)言書(shū)寫(xiě)的一連串命令.
而"編程"就是我們?yōu)榱送瓿赡稠?xiàng)任務(wù), 將解決問(wèn)題的步驟, 用計(jì)算機(jī)能夠理解的語(yǔ)言寫(xiě)成指令, 這就是"編程". 而后, 計(jì)算機(jī)會(huì)根據(jù)這些指令一步步執(zhí)行, 最后完成任務(wù).

所以, 我們可以看到, "編程"涉及到 3 個(gè)組成部分:
我們, 負(fù)責(zé)思考解決問(wèn)題的步驟
我們, 負(fù)責(zé)使用計(jì)算機(jī)能夠理解的語(yǔ)言, 來(lái)描述解決步驟
計(jì)算機(jī), 負(fù)責(zé)執(zhí)行這些步驟
我們可以把"程序"想象成"菜譜". 下面, 我們以"煎雞蛋"為例:?假設(shè)我們不會(huì)炒菜, 然后獲得了一份煎雞蛋的菜譜, 而后, 我們就可以照著這個(gè)菜譜一步步去操作, 最后做出一份香噴噴的煎蛋.

在這里, "菜譜"就是"程序", 有人制作了這個(gè)"程序", 我們呢, 只需要按照這個(gè)"程序"執(zhí)行, 最終獲得程序運(yùn)行的結(jié)果 -- 一份香噴噴的煎蛋.
不過(guò)稍等一下, 可能有人會(huì)問(wèn): 盡管有菜譜, 我們還是可能把煎蛋搞砸啊:
可能我們沒(méi)有按照菜譜煎蛋, 導(dǎo)致失敗;
可能菜譜描述的煎蛋方法有問(wèn)題;
可能煎蛋方法沒(méi)問(wèn)題, 但是描述有歧義;
那么, 如果是由計(jì)算機(jī)來(lái)執(zhí)行這個(gè)菜譜, 如何讓它不搞砸?
2. 如果讓計(jì)算機(jī)煎雞蛋
假設(shè)由我們來(lái)編寫(xiě)菜譜, 讓計(jì)算機(jī)來(lái)煎蛋. 是否也會(huì)面對(duì)上面的 3 個(gè)問(wèn)題?
對(duì)于第 1 個(gè)問(wèn)題
計(jì)算機(jī)不存在第 1 個(gè)問(wèn)題. 因?yàn)橛?jì)算機(jī)沒(méi)有思想沒(méi)有情緒, 它只會(huì)不折不扣地執(zhí)行指令.
對(duì)于第 2 個(gè)問(wèn)題
第 2 個(gè)問(wèn)題涉及到"解決問(wèn)題的能力".
我們不要把"解決問(wèn)題的能力"想像得太過(guò)高深, 其實(shí)我們成人每一天都在解決問(wèn)題. 比如, 考慮如何完成工作, 考慮如何讓孩子上好學(xué)校... 這些都是在解決問(wèn)題. 所以說(shuō)大家對(duì)于這部分有充足的練習(xí), 能力是及格的. 我們的瓶頸在于第 3 個(gè)問(wèn)題.
對(duì)于第 3 個(gè)問(wèn)題
這是我們現(xiàn)階段的瓶頸 -- 盡管我們有解決問(wèn)題的辦法, 但是還不知道如何按照計(jì)算機(jī)能夠理解的語(yǔ)言去描述步驟.
那么, 如何解決這個(gè)瓶頸?
如何解決第 3 個(gè)問(wèn)題
現(xiàn)在, 我們已經(jīng)成功把"編程的難點(diǎn)"縮小到"如何準(zhǔn)確描述步驟"這個(gè)問(wèn)題上.
那么, 如何準(zhǔn)確描述步驟呢:
把解決問(wèn)題的"步驟"抽象成"流程"
按照"計(jì)算機(jī)語(yǔ)言的語(yǔ)法"?去描述這個(gè)"流程"
?學(xué)習(xí)"計(jì)算機(jī)語(yǔ)言的語(yǔ)法"是今后的學(xué)習(xí)內(nèi)容, 所以我們暫時(shí)跳過(guò), 先看看如何把步驟抽象成流程.
3. 把"步驟"抽象成"流程"
我們生活工作中的大部分任務(wù), 都可以抽象成"流程圖".
而所有的"流程圖"都可以使用 3 個(gè)基本結(jié)構(gòu)("順序"、"判斷選擇"、"循環(huán)")描述清楚, 區(qū)別只是嵌套組合的復(fù)雜程度:

上圖中的每種流程結(jié)構(gòu)都是"單入口單出口(Single Entry, Single, Exit)", 這可以讓嵌套組合時(shí)只有唯一的輸入和輸出, 從而保證井井有條, 不會(huì)混亂
以日常生活來(lái)舉例:
早晨起床:
先刷牙再洗臉 -- "順序"流程
吃飯一直吃到飽 -- "循環(huán)"流程
查看天氣決定是否帶雨傘 -- "判斷"流程
到達(dá)公司:
碰到不一樣的人, 然后打稱(chēng)呼也不一樣 -- "判斷"流程;
不斷碰到人, 你會(huì)不斷打招呼 -- "循環(huán)"流程;
打招呼時(shí)會(huì)先跟最近的人打招呼, 再和比較遠(yuǎn)的人打招呼 -- "順序"流程;
另外, 從你萌生讓孩子學(xué)習(xí)編程的念頭, 到上網(wǎng)搜索查詢(xún), 到看到這本電子書(shū), 也是一種"程序", 期間有判斷有反復(fù)(循環(huán))
從上文中, 我們可以發(fā)現(xiàn), 把"步驟"抽象成"流程"也并不難, 并不會(huì)成為我們學(xué)習(xí)編程的障礙.
4. 結(jié)論
上面我們分析了"編程"的 3 個(gè)組成部分, 這些分析可以幫助我們回答很多問(wèn)題:
Q: 我是否適合學(xué)習(xí)編程?
A:如果你是個(gè)普通人, 心智是正常的, 思路是清晰的, 那么學(xué)習(xí)編程就沒(méi)有問(wèn)題. 我們需要額外學(xué)習(xí)的只是計(jì)算機(jī)語(yǔ)言, 然后把你的思考轉(zhuǎn)換成用這個(gè)語(yǔ)言來(lái)描述就可以了.
Q: 我的孩子是否適合學(xué)習(xí)編程?
A:?那么他現(xiàn)在是否有"順序、判斷、循環(huán)"的邏輯概念? 他是否能解決一些小的問(wèn)題, 比如走迷宮, 比如按照?qǐng)D紙搭建樂(lè)高.
Q: 沒(méi)有基礎(chǔ)的孩子, 如何為學(xué)習(xí)編程做好準(zhǔn)備?
A:?先練習(xí)思考問(wèn)題的能力, 掌握"順序、判斷、循環(huán)"的邏輯概念, 有了這兩項(xiàng)就具備學(xué)習(xí)編程的前提.
Q: 編程有什么好處?
A:?最直接的, 鍛煉解決問(wèn)題和邏輯思考的能力, 鍛煉借助計(jì)算機(jī)幫助自己解決問(wèn)題地能力.
Q: 編程需要學(xué)習(xí)什么語(yǔ)言?
A:?語(yǔ)言不是關(guān)鍵, 因?yàn)樗械木幊陶Z(yǔ)言都是可以讓計(jì)算機(jī)理解的. 那么對(duì)于孩子來(lái)說(shuō), 挑選符合孩子頭腦發(fā)展水平的就可以.
(感謝我的朋友@土豆爸對(duì)本文的貢獻(xiàn))