中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

我愛(ài)寫(xiě)代碼:編程語(yǔ)言了解

2018-07-20    來(lái)源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

技術(shù)總結(jié):編程語(yǔ)言了解

由于畢業(yè)后要找互聯(lián)網(wǎng)產(chǎn)品類的工作,想想大學(xué)沒(méi)學(xué)好一些編程語(yǔ)言還真是一件很后悔的事情。今天花了一下午的時(shí)間總結(jié)了世界主流的一些計(jì)算機(jī)語(yǔ)言的簡(jiǎn)介和功能以及優(yōu)劣勢(shì)的對(duì)比和分析。僅僅代表個(gè)人的理解,大牛無(wú)視。

(一)2016年世界編程語(yǔ)言使用率排行榜

先來(lái)看看這份數(shù)據(jù),這張圖表列舉了今年各種編程語(yǔ)言的使用率和熱度。


問(wèn)題(一):C、C++、C#、和java的區(qū)別

簡(jiǎn)單地說(shuō),它們不是一種語(yǔ)言,語(yǔ)法有差別,編程時(shí)具體用到的類庫(kù)或者函數(shù)庫(kù)也不一樣。

雖然它們不是一種語(yǔ)言,不過(guò)它們卻也有所聯(lián)系。廣泛地說(shuō),C可以看作其他三種語(yǔ)言的源語(yǔ)言,因?yàn)槠渌N語(yǔ)言幾乎都是從C而來(lái)的,無(wú)論從數(shù)據(jù)類型還是控制語(yǔ)句看,其他三種語(yǔ)言都有從C得來(lái)的跡象。

其中C++則一般看作是對(duì)C語(yǔ)言的擴(kuò)展。因?yàn)椋谜Z(yǔ)言沒(méi)有面向?qū)ο蟮恼Z(yǔ)法結(jié)構(gòu),而當(dāng)時(shí)業(yè)界又迫切需要面向?qū)ο蟮木幊烫匦,所以貝爾?shí)驗(yàn)室的開(kāi)發(fā)者就為C添加了面向?qū)ο蟮慕Y(jié)構(gòu)。現(xiàn)在C++已經(jīng)不只是C的擴(kuò)展了,它已經(jīng)完全可以被看作一種新的編程語(yǔ)言。雖然C的特性以及庫(kù)函數(shù)仍然被C++支持,不過(guò)C++擁有自己的獨(dú)立的類庫(kù)體系,功能相當(dāng)強(qiáng)大。

Java語(yǔ)言是一種完全的面向?qū)ο笳Z(yǔ)言,雖然它的底層(運(yùn)行時(shí)庫(kù))是用C語(yǔ)言開(kāi)發(fā)的,可是并不依賴于C。因?yàn)椋剩幔觯岬倪\(yùn)行是在運(yùn)行時(shí)庫(kù)的支持下進(jìn)行的,所以運(yùn)行效率比起可以更接近底層的C/C++來(lái)說(shuō)效率會(huì)有所影響,不過(guò)Java的類庫(kù)采用很好的設(shè)計(jì)理念設(shè)計(jì),非常好用,也非常實(shí)用,已經(jīng)成為業(yè)界的一種標(biāo)準(zhǔn)開(kāi)發(fā)語(yǔ)言。它的跨平臺(tái)的特性尤其讓很多開(kāi)發(fā)者歡迎,你只需要開(kāi)發(fā)一次就能在所有安裝了Java運(yùn)行時(shí)庫(kù)的系統(tǒng)上運(yùn)行。Java發(fā)展了十幾年了,可以應(yīng)用領(lǐng)域非常之廣泛,Web開(kāi)發(fā)有JSP,J2EE,桌面領(lǐng)域現(xiàn)在有JavaFX。

C#是微軟開(kāi)發(fā)的一種編程語(yǔ)言,語(yǔ)法類似Java,幾乎就是從Java的翻版。運(yùn)行原理和Java也類似,也是通過(guò)運(yùn)行時(shí)庫(kù)的支持運(yùn)行。不過(guò)支持的平臺(tái)還很有限。JAVA幾乎被所有平臺(tái)支持,而C#目前只被Windows和Linux支持,Windows下的支持當(dāng)然是由微軟自己開(kāi)發(fā)的,而Linux下的支持則有MONO支持。實(shí)際上,MONO也是把C#應(yīng)用轉(zhuǎn)化為JAVA應(yīng)用而已,所以本質(zhì)上,C#仍然只是被微軟自己的操作系統(tǒng)支持。應(yīng)用平臺(tái)受到限制,是它最大的缺點(diǎn)。

