4月份發(fā)布的全球編程語言排行榜棕诵,Java高居榜首,C屈居第二凿将,C++緊隨其后校套,C和C++的比例之和,超過Java5%牧抵,python借人工智能和DevOps的東風(fēng)笛匙,扶搖直上。新秀GO語言犀变,投胎技術(shù)好妹孙,有個(gè)好爹,依托容器技術(shù)和K8S获枝,迅速走紅蠢正。本文不是為C/C++站臺(tái),宣傳其為全宇宙最好的語言省店,而以近二十年的從業(yè)經(jīng)驗(yàn)來分析C/C++的優(yōu)劣勢(shì)嚣崭,提出指導(dǎo)性建議蜘拉。
這些是C/C++能做的
服務(wù)器開發(fā)工程師、人工智能有鹿、云計(jì)算工程師旭旭、信息安全(黑客反黑客)、大數(shù)據(jù) 葱跋、數(shù)據(jù)平臺(tái)持寄、嵌入式工程師、流媒體服務(wù)器娱俺、數(shù)據(jù)控解稍味、圖像處理、音頻視頻開發(fā)工程師荠卷、游戲服務(wù)器模庐、分布式系統(tǒng)、游戲輔助等
C語言以過程式編程油宜,比匯編更貼近人類思考方式掂碱,而迅速興起,在性能上貼近于機(jī)器語言慎冤。在開發(fā)效率和執(zhí)行性能上做了一個(gè)平衡疼燥。在系統(tǒng)控制上,給開發(fā)人員更多的自由蚁堤,這是他的優(yōu)點(diǎn)醉者,也是缺點(diǎn)。對(duì)于資深人員來說披诗,有很大的發(fā)揮空間撬即,但對(duì)于新手來說,就是踩不完的坑呈队,學(xué)習(xí)成本極高剥槐,稍不小心就是內(nèi)存泄漏,死鎖掂咒。因此才沧,C語言主要應(yīng)用場(chǎng)景在操作系統(tǒng),如Linux绍刮;底層組件,如ceph挨摸;這些標(biāo)準(zhǔn)化程度高孩革,性能要求苛刻的場(chǎng)景。
小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【六三一得运,二七四膝蜈,八四五 】锅移,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)饱搏!裙有開發(fā)工具非剃,很多干貨和技術(shù)資料分享!
C++在C基礎(chǔ)上推沸,引入對(duì)象模型备绽,將數(shù)據(jù)和方法有機(jī)的綁定在一起,比C語言更一步貼近人類思維模式鬓催。引入模板編程肺素,替換C中宏這樣的語法糖。早期C編寫的程序中宇驾,內(nèi)聯(lián)函數(shù)和宏滿天飛倍靡,現(xiàn)在變成模板滿天飛,在執(zhí)行效率上不相上下课舍,但在調(diào)試期塌西,倒引入不少麻煩,實(shí)際上違反了接口和實(shí)現(xiàn)分離的原則筝尾。C++在開發(fā)效率上要高于C雨让,執(zhí)行效率上略遜于C,因此在開發(fā)周期要求比較嚴(yán)格忿等,性能要求高的場(chǎng)景栖忠,有他的發(fā)揮空間,比如游戲的端游贸街,比如行情軟件庵寞。在客戶端,有C#和C++競(jìng)爭(zhēng)薛匪,在服務(wù)端捐川,有JAVA、python逸尖、go與C++競(jìng)爭(zhēng)古沥,所以C++的市場(chǎng)份額就比較尷尬。
C/C++由于底層綁定比較緊娇跟,所以在跨平臺(tái)這塊存在很高的難度岩齿,特別是大規(guī)模的軟件系統(tǒng),要考慮的可能性更多苞俘。在boost逐漸發(fā)展壯大后盹沈,這些情況會(huì)逐漸好轉(zhuǎn)。boost為了跨平臺(tái)吃谣,不得不犧牲一些平臺(tái)特性乞封,在性能上也會(huì)有一定損失做裙,因此在一些應(yīng)用場(chǎng)景中,還會(huì)存在定制自己API庫(kù)的場(chǎng)景存在肃晚,相較于之前沒有boost時(shí)代锚贱,依然要好很多。
C/C++因?yàn)槠渥杂啥雀吖卮倩R放拧廊,即使是同一個(gè)功能,也能整出個(gè)N多花樣悍缠,開發(fā)人員需要在選擇困難癥中卦绣,痛并快樂著。這些狀況飞蚓,會(huì)隨著標(biāo)準(zhǔn)化程度不斷提高滤港,而減少,但永遠(yuǎn)不會(huì)消失趴拧。
小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【六三一溅漾,二七四,八四五 】著榴,無論你是大牛還是小白添履,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙有開發(fā)工具脑又,很多干貨和技術(shù)資料分享暮胧!
這些是C/C++能做的
服務(wù)器開發(fā)工程師、人工智能问麸、云計(jì)算工程師往衷、信息安全(黑客反黑客)、大數(shù)據(jù) 严卖、數(shù)據(jù)平臺(tái)席舍、嵌入式工程師、流媒體服務(wù)器哮笆、數(shù)據(jù)控解来颤、圖像處理、音頻視頻開發(fā)工程師稠肘、游戲服務(wù)器福铅、分布式系統(tǒng)、游戲輔助等
Java在虛擬機(jī)以基礎(chǔ)启具,通過將字節(jié)碼轉(zhuǎn)譯成機(jī)器碼的方式本讥,實(shí)現(xiàn)跨平臺(tái),一次編譯到處運(yùn)行鲁冯。但我深深地懷疑拷沸,這個(gè)口號(hào)是否有價(jià)值。在服務(wù)端薯演,操作系統(tǒng)基本是可控的撞芍,一般不會(huì)出現(xiàn)千奇百怪的操作系統(tǒng),比如多數(shù)是Linux跨扮;而即使是Java虛擬機(jī)本身序无,不同JDK還不是完全兼容的;更何況衡创,Java的第三方依賴庫(kù)如此之多帝嗡,將一個(gè)服務(wù)遷移到另外一個(gè)服務(wù)器,可不是簡(jiǎn)單拷貝下JAR就可以了璃氢。所以哟玷,Java的流行,不是因?yàn)橐淮尉幾g到處運(yùn)行的 特性一也。
Java遵循嚴(yán)格的對(duì)象模型巢寡,單根繼承,所以在限制靈活性的同時(shí)椰苟,也降低了學(xué)習(xí)難度抑月。加上垃圾收集機(jī)制,取消了指針舆蝴,降低了出錯(cuò)概率谦絮。總體而言洁仗,在相同的代碼質(zhì)量和開發(fā)效率下层皱,對(duì)開發(fā)人員的要求也降低了,當(dāng)然京痢,成本也就降低了奶甘。Java在編程的人機(jī)交互接口,比C++更適合普羅大眾的水準(zhǔn)祭椰,擴(kuò)大參與人員的范圍臭家。基于Java的虛擬機(jī)方淤,還出現(xiàn)了Scala等其他類型語言钉赁,同樣在人機(jī)交互方面,努力讓編程活動(dòng)對(duì)人類更加友好携茂,提高開發(fā)效率你踩。
python是一種腳本語言,優(yōu)勢(shì)在于其他動(dòng)態(tài)特性,文本隨時(shí)改带膜,不用像編譯語言那樣吩谦,要經(jīng)歷一系列流程后,才能發(fā)布膝藕,即使是最簡(jiǎn)單的修改式廷。這個(gè)特性,對(duì)運(yùn)維特別有用芭挽,早期的Perl滑废、shell此類的腳本語言都是為運(yùn)維工具而存在,python繼承了腳本特性袜爪,同時(shí)還提供更強(qiáng)大的功能和豐富的軟件包蠕趁。Python不像C/C++那么靈活,連大括號(hào)放哪里辛馆,都能吵上一輩子俺陋。他限制嚴(yán)格的編程風(fēng)格,因?yàn)殪`活性對(duì)運(yùn)維沒有價(jià)值怀各,因此倔韭,隨著DevOps的興起,特別是云平臺(tái)瓢对,python找到自己的風(fēng)口寿酌。近期,AI的興起硕蛹,更給python注入更強(qiáng)效的興奮劑醇疼,扛把子吳恩達(dá)擺明車馬支持python,python火起來法焰,是不可阻擋的秧荆。
python在DevOps、云平臺(tái)埃仪、AI領(lǐng)域的興起乙濒,究其本質(zhì),是實(shí)用主義在發(fā)揮作用卵蛉。AI的核心價(jià)值是智能算法颁股,如何提高算法的智能水平才是關(guān)鍵,而且算法的調(diào)整頻度高傻丝,簡(jiǎn)單的交互接口才是算法科學(xué)家所喜歡的甘有。讓算法專家去鉆研如何提高性能,既沒有意義葡缰,也不符合經(jīng)濟(jì)價(jià)值亏掀。而DevOps和云平臺(tái)本質(zhì)上是基礎(chǔ)設(shè)施忱反、流程的管理,如何讓管理簡(jiǎn)單有效滤愕,才是核心價(jià)值温算,而且這些管理行為對(duì)性能并不苛刻。更不用說那些爭(zhēng)論不休的語法糖该互,編程風(fēng)格米者,沒有選擇韭畸,爭(zhēng)論也沒有價(jià)值宇智。
JavaScript由于歷史原因,是WEB終端的不二選擇胰丁,替換成本極高随橘,即使他有N多缺陷,即使谷歌和微軟如此強(qiáng)大锦庸,費(fèi)盡心思机蔗,也沒有顛覆成功。就像HTML5甘萧,已經(jīng)有國(guó)際標(biāo)準(zhǔn)組織萝嘁、眾多開發(fā)商、無數(shù)產(chǎn)品支持扬卷,這么多年過去了牙言,依然處于推廣階段。Node.js的出現(xiàn)怪得,實(shí)際只是為終端的開發(fā)人員擴(kuò)展了職業(yè)空間咱枉,為服務(wù)端開發(fā)增加了一個(gè)k選擇項(xiàng),有可能為企業(yè)節(jié)省成本徒恋,但真實(shí)價(jià)值如何蚕断,倒難以界定。服務(wù)端的開發(fā)選型本來就已經(jīng)很多入挣,Node.js能夠被傳統(tǒng)勢(shì)力接受程度亿乳,還有待考察。
小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【六三一径筏,二七四葛假,八四五 】,無論你是大牛還是小白匠璧,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)桐款!裙有開發(fā)工具,很多干貨和技術(shù)資料分享夷恍!
GO語言有個(gè)好爹魔眨,隨著容器技術(shù)和K8S興起媳维,而迅速崛起。但以谷歌的尿性遏暴,開發(fā)出很多玩意兒侄刽,也拋棄了很多,最終會(huì)走向什么樣的命運(yùn)朋凉,其實(shí)難料州丹。就像Objective-C最終也一樣被蘋果拋棄。趁著火熱勁還在的時(shí)候杂彭,及時(shí)跟進(jìn)墓毒,倒不失一個(gè)好選擇。
像C語言這樣的亲怠,屹立歷史而不倒的語言所计,幾無同類。受企業(yè)控制的語言团秽,必然隨著企業(yè)戰(zhàn)略變化而走向衰斨麟省;為特定場(chǎng)景設(shè)計(jì)的語言习勤,也會(huì)隨著場(chǎng)景變化踪栋,而消失在歷史長(zhǎng)河。
以上分析對(duì)比這么多图毕,就是為了要清晰地認(rèn)識(shí)到C/C++優(yōu)劣在何處夷都,揚(yáng)長(zhǎng)避短才是生存不二法則。C/C++開發(fā)基礎(chǔ)組件吴旋,包括操作系統(tǒng)损肛,中間件,服務(wù)框架等荣瑟,核心原則為機(jī)制和策略分離治拿。以高性能、低延遲笆焰、資源占用率低等特性劫谅,為上層應(yīng)用提供更多可能性;多變部分轉(zhuǎn)化為策略嚷掠,留給其他語言發(fā)揮捏检。對(duì)于其他語言,比如Java實(shí)現(xiàn)的服務(wù)不皆,在該服務(wù)成熟穩(wěn)定之后贯城,完全可以用C/C++重寫,提供更高的性能和低延遲霹娄。