微軟舉全公司之力開發.NET Core,為什麼它還是不溫不火?


微軟舉全公司之力開發.NET Core,為什麼它還是不溫不火?

引言

微軟從.NET Core推出到現在,最新版已經是.NET3.1,可以說微軟傾注了一生的心血來發展.NET Core,但是很遺憾,市場反應平平,一直不溫不火,那麼到底是哪裡出了問題呢?

1.NET Framework歷史

我們先介紹一下.NET的歷史,大約2000年左右,互聯網席捲全球,為了幫助開發者開發web頁面(當然也包含exe程序,但是主要還是針對web開發),微軟推出了.NET Framework1.0。

這是一個具有劃時代的產品,因為它將過去使用VB開發exe的那種技術搬移到web上來了。用戶使用C+和VB.NET即可很容易開發Web站點。

但是,Web畢竟是Web,他和Windows的exe本質上畢竟是不同的,因此,在用.NET Framework開發Web過程中,微軟加入了ViewState技術。

什麼叫做ViewState呢?簡單的說,Web是無狀態的,例如用戶打開一個URL,發出一個請求,瀏覽器給出一個響應,這個過程就結束了。如果用戶再次發出一個請求,那麼你上一個動作所使用的數據服務器並不知曉。為了讓瀏覽器“記住”用戶上一個動作,微軟在.NET裡提出了ViewState解決方案,就是把頁面裡的用戶數據,加密後,存放在一個隱藏字段裡,這樣用戶下次提交數據時,服務器解析隱藏字段裡的內容,把用戶的數據給“翻譯”出來,如此對開發者而言,感覺瀏覽器“記住”了用戶上一個操作,為程序開發帶來了方便。

但是ViewState帶動了一個最大的問題是:性能損耗。當頁面過大時,ViewState非常大,這使得.NET飽受詬病。

在次之後,微軟推出了.NET2.0, .NET3.0,.NET4.0 ,雖然.NET版本一直升級,但是核心思想並沒有大的改變。


.NET MVC

由於.NET Framework一直口碑不好,並且,編程技術進入MVC時代,微軟推出了.NET MVC,MVC的編程思想是:M:是model, V:是View,C:Controller。也被稱作“模型-視圖-控制器”,用來替代傳統的WebForm事件驅動的變成思想。

這也是微軟為了解決.NET Framework的ViewState的問題提供的一套解決方案。

微軟舉全公司之力開發.NET Core,為什麼它還是不溫不火?

MVC構架圖

從本質上來說,.NET MVC是對.NET Framework的補充、擴展與優化。從2011年開始 ASP.NET MVC3的推出,接著推出了ASP.NET MVC4, ASP.NET MVC5...

微軟基本上保持每年發佈一個新版本的速度,更新速度之快,讓人感覺跟不上。


.NET Core的推出

不管是.NET Framework還是.NET MVC,都具有一個致命的缺點:它們都是運行在windows上的,而最近10年,互聯網已經發生了翻天覆地的變化:web 網站勢微,而app人氣沖天。

這就使得使用.NET開發Web的人員急劇減少,而對App的開發需求卻極具增加,而.NET當初又是為Web開發而生的,微軟面臨嚴峻考驗。

在這種情況下,.NET Core逆勢而生。.NET Core從一出生就喊出了跨平臺的口號(熟悉Java的同學可能微微一笑,跨平臺?Java幾十年前就開始做了)。

過去.NET Framework只能運行在Windows上,而現在.NET Core可以運行在Windows,Linux,Mac

微軟舉全公司之力開發.NET Core,為什麼它還是不溫不火?

.NET Core提供多平臺下載

也就是,現在你使用.NET可以開發Android App,也可以開發iOS App,也可以開發Windows Exe。

使用一套語言C#可以開發跨平臺的系統,完美!

但是,理性很豐滿,現實很骨幹。


.NET 初學者的迷惑

.NET 給初學者帶來最大的迷惑是:.NET Core和.NET Framework到底有什麼區別?開發程序到底是用C#語言還是用VB.net開發?WebForm和WebPage,MVC還用嗎? 這些都給初學者帶來了迷惑。

