這個話題有點自黑的意思,我從 .NET 1.1 開始玩 .NET,到現在已經 11 年了,我是看著 .NET 成長起來,在中國壯大的,也見證了近幾年 .NET 被各種嫌棄,其實說到底還是中國的架構師太少,我是說真正懂行的架構師,一個資深的架構師是不會直接攻擊一門語言或者嫌棄一門語言的,而是會從作業系統、伺服器應用容器層面分析效能、實現成本以及有多少坑。
我其實和很多客戶、IT 經理、高級軟體工程師、架構師聊過,所以對事實有一定的了解。首先呢在中國技術圈氛圍就是很浮躁的,浮躁到什麼程度,還是中國人的老毛病,喜歡跟風、喜歡一窩蜂,人家用 Node.js,我們就用 Node.js;人家用 Docker,我們也用 Docker;人家用 CloudFoundry,我們也用 CloudFoundry,總之人家的東西比我們家先進,所以我們一定要跟上。拿 Docker 來說,其實很多傳統企業根本沒有用,也就是幾家互聯網大廠對它情有獨鍾;Node.js 我承認它效能好,但畢竟是弱語言程式設計,其實程式碼的維護成本並不低,而且你需要僱用很資深的 JavaScript 開發人員,薪水自然是水漲船高。其實很多所謂的架構師、IT 經理考慮的不是遷移成本、維運成本,而是怎麼找點事做,這樣才能體現出自己的價值,我總結為四個字「無中生有」。
.NET 中的 C# 語言(我的最愛)其實從 1.0 發展到 6.0,目前已經非常成熟了,特別是語言層面的非同步程式設計支援,已經部分超越了 Java,那為什麼還是沒有公司願意選它呢?從我的角度看,有幾方面的原因。
首先微軟的 IDE 實在是太好用了,好用到基本上找個應屆生,就算不懂程式設計,1-2 天內也能寫個主控台程式,當然是簡單的;但如果是 Eclipse,配環境也要好一會兒,但這意味著什麼知道嗎?門檻!人的門檻!越好用的東西聚集的人相對越 Low,當然並不是說用 .NET 的人爛,而是說平均而言,真正懂 .NET 的開發人員相對於懂 Java 的開發人員要少,因為人家的 IDE 用起來各種不舒服,還不如用 Notepad++ 和 Java.exe 做編譯。這就導致了 Java 的工程師很多時候必須知其然知其所以然,否則它沒法幹活,比如 jar 打包。但很多 .NET 的程式設計師估計連怎麼用命令列編譯程式都不會,這就是問題。
其次一些號稱懂 .NET 的架構師覺得 .NET 簡單,所以他們不願意給 .NET 開發高工資,這也間接導致了很多 .NET 開發人員開始轉向其他語言,其實這種模式就是個惡性循環。到最後的結果就是,大量潛在的優秀開發人員放棄 .NET,畢竟現在是向錢看的年代。.NET 從我的角度來看是非常適合做後端,這麼多年技術的積澱使得 .NET 得到了社群廣泛認可,其實在國外懂 .NET 還是很吃香的,根本不愁找不到工作,所以國內一些公司的邏輯我覺得很奇怪,甚至覺得神奇,反正我就是不招 .NET 工程師,我公司比較高大上,所以只有高大上的 Java、Node.js 才能配得上我司,我只能說,不作不死。
再者,.NET 可以抄的現成架構並不多,而真正懂 .NET 的資深架構師在中國基本屬於稀有物種,因為這些公司的所謂架構師水準有限,他們自己用 .NET 寫不出好的架構程式碼(我通常喜歡叫他們整合師,即不會寫程式碼或者寫不好程式碼的架構師),最終還是選 Java,因為 Java 有一大堆架構可以抄,而且很多是開源的,就算不會也至少能抄個 4-5 成吧。當然囉,從專案風險可控角度這是可以接受的,但其實資深架構師是可以解決這些問題的,在國外很多架構牛人基本都是自己寫框架的,這也就能解釋為什麼優秀且流行的框架基本上都是洋人寫的,比如 Java 的 Structs、Spring framework, .NET 的 Orchard、DNN、http://ASP.NET Boilerplate 等。
最後,微軟作為 .NET 親爹自然難辭其咎,自從納總上台後,更是拼命推行擁抱開源政策,擁抱了一堆非 .NET 系語言,儘管推出了跨平台 .NET 即 .NET Core,但在 .NET 市場佈局和推廣方面與過去並沒有什麼明顯不同,說白了就是表現對 .NET 份額出無所謂的態度。不過微軟一直是行業中比較傲嬌的公司,它覺得只要自己想推什麼肯定能成功,所以對市場份額從來表現的不太看重,他覺得根本不需要在意,遲早是微軟的。然並卵,微軟手機的失敗讓微軟感受到了自己能力的有限,最近貌似在調整策略,其實回過頭來看代價非常高,單收購諾基亞就花了 85 億,我只能讚歎微軟真土豪,有錢任性,呵呵。
我必須承認近 2 年 .NET 的中國市場份額在不斷下降,很大程度上與 .NET 的市場推廣策略有關,給行業內一種中低端程式語言的假象,在語言推廣初期,這種策略沒有什麼錯誤,便於用戶上手和接受,但是如今都 10 年了,重新樹立 .NET 高大上技術的形象非常必要。
有人可能要我屬於老王賣瓜自賣自誇了,我舉幾個真實的 .NET 案例你就懂了,滬牌拍牌系統後台是 .NET 寫的,併發至少幾千每秒,這個大家懂的;Stackoverflow 核心是 .NET 寫的,網站併發 3000 每秒,資料庫併發 8000 每秒;摩根史坦利交易客戶端以及協定是 .NET 寫的;NASDAQ 的交易系統是 .NET 寫的,後台跑的 SQL Server;騰訊有大量後台系統用 .NET 寫,騰訊甚至已經使用跨平台 .NET(Mono)很多年,部署於它的 TLinux 系統叢集中;攜程有大量系統用 .NET 寫成,日均動態 PV 是 3 千萬。
事實勝於雄辯,我就不多說了,你們懂的。