編程 是個動詞,編程==寫代碼,寫代碼為了什么? 為了讓計算機(jī)干你想要干的事情,比如,馬化騰想跟別人聊天,于是寫了個聊天軟件,這個軟件就是一堆代碼的集合,這些代碼是什么?這些代碼是計算機(jī)能理解的語言。
那計算能理解的語言是什么呢? 之前,我們已經(jīng)了解到,它只能理解2進(jìn)制,…,你總不能人肉輸一堆二進(jìn)制給計算機(jī)(雖然最原始的計算機(jī)就是這么干的)讓它工作吧,這樣開發(fā)速度太慢了。所以最好的辦法就是人輸入簡單的指令,計算機(jī)能把指令轉(zhuǎn)成二進(jìn)制進(jìn)行執(zhí)行,舉例如下:
假如 程序員想讓計算機(jī) 播放一首 歌曲 , 只需要輸入指令 ,
open "老男孩.mp3"play
計算機(jī)的CPU接收到這樣的指令后,會把它轉(zhuǎn)成一堆 只有cpu可以理解的指令,然后再將指令變成各種對應(yīng)的如下類似二進(jìn)制
[ op | rs | rt | /]35 3 8 68 00011 01000 00000 00001
最終cpu 去調(diào)用你的硬盤上這首歌,通過音箱播放。
上面cpu那段指令太難理解了編寫程序有什么用,如果讓你天天寫這樣的代碼,大家非得自殺不可。還好,偉大的計算機(jī)先驅(qū)們,開發(fā)了各種編程語言,讓我們只需要通過寫一些簡單的規(guī)則,就能操作計算機(jī)工作啦。
有哪些編程語言?
編程語言總體分以為機(jī)器語言、匯編語言、高級語言,如下
機(jī)器語言
由于計算機(jī)內(nèi)部只能接受二進(jìn)制代碼,因此,用二進(jìn)制代碼0和1描述的指令稱為機(jī)器指令,全部機(jī)器指令的集合構(gòu)成計算機(jī)的機(jī)器語言,用機(jī)器語言編程的程序稱為目標(biāo)程序。只有目標(biāo)程序才能被計算機(jī)直接識別和執(zhí)行。但是機(jī)器語言編寫的程序無明顯特征,難以記憶,不便閱讀和書寫,且依賴于具體機(jī)種,局限性很大,機(jī)器語言屬于低級語言。
用機(jī)器語言編寫程序,編程人員要首先熟記所用計算機(jī)的全部指令代碼和代碼的涵義。手編程序時,程序員得自己處理每條指令和每一數(shù)據(jù)的存儲分配和輸入輸出,還得記住編程過程中每步所使用的工作單元處在何種狀態(tài)。這是一件十分繁瑣的工作。編寫程序花費(fèi)的時間往往是實際運(yùn)行時間的幾十倍或幾百倍。而且,編出的程序全是些0和1的指令代碼,直觀性差,還容易出錯。除了計算機(jī)生產(chǎn)廠家的專業(yè)人員外,絕大多數(shù)的程序員已經(jīng)不再去學(xué)習(xí)機(jī)器語言了。
機(jī)器語言是微處理器理解和使用的,用于控制它的操作二進(jìn)制代碼。
盡管機(jī)器語言好像是很復(fù)雜的,然而它是有規(guī)律的。
存在著多至種機(jī)器語言的指令。這意味著不能把這些種類全部列出來。
以下是一些示例:
指令部份的示例
0000 代表 加載(LOAD)
0001 代表 存儲(STORE)
…
暫存器部份的示例
0000 代表暫存器 A
0001 代表暫存器 B
…
存儲器部份的示例
0 代表地址為 0 的存儲器
1 代表地址為 1 的存儲器
0 代表地址為 16 的存儲器
0 代表地址為 2^11 的存儲器
集成示例
0000,0000,0 代表 LOAD A, 16
0000,0001,1 代表 LOAD B, 1
0001,0001,0 代表 STORE B, 16
0001,0001,1 代表 STORE B, 1[1]
匯編語言
匯編語言的實質(zhì)和機(jī)器語言是相同的,都是直接對硬件操作,只不過指令采用了英文縮寫的標(biāo)識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。匯編程序的每一句指令只能對應(yīng)實際操作過程中的一個很細(xì)微的動作。例如移動、自增,因此匯編源程序一般比較冗長、復(fù)雜、容易出錯,而且使用匯編語言編程需要有更多的計算機(jī)專業(yè)知識,但匯編語言的優(yōu)點也是顯而易見的,用匯編語言所能完成的操作不是一般高級語言所能夠?qū)崿F(xiàn)的,而且源程序經(jīng)匯編生成的可執(zhí)行文件不僅比較小,而且執(zhí)行速度很快。
匯編的hello world,打印一句hello world, 需要寫十多行,也是醉了。
; hello.asm .data; 數(shù)據(jù)段聲明msg db "Hello, world!", 0xA ; 要輸出的字符串len equ $ - msg; 字串長度 .text; 代碼段聲明 ; 指定入口函數(shù): ; 在屏幕上顯示一個字符串mov edx, len; 參數(shù)三:字符串長度mov ecx, msg; 參數(shù)二:要顯示的字符串mov ebx, 1 ; 參數(shù)一:文件描述符() mov eax, 4 ; 系統(tǒng)調(diào)用號() int 0x80 ; 調(diào)用內(nèi)核功能; 退出程序mov ebx, 0 ; 參數(shù)一:退出代碼mov eax, 1 ; 系統(tǒng)調(diào)用號() int 0x80 ; 調(diào)用內(nèi)核功能
高級語言
高級語言是大多數(shù)編程者的選擇。和匯編語言相比,它不但將許多相關(guān)的機(jī)器指令合成為單條指令,并且去掉了與具體操作有關(guān)但與完成工作無關(guān)的細(xì)節(jié),例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令。同時,由于省略了很多細(xì)節(jié),編程者也就不需要有太多的專業(yè)知識。
高級語言主要是相對于匯編語言而言,它并不是特指某一種具體的語言,而是包括了很多編程語言,像最簡單的編程語言語言也屬于高級語言。
高級語言所編制的程序不能直接被計算機(jī)識別,必須經(jīng)過轉(zhuǎn)換才能被執(zhí)行,按轉(zhuǎn)換方式可將它們分為兩類:
編譯類:編譯是指在應(yīng)用源程序執(zhí)行之前,就將程序源代碼“翻譯”成目標(biāo)代碼(機(jī)器語言),因此其目標(biāo)程序可以脫離其語言環(huán)境獨(dú)立執(zhí)行(編譯后生成的可執(zhí)行文件,是cpu可以理解的2進(jìn)制的機(jī)器碼組成的),使用比較方便、效率較高。但應(yīng)用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標(biāo)文件(* .obj,也就是OBJ文件)才能執(zhí)行,只有目標(biāo)文件而沒有源代碼,修改很不方便。
編譯后程序運(yùn)行時不需要重新翻譯,直接使用編譯的結(jié)果就行了。程序執(zhí)行效率高,依賴編譯器,跨平臺性差些。如C、C++、等
解釋類:執(zhí)行方式類似于我們?nèi)粘I钪械摹巴暦g”,應(yīng)用程序源代碼一邊由相應(yīng)語言的解釋器“翻譯”成目標(biāo)代碼(機(jī)器語言),一邊執(zhí)行,因此效率比較低,而且不能生成可獨(dú)立執(zhí)行的可執(zhí)行文件,應(yīng)用程序不能脫離其解釋器(想運(yùn)行,必須先裝上解釋器,就像跟老外說話,必須有翻譯在場),但這種方式比較靈活,可以動態(tài)地調(diào)整、修改應(yīng)用程序。如、Java、PHP、Ruby等語言。
總結(jié)
機(jī)器語言
優(yōu)點是最底層,速度最快,缺點是最復(fù)雜,開發(fā)效率最低
匯編語言
優(yōu)點是比較底層,速度最快,缺點是復(fù)雜,開發(fā)效率最低
高級語言
編譯型語言執(zhí)行速度快,不依賴語言環(huán)境運(yùn)行,跨平臺差
解釋型跨平臺好,一份代碼,到處使用,缺點是執(zhí)行速度慢,依賴解釋器運(yùn)行
主流編程語言介紹(10分鐘)
世界上的編程語言有600多種,但真正大家主流在使用的最多二三十種編寫程序有什么用,不同的語言有自己的特點和擅長領(lǐng)域,隨著計算機(jī)的不斷發(fā)展,新語言在不斷誕生,也同時有很多老舊的語言慢慢無人用了。有個權(quán)威的語言排名網(wǎng)站,可以看到主流的編程語言是哪些
TIOBE發(fā)布編程語言排行榜已經(jīng)快6年的時光了,在這六年中我們見證了不少語言的起起落落。雖然國內(nèi)有很多大牛說,關(guān)注這語言的排名沒有多少意義。但仍可以看出那些語言日漸興盛,哪些日漸沒落,我們從-C的上升過程中,還是能看到移動設(shè)備端,特別是iOS應(yīng)用開發(fā)方面的黃金潛力。
下面介紹下幾個主流的編程語言:
C語言:
C語言是一種計算機(jī)程序設(shè)計語言,它既具有高級語言的特點,又具有匯編語言的特點。它由美國貝爾研究所的D.M.于1972年推出,1978年后,C語言已先后被移植到大、中、小及微型機(jī)上,它可以作為工作系統(tǒng)設(shè)計語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計語言,編寫不依賴計算機(jī)硬件的應(yīng)用程序。它的應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,適于編寫系統(tǒng)軟件,三維,二維圖形和動畫,具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。
C++:
C++是C語言的繼承的擴(kuò)展,它既可以進(jìn)行C語言的過程化程序設(shè)計,又可以進(jìn)行以抽象數(shù)據(jù)類型為特點的基于對象的程序設(shè)計,還可以進(jìn)行以繼承和多態(tài)為特點的面向?qū)ο蟮某绦蛟O(shè)計。C++擅長面向?qū)ο蟪绦蛟O(shè)計的同時,還可以進(jìn)行基于過程的程序設(shè)計,因而C++就適應(yīng)的問題規(guī)模而論,大小由之。
C++不僅擁有計算機(jī)高效運(yùn)行的實用性特征,同時還致力于提高大規(guī)模程序的編程質(zhì)量與程序設(shè)計語言的問題描述能力。
JAVA:
Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言,是由Sun 公司于1995年5月推出的Java程序設(shè)計語言和Java平臺(即, , )的總稱。Java 技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于個人PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機(jī)、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。在全球云計算和移動互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢和廣闊前景。
PHP:
PHP(外文名:PHP: ,中文名:“超文本預(yù)處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利于學(xué)習(xí),使用廣泛,主要適用于Web開發(fā)領(lǐng)域
Ruby:
Ruby 是開源的,在Web 上免費(fèi)提供,但需要一個許可證。[4]
Ruby 是一種通用的、解釋的編程語言。
Ruby 是一種真正的面向?qū)ο缶幊陶Z言。
Ruby 是一種類似于 和 Perl 的服務(wù)器端腳本語言。
Ruby 可以用來編寫通用網(wǎng)關(guān)接口(CGI)腳本。
Ruby 可以被嵌入到超文本標(biāo)記語言(HTML)。
Ruby 語法簡單,這使得新的開發(fā)人員能夠快速輕松地學(xué)習(xí) Ruby
GO:
Go 是一個開源的編程語言,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易。
Go是從2007年末由 , Rob Pike, Ken 主持開發(fā),后來還加入了Ian Lance , Russ Cox等人,并最終于2009年11月開源,在2012年早些時候發(fā)布了Go 1穩(wěn)定版本。現(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個活躍的社區(qū)。
由其擅長并發(fā)編程
:
是一門優(yōu)秀的綜合語言, 的宗旨是簡明、優(yōu)雅、強(qiáng)大,在人工智能、云計算、金融分析、大數(shù)據(jù)開發(fā)、WEB開發(fā)、自動化運(yùn)維、測試等方向應(yīng)用廣泛,已是全球第4大最流行的語言。