全國計算機等級考試二級C++歷年試題合集含答案(CHM文件下載)>>
何謂程序
程序,即過程的順序,準確地說應該是順序排列的多個過程,其是方法的描述。比如吃菜,先用筷子夾起菜,再用筷子將菜送入嘴中,最后咀嚼并吞下。其中的夾、送、咀嚼和吞下就被稱作命令,而菜則是資源,其狀態(如形狀、位置等)隨著命令的執行而不斷發生變化。 上面就是吃菜這個方法的描述,也就是吃菜的程序。
任何方法都是為了改變某些資源的狀態而存在,因此任何方法的描述,也就是程序,也都一定有命令這個東西以及其所作用的資源。命令是由程序的執行者來實現的,比如上面的吃菜,其中的夾、送等都是由吃菜的人來實現的,而資源則一定是執行者可以改變的東西,而命令只是告訴執行者如何改變而已。
電腦程序和上面一樣,是方法的描述,而這些方法就是人期望電腦能做的事(注意不是電腦要做的事,這經常一直混淆著許多人),當人需要做這些事時,人再給出某些資源以期電腦能對其做正確的改變。如計算圓周率的程序,其只是方法的描述,本身是不能發生任何效用的,直到它被執行,人為給定它一塊內存(關于內存,請參考《C++從零開始(三)》),告訴它計算結果的精度及計算結果的存放位置后,其才改變人為給定的這塊內存的狀態以表現出計算結果。
因此,對于電腦程序,命令就是CPU的指令,而執行者也就由于是CPU的指令而必須是CPU了,而最后的資源則就是CPU可以改變其狀態的內存(當然不止,如端口等,不過一般應用程序都大量使用內存罷了)。所以,電腦程序就是電腦如何改變給定資源(一般是內存,也可以是其他硬件資源)的描述,注意是描述,本身沒有任何意義,除非被執行。
何謂編程
編程就是編寫程序,即制訂方法。為什么要有方法?方法是為了說明。而之所以要有說明就有很多原因了,但電腦編程的根本原因是因為語言不同,且不僅不同,連概念都不相通。
人類的語言五花八門,但都可以通過翻譯得到正解,因為人類生存在同一個四維物理空間中,具有相同或類似的感知。而電腦程序執行時的CPU所能感受到的空間和物理空間嚴重不同,所以是不可能將電腦程序翻譯成人類語言的描述的。這很重要,其導致了大部分程序員編寫出的拙劣代碼,因為人想的和電腦想的沒有共性,所以他們在編寫程序時就隨機地無目的地編寫,進而導致了拙劣卻可以執行的代碼。
電腦的語言就是CPU的指令,因為CPU就這一個感知途徑(準確地說還有內存定位、中斷響應等感知途徑),不像人類還能有肢體語言,所以電腦編程就是將人類語言書寫的方法翻譯成相應的電腦語言,是一個翻譯過程。這完全不同于一般的翻譯,由于前面的紅字,所以是不可能翻譯的。
既然不可能翻譯,那電腦編程到底是干甚?考慮一個木匠,我是客人。我對木匠說我要一把搖椅,躺著很舒服的那種。然后木匠開始刨木頭,按照一個特殊的曲線制作搖椅下面的曲木以保證我搖的時候重心始終不變以感覺很舒服。這里我編了個簡單的程序,只有一條指令——做一把搖著很舒服的搖椅。而木匠則將我的程序翻譯成了刨木頭、設計特定的曲木等一系列我看不懂的程序。之所以會這樣,在這里就是因為我生活的空間和木工(是木工工藝,不是木匠)沒有共性。這里木匠就相當于電腦程序員兼CPU(因為最后由木匠來制作搖椅),而木匠的手藝就是CPU的指令定義,而木匠就將我的程序翻譯成了木工的一些規程,由木匠通過其手藝來實現這些規程,也就是執行程序。
原文轉自:http://www.anti-gravitydesign.com