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