c语言javapython哪个好-C#、C++、Java、Python 选择哪个好?
首先排除Python,光動(dòng)態(tài)語(yǔ)言一個(gè)理由,就已經(jīng)萬(wàn)劫不復(fù)了。無(wú)論有多少所謂優(yōu)勢(shì),在這一個(gè)缺點(diǎn)面前,都顯得微不足道。
動(dòng)態(tài)語(yǔ)言是為了七八十年代的古董計(jì)算機(jī)而設(shè)計(jì)的,那個(gè)年代的電腦操作系統(tǒng)還不到1MB,比如MS-Dos,Unix,Amiga等,所以絕大多數(shù)動(dòng)態(tài)語(yǔ)言都是古董語(yǔ)言。Python在其中算是相對(duì)“年輕”的,但也是30年前的技術(shù)了。
除了Lua,Julia等極少數(shù)90后之外,絕大多數(shù)動(dòng)態(tài)語(yǔ)言都是無(wú)法操縱線程的。因?yàn)槟莻€(gè)年代的CPU是單核的,操作系統(tǒng)不僅是單線程的,有些系統(tǒng)甚至是單進(jìn)程的。
雖然后來(lái)很多動(dòng)態(tài)語(yǔ)言加入了協(xié)程,但其實(shí)還是只能操縱一個(gè)線程的,連“治標(biāo)”的問(wèn)題都沒(méi)能完全解決,更別說(shuō)“治本”了。很多初學(xué)者以為這是“快”與“慢”的問(wèn)題,會(huì)隨著硬件性能提升而逐漸改善,然而恰恰相反,硬件性能越提升,與動(dòng)態(tài)語(yǔ)言越脫節(jié)。因?yàn)檫@些動(dòng)態(tài)語(yǔ)言能有效發(fā)揮的CPU性能,始終停留在單線程的時(shí)代。
當(dāng)時(shí)的主要儲(chǔ)存介質(zhì)是軟盤,就是那種正方形的塑料小卡片,最大容量只有1.44MB,為了能夠裝在軟盤里面,所有動(dòng)態(tài)語(yǔ)言的語(yǔ)句都特別簡(jiǎn)短。用今天Python圈兒里的話說(shuō),當(dāng)時(shí)幾乎所有的編程語(yǔ)言,全都非常“優(yōu)雅”。
后來(lái)硬盤容量變大,windows誕生,計(jì)算機(jī)完全進(jìn)入圖形化時(shí)代,程序變得越來(lái)越龐大,一個(gè)程序從原本的幾KB,瞬間增大到幾十幾百M(fèi)B,乃至GB。
從此,為了編寫kb級(jí)項(xiàng)目而設(shè)計(jì)出來(lái)的動(dòng)態(tài)語(yǔ)言,越來(lái)越難以勝任軟件的編寫任務(wù),被視為落后技術(shù),除了JS之外,幾乎所有主要工作都被靜態(tài)語(yǔ)言取代,一大半動(dòng)態(tài)語(yǔ)言從此滅絕了,活下來(lái)的動(dòng)態(tài)語(yǔ)言則只用來(lái)編寫腳本,才有了“工程語(yǔ)言”和”腳本語(yǔ)言”一說(shuō)。
動(dòng)態(tài)語(yǔ)言只適合寫非常小的東西,項(xiàng)目越小,寫起來(lái)就越爽,越大就越抓狂,且非常難以維護(hù)。網(wǎng)上各種不到一百行代碼的“小項(xiàng)目”來(lái)證明Python如何如何優(yōu)雅,而你去工作之后會(huì)發(fā)現(xiàn),這樣的“小項(xiàng)目”今天只存在于三個(gè)地方。
1,培訓(xùn)機(jī)構(gòu)的教學(xué)計(jì)劃中
2,各種教程的案例中
3,粉絲們相互洗腦的言論中
實(shí)際生產(chǎn)中,你見(jiàn)到的“小項(xiàng)目”代碼行數(shù)都是以萬(wàn)為單位的,如果對(duì)Python代碼進(jìn)行封裝的話,維護(hù)難度幾乎是在挑戰(zhàn)人類耐性的極限,無(wú)時(shí)無(wú)刻不抓狂,當(dāng)然,也確實(shí)有個(gè)別使用Python寫成的“大項(xiàng)目”,但無(wú)一例外,都是靠大量注釋硬磨出來(lái)的。注釋的行數(shù)比代碼的行數(shù)要多得多。這時(shí)候就已經(jīng)不是“寫代碼加注釋”,而是“寫注釋加代碼”了,編寫體驗(yàn)就像是在寫一部”超長(zhǎng)篇中文說(shuō)明書,其中摻雜著少量代碼”,但你不把“長(zhǎng)篇說(shuō)明書”看完,這些曾經(jīng)由自己親手寫出的“少量代碼”,就死活看不懂。
而且寫完代碼,確定不需要修改之后,還有一步工作要做,就是把那些浩如煙海的注釋,刪掉絕大部分。否則注釋實(shí)在太多,會(huì)墊高運(yùn)行成本,一個(gè)耗費(fèi)大量精力編寫的項(xiàng)目,剛寫完時(shí)超過(guò)1GB,注釋刪光之后,還剩100多MB,內(nèi)心里數(shù)不清的草泥馬。
另外三個(gè)都是不錯(cuò)的選擇,它們都是靜態(tài)語(yǔ)言。若想開(kāi)發(fā)一個(gè)中型以上的項(xiàng)目,而且希望可以有效維護(hù)的話。使用靜態(tài)語(yǔ)言來(lái)開(kāi)發(fā),才能讓你避免抓狂。
就像鐵鍬與挖掘機(jī),如果給寵物挖個(gè)廁所,挖掘機(jī)顯得既難學(xué)又難用,一學(xué)就是兩年起步,考一堆資格證,還各種不熟練。鐵鍬簡(jiǎn)直太棒了,分分鐘秒懂,掄起來(lái)就開(kāi)挖。挖掘機(jī)還沒(méi)熱好車,用鐵鍬三五下就挖好了。鐵鍬顯得各方面都很完美,挖掘機(jī)簡(jiǎn)直一無(wú)是處。但如果你想挖一座水壩,并指望長(zhǎng)期靠這門手藝混飯吃,還是先去中國(guó)山東找藍(lán)翔,把“既難學(xué)又難用的挖掘機(jī)”學(xué)好再說(shuō)吧。
當(dāng)然,“不適合”與“不能”是兩回事。畢竟僅憑雙手都能磊出萬(wàn)里長(zhǎng)城,用鐵鍬又怎會(huì)挖不出水壩?只要有愚公移山的精神,動(dòng)態(tài)語(yǔ)言當(dāng)然也能寫出大型程序,只要玩命加注釋就可以了。可問(wèn)題就在于,僅為了“簡(jiǎn)單易學(xué)”這么個(gè)優(yōu)點(diǎn),而在漫長(zhǎng)的職業(yè)生涯中反復(fù)不停的“移山”,值嗎?
既然說(shuō)Python,當(dāng)然要提一下人工智能,這確實(shí)是Python最大的存在價(jià)值。在熟練掌握一門靜態(tài)語(yǔ)言的前提下,確實(shí)可以抽時(shí)間學(xué)一下。但如果你連一門靜態(tài)語(yǔ)言都還沒(méi)掌握,只學(xué)了學(xué)Python便指望可以去搞人工智能開(kāi)發(fā),那真是想太多了,因?yàn)楝F(xiàn)實(shí)情況是一環(huán)扣一環(huán)的。人工智能水壩很高端,但你得先把水壩挖出來(lái)才行,否則用卷積神經(jīng)網(wǎng)絡(luò)能存水嘛?人工智能就像一件太空服,確實(shí)是高級(jí)貨,但要發(fā)展航天,需要優(yōu)先考慮的問(wèn)題,卻是如何造出一枚運(yùn)載火箭?如何造出飛船?如何培養(yǎng)宇航員?當(dāng)一切條件完備之后,才適合考慮太空服的問(wèn)題,否則就是本末倒置。若連宇航員都還沒(méi)有,太空服給誰(shuí)穿?沒(méi)有飛船,又何來(lái)宇航員?沒(méi)有運(yùn)載火箭,飛船又怎么上天?
既然說(shuō)完了“為何要用挖掘機(jī),而排除鐵鍬”的問(wèn)題,下面就該說(shuō)說(shuō)“挖掘機(jī)技術(shù)哪家強(qiáng)”了。
三門靜態(tài)語(yǔ)言的語(yǔ)法是高度相似的,尤其是Java和C#,簡(jiǎn)直是太像了,學(xué)會(huì)其中一門,另一門你就會(huì)了八九成(只論語(yǔ)法部分)。完全可以在幾天之內(nèi),從一門語(yǔ)言過(guò)渡到另外一門語(yǔ)言。所以若想同時(shí)學(xué)會(huì)三門語(yǔ)言,其實(shí)一點(diǎn)都不難,但我不建議這樣做,因?yàn)檫@基本是在浪費(fèi)時(shí)間。
因?yàn)椤皩W(xué)會(huì)語(yǔ)言”和“勝任工作”之間,有著一道巨大的鴻溝。幾乎沒(méi)有多少回頭路可以走。比如我一開(kāi)始是用Java做web開(kāi)發(fā)的,由于工作需要,我需要學(xué)會(huì)“用C#做游戲”。憑借Java的底子,我只用了兩三天的時(shí)間,就學(xué)會(huì)了C#語(yǔ)言。之后我用了一個(gè)星期左右的時(shí)間,學(xué)會(huì)了用C#做web開(kāi)發(fā)??墒?#xff0c;當(dāng)我決定使用C#轉(zhuǎn)向游戲開(kāi)發(fā)的時(shí)候,我花費(fèi)了兩年的時(shí)間學(xué)習(xí),才勉強(qiáng)做出一個(gè)很小的項(xiàng)目。
用Java做Web開(kāi)發(fā),轉(zhuǎn)換到用C#做web開(kāi)發(fā),就像從右手寫字,轉(zhuǎn)換為左手寫字。并沒(méi)有新的知識(shí)要學(xué),僅僅是改變了握筆的習(xí)慣。雖然很容易,但卻是在浪費(fèi)時(shí)間。因?yàn)槿粢獙懽?#xff0c;只用一只手就夠了。
之后,我試著學(xué)習(xí)用C#做游戲,就像從寫字,轉(zhuǎn)換到畫畫。握筆的習(xí)慣沒(méi)有變,但所學(xué)的知識(shí)卻完全不同了。所以即便我用了兩年,但時(shí)間并沒(méi)有絲毫浪費(fèi),因?yàn)槲颐刻於荚趯W(xué)習(xí)“之前不懂的知識(shí)”。
所以選擇語(yǔ)言的關(guān)鍵,并不在于語(yǔ)言本身,而在于你要先想清楚,自己準(zhǔn)備從事哪個(gè)行業(yè)。換一門語(yǔ)言非常容易。而換一個(gè)行業(yè),就不是那么容易了。
在這三門靜態(tài)語(yǔ)言當(dāng)中,Java的用戶數(shù)量一定是最多的,崗位數(shù)量也是最多的,但競(jìng)爭(zhēng)壓力也是最大的。因?yàn)镴ava的就業(yè)崗位,幾乎全都集中在互聯(lián)網(wǎng)行業(yè),主要就是用ssh做web開(kāi)發(fā),安卓項(xiàng)目也有一些,但非常少,基本可以忽略。好的方面是,在互聯(lián)網(wǎng)行業(yè)是最大主流,只要不挑肥揀瘦,找工作不是問(wèn)題,而且在很長(zhǎng)一段時(shí)間內(nèi),這種情況都應(yīng)該不會(huì)有太大變化。壞的方面是,嚴(yán)重依賴互聯(lián)網(wǎng)行業(yè),只要選了Java,就必須一門心思做網(wǎng)站,因?yàn)镴ava在其他行業(yè)的崗位數(shù)接近于零?;ヂ?lián)網(wǎng)高速增長(zhǎng),Java的雪球也就越滾越大。但如果哪天互聯(lián)網(wǎng)行業(yè)不行了,Java就要做好陪葬的準(zhǔn)備了,轉(zhuǎn)型到其他行業(yè)的可能性微乎其微。這也是我轉(zhuǎn)而去學(xué)C#的原因,根本目的就是為了在“編程”和“做網(wǎng)站”之間實(shí)現(xiàn)解耦。讓“編程”可以做到更多的事情,否則你如何證明自己是個(gè)程序員,而不是個(gè)“網(wǎng)站制作員”?Java的親爹“日公司”還活著的時(shí)候,個(gè)人是個(gè)鐵桿Java粉,畢業(yè)后就找了份ssh增刪查改的工作,一干就是七八年,但后來(lái)Java被甲骨文這個(gè)拿數(shù)據(jù)庫(kù)當(dāng)幌子,冒充IT公司的律師事務(wù)所收購(gòu)之后,就開(kāi)始變得不思進(jìn)取了。除了整天上法院,在法律戰(zhàn)方面大顯神威之外,就只能蹭互聯(lián)網(wǎng)的熱度保持增長(zhǎng)。這么多年來(lái),始終無(wú)法在互聯(lián)網(wǎng)之外的領(lǐng)域,拓展出哪怕一丁點(diǎn)兒用途。Java是我使用時(shí)間最長(zhǎng)的語(yǔ)言,我從高中時(shí)代就開(kāi)始學(xué)習(xí)它了,還專門因?yàn)樗?#xff0c;才決定報(bào)考計(jì)算機(jī)專業(yè)。我原以為自己會(huì)寫一輩子Java。可離開(kāi)它之后,我卻開(kāi)始反問(wèn)自己”當(dāng)初為何沒(méi)有早點(diǎn)離開(kāi)?”。
C#是我的新歡,我實(shí)在特別喜歡它,至少目前是這樣的。最重要的原因是,它能做的工作比Java多很多,PC設(shè)備集成,游戲開(kāi)發(fā),ios和安卓開(kāi)發(fā),串口設(shè)備通信,gis,工業(yè)控制,ao與erp系統(tǒng),以及web開(kāi)發(fā)全能做,而且學(xué)習(xí)效率和開(kāi)發(fā)效率都很高。如果希望用最小的學(xué)習(xí)成本,獲得最大的技術(shù)回報(bào),它一定就是最佳選擇。由于曾經(jīng)不跨平臺(tái),錯(cuò)失了互聯(lián)網(wǎng)崛起的時(shí)機(jī),所以工作崗位并不像Java那樣,全都集中在互聯(lián)網(wǎng)行業(yè),而是分布在各行各業(yè)。缺點(diǎn)是崗位太分散,崗位其實(shí)非常多,只比Java略少一些,但分布到各行各業(yè)之后,就顯得沒(méi)什么存在感了,在每個(gè)行業(yè)都不是老大,尤其在互聯(lián)網(wǎng)行業(yè)非常弱勢(shì),也許連Java的零頭都不到。C#的名字也不好,總讓人聯(lián)想到C++,以為它是門很古老的語(yǔ)言,其實(shí)C#是個(gè)00后,論輩分和Go語(yǔ)言差不多,尚處于“小屁孩”階段,崗位數(shù)量能有如此規(guī)模,其實(shí)已經(jīng)很了不起了。優(yōu)點(diǎn)是,萬(wàn)金油,哪個(gè)行業(yè)都能干,又不依賴其中任何一個(gè)行業(yè)。如果哪天互聯(lián)網(wǎng)行業(yè)不行了,很容易轉(zhuǎn)型到各種行業(yè)。另外在游戲開(kāi)發(fā)方面是主流,Unity,寒霜3,CE5等眾多游戲引擎,均使用C#開(kāi)發(fā)游戲。近幾年在互聯(lián)網(wǎng)方面的改進(jìn)也還不錯(cuò),有了.NetCore,終于可以跨平臺(tái)了。優(yōu)點(diǎn)是性能非常棒,是常見(jiàn)的后端框架中速度最快的,具體可參照TechEmpower的性能測(cè)試。缺點(diǎn)是.NetCore出來(lái)的太晚了,盡管有技術(shù)優(yōu)勢(shì),但市場(chǎng)已經(jīng)被Java占的穩(wěn)穩(wěn)的了,所以短期內(nèi)Java必然還是唯一的主流。不過(guò)對(duì)我來(lái)說(shuō)無(wú)所謂,能做網(wǎng)站的語(yǔ)言多如狗。“啥都能干”才是我選C#的理由。我想我可能會(huì)寫一輩子C#。。。。。吧?
C++的牛逼之處,就是跑的特別快,而且理論上能做的事情比C#更多。尷尬之處就是無(wú)論做什么,都不能只會(huì)寫C++,還需要一堆專業(yè)知識(shí)配合使用,語(yǔ)言層面和應(yīng)用層面,得分開(kāi)學(xué)。比如市面上C++的工作,大部分要和各種設(shè)備打交道。除了會(huì)寫代碼之外,還要懂電子電路,電氣電磁,儀器儀表之類的知識(shí)。我大學(xué)的同學(xué)們,學(xué)生時(shí)代大部分都傾向于C++,學(xué)霸們專注ogre,次優(yōu)生擅長(zhǎng)opencv,學(xué)渣們也多少會(huì)點(diǎn)MFC和QT,結(jié)果一找工作,無(wú)論學(xué)霸還是學(xué)渣,全都跪了。要么是變壓器廠的設(shè)備開(kāi)發(fā)崗位,要么是蓄電池廠的技術(shù)研發(fā)部門,甚至還有造直升機(jī)的軍工企業(yè),全都要求懂設(shè)備。難得有個(gè)金蝶軟件公司,招聘財(cái)務(wù)軟件開(kāi)發(fā)的工作,不要求懂設(shè)備,但卻要求數(shù)學(xué)能力,需要會(huì)微積分。十幾號(hào)同學(xué)排著隊(duì)去了,結(jié)果人家當(dāng)下招了兩個(gè),幾天之后又辭退了一個(gè),最后只留了一個(gè)。剩下的同學(xué)幾乎全都改行了,有的干了銷售,有的開(kāi)了飯館。。。本人沒(méi)走這個(gè)路子,再多的也就不敢亂說(shuō)了。
我個(gè)人建議,
想長(zhǎng)期在互聯(lián)網(wǎng)行業(yè)混下去,且沒(méi)有中途跳船的可能,選Java,前期重點(diǎn)放在MVC模式的理解和數(shù)據(jù)庫(kù)增刪查改,中期重點(diǎn)放在服務(wù)器負(fù)載均衡與CND分流加速,后期側(cè)重?cái)?shù)據(jù)庫(kù)優(yōu)化。
想創(chuàng)造更多的可能性,選C#,重點(diǎn)放在.NetCore(跨平臺(tái)后端開(kāi)發(fā))和Unity3D(VR,AR,游戲開(kāi)發(fā)),并根據(jù)自身行業(yè),選擇關(guān)注Azure(云計(jì)算),WPF(桌面軟件開(kāi)發(fā)),Blazor(Web前端框架),ML.Net(人工智能框架),Focas(工業(yè)機(jī)器人編程),MasterCAM(數(shù)控機(jī)床控制),Xamarin(安卓與IOS跨平臺(tái)開(kāi)發(fā))等技術(shù)的發(fā)展情況與細(xì)節(jié)。
如果你是學(xué)霸,有電氣,機(jī)電等專業(yè)的知識(shí)背景,并有活到老,學(xué)到老的決心,學(xué)C++。
至于Python,最好的出路是搞培訓(xùn),也可以去做一些運(yùn)維,測(cè)試之類的打雜工作。當(dāng)程序員的話,在一線城市是沒(méi)什么希望了,下鄉(xiāng)試試吧。運(yùn)氣好的話,遇到個(gè)煤老板,用Django忽悠忽悠,混個(gè)技術(shù)主管也是可能的。至于Flask,就相當(dāng)于Java的HttpClient或者h(yuǎn)ttp://Asp.Net的一般處理程序,除了搞培訓(xùn),實(shí)在是百無(wú)一用。
喜歡筆者文章并且想學(xué)習(xí)c/c++編程的小伙伴可以關(guān)注筆者微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地,也可以加Q群,648778840一起來(lái)交流哦,群內(nèi)有很多學(xué)習(xí)資料可免費(fèi)領(lǐng)取的!對(duì)于編程的初學(xué)者來(lái)說(shuō)會(huì)特別有用的!另外筆者也會(huì)在Q群里面進(jìn)行視頻教學(xué),大家有興趣的可以來(lái)哦!
總結(jié)
以上是生活随笔為你收集整理的c语言javapython哪个好-C#、C++、Java、Python 选择哪个好?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 即点即用的office程序_10个超实用
- 下一篇: channelread0会被调用两次_值