相比Java的清晰、明瞭,很多.NET初學者看.NET是一頭霧水。或許,微軟在一開始命名這個技術的時候並沒有命名好。當然,這個雖然有點迷惑,畢竟無傷大雅。

因為本文主要討論.NET Core不火的原因,這裡表達幾點看法。


計算機語言是分等級的

人,是分等級的,過去有“皇帝-百姓”之分,現在也有“總統-百姓”之分。人人平等只能存在與理想的世界裡,在現實中是很難實現的。

同樣,計算機語言也是分等級的,越是低級語言越接近內核,對開發要求越高。越是高級語言,也解決普通人使用,對開發要求就越低。

低級語言的代表是:c和c++, 高級語言的代表比較多例如php,asp,js等等。中層的語言是java, c#

計算機語言分級是為了各自解決各自擅長的領域。例如對於內核級別的Chrome瀏覽器,MySql數據庫系統本身的開發都使用了C++語言,而對於普通應用則可以使用高級語言。舉一個稍微具體例子, Android提供了WebView組件,WebView核心代碼使用C++編寫,但是我們的app調用WebView時,可以使用Java/JS/.NET調用他。

但是, .NET Core目前出現了一種趨勢,就是“通吃”一切,從低級、中級、高級全部一網打盡。在Java裡,數據庫使用MySql,Web使用Apache服務器,我只要專注我的系統開發即可,但是在.NET裡,微軟卻讓推薦你自己開發Web服務器(當然他也推出了IIS)。這使得開發者除了要了解自己的業務邏輯外,還需要了解.NET Core 內核。這種無形的壓力,嚇跑了一批開發者。


.NET Core在移動開發方面是落後的

造成.NET Core不火的另外原因是在移動開發方面.NET Core還無法對抗Java。有人說,在Windows Office領域(主要指word,excel和powerpoint)你很難戰勝微軟的 Office,雖然有金山WPS,有永中Office,有OpenOffice來挑戰微軟的Office,但是微軟Office的地位仍然無人可以撼動,這一方面是因為Office確實非常優秀,但是另外一方面,微軟的Office畢竟是微軟的,當一個功能在Office上無法實現時,微軟可以通過修改Windows內核來配合自己的Office。但是其他Office就不可能做到要求微軟修改windows內核的功能。

同樣的,以Android為例,Android系統除了底層是C++代碼,大部分功能都是用Java實現的,因此,開發App使用Java語言,更能瞭解Android的運行本質。而微軟推出的.NET Core用來替代Java,總感覺是無形中給APP開發帶來一個“隔離層”,導致看不清程序運行的本質。

更主要的,無論多麼吹噓.NET Core性能有多優秀,有這個“層”的存在,你就很難達到Java原生程序的性能。這使得用.NET Core在開發android和ios一直不被任何。

當然,對於性能不高的app,使用.NET Core開發android和ios還是有好處的,就是你只要編寫一套代碼,就可以再2個平臺上運行。不用分別開發2套系統。


.NET Core過於複雜

如前所述,.NET Core過於複雜。.NET 需要支持Windows,Linux,MacOS,像windows又有x64版本和x86版本。這些都導致.NET Core過於複雜。在Java裡,可以集中精力使用C++編寫那些服務,但是在.NET裡,既要考慮底層代碼,又要考慮頂層應用。所以,.NET Core變得越來越複雜。

同時,隨著AI等崛起,對於語言要求越來越簡化的呼聲越來越高,導致很多人離開了.NET Core,開始擁抱Python,最新的開發者調查顯示,Python已經超越了Java和.NET,成為僅次於JS的開發語言(HTML,SQL不算開發語言)


微軟舉全公司之力開發.NET Core,為什麼它還是不溫不火?


.NET Core缺乏大企業的應用

一個系統好不好必須經過大企業應用,在這方面,Java已經有了mybatis spring springmvc Hibernate等很多有名的框架,但是.NET一直無法在企業大規模使用。

這猶如是一個惡性循環,因為大企業不願意用,導致.NET Core生態萎縮,而.NET Core生態萎縮,又導致大企業不願意用。


總之,.NET Core是一個偉大的產品,但是越來越有點“曲高則和寡”的味道。對於未來.NET Core的走向,是越來越好還是漸行漸遠,只能留時間來檢驗。


分享到:


相關文章: