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