C/C++的優(yōu)點(diǎn)在于與底層比較接近,可以控制的粒度更加精細(xì),是開(kāi)發(fā)系統(tǒng)級(jí)應(yīng)用的最佳選擇。關(guān)于缺點(diǎn),我想正是源于其優(yōu)點(diǎn),因?yàn)樗鼈兡芸刂频木幊淘亓6染?xì),所以編程比較困難,煩瑣,容易出錯(cuò)。

Java和C#都比較高級(jí),可以看作高級(jí)語(yǔ)言的高級(jí)語(yǔ)言,優(yōu)點(diǎn)是開(kāi)發(fā)容易,但運(yùn)行效率不如更為底層的C/C++。

具體選擇使用的時(shí)候,可以根據(jù)實(shí)際的項(xiàng)目需要選擇。運(yùn)行效率要求高的,底層控制要求高的用C/C++,否則可以選擇Java或C#;跨平臺(tái)的要求高的可以用Java。

關(guān)于跨平臺(tái),C/C++也是很好的語(yǔ)言,因?yàn)樗衅脚_(tái)都支持,不同的是,不同平臺(tái)支持的實(shí)現(xiàn)不同,類庫(kù)不同,要編寫(xiě)跨平臺(tái)的程序,需要選擇跨平臺(tái)的類庫(kù),如標(biāo)準(zhǔn)類庫(kù),如果標(biāo)準(zhǔn)類庫(kù)的支持不夠也只需要附加編寫(xiě)一個(gè)跨平臺(tái)的支持類庫(kù)。1,java是在C++上的藍(lán)本上實(shí)現(xiàn)上,去除了C++的指針都內(nèi)容,將很多的東西搬到了類庫(kù)中,首次實(shí)現(xiàn)了虛擬機(jī)概念——因此跨平臺(tái)特性十分強(qiáng)。而C#則借鑒了java的優(yōu)點(diǎn),也實(shí)現(xiàn)了虛擬機(jī)與類庫(kù)。同樣沒(méi)了指針——官方雖然也說(shuō)在C++基礎(chǔ)之上,但借鑒不少java的東西。

2,java實(shí)現(xiàn)了開(kāi)源,有諸多開(kāi)源項(xiàng)目可以使用,而C#近年來(lái)雖有不少優(yōu)秀的開(kāi)源項(xiàng)目,但相比java還是差的太多。

3,在api方面,C#對(duì)windows有原生的支持,相對(duì)來(lái)說(shuō)較為好一些。注釋方面也強(qiáng),同時(shí)在IDE的智能感知方面也較java強(qiáng),也正是這種特點(diǎn)導(dǎo)致C#的元數(shù)據(jù)非常大,打包后文件過(guò)大,性能上也因?yàn)樵獢?shù)據(jù)大量存在而導(dǎo)致有所下降。同時(shí)對(duì)于編譯器來(lái)說(shuō),java有林林總總的不同廠家編譯器,而,.net卻只是windows一家獨(dú)大。所以從編角度上來(lái)看,.net更易于統(tǒng)一,而java則有更多的選擇。

4,在組件方面,目前來(lái)說(shuō).net稍優(yōu),它是基于COM+形成,三者之間是相互供鑒,目前來(lái)說(shuō).net還是稍占優(yōu)劣。

5,難度方面,.net主要是力求程序員的簡(jiǎn)單,類庫(kù)較為完整,主要是程序員對(duì).net類庫(kù)的熟悉。而java類庫(kù)并不十分完整,但是開(kāi)源極多,構(gòu)件極多,比如ejb,j2ee等等,主要集中在構(gòu)件的學(xué)習(xí)與開(kāi)源項(xiàng)目的尋找上。

幾種語(yǔ)言內(nèi)容都很多,在這里就不詳細(xì)列舉了,要學(xué)好每一種都需要花費(fèi)相當(dāng)大的精力,祝你能有所成就!

這里補(bǔ)充位置五這種語(yǔ)言:Python、Php、Ruby、JavaScript、Perl.

Python:Python具有豐富和強(qiáng)大的庫(kù)。它常被昵稱為膠水語(yǔ)言,能夠把用其他語(yǔ)言制作的各種模塊(尤其是C/C++)很輕松地聯(lián)結(jié)在一起。常見(jiàn)的一種應(yīng)用情形是,使用Python快速生成程序的原型(有時(shí)甚至是程序的最終界面),然后對(duì)其中[2]有特別要求的部分,用更合適的語(yǔ)言改寫(xiě),比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫(xiě),而后封裝為Python可以調(diào)用的擴(kuò)展類庫(kù)。需要注意的是在您使用擴(kuò)展類庫(kù)時(shí)可能需要考慮平臺(tái)問(wèn)題,某些可能不提供跨平臺(tái)的實(shí)現(xiàn)。

