節日沒事,就想聊聊微軟的NET。
1.孩子靜悄悄,必定在作妖
截止目前,微軟的市值達到1.85萬億美元,按說,這樣一個宙斯級的巨無霸應該過的非常舒坦,
但是,和微軟市值成鮮明的反差,我們從.NET的發展感覺出微軟的焦慮。這種焦慮來源於微軟在多個垂直領域裡的強烈競爭。特別是在移動領域。
所謂:孩子靜悄悄,必定在作妖。當過媽媽的都知道,如果媽媽發現小孩子一直靜悄悄,那可不是好事,因為那意味著孩子肯定又在“幹壞事”了。
人與人國與國都是這樣,越是強調什麼就表示越不是什麼。當你越是強調你和某人是好朋友,就表示你和某人已經有了裂痕。就像當中國越是強調“中美同向而行”時,就越表示當前中美不是同向而行。
同樣的,用在.NET身上,我們能看的出,微軟每天都在呼喊:來吧,來用我把,我非常好。
我每天升級,我從.NET升級到1.0,升級到2.0,升級到3.0,升級到4.0。。。一直升級一直更新一直擴充套件新功能,而且還開源。
我支援Windows,支援Linux,支援Mac,支援Android,支援各種裝置。你要開發任何裝置,我NET都支援,來吧,來用我吧。
但是,雖然這樣,這似乎仍打不動開發者的“芳心”。
2.兩大巨頭都建立了自己的護城河
幾十年來,微軟通過Windows一直壟斷了桌面電腦作業系統,但是我們不得不承認,我們現在花在移動端上的時間越來越多,
微軟錯失移動網際網路成為了不可彌補之遺憾,而兩大巨頭----谷歌和蘋果都已經建立了自己的護城河。
2.1谷歌的Android與Kotlin
谷歌的Android主要採用Java開發,十多年來,谷歌逐步完善了Java在Android上開發的霸主地位,其指標性的標誌是類庫逐漸完善(見下圖)。
這種生態完全可以媲美微軟.NET類庫在Windows上的開發作用。
再加上與Androi Studio的整合以及Google Mobile Service的繫結。
谷歌推出了一整套完美的解決方案。在這種情況下.NET要從谷歌虎口搶食,勢必難度極大。
2.2 Kotin(還有Go語言)
你微軟不是開源了.NET了嗎?那谷歌也製作了Kotin語言,並提供強大的類庫支援。
你微軟NET開源,我Kotin也開源。
你微軟NET支援泛型,我Kotin也支援泛型
你微軟NET支援多平臺,我Kotin也支援多平臺(android/windows/mac/linux都支援)。
你微軟的Typescript可以轉為Javascript,我Kotin也支援Kotin轉為Javascript。。
從很多方面比較,Kotin的第一感覺就是阻擊NET的勢力擴張。
就像春晚,我可以不看但是你不能沒有。同樣,Kotin可以不好用但是絕不能沒有。
夢想重要有的,萬一Kotin火了呢?
2.3蘋果的Object-C與Switf
和谷歌類似,蘋果自己建立了一套基於Object-C的體系結構,
在這個封閉圈裡,利用Object-C語言與XCode Studio開發環境,蘋果自己打通了蘋果手機,蘋果電腦,蘋果手錶,蘋果電視等的生態圈。
換句話說,在這個自己的生態圈裡,蘋果自己玩,大門一關,不讓別人進來。
2.4 Swift語言
Swift 是蘋果推出的程式語言,專門針對 OS X 和 iOS 的應用開發。Swift 在各個方面優於 Objective-C,也不會有那麼多複雜的符號和表示式。同時,Swift 更加快速、便利、高效、安全。
Swift 對於初學者來說也很友好。它是第一個既滿足工業標準又像指令碼語言一樣充滿表現力和趣味的程式語言。
總之,Swift也和NET類似:
Swift也是開源的,是跨平臺的(windows/android/ios都可用),也支援各種現代程式設計(泛型、非同步、網路程式設計等),
另外,養子不如親生,作為蘋果的親兒子,毫無疑問,蘋果以後還會繼續擴充Swift的功能,充實其類庫。
從上面可以看到,作為開源,跨平臺的NET和Kotin,Swift競爭中,並沒有十足的優勢。
3.五大手機制造商的勢力崛起
在PC時代,Windows一統天下,所有電腦製造商都要看Windows眼色行事,但是到了手機時代,風向變了,Android開源了,這使得手機制造商可以從底層修改原始碼來為我所用。
就算是谷歌都無十足的把握來掌控整個Android系統。
如果做個比喻,這猶如中國歷史上的“春秋戰國時代,周天子名義上是天子,但是其實地方諸侯才是真正的握有實權的霸主”。
而目前全球手機制造商基本上就五家:三星,蘋果,華為,小米和Oppo(Vivo屬於Oppo體系)。這5家猶如“戰國五雄”,每個人都有自己的地盤。
因為手機和PC最大的不同是:他是私人的,而且是其它裝置的中心。
想象一下:你除了用自己的手機玩遊戲,購物辦公等通用的操作,還有更重要的IoT。
你可以用手機控制電視,洗衣機,空調,電冰箱等。在這個萬物互聯的時代,手機是核心。
也正是如此,這五家巨頭都在打造自己的生態系統。
以小米為例,你要用小米手機嗎?你買了小米手機,那你可以用小米電視,小米洗衣機,小米路由器,小米空調。。。。
所以,手機制造商決定開發人員的要求。
不管是小米,華為,Oppo還是三星,清一色的,後端核心都是Java(外加部分C/C++,特別是華為多用C++)。前端可以用多種語言,包括JS。
而就算是華為推出的鴻蒙系統,也主要以Java+C++為主。 這讓微軟的.NET有力無處使。
4.機器學習領域,Python異軍突起
大資料、人工智慧AI、機器學習ML等領域,近幾年成為熱門行業,在這裡,Python異軍突起。微軟雖然推出了Machine Learning(NET.ML),但是毫無疑問
Python才是主流。特別是AI的領軍人物谷歌的tensorflow和百度的paddlepaddle都使用Python作為教程。
用過Python的人都知道,Python最大特點:簡單,強大。
大資料最大的特點就是2個:(1).資料量大 (2).對數學要求高
而Python通過第三方庫,例如python numpy庫,做了大量擴充套件,對於 實數、複數、矩陣、微積分、統計函式、複變函式等都提供了大量庫。
在這裡,使用壓倒一切。你不用給我說類,說繼承,說封裝。那不是工科所關注的,他們關注的是結果。
例如,我給你一個數學公式,f(x)=a^2+bx+c 你給我畫出他的曲線圖來。
如果是.NETer,怎麼辦?你要讓我用System.Drawing類,先自己定義Point類,設定顏色SetColor(),再劃線Drawing(),對了,用完了物件要Dispose()?工科生要吐血了。
這種複雜的工作,在Python裡,例如使用plotly作為工科數學計算,幾行程式碼就可以搞定。
換句話說,NET在新興領域受到考驗。
5.自動駕駛領域也與微軟/NET無緣
車載作業系統將是手機之後另外一個需要關注的特點。 在國內,華為釋出打造具備確定性低時延能力的實時車控作業系統,中興也釋出了車載系統,還有百度的阿波羅Apollo,蘋果推出了CarPlay車載系統,
谷歌推出了Android Automotive,以及三星、微軟等都推出汽車作業系統。但是最終可能只有三家勝出:
1.百度的Apollo 2.蘋果的CarPlay 以及谷歌的 Android Automotive。
車載作業系統進一步延伸就是無人駕駛。這對操作安全性要求極高,另外還要打通汽車製造的上下游產業,沒幾家公司能玩得起。
蘋果是自己的生態圈,谷歌有Android作為加持,而百度Apollo不是最好的,但是百度的優勢是中國有全球最大的汽車消費國,可以提供海量資料。
因為無人駕駛,需要太多感測器、視覺技術知識,需要大量資料積累,這是百度的優勢。
而在開發方面,Apollo使用的是Java與C++。
6.遊戲行業最賺錢的是騰訊
除了上面說的,據國外報導,目前遊戲行業,最賺錢的遊戲公司是騰訊。其次是索尼和蘋果,微軟排在第四。
7.微軟失去對瀏覽器的控制權
微軟瀏覽器Internet Explore已經過時,Edge也已經採用Chrome核心。雖然瀏覽器不賺錢,但是卻是一個企業實力的標誌。
我們常說:一流的企業賣標準,二流的企業賣品牌,三流的企業賣產品,四流的企業賣苦力;
微軟失去對瀏覽器的控制權,這會讓很多行業標準不再由微軟決定。例如WebAssembly怎麼執行依據不是微軟說的算,所以他推出了
ASP.NET Core Blazor儘可能掌握主動權。 但是從本質上說,現在的微軟Edge瀏覽器和我們現在用的QQ瀏覽器,360瀏覽器已經是同等水平。
8.微軟在雲服務和辦公Office365上具有優勢
上面說了為了面臨的競爭者,但是微軟在傳統的Windows+Office具有絕對優勢外,
特別是在雲服務和Office365也具有絕對的主導權,份額也在不停的增加。
但是,儘管如此,這不足以支援微軟帝國全部的業務,畢竟,雲租用亞馬遜雲才是老大,而Office365也並不是不可替代。
由於在移動網際網路面臨的調整,這或許才是微軟焦慮的原因,
這體現在NET上,就是不停的擴張NET的功能,希望吸引更多開發者。
*最後,微軟仍然是巨無霸,就市值來說,微軟市值基本上等於“阿里+騰訊+百度”三者和。
附:我對NET的一些看法
上面介紹了,或許微軟的焦慮,導致微軟不斷擴充NET的功能。但是,不斷膨脹的NET又讓人望而卻步。這就產生了矛盾:NET越來越強大但討論的人越來越少。
我本身是非常喜歡NET的,但是事實上,就算是NET大本營的部落格園,關於NET Core的討論也是越來越少(除了一些重量級的人員),一枝獨秀不是春,百花齊放春滿園
那麼問題出現在哪裡?個人感覺有一下幾點:
(1)用過Java的人都知道,Java分為三個版本 Java SE(標準版),Java EE(企業版)和Java ME(微型版),Java的定位非常簡單:初學者學習SE,入門後就會寫Form程式,
進階後使用EE編寫JSP Servlet 製作網站。最後ME開發嵌入式開發,比較清晰。
但是NET的就很難說清楚了,例如 NET Framework, .NET Compact, ASP.NET, .NET Core, ASP.NET Core, NET5.0 都有啥區別,或者說目的是什麼?
相信很多外行人不清楚,就算內行的有時候都有點迷惑。
(2)我一直認為技術是分級的,當年VB能戰勝C++就算因為簡單。而現在NET Core感覺走進了死衚衕。 當年WebForm雖然受到很多人恥笑,特別是ViewState臃腫,但是
WebForm提出的Page_Init, Page_Load, Button_Click的事件驅動模型程式設計,使用起來確實很簡單。在Java裡也有類似的 init(), service() destroy()生命週期模型,使用起來很簡單。
但是 Asp.Net Core使用IOC和DI,服務註冊等,IOC全稱是Inversion of Control翻譯成中文叫控制反轉(感覺很拗口)進行週期控制,DI 全稱是DependencyInjection翻譯成中文叫依賴注入,
還有Middleware、ServiceProvider相信不少初學者,看到這些名詞估計就會嚇的後退。(我們可以不求甚解的寫出Hello World,但是不可能一輩子都只寫Hello World,專案越複雜就會要求NET Coree門檻越高)。
(3)更新技術太快。例如Java經典的SDK7 2011年釋出,到現在還在用。也許是焦慮的原因,NET 基本上每過幾個月就釋出一個新版本。而且,整體感覺微軟的技術越來越複雜。
例如前端時間要做一個Office365開發,下載了一個SDK,結果發現,整個檔案非常大,非常複雜。層層呼叫,層層配置。
每次.NET Core釋出,最大的感覺是除了Core新增了不少功能,就是速度提升。Net Core2.0比Core1.0快。 Core3.0比Core2.0快,Core4.0比Core3.0快,Core5.0比Core4.0快。
換句話說,每一次釋出都打臉上一個版本,這讓老使用者情何以堪。NET最早釋出與2000年左右,但是他的後輩們(例如Rust,Python,NodeJS)等都已經開始崛起。
NET雖然有點坎坷,但是微軟的TypeScript卻是成功的,真是有心栽花花不開,無心插柳柳成蔭,