節日沒事,就想聊聊微軟的NET。前端
截止目前,微軟的市值達到1.85萬億美圓,按說,這樣一個宙斯級的巨無霸應該過的很是舒坦,python
可是,和微軟市值成鮮明的反差,咱們從.NET的發展感受出微軟的焦慮。這種焦慮來源於微軟在多個垂直領域裏的強烈競爭。特別是在移動領域。linux
所謂:孩子靜悄悄,一定在做妖。當過媽媽的都知道,若是媽媽發現小孩子一直靜悄悄,那可不是好事,由於那意味着孩子確定又在「幹壞事」了。android
人與人國與國都是這樣,越是強調什麼就表示越不是什麼。當你越是強調你和某人是好朋友,就表示你和某人已經有了裂痕。就像當中國越是強調「中美同向而行」時,就越表示當前中美不是同向而行。ios
一樣的,用在.NET身上,咱們能看的出,微軟天天都在呼喊:來吧,來用我把,我很是好。編程
我天天升級,我從.NET升級到1.0,升級到2.0,升級到3.0,升級到4.0。。。一直升級一直更新一直擴展新功能,並且還開源。windows
我支持Windows,支持Linux,支持Mac,支持Android,支持各類設備。你要開發任何設備,我NET都支持,來吧,來用我吧。後端
可是,雖然這樣,這彷佛仍打不動開發者的「芳心」。瀏覽器
幾十年來,微軟經過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競爭中,並無十足的優點。
在PC時代,Windows一統天下,全部電腦製造商都要看Windows眼色行事,可是到了手機時代,風向變了,Android開源了,這使得手機制造商能夠從底層修改源代碼來爲我所用。
就算是谷歌都無十足的把握來掌控整個Android系統。
若是作個比喻,這猶如中國歷史上的「春秋戰國時代,周天子名義上是天子,可是其實地方諸侯纔是真正的握有實權的霸主」。
而目前全球手機制造商基本上就五家:三星,蘋果,華爲,小米和Oppo(Vivo屬於Oppo體系)。這5家猶如「戰國五雄」,每一個人都有本身的地盤。
由於手機和PC最大的不一樣是:他是私人的,並且是其它設備的中心。
想象一下:你除了用本身的手機玩遊戲,購物辦公等通用的操做,還有更重要的IoT。
你能夠用手機控制電視,洗衣機,空調,電冰箱等。在這個萬物互聯的時代,手機是核心。
也正是如此,這五家巨頭都在打造本身的生態系統。
以小米爲例,你要用小米手機嗎?你買了小米手機,那你能夠用小米電視,小米洗衣機,小米路由器,小米空調。。。。
因此,手機制造商決定開發人員的要求。
無論是小米,華爲,Oppo仍是三星,清一色的,後端核心都是Java(外加部分C/C++,特別是華爲多用C++)。前端能夠用多種語言,包括JS。
而就算是華爲推出的鴻蒙系統,也主要以Java+C++爲主。 這讓微軟的.NET有力無處使。
大數據、人工智能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在新興領域受到考驗。
車載操做系統將是手機以後另一個須要關注的特色。 在國內,華爲發佈打造具有肯定性低時延能力的實時車控操做系統,中興也發佈了車載系統,還有百度的阿波羅Apollo,蘋果推出了CarPlay車載系統,
谷歌推出了Android Automotive,以及三星、微軟等都推出汽車操做系統。可是最終可能只有三家勝出:
1.百度的Apollo 2.蘋果的CarPlay 以及谷歌的 Android Automotive。
車載操做系統進一步延伸就是無人駕駛。這對操做安全性要求極高,另外還要打通汽車製造的上下游產業,沒幾家公司能玩得起。
蘋果是本身的生態圈,谷歌有Android做爲加持,而百度Apollo不是最好的,可是百度的優點是中國有全球最大的汽車消費國,能夠提供海量數據。
由於無人駕駛,須要太多傳感器、視覺技術知識,須要大量數據積累,這是百度的優點。
而在開發方面,Apollo使用的是Java與C++。
除了上面說的,據國外報道,目前遊戲行業,最賺錢的遊戲公司是騰訊。其次是索尼和蘋果,微軟排在第四。
微軟瀏覽器Internet Explore已通過時,Edge也已經採用Chrome內核。雖然瀏覽器不賺錢,可是倒是一個企業實力的標誌。
咱們常說:一流的企業賣標準,二流的企業賣品牌,三流的企業賣產品,四流的企業賣苦力;
微軟失去對瀏覽器的控制權,這會讓不少行業標準再也不由微軟決定。例如WebAssembly怎麼執行依據不是微軟說的算,因此他推出了
ASP.NET Core Blazor儘量掌握主動權。 可是從本質上說,如今的微軟Edge瀏覽器和咱們如今用的QQ瀏覽器,360瀏覽器已是同等水平。
上面說了爲了面臨的競爭者,可是微軟在傳統的Windows+Office具備絕對優點外,
特別是在雲服務和Office365也具備絕對的主導權,份額也在不停的增長。
可是,儘管如此,這不足以支持微軟帝國所有的業務,畢竟,雲租用亞馬遜雲纔是老大,而Office365也並非不可替代。
因爲在移動互聯網面臨的調整,這或許纔是微軟焦慮的緣由,
這體如今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翻譯成中文叫依賴注入,
有問題就進行服務註冊Service Add,在加上匿名委託等。 相信很多初學者,看到這些名詞估計就會嚇的後退。
(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倒是成功的,真是有心栽花花不開,無意插柳柳成蔭,