何謂程序
程序,即過(guò)程的順序,準(zhǔn)確地說(shuō)應(yīng)該是順序排列的多個(gè)過(guò)程,其是方法的描述。比如吃菜,先用筷子夾起菜,再用筷子將菜送入嘴中,最后咀嚼并吞下。其中的夾、送、咀嚼和吞下就被稱作命令,而菜則是資源,其狀態(tài)(如形狀、位置等)隨著命令的執(zhí)行而不斷發(fā)生變化。上面就是吃菜這個(gè)方法的描述,也就是吃菜的程序。
任何方法都是為了改變某些資源的狀態(tài)而存在,因此任何方法的描述,也就是程序,也都一定有命令這個(gè)東西以及其所作用的資源。命令是由程序的執(zhí)行者來(lái)實(shí)現(xiàn)的,比如上面的吃菜,其中的夾、送等都是由吃菜的人來(lái)實(shí)現(xiàn)的,而資源則一定是執(zhí)行者可以改變的東西,而命令只是告訴執(zhí)行者如何改變而已。
電腦程序和上面一樣,是方法的描述,而這些方法就是人期望電腦能做的事(注意不是電腦要做的事,這經(jīng)常一直混淆著許多人),當(dāng)人需要做這些事時(shí),人再給出某些資源以期電腦能對(duì)其做正確的改變。如計(jì)算圓周率的程序,其只是方法的描述,本身是不能發(fā)生任何效用的,直到它被執(zhí)行,人為給定它一塊內(nèi)存(關(guān)于內(nèi)存,請(qǐng)參考《C++從零開(kāi)始(三)》),告訴它計(jì)算結(jié)果的精度及計(jì)算結(jié)果的存放位置后,其才改變?nèi)藶榻o定的這塊內(nèi)存的狀態(tài)以表現(xiàn)出計(jì)算結(jié)果。
因此,對(duì)于電腦程序,命令就是CPU的指令,而執(zhí)行者也就由于是CPU的指令而必須是CPU了,而最后的資源則就是CPU可以改變其狀態(tài)的內(nèi)存(當(dāng)然不止,如端口等,不過(guò)一般應(yīng)用程序都大量使用內(nèi)存罷了)。所以,電腦程序就是電腦如何改變給定資源(一般是內(nèi)存,也可以是其他硬件資源)的描述,注意是描述,本身沒(méi)有任何意義,除非被執(zhí)行。
何謂編程
編程就是編寫(xiě)程序,即制訂方法。為什么要有方法?方法是為了說(shuō)明。而之所以要有說(shuō)明就有很多原因了,但電腦編程的根本原因是因?yàn)檎Z(yǔ)言不同,且不僅不同,連概念都不相通。
人類的語(yǔ)言五花八門,但都可以通過(guò)翻譯得到正解,因?yàn)槿祟惿嬖谕粋€(gè)四維物理空間中,具有相同或類似的感知。而電腦程序執(zhí)行時(shí)的CPU所能感受到的空間和物理空間嚴(yán)重不同,所以是不可能將電腦程序翻譯成人類語(yǔ)言的描述的。這很重要,其導(dǎo)致了大部分程序員編寫(xiě)出的拙劣代碼,因?yàn)槿讼氲暮碗娔X想的沒(méi)有共性,所以他們?cè)诰帉?xiě)程序時(shí)就隨機(jī)地?zé)o目的地編寫(xiě),進(jìn)而導(dǎo)致了拙劣卻可以執(zhí)行的代碼。
電腦的語(yǔ)言就是CPU的指令,因?yàn)镃PU就這一個(gè)感知途徑(準(zhǔn)確地說(shuō)還有內(nèi)存定位、中斷響應(yīng)等感知途徑),不像人類還能有肢體語(yǔ)言,所以電腦編程就是將人類語(yǔ)言書(shū)寫(xiě)的方法翻譯成相應(yīng)的電腦語(yǔ)言,是一個(gè)翻譯過(guò)程。這完全不同于一般的翻譯,由于前面的紅字,所以是不可能翻譯的。
既然不可能翻譯,那電腦編程到底是干甚?考慮一個(gè)木匠,我是客人。我對(duì)木匠說(shuō)我要一把搖椅,躺著很舒服的那種。然后木匠開(kāi)始刨木頭,按照一個(gè)特殊的曲線制作搖椅下面的曲木以保證我搖的時(shí)候重心始終不變以感覺(jué)很舒服。這里我編了個(gè)簡(jiǎn)單的程序,只有一條指令——做一把搖著很舒服的搖椅。而木匠則將我的程序翻譯成了刨木頭、設(shè)計(jì)特定的曲木等一系列我看不懂的程序。之所以會(huì)這樣,在這里就是因?yàn)槲疑畹目臻g和木工(是木工工藝,不是木匠)沒(méi)有共性。這里木匠就相當(dāng)于電腦程序員兼CPU(因?yàn)樽詈笥赡窘硜?lái)制作搖椅),而木匠的手藝就是CPU的指令定義,而木匠就將我的程序翻譯成了木工的一些規(guī)程,由木匠通過(guò)其手藝來(lái)實(shí)現(xiàn)這些規(guī)程,也就是執(zhí)行程序。
上面由于我生活的空間和木工(指木工工藝,不是工人)沒(méi)有共性,所以是不可能翻譯的,但上面翻譯成功了,實(shí)際是沒(méi)有翻譯的。在木工眼中,那個(gè)搖椅只是一些直木和曲木的拼接而已,因?yàn)槟竟た臻g中根本沒(méi)有搖椅的概念,只是我要把那堆木頭當(dāng)作搖椅,進(jìn)而使用。如果我把那堆木頭當(dāng)作兇器,則它就是兇器,不是什么搖椅了。
“廢話加荒謬加放*!”,也許你會(huì)這么大叫,但電腦編程就是這么一回事。CPU只能感知指令和改變內(nèi)存的狀態(tài)(不考慮其他的硬件資源及響應(yīng)),如果我們編寫(xiě)了一個(gè)計(jì)算圓周率的程序,給出了一塊內(nèi)存,并執(zhí)行,完成后就看見(jiàn)電腦的屏幕顯示正確的結(jié)果。但一定注意,這里電腦實(shí)際只是將一些內(nèi)存的數(shù)值復(fù)制、加減、乘除而已,電腦并不知道那是圓周率,而如果執(zhí)行程序的人不把它說(shuō)成是圓周率那么那個(gè)結(jié)果也就不是圓周率了,可能是一個(gè)隨機(jī)數(shù)或其他什么的,只是運(yùn)氣極好地和圓周率驚人地相似
程序,即過(guò)程的順序,準(zhǔn)確地說(shuō)應(yīng)該是順序排列的多個(gè)過(guò)程,其是方法的描述。比如吃菜,先用筷子夾起菜,再用筷子將菜送入嘴中,最后咀嚼并吞下。其中的夾、送、咀嚼和吞下就被稱作命令,而菜則是資源,其狀態(tài)(如形狀、位置等)隨著命令的執(zhí)行而不斷發(fā)生變化。上面就是吃菜這個(gè)方法的描述,也就是吃菜的程序。
任何方法都是為了改變某些資源的狀態(tài)而存在,因此任何方法的描述,也就是程序,也都一定有命令這個(gè)東西以及其所作用的資源。命令是由程序的執(zhí)行者來(lái)實(shí)現(xiàn)的,比如上面的吃菜,其中的夾、送等都是由吃菜的人來(lái)實(shí)現(xiàn)的,而資源則一定是執(zhí)行者可以改變的東西,而命令只是告訴執(zhí)行者如何改變而已。
電腦程序和上面一樣,是方法的描述,而這些方法就是人期望電腦能做的事(注意不是電腦要做的事,這經(jīng)常一直混淆著許多人),當(dāng)人需要做這些事時(shí),人再給出某些資源以期電腦能對(duì)其做正確的改變。如計(jì)算圓周率的程序,其只是方法的描述,本身是不能發(fā)生任何效用的,直到它被執(zhí)行,人為給定它一塊內(nèi)存(關(guān)于內(nèi)存,請(qǐng)參考《C++從零開(kāi)始(三)》),告訴它計(jì)算結(jié)果的精度及計(jì)算結(jié)果的存放位置后,其才改變?nèi)藶榻o定的這塊內(nèi)存的狀態(tài)以表現(xiàn)出計(jì)算結(jié)果。
因此,對(duì)于電腦程序,命令就是CPU的指令,而執(zhí)行者也就由于是CPU的指令而必須是CPU了,而最后的資源則就是CPU可以改變其狀態(tài)的內(nèi)存(當(dāng)然不止,如端口等,不過(guò)一般應(yīng)用程序都大量使用內(nèi)存罷了)。所以,電腦程序就是電腦如何改變給定資源(一般是內(nèi)存,也可以是其他硬件資源)的描述,注意是描述,本身沒(méi)有任何意義,除非被執(zhí)行。
何謂編程
編程就是編寫(xiě)程序,即制訂方法。為什么要有方法?方法是為了說(shuō)明。而之所以要有說(shuō)明就有很多原因了,但電腦編程的根本原因是因?yàn)檎Z(yǔ)言不同,且不僅不同,連概念都不相通。
人類的語(yǔ)言五花八門,但都可以通過(guò)翻譯得到正解,因?yàn)槿祟惿嬖谕粋€(gè)四維物理空間中,具有相同或類似的感知。而電腦程序執(zhí)行時(shí)的CPU所能感受到的空間和物理空間嚴(yán)重不同,所以是不可能將電腦程序翻譯成人類語(yǔ)言的描述的。這很重要,其導(dǎo)致了大部分程序員編寫(xiě)出的拙劣代碼,因?yàn)槿讼氲暮碗娔X想的沒(méi)有共性,所以他們?cè)诰帉?xiě)程序時(shí)就隨機(jī)地?zé)o目的地編寫(xiě),進(jìn)而導(dǎo)致了拙劣卻可以執(zhí)行的代碼。
電腦的語(yǔ)言就是CPU的指令,因?yàn)镃PU就這一個(gè)感知途徑(準(zhǔn)確地說(shuō)還有內(nèi)存定位、中斷響應(yīng)等感知途徑),不像人類還能有肢體語(yǔ)言,所以電腦編程就是將人類語(yǔ)言書(shū)寫(xiě)的方法翻譯成相應(yīng)的電腦語(yǔ)言,是一個(gè)翻譯過(guò)程。這完全不同于一般的翻譯,由于前面的紅字,所以是不可能翻譯的。
既然不可能翻譯,那電腦編程到底是干甚?考慮一個(gè)木匠,我是客人。我對(duì)木匠說(shuō)我要一把搖椅,躺著很舒服的那種。然后木匠開(kāi)始刨木頭,按照一個(gè)特殊的曲線制作搖椅下面的曲木以保證我搖的時(shí)候重心始終不變以感覺(jué)很舒服。這里我編了個(gè)簡(jiǎn)單的程序,只有一條指令——做一把搖著很舒服的搖椅。而木匠則將我的程序翻譯成了刨木頭、設(shè)計(jì)特定的曲木等一系列我看不懂的程序。之所以會(huì)這樣,在這里就是因?yàn)槲疑畹目臻g和木工(是木工工藝,不是木匠)沒(méi)有共性。這里木匠就相當(dāng)于電腦程序員兼CPU(因?yàn)樽詈笥赡窘硜?lái)制作搖椅),而木匠的手藝就是CPU的指令定義,而木匠就將我的程序翻譯成了木工的一些規(guī)程,由木匠通過(guò)其手藝來(lái)實(shí)現(xiàn)這些規(guī)程,也就是執(zhí)行程序。
上面由于我生活的空間和木工(指木工工藝,不是工人)沒(méi)有共性,所以是不可能翻譯的,但上面翻譯成功了,實(shí)際是沒(méi)有翻譯的。在木工眼中,那個(gè)搖椅只是一些直木和曲木的拼接而已,因?yàn)槟竟た臻g中根本沒(méi)有搖椅的概念,只是我要把那堆木頭當(dāng)作搖椅,進(jìn)而使用。如果我把那堆木頭當(dāng)作兇器,則它就是兇器,不是什么搖椅了。
“廢話加荒謬加放*!”,也許你會(huì)這么大叫,但電腦編程就是這么一回事。CPU只能感知指令和改變內(nèi)存的狀態(tài)(不考慮其他的硬件資源及響應(yīng)),如果我們編寫(xiě)了一個(gè)計(jì)算圓周率的程序,給出了一塊內(nèi)存,并執(zhí)行,完成后就看見(jiàn)電腦的屏幕顯示正確的結(jié)果。但一定注意,這里電腦實(shí)際只是將一些內(nèi)存的數(shù)值復(fù)制、加減、乘除而已,電腦并不知道那是圓周率,而如果執(zhí)行程序的人不把它說(shuō)成是圓周率那么那個(gè)結(jié)果也就不是圓周率了,可能是一個(gè)隨機(jī)數(shù)或其他什么的,只是運(yùn)氣極好地和圓周率驚人地相似