優(yōu)點(diǎn):簡(jiǎn)單,易學(xué),速度快,免費(fèi)、開(kāi)源,高層語(yǔ)言,可移植性,解釋性,面向?qū)ο?/span>,可擴(kuò)展性,可嵌入性,豐富的庫(kù)。

缺點(diǎn):單行語(yǔ)句和命令行輸出問(wèn)題,獨(dú)特的語(yǔ)法,運(yùn)行速度慢。

應(yīng)用:系統(tǒng)編程,圖形處理,數(shù)學(xué)處理,文本處理,數(shù)據(jù)庫(kù)編程,網(wǎng)絡(luò)編程,多媒體應(yīng)用……

Perl:Perl借取了C、sed、awk、shell腳本語(yǔ)言以及很多其他程序語(yǔ)言的特性,其中最重要的特性是它內(nèi)部集成了正則表達(dá)式的功能,以及巨大的第三方代碼庫(kù)CPAN。簡(jiǎn)而言之,Perl像C一樣強(qiáng)大,像awk、sed等腳本描述語(yǔ)言一樣方便,被Perl語(yǔ)言愛(ài)好者稱之為“一種擁有各種語(yǔ)言功能的夢(mèng)幻腳本語(yǔ)言”、“Unix中的王牌工具”。

Perl的強(qiáng)大之處是CPAN檔案庫(kù)提供的各種模塊,你想實(shí)現(xiàn)什么功能,原則上你可以在檔案庫(kù)里搜索需要的模塊。

缺點(diǎn)

編輯

也正是因?yàn)镻erl的靈活性和“過(guò)度”的冗余語(yǔ)法,也因此獲得了write-only的“美譽(yù)”,因?yàn)樵S多Perl程序的代碼令人難以閱讀,實(shí)現(xiàn)相同功能的程序代碼長(zhǎng)度可以相差十倍百倍。但Perl同樣可以將代碼書(shū)寫(xiě)得像Python或Ruby等語(yǔ)言一樣優(yōu)雅。

很多時(shí)候,perl.exe進(jìn)程會(huì)占用很多的內(nèi)存空間,雖然只是一時(shí),但是感覺(jué)不好。

王牌語(yǔ)言的局限性:也許你以前并不知道,Perl是另外一種極其流行的開(kāi)源解釋性編程語(yǔ)言。如果你曾經(jīng)嘗試過(guò)用Perl語(yǔ)言編寫(xiě)一個(gè)大程序,你一定會(huì)自己回答這個(gè)問(wèn)題。在規(guī)模較小的時(shí)候,Perl程序是簡(jiǎn)單的。它可以勝任于小型的應(yīng)用程序和腳本,“使工作完成”。然而,當(dāng)你想開(kāi)始寫(xiě)一些大一點(diǎn)的程序的時(shí)候,Perl程序就變得不實(shí)用了。我是通過(guò)為Yahoo編寫(xiě)大型Perl程序的經(jīng)驗(yàn)得出這樣的總結(jié)的!與Perl相比,Python程序一定會(huì)更簡(jiǎn)單、更清晰、更易于編寫(xiě),從而也更加易懂、易維護(hù)。我確實(shí)也很喜歡Perl,用它來(lái)做一些日常的各種事情。不過(guò)當(dāng)我要寫(xiě)一個(gè)程序的時(shí)候,我總是想到使用Python,這對(duì)我來(lái)說(shuō)已經(jīng)成了十分自然的事。Perl已經(jīng)經(jīng)歷了多次大的修正和改變,遺憾的是,即將發(fā)布的Perl 6似乎仍然沒(méi)有在這個(gè)方面做什么改進(jìn)。我感到Perl唯一也是十分重要的優(yōu)勢(shì)是它龐大的CPAN庫(kù)——綜合Perl存檔網(wǎng)絡(luò)。就如同這個(gè)名字所指的意思一樣,這是一個(gè)巨大的Perl模塊集,它大得讓人難以置信——你幾乎用這些模塊在計(jì)算機(jī)上做任何事情。Perl的模塊比Python多的原因之一是Perl擁有更加悠久的歷史;蛟S我會(huì)在comp.lang.python上建議把Perl模塊移植到Python上的計(jì)劃。另外,新的Parrot虛擬機(jī)按設(shè)計(jì)可以運(yùn)行完全重新設(shè)計(jì)的Perl 6也可以運(yùn)行Python和其他解釋性語(yǔ)言如Ruby、PHP和Tcl等等。這意味著你將來(lái)或許可以在Python上使用所有Perl的模塊。這將成為兩全其美的事——強(qiáng)大的CPAN庫(kù)與強(qiáng)大的Python語(yǔ)言結(jié)合在一起。我們將拭目以待。

Php:PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預(yù)處理器”)是一種通用開(kāi)源腳本語(yǔ)言。語(yǔ)法吸收了C語(yǔ)言、JavaPerl的特點(diǎn),利于學(xué)習(xí),使用廣泛,主要適用于Web開(kāi)發(fā)領(lǐng)域。PHP獨(dú)特的語(yǔ)法混合了C、Java、Perl以及PHP自創(chuàng)的語(yǔ)法。它可以比CGI或者Perl更快速地執(zhí)行動(dòng)態(tài)網(wǎng)頁(yè)。用PHP做出的動(dòng)態(tài)頁(yè)面與其他的編程語(yǔ)言相比,PHP是將程序嵌入到HTML標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)文檔中去執(zhí)行,執(zhí)行效率比完全生成HTML標(biāo)記的CGI要高許多;PHP還可以執(zhí)行編譯后代碼,編譯可以達(dá)到加密優(yōu)化代碼運(yùn)行,使代碼運(yùn)行更快。(PHP于1994年由Rasmus Lerdorf創(chuàng)建,剛剛開(kāi)始是Rasmus Lerdorf為了要維護(hù)個(gè)人網(wǎng)頁(yè)而制作的一個(gè)簡(jiǎn)單的用Perl語(yǔ)言編寫(xiě)的程序。這些工具程序用來(lái)顯示Rasmus Lerdorf的個(gè)人履歷,以及統(tǒng)計(jì)網(wǎng)頁(yè)流量。后來(lái)又用C語(yǔ)言重新編寫(xiě),包括可以訪問(wèn)數(shù)據(jù)庫(kù)。他將這些程序和一些表單直譯器整合起來(lái),稱為PHP/FI。PHP/FI可以和數(shù)據(jù)庫(kù)連接,產(chǎn)生簡(jiǎn)單的動(dòng)態(tài)網(wǎng)頁(yè)程序。)

PHP能做什么:通過(guò)PHP,您可以不受限于只輸出HTML。您還能夠輸出圖像、PDF文件、甚至Flash影片。您也可以輸出任何文本,比如XHTML和XML。

PHP能夠生成動(dòng)態(tài)頁(yè)面內(nèi)容

PHP能夠創(chuàng)建、打開(kāi)、讀取、寫(xiě)入、刪除以及關(guān)閉服務(wù)器上的文件

PHP能夠接收表單數(shù)據(jù)

PHP能夠發(fā)送并取回cookies

PHP能夠添加、刪除、修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)

PHP能夠限制用戶訪問(wèn)網(wǎng)站中的某些頁(yè)面

PHP能夠?qū)?shù)據(jù)進(jìn)行加密

為什么使用PHP:

PHP運(yùn)行于各種平臺(tái)(Windows,

Linux, Unix, Mac OS X等等)

PHP兼容幾乎所有服務(wù)器(Apache,

IIS等等)

PHP支持多種數(shù)據(jù)庫(kù)

PHP是免費(fèi)的。

PHP易于學(xué)習(xí),并可高效地運(yùn)行在服務(wù)器端

Ruby:Ruby,一種為簡(jiǎn)單快捷的面向?qū)ο?/span>編程(面向?qū)ο蟪绦蛟O(shè)計(jì))而創(chuàng)的腳本語(yǔ)言,在20世紀(jì)90年代由日本人松本行弘(Yukihiro Matsumoto)開(kāi)發(fā),遵守GPL協(xié)議和Ruby License。它的靈感與特性來(lái)自于Perl、Smalltalk、EiffelAda以及Lisp語(yǔ)言。由Ruby語(yǔ)言本身還發(fā)展出了JRuby(Java平臺(tái))、IronRuby(.NET平臺(tái))等其他平臺(tái)的Ruby語(yǔ)言替代品。Ruby的作者于1993年2月24日開(kāi)始編寫(xiě)Ruby,直至1995年12月才正式公開(kāi)發(fā)布于fj(新聞組)。因?yàn)镻erl發(fā)音與6月誕生石pearl(珍珠)相同,因此Ruby以7月誕生石ruby(紅寶石)命名。

優(yōu)點(diǎn):語(yǔ)法簡(jiǎn)單

普通的面向?qū)ο蠊δ?類,方法調(diào)用等)

特殊的面向?qū)ο蠊δ?Mixin,特殊方法等)

操作符重載

錯(cuò)誤處理功能

迭代器閉包

垃圾回收

動(dòng)態(tài)載入(取決于系統(tǒng)架構(gòu))

可移植性高.不僅可以運(yùn)行在多數(shù)UNIX上,還可以運(yùn)行在DOS,Windows,Mac,BeOS等平臺(tái)上

