微软举全公司之力开发.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的走向,是越来越好还是渐行渐远,只能留时间来检验。


分享到:


相關文章: