這些年或因?yàn)榕d趣或因?yàn)楣ぷ餍枰鴮?shí)接觸了不少編程語(yǔ)言,然而隨著接觸的多了起來晨川,有時(shí)候也不免自我懷疑画恰,為什么我要這么頻繁的更換編程語(yǔ)言彭谁?難道不能利用一種編程語(yǔ)言打天下么?這么做豈不是將時(shí)間精力完全的浪費(fèi)在了學(xué)習(xí)編程語(yǔ)言的過程中允扇,說實(shí)在的這個(gè)過程一點(diǎn)也不有趣缠局。當(dāng)我嘗試著將使用過的編程語(yǔ)言分類则奥,詳細(xì)考慮編程語(yǔ)言的優(yōu)勢(shì)和特點(diǎn),于是便有了這篇文章狭园。
在這里读处,我嘗試根據(jù)每種編程語(yǔ)言的特點(diǎn),主要應(yīng)用領(lǐng)域和優(yōu)勢(shì)對(duì)編程語(yǔ)言做一個(gè)比較實(shí)用的定位唱矛,避免今后在編程的道路上浪費(fèi)時(shí)間罚舱,做無用功,將更多的時(shí)間放在高層編程技術(shù)上的學(xué)習(xí)上绎谦。
1.C語(yǔ)言
C語(yǔ)言是應(yīng)用最為廣泛的一種編程語(yǔ)言管闷,從嵌入式到PC軟件,從操作系統(tǒng)到底層驅(qū)動(dòng)都能見到他的身影窃肠。作為應(yīng)用最廣泛包个,形式最靈活,拓展最方便的一種編程語(yǔ)言冤留,C語(yǔ)言在世界編程語(yǔ)言排行榜中長(zhǎng)期占據(jù)第二的位置碧囊,牢不可破。然而這還是不計(jì)算嵌入式等領(lǐng)域的前提下得出的排名搀菩,如果將嵌入式等領(lǐng)域計(jì)算在內(nèi)呕臂,超越Java不是妄想破托。
C語(yǔ)言時(shí)一種面向底層肪跋,面向計(jì)算機(jī)的編程語(yǔ)言,它介于高級(jí)語(yǔ)言與低級(jí)語(yǔ)言之間土砂。相對(duì)于與機(jī)器指令對(duì)應(yīng)的低級(jí)語(yǔ)言——匯編語(yǔ)言州既,它具有足夠的抽象,能夠讓人們避免直接與寄存器打交道萝映。同時(shí)吴叶,相對(duì)于高級(jí)語(yǔ)言Python來說,又因?yàn)槊鎸?duì)計(jì)算機(jī)底層序臂,運(yùn)行效率不至于下降太多蚌卤。C語(yǔ)言是一種折衷的選擇,當(dāng)人們需要高性能但是又不愿意犧牲太多編程效率的時(shí)候奥秆,C語(yǔ)言是一種明智的選擇逊彭,又因?yàn)镃語(yǔ)言面向計(jì)算機(jī)底層,因此C語(yǔ)言的編譯器實(shí)現(xiàn)起來較為簡(jiǎn)單构订。這就使得C語(yǔ)言廣泛應(yīng)用在異構(gòu)CPU的嵌入式領(lǐng)域侮叮。
C語(yǔ)言的接口最穩(wěn)定,幾乎所有的動(dòng)態(tài)鏈接庫(kù)都提供C接口悼瘾。
綜上所述囊榜,C語(yǔ)言最適合的領(lǐng)域時(shí)嵌入式領(lǐng)域和驅(qū)動(dòng)開發(fā)領(lǐng)域审胸,在這兩個(gè)領(lǐng)域中,對(duì)于性能的要求時(shí)錙銖必較的卸勺,因此砂沛,相對(duì)于運(yùn)行性能的損失,編程效率上降低一些無所謂孔庭。
2.Java語(yǔ)言
java時(shí)Sun公司開發(fā)的一種高級(jí)編程語(yǔ)言尺上。他是一種靜態(tài)的編譯型編程語(yǔ)言,運(yùn)行在JVM上圆到,JVM是一個(gè)虛擬機(jī)怎抛,擁有獨(dú)立的結(jié)構(gòu),獨(dú)立于CPU結(jié)構(gòu)芽淡,因此能夠做到編譯一次马绝,到處運(yùn)行的設(shè)計(jì)目標(biāo)。
java語(yǔ)言脫身于C語(yǔ)言挣菲,并且對(duì)C語(yǔ)言做了拓展富稻,加入了強(qiáng)大的面向?qū)ο蟮睦砟睿^承白胀、范型椭赋、接口等概念對(duì)于規(guī)范化編程擁有極大的促進(jìn)作用。因?yàn)閖ava嚴(yán)格統(tǒng)一了數(shù)據(jù)結(jié)構(gòu)的定義或杠,因此不需要針對(duì)某個(gè)平臺(tái)細(xì)究細(xì)節(jié)哪怔,又因?yàn)闆]有C語(yǔ)言的指針概念,因此java是較為容易學(xué)習(xí)的向抢。
java的成功不僅僅是由于自身語(yǔ)言的設(shè)計(jì)认境,因?yàn)閖ava不只是一種編程語(yǔ)言。java是一種技術(shù)挟鸠,一種標(biāo)準(zhǔn)叉信,他隨身帶著最大最豐富的標(biāo)準(zhǔn)庫(kù)。XML解析艘希、數(shù)據(jù)庫(kù)鏈接硼身、界面編程、圖像處理覆享、服務(wù)器編程佳遂、手機(jī)編程,你想要的淹真,java擁有一站式的解決方案讶迁。另外最為世界上最流行的編程語(yǔ)言,java的第三方類庫(kù)俯拾皆是。
java最成功的地方其實(shí)是他的語(yǔ)言風(fēng)格巍糯,因?yàn)樗恼Z(yǔ)言風(fēng)格啸驯,大部分的程序員都能寫出較為不錯(cuò)的代碼。然而即使程序?qū)懙暮軤€祟峦,只要他運(yùn)行在JVM這個(gè)無數(shù)計(jì)算機(jī)科學(xué)家們優(yōu)化過的超級(jí)平臺(tái)上罚斗,也會(huì)獲得即時(shí)優(yōu)化的加成。
java最適合的地方是龐大的工程化項(xiàng)目宅楞,項(xiàng)目越發(fā)龐大针姿,便越能夠體會(huì)到j(luò)ava標(biāo)準(zhǔn)化,規(guī)范化的好處厌衙。利用java面向接口編程距淫,面向反射編寫動(dòng)態(tài)程序,異常處理等婶希。這些特性能夠讓整個(gè)項(xiàng)目邏輯清晰榕暇,接口清晰、模塊化喻杈、靈活彤枢,堅(jiān)固穩(wěn)定等。不光java本身設(shè)計(jì)足夠優(yōu)秀筒饰,又有Eclipse等優(yōu)秀IDE的加成缴啡,java程序的編寫異常方便。然而java是不適合編寫隨手可用的小項(xiàng)目的瓷们,java設(shè)計(jì)的足夠繁瑣业栅,足夠辨準(zhǔn),也正是這些極為標(biāo)準(zhǔn)范式化的特性换棚,讓你在編寫程序的時(shí)候必須要深思熟慮的設(shè)計(jì)一個(gè)好用的架構(gòu)式镐,需要花費(fèi)大量的時(shí)間精力來設(shè)計(jì)和彌補(bǔ)架構(gòu)缺陷反镇。讓人感受不到編程的樂趣固蚤。
3.shell
shell是一種腳本語(yǔ)言,根植于unix系統(tǒng)歹茶。它利用少量的shell命令夕玩,將命令行工具組合起來,真實(shí)工作的其實(shí)是unix命令工具惊豺。對(duì)于unix、linux命令的人來說尸昧,他是得力的工具,能夠即用最少的代碼烹俗,完成大量的重復(fù)工作萍程。非常方便。然而兔仰,他的缺點(diǎn)同樣非常明顯,那就是它只能在unix類系統(tǒng)上工作乎赴。在windows上就比較尷尬了。
shell腳本長(zhǎng)于組合系統(tǒng)工具榕吼,因此對(duì)于大量重復(fù)性的工作饿序,利用shell腳本能夠大大的提升工作效率。shell腳本的缺陷也是十分明顯的羹蚣,由于缺失了通用編程語(yǔ)言的數(shù)據(jù)處理能力嗤堰。程序結(jié)構(gòu)設(shè)計(jì)的問題等shell在編寫大型項(xiàng)目的時(shí)候,力不從心度宦。
shell最適合的其實(shí)就是計(jì)算機(jī)日常工作中非常繁瑣且重復(fù)性的批量操作踢匣。這種任務(wù)隨手寫一個(gè)小腳本過去,方便極了戈抄。
4.Python
python是一種不擇不扣的高級(jí)語(yǔ)言离唬,動(dòng)態(tài)類型為編程語(yǔ)言帶來了極大的靈活性,簡(jiǎn)單的語(yǔ)法非常易學(xué)划鸽,強(qiáng)大的C語(yǔ)言拓展機(jī)制输莺,異常豐富的類庫(kù)讓它成為最火熱的腳本語(yǔ)言。
然而裸诽,缺點(diǎn)同樣明顯嫂用,因?yàn)樽銐蚋呒?jí),動(dòng)態(tài)類型的加入丈冬,python本身的運(yùn)行效率堪憂嘱函。動(dòng)態(tài)類型的加入,調(diào)試排錯(cuò)效率較為困難埂蕊。異常處理等內(nèi)容相對(duì)于java來說較為薄弱往弓。非常不方便。
python支持面向?qū)ο缶幊绦钛酰虼俗鳛榭焖僭驮O(shè)計(jì)非常不錯(cuò)函似,因?yàn)閜ython寬松語(yǔ)法,能夠讓思路真正流淌起來喉童。利用python作出項(xiàng)目雛形撇寞,然后利用java和C++等重構(gòu)時(shí)一個(gè)不錯(cuò)的選擇。
5.C++
作為一種高級(jí)編程語(yǔ)言,C++拓展了C語(yǔ)言蔑担,加入了面向?qū)ο缶幊搪兜嗉桑缎椭优妫0娴扰瞎妗K旧頃r(shí)一種多范式編程語(yǔ)言,你可以利用它面向過程編程恨统,面向?qū)ο缶幊倘ǎ瘮?shù)式編程等。
C++語(yǔ)言在保留最接近C語(yǔ)言的運(yùn)行效率的基礎(chǔ)上畜埋,增加的了面向?qū)ο蟮雀呒?jí)程序設(shè)計(jì)方式莫绣。因此在游戲編程等領(lǐng)域使用較為廣泛。在這些領(lǐng)域中C++依靠它出色的運(yùn)行效率與編程效率稱霸天下悠鞍。