適合于快速開(kāi)發(fā),一般開(kāi)發(fā)效率是JAVA的5倍

語(yǔ)言用途

編輯

·Ruby是開(kāi)源的,在Web上免費(fèi)提供,但需要一個(gè)許可證。[3]

·Ruby是一種通用的、解釋的編程語(yǔ)言。

·Ruby是一種真正的面向?qū)ο缶幊陶Z(yǔ)言。

·Ruby是一種類似于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。

·Ruby與C++和Perl等許多編程語(yǔ)言有著類似的語(yǔ)法。

·Ruby可擴(kuò)展性強(qiáng),用Ruby編寫(xiě)的大程序易于維護(hù)。

·Ruby可用于開(kāi)發(fā)的Internet和Intranet應(yīng)用程序。

·Ruby可以安裝在Windows和POSIX環(huán)境中。

·Ruby支持許多GUI工具,比如Tcl/Tk、GTK和OpenGL。

·Ruby可以很容易地連接到DB2、MySQL、Oracle和Sybase。

·Ruby有豐富的內(nèi)置函數(shù),可以直接在Ruby腳本中使用。[3]

JavaScript:JavaScript一種直譯腳本語(yǔ)言,是一種動(dòng)態(tài)類型、弱類型、基于原型的語(yǔ)言,內(nèi)置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語(yǔ)言,最早是在HTML標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)網(wǎng)頁(yè)上使用,用來(lái)給HTML網(wǎng)頁(yè)增加動(dòng)態(tài)功能。

問(wèn)題(二):算法和數(shù)據(jù)結(jié)構(gòu)

首先,數(shù)據(jù)結(jié)構(gòu)是一門(mén)計(jì)算機(jī)語(yǔ)言學(xué)的基礎(chǔ)學(xué)科,它不屬于任何一門(mén)語(yǔ)言,其體現(xiàn)的是幾乎所有標(biāo)準(zhǔn)語(yǔ)言的算法的思想。

上面的概念有一些模糊,我們現(xiàn)在來(lái)具體說(shuō)一說(shuō),相信你們的數(shù)據(jù)結(jié)構(gòu)使用的是一門(mén)具體的語(yǔ)言比如C/C++語(yǔ)言來(lái)說(shuō)明,那是為了輔助的學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),而數(shù)據(jù)結(jié)構(gòu)本身不屬于任何語(yǔ)言(相信你把書(shū)上的程序敲到電腦里面是不能通過(guò)的吧,其只是描述了過(guò)程,要調(diào)試程序,還需要修改和增加一些東西)。你們的書(shū)上開(kāi)始應(yīng)該在講究數(shù)據(jù)的物理存儲(chǔ)結(jié)構(gòu)/邏輯存儲(chǔ)結(jié)構(gòu)等概念,說(shuō)明數(shù)據(jù)結(jié)構(gòu)首先就是“數(shù)據(jù)的結(jié)構(gòu)”,在內(nèi)存上的存儲(chǔ)方式,就是物理的存儲(chǔ)結(jié)構(gòu),在程序使用人員的思想上它是邏輯的,比如:

你們?cè)?/span>C/C++中學(xué)習(xí)到鏈表,那么鏈表是什么一個(gè)概念,你們使用指針制向下一個(gè)結(jié)點(diǎn)的首地址,讓他們串聯(lián)起來(lái),形成一個(gè)接一個(gè)的結(jié)點(diǎn),就像顯示生活中的火車(chē)一樣。而這只是對(duì)于程序員的概念,但是在內(nèi)存中存儲(chǔ)的方式是怎樣的那?對(duì)于你程序員來(lái)說(shuō)這是“透明”的,其內(nèi)部分配空間在那里,都是隨機(jī)的,而內(nèi)存中也沒(méi)有一個(gè)又一根的線將他們串聯(lián)起來(lái),所以,這是一個(gè)物理與邏輯的概念,對(duì)于我們程序員只需要知道這些就可以了,而我們主要要研究的是“邏輯結(jié)構(gòu)”。

我可以給你一個(gè)我自己總結(jié)的一個(gè)概念:所有的算法必須基于數(shù)據(jù)結(jié)構(gòu)生存。也就是說(shuō),我們對(duì)于任何算法的編寫(xiě),必須依賴一個(gè)已經(jīng)存在的數(shù)據(jù)結(jié)構(gòu)來(lái)對(duì)它進(jìn)行操作,數(shù)據(jù)結(jié)構(gòu)成為算法的操作對(duì)象,這也是為什么算法和數(shù)據(jù)結(jié)構(gòu)兩門(mén)分類不分家的概念,算法在沒(méi)有數(shù)據(jù)結(jié)構(gòu)的情況下,沒(méi)有任何存在的意義;而數(shù)據(jù)結(jié)構(gòu)沒(méi)有算法就等于是一個(gè)尸體而沒(méi)有靈魂。估計(jì)這個(gè)對(duì)于算法的初學(xué)者可能有點(diǎn)暈,我們?cè)诰唧w的說(shuō)一些東西吧:

