一膨蛮、是因?yàn)镃++服務(wù)端相比JAVA有某些優(yōu)勢(shì)嗎叠纹?
答:不是,但任何一個(gè)公司都是有技術(shù)積累的敞葛。相比于java誉察,騰訊在C++方面的積累更多,這當(dāng)然是歷史原因惹谐。如果你算搞一個(gè)新項(xiàng)目持偏,在騰訊你可以有大量C++的開(kāi)源組件可以使用,這些組件都是有專(zhuān)人維護(hù)而且絕大多數(shù)是經(jīng)過(guò)生產(chǎn)環(huán)境考驗(yàn)的“奔。現(xiàn)成可用的東西鸿秆,為什么不用呢?
二怎囚、如果說(shuō)是因?yàn)轵v訊里會(huì)C++的員工比較多
(1)又經(jīng)趁ǎ看到有人說(shuō)編程語(yǔ)言只是工具,精通一個(gè)其他的很容易上手桩了?引申以下一個(gè)長(zhǎng)久的疑問(wèn):
(1.1)熟悉JVM附帽,java并發(fā)編程,java開(kāi)源框架的人轉(zhuǎn)C++依然很快能達(dá)到相當(dāng)水平井誉?熟 悉C++的轉(zhuǎn)java也很快能熟悉這些嗎蕉扮?
答:我見(jiàn)過(guò)熟悉C++轉(zhuǎn)Java很容易,但是反過(guò)來(lái)卻不一定颗圣,從語(yǔ)言本身C++還是要比Java難很多的喳钟。而事實(shí)上作為一個(gè)專(zhuān)精于某領(lǐng)域的程序員屁使,從熟悉的語(yǔ)言轉(zhuǎn)到其他語(yǔ)言也并非易事。不是因?yàn)檎Z(yǔ)法本身奔则,而是因?yàn)檗D(zhuǎn)到其他語(yǔ)言就要熟悉新的開(kāi)發(fā)環(huán)境蛮寂、工具鏈、各種組件等等易茬。無(wú)論是時(shí)間成本還是風(fēng)險(xiǎn)都很高酬蹋。
(2)為什么不招JAVA的程序員開(kāi)發(fā)呢?
答:如果你是精通C++的JAVA程序員抽莱,會(huì)招的范抓。
雖然騰訊后臺(tái)經(jīng)常要面對(duì)各種高并發(fā)大數(shù)據(jù)的場(chǎng)景,很關(guān)注高性能低成本高可用食铐,但這是在架構(gòu)層面解決的匕垫,業(yè)務(wù)開(kāi)發(fā)其實(shí)并不需要考慮太多,根據(jù)場(chǎng)景選用合適的架構(gòu)和組件即可虐呻。
以我這幾年觀察象泵,大部分業(yè)務(wù)代碼寫(xiě)得都是一團(tuán)糟。性能斟叼、可擴(kuò)展性偶惠、健壯性非但比不過(guò)我寫(xiě)的C++,也不比過(guò)我寫(xiě)的java犁柜。
甚至我敢說(shuō)用js都可以寫(xiě)得比它快。太多低效算法堂淡,二重循環(huán)求vector交集你能忍馋缅?還有太多的內(nèi)存拷貝,中轉(zhuǎn)層服務(wù)對(duì)象拷貝五六次太常見(jiàn)了绢淀;至于經(jīng)常crash萤悴,毫無(wú)擴(kuò)展性,這更不用說(shuō)了皆的。
C++理論上可以寫(xiě)出性能很好的代碼覆履,但是你需求那么緊迫,開(kāi)發(fā)時(shí)間不足费薄,單元測(cè)試都沒(méi)時(shí)間搞硝全,哪里還有時(shí)間去優(yōu)化代碼?何況大家水平也不高楞抡,畢竟招了上萬(wàn)人伟众,哪里能都"精通"C++?雖然C++開(kāi)發(fā)效率低(現(xiàn)用gcc 4.1.2),又容易出bug召廷,但大家都在用凳厢,你當(dāng)然也只能繼續(xù)用账胧。你換一個(gè)語(yǔ)言,配套的工具鏈先紫,編譯發(fā)布運(yùn)維治泥,各種對(duì)內(nèi)對(duì)外接口,都要重新開(kāi)發(fā)遮精,成本實(shí)在太大了居夹。
就算是新項(xiàng)目,成本也太大了仑鸥,項(xiàng)目失敗誰(shuí)負(fù)責(zé)得起吮播?
其實(shí)做為一個(gè)開(kāi)發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要這里我推薦一個(gè)C語(yǔ)言C++交流群627819188眼俊,不管你是小白還是大牛歡迎入駐意狠,大家一起交流成長(zhǎng)。