編程第一課:什么是編程語(yǔ)言
? ? ? ?到底什么是編程語(yǔ)言,你是否好像有一肚子話要說(shuō),卻又無(wú)從開(kāi)口,那就是還沒(méi)有搞清楚,概念有些模糊,讓我們一起來(lái)理一理。

?????????如果我們現(xiàn)在直接給出編程語(yǔ)言的定義,然后以幾種編程語(yǔ)言為例,簡(jiǎn)單介紹一下語(yǔ)言的發(fā)展歷程??峙潞茈y得到大家的共鳴,對(duì)初學(xué)者來(lái)說(shuō)只不過(guò)又多了一些需要記憶的知識(shí)點(diǎn)。因此我們換一個(gè)思路,像計(jì)算機(jī)一樣去思考這個(gè)問(wèn)題。我相信只要你不是從古代穿越來(lái)的,并且能夠看懂這段文字,你應(yīng)該知道“編程語(yǔ)言”與“計(jì)算機(jī)”之間一定存在某種聯(lián)系。讓我們思考一下下面這張圖:

你可能聽(tīng)說(shuō)過(guò)思維導(dǎo)圖,很多老師喜歡使用思維導(dǎo)圖整理思路。我和他們不一樣,我路子比較野,我喜歡用棧。棧的英文是stack,翻譯過(guò)來(lái)就是“堆?!钡囊馑肌>蜅0?,怎么還堆上了,對(duì)于有一定基礎(chǔ)的程序員來(lái)說(shuō),這個(gè)翻譯令人困惑,因?yàn)樵趦?nèi)存的概念中,“堆(heap)”和“棧(stack)”恰恰是需要嚴(yán)格區(qū)分的兩個(gè)概念。對(duì)于新手來(lái)說(shuō),只要知道我們這里談的是棧是一種數(shù)據(jù)的組織結(jié)構(gòu)就行了,和內(nèi)存概念里的棧是兩種不同的概念。(當(dāng)然會(huì)有在棧內(nèi)存中使用棧數(shù)據(jù)結(jié)構(gòu)組織數(shù)據(jù)的情況,而且很常見(jiàn)很有用。)等一下,我們好像跑題了,這可是編程第一課呀,對(duì)新手來(lái)說(shuō)這些并不需要掌握吧?是的,我們繼續(xù),我不但路子野,還很固執(zhí)。我自然有我的道理,棧這種數(shù)據(jù)結(jié)構(gòu)還是有必要介紹一下,畢竟它非常容易掌握,而且與我們現(xiàn)在談?wù)摰闹黝}密切相關(guān),別急有點(diǎn)耐心,說(shuō)不定會(huì)有驚喜。
??????????棧是一種先進(jìn)后出(FILO,F(xiàn)irst In Last Out)的數(shù)據(jù)結(jié)構(gòu),而數(shù)據(jù)結(jié)構(gòu)就是用來(lái)存放(或更準(zhǔn)確的說(shuō),組織)數(shù)據(jù)的結(jié)構(gòu)(或理解為框架、容器等)。那先進(jìn)后出(FILO)又是什么意思?回想一下stack的中文翻譯:堆棧?!岸选弊郑ㄅ銮桑浚┦譁?zhǔn)確的描述了棧這種數(shù)據(jù)結(jié)構(gòu)!比如,一堆書,一堆干草,一堆金條等等。最先放進(jìn)一堆東西的某個(gè)元素,一定是被壓在最下面,而拿的時(shí)候從最上面開(kāi)始,也就是從頂部(棧頂)開(kāi)始拿。
????????言歸正傳,棧在這里只是我們用來(lái)存放(組織)思路的容器(工具),我們首先把“什么是編程語(yǔ)言?”放進(jìn)去,壓在容器的最下面,這是我們目前需要解決的終極目標(biāo)?,F(xiàn)在我們需要一個(gè)策略,把大目標(biāo)化解成一些小目標(biāo),這樣更清晰更容易實(shí)現(xiàn),這種策略有一個(gè)名字,叫“分而治之”,這種策略在算法中很常見(jiàn)。我又提了一個(gè)概念:算法,現(xiàn)在讓我們把這些概念聯(lián)系起來(lái),體會(huì)一下這個(gè)說(shuō)法:編程==數(shù)據(jù)結(jié)構(gòu)+算法?,F(xiàn)在的問(wèn)題是,怎么個(gè)分而治之呢?首先把“什么是編程語(yǔ)言”分解為兩個(gè)問(wèn)題:
什么是編程?
什么是語(yǔ)言?
廢話不多說(shuō),接著細(xì)化:
什么是編程?
編程就是編寫程序,那么什么是程序?
計(jì)算機(jī)程序是一組計(jì)算機(jī)能識(shí)別和執(zhí)行的機(jī)器指令。
從業(yè)務(wù)實(shí)現(xiàn)的角度來(lái)說(shuō):程序 ==? 數(shù)據(jù)結(jié)構(gòu) + 算法
什么是語(yǔ)言?
語(yǔ)言是溝通交流的工具,例如人與人之間通過(guò)中文,英文等進(jìn)行交流。與計(jì)算機(jī)溝通需要使用機(jī)器語(yǔ)言。機(jī)器有語(yǔ)言?什么是機(jī)器語(yǔ)言?
機(jī)器語(yǔ)言是用二進(jìn)制代碼表示的計(jì)算機(jī)能直接識(shí)別和執(zhí)行的機(jī)器指令集。
機(jī)器指令通常由操作碼和操作數(shù)兩部分組成,操作碼指出該指令所要完成的操作,即指令的功能,操作數(shù)指出參與運(yùn)算的對(duì)象,以及運(yùn)算結(jié)果所存放的位置等。
二進(jìn)制的機(jī)器指令太繁瑣,于是有了匯編語(yǔ)言,匯編語(yǔ)言是歷史的必然,可以簡(jiǎn)單理解為對(duì)二進(jìn)制指令的直接翻譯。
人類還是更習(xí)慣使用人類語(yǔ)言的語(yǔ)法、邏輯來(lái)描述解決方案,于是就有了高級(jí)語(yǔ)言,從此我們可以從更抽象的層次進(jìn)行編程。
問(wèn)題分解完,把每個(gè)小問(wèn)題的答案返回給提出它的大問(wèn)題,大問(wèn)題再把自己的答案返回給更大的問(wèn)題,這樣我們最初的問(wèn)題也就有了答案:

編程語(yǔ)言是編寫計(jì)算機(jī)程序的語(yǔ)言:
直接使用機(jī)器語(yǔ)言,即二進(jìn)制機(jī)器指令。
使用匯編語(yǔ)言,然后翻譯成機(jī)器語(yǔ)言。
使用高級(jí)編程語(yǔ)言,然后翻譯成匯編語(yǔ)言,再翻譯成機(jī)器語(yǔ)言。
思考題:編程語(yǔ)言真的僅僅是用于人類寫給機(jī)器看的嗎?
提示:負(fù)責(zé)軟件維護(hù)的倒霉蛋可不是這么想的,評(píng)價(jià)一個(gè)源碼的標(biāo)準(zhǔn):準(zhǔn)確、簡(jiǎn)潔、高效。簡(jiǎn)潔甚至排在高效前面。語(yǔ)言本身的簡(jiǎn)潔也重要,需要對(duì)初學(xué)者足夠友好才能得到推廣。
文字部分就到這里了,我將會(huì)把這部分錄制為視頻,記得觀看點(diǎn)贊哦!