我們?cè)跀?shù)據(jù)結(jié)構(gòu)中最簡(jiǎn)單的是什么:我個(gè)人把書(shū)籍中線性表更加細(xì)化一層(這里是為了便于理解在這樣說(shuō)的):?jiǎn)蝹(gè)元素,比如:int i;這個(gè)i就是一個(gè)數(shù)據(jù)結(jié)構(gòu),它是一個(gè)什么樣的數(shù)據(jù)結(jié)構(gòu),就是一個(gè)類型為int的變量,我們可以對(duì)它進(jìn)行加法/減法/乘法/除法/自加等等一系列操作,當(dāng)然對(duì)于單個(gè)元素我們對(duì)它的數(shù)據(jù)結(jié)構(gòu)和算法的研究沒(méi)有什么意義,因?yàn)樗緛?lái)就是原子的,某些具體運(yùn)算上可能算法存在比較小的差異;而提升一個(gè)層次:就是我們的線性表(一般包含有:順序表/鏈表)那么我們研究這樣兩種數(shù)據(jù)結(jié)構(gòu)主要就是要研究它的什么東西那?一般我們主要研究他們以結(jié)構(gòu)為單位(就是結(jié)點(diǎn))的增加/刪除/修改/檢索(查詢)四個(gè)操作(為什么有這樣的操作,我在下面說(shuō)到),我們一般把“增加/刪除/修改”都把它稱為更新,對(duì)于一個(gè)結(jié)點(diǎn),若要進(jìn)行更新一類的操作比如:刪除,對(duì)于順序表來(lái)說(shuō)是使用下標(biāo)訪問(wèn)方式,那么我們?cè)趧h除了一個(gè)元素后需要將這個(gè)元素后的所有元素后的所有元素全部向前移動(dòng),這個(gè)時(shí)間是對(duì)于越長(zhǎng)的順序表,時(shí)間越長(zhǎng)的,而對(duì)于鏈表,沒(méi)有順序的概念,其刪除元素只需要將前一個(gè)結(jié)點(diǎn)的指針指向被刪除點(diǎn)的下一個(gè)結(jié)點(diǎn),將空間使用free()函數(shù)進(jìn)行釋放,還原給操作系統(tǒng)。當(dāng)執(zhí)行檢索操作的時(shí)候,由于順序表直接使用下標(biāo)進(jìn)行隨機(jī)訪問(wèn),而鏈表需要從頭開(kāi)始訪問(wèn)一一匹配才可以得到使用的元素,這個(gè)時(shí)間也是和鏈表的結(jié)點(diǎn)個(gè)數(shù)成正比的。所以我們每一種數(shù)據(jù)結(jié)構(gòu)對(duì)于不同的算法會(huì)產(chǎn)生不同的效果,各自沒(méi)有絕對(duì)的好,也沒(méi)有絕對(duì)的不好,他們都有自己的應(yīng)用價(jià)值和方式;這樣我們就可以在實(shí)際的項(xiàng)目開(kāi)發(fā)中,對(duì)于內(nèi)部的算法時(shí)間和空間以及項(xiàng)目所能提供的硬件能力進(jìn)行綜合評(píng)估,以讓自己的算法能夠更加好。

(在這里只提到了基于數(shù)據(jù)結(jié)構(gòu)的一個(gè)方面就是:速度,其實(shí)算法的要素還應(yīng)該包括:穩(wěn)定性、健壯性、正確性、有窮性、可理解性、有輸入和輸出等等)

為什么要以結(jié)點(diǎn)方式進(jìn)行這些亂七八糟的操作那?首先明確一個(gè)概念就是:對(duì)于過(guò)程化程序設(shè)計(jì)語(yǔ)言所提供的都是一些基礎(chǔ)第一信息,比如一些關(guān)鍵字/保留字/運(yùn)算符/分界符。而我們需要用程序解決現(xiàn)實(shí)生活中的問(wèn)題,比如我們要程序記錄某公司人員的情況變化,那么人員這個(gè)數(shù)據(jù)類型,在程序設(shè)計(jì)語(yǔ)言中是沒(méi)有的,那么我們需要對(duì)人員的內(nèi)部信息定義(不可能完全,只是我們需要那些就定義那些),比如:年齡/性別/姓名/出生日期/民族/工作單位/職稱/職務(wù)/工資狀態(tài)等,那么就可以用一些C/C++語(yǔ)言描述了,如年齡我們就可以進(jìn)行如下定義:

