首頁>Club>

個人覺得C#是一門十分優秀的語言,微軟也是一個很粗的大腿,並且將C#深耕多年。為什麼它就是不太流行,甚至不如後來的挑戰者golang以及Rust?

43

微軟

回覆列表
  • 1 # EmacserVimer

    C#為什麼不流行?

    說到底這個鍋該鮑爾默來背,他差點都把比爾蓋茨一手打下的微軟江山給敗光了,更別說一個C#了。C#能做的JAVA基本都能做,JAVA不能做的有其他語言比C#做得更好,然後你的開源和跨平臺還姍姍來遲,C#拿什麼跟JAVA鬥?

    行業有個笑話,.NET最厲害的地方是跨平臺,但是.NET最大的笑話也是跨平臺。除了C++之外,能在.NET上執行的程式語言,是唯一一個能做到在所有平臺上都能執行的程式語言,能把桌面MacOS、Linux、Windows,移動Android、iOS、WP(假設這玩意兒還在)全部跨完。不過遺憾的是,理想與現實總是殘酷的,理論上是可以跨平臺的,不過遺憾的是這麼多年了微軟一直都沒跨出去。

    這些年C#過得其實還挺憋屈的,前面的C/C++、JAVA交替做老大,兩個老前輩C、C++時而來個青春走一回、容光煥發的,PHP、Python也是時常爆發,Go語言這個年輕人也是越來越強大,都實現自舉了,可是C#呢打不過老年人,也打不過年輕人,其實還蠻慘的。

    C#也不是一無是處

    Windows應用程式,現在很多都是C#開發的,MSDN、SQL Server Management Studio、Bing的很多服務,也都是用C#開發的,現在office 365、Windows、Visual Studio也用了一些C#開發,C#現在還是Unity開發遊戲的主要指令碼語言。

    微軟自己的產品用C#自然是無可厚非,還有很多非微軟網站也是用C#開發的。程式設計師問答網站StackOverflow、國內著名的技術部落格網站部落格園、國內程式設計師社群CSDN、開源中國,都是用C#開發的。以前噹噹、京東的核心技術棧也都是C#,不過後來才轉向了JAVA技術棧。

    C#其實能做的事情還蠻多的,Windows桌面應用開發,Web應用,也可以用來做移動開發,不過做得都比較差強人意。做桌面開發弄不過C++、現在甚至連Electron都弄不過了,除了一些B端應用,大家基本都不會選C#,Web應用方面弄不過JAVA和PHP,移動方面弄不過JAVA和swift,然後大企業也都有自己的技術棧,可是這些技術棧都跟C#無關。

    C#、.NET,以及ASP.NET的關係,C#錯過第一波紅利

    .NET是一個平臺,本身實現的方式當然也是各種各樣的庫,理論上各種各樣的程式語言都可以編譯成其IL,然後在這個平臺上執行,當然這個平臺上面的程式語言很多,C#毫無疑問是這裡面最重要的一個。ASP.NET是.NET主要用來做web開發的技術方案,當然這裡面主要也是C#作為核心。

    JAVA在96年面世,C#則是在2000年面世,JAVA的先發優勢並沒有那麼明顯,可是JAVA開源、免費的特點,讓JAVA迅速攻城拔寨。C#有個好父親、還是含著金鑰匙長大的,C#的創造者安德斯·海爾斯伯格是Turbo Pascal編譯器、Delphi的作者,在設計C#之前,已經是計算機工業界最偉大的科學家之一,後來又設計了TypeScript,打早了整個.NET體系。

    C#語言設計本身在很多方面都是要超過JAVA的,可是吧微軟早期的策略一直比較保守,不願意跨平臺,也不願意開源,儘管安德斯·海爾斯伯格一直在努力推動這件事情,保守的鮑爾默領導下的微軟錯過了C#最好的幾年,可是在這期間JAVA等程式語言不斷攻城拔寨,C#終於還是輸掉了未來。

    C#輸掉了移動網際網路,大資料、雲端計算、AI也全都錯過了

    程式語言總得要抓住幾個機會才能發展得更好,C#除了抓住了Windows,其餘全都沒有抓住,也許這就是命,當然跟微軟自己作也有很大的關係。

    你看Android爆發的時候選擇了開源的JAVA,儘管現在Google因為這事兒天天被Oracle噁心;iOS自然不用說,人家先是objective-C、接著是swift,這個微軟沒辦法;到了大資料時代,JAVA和Python又大發威風;雲端計算來了吧,你看Go語言又逐漸爆發了,越來越多的移動網際網路企業比如位元組跳動、B站也都轉向了Go語言,就連Google、百度、騰訊也都在用Go語言;人工智慧時代,C/C++做底層,Python用來做上層應用和演算法。

    你看幾乎每一個重要的技術變革都跟C#無關。在大企業裡面微軟自己的核心技術棧都是C++,Google也是C/C++,Facebook是C和PHP,百度是C/PHP/Go,位元組跳動是Python/Go,阿里巴巴是JAVA,B站是Go語言。你同樣可以發現,這裡面沒有一家企業將C#作為核心技術棧。

    C#本來可以有個很好的發展的,可惜微軟自己作死,浪費了C#發展最好的幾年,等到納德拉上臺之後,試圖通過開源來發展C#的時候,已經來不及了。未來看微軟的決心有多大,比如微軟是否願意將全功能的Visual Studio移植到MacOS平臺,假設微軟帶著Visual Studio威力還是有點大的,不過這也可能反過來威脅到Windows的地位。

  • 2 # 樂百川

    首先有一個誤解需要澄清一下,那就是優秀和流行/成功並沒有必然的因果聯絡,只有一個大概率的相關關係。也就是說你學習好進了清華,不一定出來就一定比別人強,但是這是一個大概率事件。

    程式語言也是這樣的。一個語言的流行,需要得天時地利人和眾多條件缺一不可才可以流行。而比較不幸的是,C井這門語言,天時地利人和三個條件都曾經有過,後來又都失去了 。

    天時

    20多年以前,微軟還是一個雄心勃勃的將軍。這位將軍有一個巨集偉的想法,那就是.NET計劃。一直以來Windows都受限於Win32 API,微軟有很多想法都不得不因為Win32的相容性而讓步。

    因此微軟就有了這麼個大膽的想法,用.NET平臺替代Windows平臺,將來所有Windows程式甚至Windows本身,都構建在.NET平臺上。.NET平臺是一個通用的平臺,執行多種語言執行在.NET之上。當然,雖然.NET上可以執行C++、VB、C#等語言,但是C#是專門為.NET平臺設計的,可以說是親兒子級別的,自然也受到了關注。

    利用.NET平臺,開發者可以用自己喜歡的語言開發程式,而程式可以在.NET平臺上執行,這就是所謂的“一次編譯,處處執行”,割裂的Windows平臺也真正實現了大一統,嗚呼哀哉!

    當初Java也正是如日中天的時候,微軟的.NET和C#可以說是Java的最大競爭對手。Java的爸爸Sun公司當時也是實力不亞於微軟的大公司。這兩家可以說是棋逢對手,Java和C#的戰爭誰勝誰負尤未可知。

    然而遺憾的是,微軟的大一統戰略實在是步子跨得太大扯到蛋了。所以最後設想中的.NET平臺沒有出現,它變成了.NET Framework,一個普通的執行時,也就是現在很多程式都需要的那個東東。C#也因此變成了一門語法比較好用的、只能在Windows平臺上使用的語言,僅此而已。

    當初C#出現僅落後Java數年,而且吸取了Java的經驗,很多地方做的比Java更好,可以說是佔盡天機。可惜,微軟當時的策略還是做霸主地位,不允許C#在其他作業系統上執行。所以在和Java的競爭中,丟失了天機。

    地利

    程式語言是工具,而工具確實有優劣之分。一匹千里馬,在專門維護的馬場賽道上,和一個剛下完雨的坑坑窪窪的鄉間小路上,跑的成績肯定是大有差別。好的程式語言,確實可以讓開發者使用的更加順手。此乃地利也。

    我查找了Java的維基和C#的官方文件,整理出了下面的表格,為大家簡單列舉java和C#的歷史版本以及主要一些特性。

    然後是C#的歷史特性概覽。

    大家也可以看到,雖然Java比C#早了好幾年,但是C#在很多關鍵的語言特性上反而比Java領先好幾年。lambda表示式、日期時間類庫、async/await非同步程式設計、字串差值、模式匹配等特性都領先Java。

    而Java同時IO操作、日期類庫等方面,用起來可謂是極度難受。當時C#的語言好評度也遠超Java。更不要說還有LINQ這種配合lambda表示式的大殺器。直到Java 8的時候,Java才有了類似的特性。

    而原來盛極一時的Sun公司,因為各種原因衰落,最後被賣給了Oracle。而Oracle也許是看到了chrome版本號彪的飛起,也許是因為Java確實需要變革。總之,Oracle在Java 9的時候開始修改更新策略,每半年釋出一個新版本。

    這樣一來,每個版本的新增功能會變少,但是Java整體的更新速度卻是加快的。就在這樣的更新頻率下,Java語言得到了越來越多的增強。反觀C#這邊,後面的更新一直不溫不火。

    人和

    這也是最重要的一個因素了。Java一直作為一門開源免費跨平臺的語言,同時還有Eclipse等免費的IDE。因此在長期發展之後,擁有了非常豐富的生態。

    反觀C#這邊情況就非常糟糕了。C#雖然和Java一樣免費供大家使用,但是微軟的名聲在開源領域一直都不太好,而且C#是閉源,開發C#的Visual Studio長期以來都是收費的,再加上C#只在Windows系統可以用。所有這一切都導致了C#的生態遠遠落後於Java。

    到目前為止,Java作為一門20多年曆史的語言,擁有了成熟的生態系統(Spring全家桶,Vertx家族,Scala、Kotlin、Groovy等JVM系語言、Intellij IDEA)。而C#這邊情況就比較慘淡了,雖然也孕育出了一些開源框架,但是無論是功能性還是社群參與度完全和Java這邊沒法比。

    程式語言的生態系統可以說是至關重要的。C#生態的缺失最終輻射到了就業環境上。以國內為例,很多.NET生態棧的公司最後都切換到了Java。無他,就是看到了Java眾多的開源解決方案。

    C#前景

    當然大家看下來的話,可能會感覺C#天時地利人和都不在,前景不明,很快就要涼了吧。有一說一,假如微軟一直繼續這樣下去的話,C#的前途確實很不明朗。但是非常慶幸的是,微軟開始發生了改變,新任CEO納德拉就任以後,微軟對開源生態的態度發生了巨大的變化。

    C#和.NET平臺也由此獲得了新生。微軟宣佈了新的.NET Core,作為下一代的.NET平臺,而.NET Core和其他開源產品一樣,也是跨平臺的。這樣一來,C#終於可以和曾經的Java一樣,在linux等平臺上運行了。

    .NET Core的另一個重要特點就是他是微軟完全重寫的新平臺,微軟在重新實現的過程中順帶還實現了模組化這個功能。而Java的模組化直到Java 9的時候才加入。.NET Core不斷髮展,在2.1版本中還增加了Span等記憶體連續的新型別,讓.NET平臺的執行速度大幅提高。

    到現在位置,C#和.NET平臺雖然可能永遠無法達到Java這20多年的高度,但是相比與原來真的有了快速的發展,前景可期。.NET Core 3.1之後,下一個大版本叫.NET 5,會融合現有的.NET Framework和.NET Core,統一NET平臺。

    .NET將來會有越來越多的新東西加入,前景也會也來越好。如果有在.NET平臺耕耘的朋友,可以放心,.NET會越來越好。

  • 3 # by愛動漫

    它不是不流行,目前c#已經是排行前10內了,一款好的產品是很多語言和設計的結晶,每門語言的應用點不一樣而已。

    c#在開發windows客戶端應該沒有其他的語言能比吧,go不錯,但是他不適合開發GUI應用,而且產生的體積也很大,現在u3d也可以使用c#來開發遊戲客戶端,總得來說,還算不錯,至於跨平臺我覺得沒啥好說的,首先c#本來就是微軟的,而且windows使用者不在少數,如果你很在乎開發者人數我覺得沒太大必要,這看你是開發後端還是開發客戶端了。

    聰明的人不會去比較所謂語言的好與壞,因為大佬大多都是掌握很多種語言

    另外如果你是一個學習者,你想學習一門語言其實不用聽網上的那些道聽途說,說實話大多數人否定某一語言的時候,可能他們自己都沒有使用過,或者只是做簡單的接觸就來否定,因為大多數人喜歡從某個地方看的文章後就假裝自己很懂來誤導其他人,要學首先你得自己看看不同需要擅長的領域範圍,然後再去抉擇。

  • 4 # shawn25

    首先,是誰告訴你go和Rust是挑戰C#的?搞笑不搞笑,好吧,看在你是初學者,很容易道聽途說,相信各種垃圾文章的話,就不噴你了。

    C#不流行的原因很簡單,他是微軟開發的。

    C#是一個微軟開發的運行於Windows平臺的程式語言,這一特性就導致了c#根本不可能流行起來,商業背景太強。

    C#的微軟背景導致下面幾個惡果:

    一 頂尖大學教授C#的非常少

    因為計算機領域的教授在學生授課的時候,一般都極力避免過於商業化,這是教授的職業道德,隨意幾乎沒有頂尖的計算機專家願意教授C#

    況且,頂尖大學的計算機專業,大多都使用自己的作業系統,比如計算機領域大名鼎鼎的加州理工的伯克利分校就使用的是BSD系統,學校怎麼可能因為一個程式設計軟體去更換系統?

    這樣就導致了,使用c#的頂尖計算機人才非常少。

    二 使用C#的軟體公司少

    因為C#的微軟背景,很顯然和微軟有競爭關係的大軟體公司都不會去使用C#,即使和微軟沒有競爭關係的公司,出於戰略考慮,也絕對不會把公司的重心放在c#上,這樣就導致C#的就業機會要你其他語言少的多,就業機會少,自然用的人就更少了。

    有人說,java不也是商業公司的嗎?這主要是java從一開始就全力注重跨平臺開發,並且開源做的非常好,這才導致java能流行開,既是是這樣,現在業界大軟體公司也開始慢慢去java化,就是因為java的商業背景。

    三 C#得不到軟體社群的支援。

    近些年,軟體社群一直是整個軟體開發的中流砥柱。軟體社群集合了全世界最頂尖的開發者們。

    java是在社群的支援下成長起來的,python的成功也完全因為社群的青睞。

    一個程式語言,是在社群大佬們的支援下,才造出了一個又一個的輪子供大家使用,這樣一個程式設計軟體才稱得上是好用,高效,語言本身的特性到不是那麼重要了。

    但是,C#這種一個商業公司開發,又不支援跨平臺,又不開源的程式語言,是很不受大佬們的待見的,所以願意無償為c#寫輪子的大佬非常少,這也從根本上導致了c#無法流行。

    綜上所術,這種單一平臺,封閉的程式語言,基本上是不可能流行起來的,同理蘋果的oc,swift也一樣流行不起來。

  • 5 # 快樂的老碼農

    借用一個網友的精闢總結:

    微軟的開發工具的原則就是保持難度,避免軟體工程師成為低檔貨。

    隨著計算機與軟體技術的不斷進步,程式設計也變得越來越便利,越來越普遍。然而當其它公司在不斷通過開放、開源來通過簡化軟體開發的時候,微軟卻閉門造車,創造出一個有一個越來越複雜的開發框架,從早期的COM、ActiveX、ALT、MFC,再到後來的.Net,可是恐怖的是,又搞出一些VB.Net、C#.Net、ASP.Net、 ADO.Net……這還不算什麼,更恐怖的是它又在此基礎上搞出WCF、 WPF、 WF等一堆么蛾子。讓軟體工程師天天學習你的框架,卻永遠跟不上你的節奏,放棄自然也就是遲早的事。

    再來說說這個不倫不類的C#,你的目的是想通過中間語言來實現和Java一樣的跨平臺,可是它的真的跨平臺了嗎?非也,它的跨平臺只是從WindowxXP跨到Win7或者Win10平臺而已,甚至還不如QT,更別說真正跨平臺的語言Java了。

    之所以使用C#的工程師越來越少,一個關鍵的原因就是它沒有給工程師的開發工作帶來便利,這並不是C#語言不夠優秀,而是它背後的主子——微軟的因素。

    而且我相信隨著Linux系統越來越普及,C#等微軟主導的語言的頹勢會更加明顯。

  • 6 # 使用者6248912049099

    說白了就是開源跟不開源的區別吧!早期要是早點開源,C#也不會被其他語言所佔領。語言這東西是國際上的一個標準,所有軟體都離不開開發語言。所以語言不公開開源的話,那估計很多國家會忌憚掐脖子。

  • 7 # 青春沒有愛

    從語言的角度說來 的確優秀 但定位錯誤 或者說其實沒有一個地方會用到 伺服器領域 Java C /C++ 早期沒有考慮跨平臺 有多少企業服務會架設在window上面 總之在伺服器領域沒市場 在桌面領域 除了做些行業應用沒人會用。原因也簡單 只要是虛擬機器解釋的語言。原始碼基本就是公開的 商業公司一千人幹一年的成果別人幾天反出來 桌面領域語言眾多 再說最火的手機開發。開玩笑了。做軟體十年了 我是真心想不到這語言哪些重量領域能用的 做點玩具還行

  • 8 # 思華年shn

    題主這個標題少了兩個字,我來幫你糾正一下哈,改為“c#這麼優秀的語言為什麼在國內不流行”

    因為在國外沒你說的現象。

  • 9 # 成長吧孩子

    dotnet core瞭解下,已釋出的dotnet 5 preview1再瞭解下,跨平臺早已不是問題,各中介軟體也再逐漸豐富,常用的都有了,財付通的核心支付體系dotnet core實現,用起來還是很香的,國內用的不多,國外用的應該不少,但是體量肯定比不上java.

  • 10 # 小石潭記2020

    開玩笑,用除非國內都不用電腦了,否則會越來越香,只是c#的香,是由內到外的。剛開始我沒體會到,不過現在已經聞到了一點點了,

  • 中秋節和大豐收的關聯?
  • 警校畢業生入警與社會入警待遇一樣嗎?