我們發(fā)明計算機的目的是為了解決問題,特別是解決大量數(shù)據(jù)的計算問題。
本質(zhì)上,計算機所能做的只有一件事:數(shù)據(jù)處理。核心就是數(shù)據(jù)。我們輸入數(shù)據(jù),計算處理他,然后輸出結(jié)果。這個就是所有的過程。
輸入 |
處理 |
輸出 |
這個過程的核心就是數(shù)據(jù)的處理。這個處理過程是通過電子電路實現(xiàn)的。比如加法器電路等。這個電子電路就是所謂的硬件,也可以說是計算機的CPU。
沒有硬件,軟件什么也做不了。我們編寫軟件,本質(zhì)上就是輸入數(shù)據(jù)和指令,然后計算機根據(jù)指令處理并輸出。一條指令可以說就是CPU的一塊電路。所謂的指令集就是電路的集合,也就是一塊復(fù)雜的集成電路。所謂的FPGA就是門的集合,我們連接門,使他完成相應(yīng)的功能。編程向兩方面發(fā)展:硬件模塊的封裝,如PLD,F(xiàn)PGA;軟件模塊的封裝:從 位-字節(jié)-基本數(shù)據(jù)類型(int,float等)-復(fù)雜數(shù)據(jù)類型(struct,union)-對象,類...發(fā)展。
在計算機剛發(fā)明的時候,程序員編程都是使用機器語言(機器指令),所以要對所有的指令都非常清楚,并編寫一大串的01指令。譬如(假定的):
00100000
01000001
11011010
。。。。。。。
這樣的編程很繁瑣,于是聰明的程序員發(fā)明了匯編語言,他本質(zhì)上沒有多大的改進(jìn),只是基本上讓一條匯編指令對應(yīng)一條機器指令。如:
ADD ax,2 -------- 00100010
當(dāng)匯編器看到ADD ax,2 時,就會把他翻譯為00100010。然后計算機運行機器指令。
本質(zhì)上匯編器就是一個文本翻譯工具。
匯編語言也很繁瑣,程序員又發(fā)明了高級語言,如BASIC、PASCAL、C、COBOL、FORTRAN等。他們編寫的代碼最終都翻譯為機器指令并由計算機運行(機器指令就是硬化的電路)。(如java的JVM就是將字節(jié)碼翻譯為機器指令)。他們的特點基本是用函數(shù)封裝的,函數(shù)封裝了語句,一條語句對應(yīng)一條或幾條機器指令。翻譯的過程是由編譯器或解釋器完成的。
編譯器或解釋器掃描程序代碼(貪心法),先詞法分析轉(zhuǎn)化為一系列的單詞和符號,再語法分析看是否符合語言的語法,然后中間代碼生成、代碼優(yōu)化,最后生成目標(biāo)代碼,也就是所謂的匯編指令或機器指令。
匯編指令封裝了機器指令,高級語言的函數(shù)封裝了匯編指令。我們用高級語言編程編程要做的工作就是使用函數(shù),使用封裝了機器指令的API函數(shù)。所有的函數(shù)都可以成為API,API就像一塊電子電路,輸入就是函數(shù)的參數(shù),輸出就是返回值。(*.DLL,*.lib都是函數(shù)的封裝),所有的編程工作最后都轉(zhuǎn)化為機器的機器指令。
什么是數(shù)據(jù)結(jié)構(gòu)?
從計算機底層看,一位就是一個電平值。如RS232電平,邏輯“1”的電平低于-3V,邏輯“0”的電平高于+3V。八位就是一個字節(jié)。計算機以字節(jié)尋址。一個char類型數(shù)據(jù)就是一個字節(jié),int一般4個字節(jié),long八個字節(jié)。字節(jié)封裝了位,簡單數(shù)據(jù)類型char,int,folat,指針等封裝了位,一個結(jié)構(gòu)Struct封裝了簡單數(shù)據(jù)類型,抽象數(shù)據(jù)類型(類,對象)也封裝了簡單數(shù)據(jù)類型。所謂的數(shù)據(jù)結(jié)構(gòu)就是數(shù)據(jù)在內(nèi)存中的表示,抽象為位,字節(jié),簡單數(shù)據(jù)類型,抽象數(shù)據(jù)類型(自定義數(shù)據(jù)類型)等。
什么是算法?
所謂的算法,從底層上看,就是以最精簡的機器指令組成程序,他從空間和時間上沒有任何的冗余。從高層上(高級語言)看,也是程序儲存空間的最小化和運行時間的最短化。
用高級語言編程本質(zhì)上就是使用API,封裝了機器指令的API。熟悉這些API即可,本質(zhì)上不難,關(guān)鍵是時間和毅力的問題。所謂的細(xì)節(jié)就是使用哪個API函數(shù),以及他們疊加的順序。不要為細(xì)節(jié)難倒,從高層上有個整體的概念會感覺好很多。
數(shù)據(jù) |
抽象 |
設(shè)計 |
程序就是位+上下文環(huán)境。單個的位沒有任何意義。
面向過程和面向?qū)ο蟮谋举|(zhì)上區(qū)別不大。他們都是對于數(shù)據(jù)和指令的封裝(用方法,類和對象)。只不過面向?qū)ο蠓庋b的多一點點而已。
實質(zhì)上高級語言編寫的程序冗余了很多指令。OO的目的很大一個就是為了復(fù)用。
通訊就是數(shù)據(jù)的交流,可以分為有線和無線(電磁波)。就是我發(fā)一系列的01數(shù)據(jù)給你,你再返回一系列的01串給我,雙方要按照協(xié)議進(jìn)行。至于所謂的01串代表什么意思,就要靠雙方協(xié)商的協(xié)議和字符編碼解釋了。
……………….
我靠,寫的真累,做飯去了,好餓。隨便寫的,貽笑大方了。
聯(lián)系客服