int age;/*age變量,表示人員公司人員的年齡*/

同理進(jìn)行其他的定義,我們用結(jié)構(gòu)體或類把他們封裝成自定義數(shù)據(jù)類型或類的形式,這樣用他們定義的就是一個(gè)人的對(duì)象的了,它內(nèi)部包含了很多的模板數(shù)據(jù)了。

我就我個(gè)人的經(jīng)歷估計(jì)的代碼量應(yīng)該10000以內(nèi)的(我個(gè)人的經(jīng)理:只是建議,從你的第一行代碼開(kāi)始算,不論程序正確與否,不論那一門(mén)語(yǔ)言,作為一個(gè)標(biāo)準(zhǔn)程序員需要十萬(wàn)行的代碼的功底(這個(gè)是我在大學(xué)二年級(jí)感覺(jué)有一定時(shí)候的大致數(shù)據(jù),不一定適合其他人),而十萬(wàn)行代碼功底一般需要四門(mén)基礎(chǔ)遠(yuǎn)支撐,若老師沒(méi)有教,可以自學(xué)一些語(yǔ)言)。


最后兩個(gè)跟蘋(píng)果有關(guān)的語(yǔ)言:objective-c 和swift

objective-c :Objective-C是非常實(shí)用的語(yǔ)言。它是一個(gè)用C寫(xiě)成很小的運(yùn)行庫(kù),令應(yīng)用程序的尺寸增加很小,和大部分OO系統(tǒng)使用極大的VM執(zhí)行時(shí)間會(huì)取代了整個(gè)系統(tǒng)的運(yùn)作相反。Objective-C寫(xiě)成的程序通常不會(huì)比其原始碼大很多。而其函式庫(kù)(通常沒(méi)附在軟件發(fā)行本)亦和Smalltalk系統(tǒng)要使用極大的內(nèi)存來(lái)開(kāi)啟一個(gè)窗口的情況相反。因此,Objective-C它完全兼容標(biāo)準(zhǔn)C語(yǔ)言C++對(duì)C語(yǔ)言的兼容僅在于大部分語(yǔ)法上,而在ABI(Application Binary Interface)上,還需要使用extern "C"這種顯式聲明來(lái)與C函數(shù)進(jìn)行兼容),而在此基礎(chǔ)上增加了面向?qū)ο缶幊陶Z(yǔ)言的特性以及Smalltalk消息機(jī)制。

評(píng)價(jià):很強(qiáng)大的編程語(yǔ)言有點(diǎn)類似于C++ ,但是也有java 的影子,。它的熱度完全是由基于Objective-C編寫(xiě)的熱門(mén)iOS應(yīng)用帶起來(lái)。當(dāng)初也是喬老爺子一眼相中了OC,才有了OC的今天。

swift:C 語(yǔ)言是一款經(jīng)典的高級(jí)程序語(yǔ)言。它的升級(jí)版,Objective-C,是蘋(píng)果多年來(lái)的選擇。人們用Objective-C 開(kāi)發(fā)應(yīng)用已經(jīng)30 多年,而C 語(yǔ)言的壽命更久,已經(jīng)差不多40 歲了,也是該是更新的時(shí)候了。

在這些程序語(yǔ)言之中,有一類叫做“腳本語(yǔ)言”,例如 Python,編寫(xiě)和測(cè)試的過(guò)程相對(duì)容易,但功能并不是特別強(qiáng)大,實(shí)際作用并不理想。假如你要編寫(xiě)一個(gè)游戲,需要完全利用設(shè)備的性能,那么它就不是最佳選擇。使用傳統(tǒng)的程序語(yǔ)言,例如 Objective-C,可以更好利用設(shè)備的性能,并且開(kāi)發(fā)出更加復(fù)雜的應(yīng)用。但傳統(tǒng)語(yǔ)言比較難掌握,編譯和測(cè)試過(guò)程也更麻煩。

Swift 借鑒了各種語(yǔ)言的長(zhǎng)處,并改進(jìn)了它們的缺點(diǎn)。Swift 使用現(xiàn)有的Cocoa 和Cocoa Touch 框架,可與Objective-C 兼容,開(kāi)發(fā)過(guò)程中可以隨時(shí)切換。Swift 具有更快、更安全、交互性更強(qiáng)等特點(diǎn),將為開(kāi)發(fā)者帶來(lái)全新體驗(yàn)。

蘋(píng)果表示,至少?gòu)膸讉(gè)關(guān)鍵指標(biāo)來(lái)看,Swift程序的執(zhí)行速度比Python和Objective-C程序更快。并且,Swift 支持Xcode 開(kāi)發(fā)環(huán)境,可以像腳本語(yǔ)言一樣,具有實(shí)時(shí)預(yù)覽功能。開(kāi)發(fā)者在輸入代碼后,右邊屏幕會(huì)實(shí)時(shí)顯示代碼效果。此外,開(kāi)發(fā)者還可以看到應(yīng)用程序運(yùn)行過(guò)程中的代碼效果,從而使測(cè)試過(guò)程更加方便。

問(wèn)題(三):一些大型網(wǎng)絡(luò)游戲和網(wǎng)頁(yè)游戲,一個(gè)PC軟件和Android  和  ios 上的應(yīng)用都是用什么語(yǔ)言開(kāi)發(fā)的。


先說(shuō)PC端的軟件一般所用的語(yǔ)言:PC端:Windows一般用c/c++/c#/java……

mac用oc/c/c++,swift,;linux用c/c++/java……

手機(jī):Android用Java,iOS用oc/c++,swift,WP用c#/c++/c。

問(wèn)題(四):大型的網(wǎng)絡(luò)游戲和網(wǎng)頁(yè)游戲一般用什么編程語(yǔ)言

斑點(diǎn)狗個(gè)人覺(jué)得,還是自己去百度問(wèn)吧,知識(shí)很重要,但是獲取知識(shí)的動(dòng)力能力才是最重要的,這個(gè)世界是平的,信息壁壘已經(jīng)很少,………………。


問(wèn)題(三):很多計(jì)算機(jī)語(yǔ)言都是圖靈完備語(yǔ)言,為什么市場(chǎng)上還有這么多變成語(yǔ)言的?

回答:圖靈完備只保證計(jì)算的可行性,不保證計(jì)算的效率,也不保證代碼的可理解性和可維護(hù)性。各個(gè)領(lǐng)域有不同的需求,如科學(xué)計(jì)算中需要有浮點(diǎn)數(shù)計(jì)算、并行計(jì)算的能力;商業(yè)應(yīng)用中需要有可持續(xù)化、數(shù)據(jù)分析的能力;系統(tǒng)編程中需要對(duì)底層的資源進(jìn)行控制、甚至有實(shí)時(shí)的要求。這些需求之間是存在沖突的,需要語(yǔ)言的設(shè)計(jì)者來(lái)進(jìn)行取舍。雖然有的語(yǔ)言在設(shè)計(jì)之初就注重了通用性,但也有的語(yǔ)言在設(shè)計(jì)和實(shí)現(xiàn)的時(shí)候會(huì)針對(duì)某一領(lǐng)域進(jìn)行優(yōu)化的設(shè)計(jì),如Matlab, R, SQL等等。而有針對(duì)性的優(yōu)化就能有效的降低解決問(wèn)題的復(fù)雜度(編程復(fù)雜度、計(jì)算復(fù)雜度,等等)。新生領(lǐng)域的不斷涌現(xiàn)導(dǎo)致的新的需求,也誘導(dǎo)了新語(yǔ)言的誕生。

即使是通用語(yǔ)言,也存在性能和開(kāi)發(fā)成本的取舍,如C/C++這樣的編譯型保證了性能,但需要更高的開(kāi)發(fā)成本;Python一類的腳本語(yǔ)言雖然降低了開(kāi)發(fā)成本,但需要在性能上作出犧牲。具體的選擇需要看實(shí)際的需求。

還有的就是歷史原因了,像在前端里面能用的基本上也只有Javascript了。

總結(jié):2016-4-11 22:59:37,又坐在電腦前忘記了跑步,不能這樣,要運(yùn)動(dòng)。做一個(gè)會(huì)寫(xiě)代碼的文藝青年。。!

最后講一個(gè)笑話:你們知道祈求代碼不出bug該拜哪個(gè)神仙?我:有人說(shuō)拜雍正:因?yàn)橛赫龑V巍鞍税⒏纾╞ug)” 哈哈

???Z?V


文/spotdog(簡(jiǎn)書(shū)作者)
原文鏈接:http://www.jianshu.com/p/8e88f6d62109
著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),并標(biāo)注“簡(jiǎn)書(shū)作者”。

標(biāo)簽: isp linux Mysql 安全 代碼 服務(wù)器 服務(wù)器端 互聯(lián)網(wǎng) 互聯(lián)網(wǎng)產(chǎn)品 腳本 開(kāi)發(fā)者 媒體 數(shù)據(jù)分析 數(shù)據(jù)庫(kù) 搜索 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:JavaScript對(duì)象繼承

下一篇:正則表達(dá)式30分鐘入門(mén)教程