从.NET看微软的焦虑
节日没事,就像聊聊微软的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翻译成中文叫依赖注入,有问题就进行服务注册。 相信不少初学者,看到这些名词估计就会吓的后退。
(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看微软的焦虑的更多相关文章
- 从Surface 3发布 看微软快速转向的根由
3发布 看微软快速转向的根由" title="从Surface 3发布 看微软快速转向的根由"> 平地一声惊雷起,微软突然送惊喜!在毫无征兆的情况下,微软突然发布一 ...
- 我看微软收购GitHub
今天是微软收购GitHub的第三天,之前很多人担心被微软收购的GitHub会步Skype,诺基亚等企业的后尘,凡此种种我觉得更多人的担心是:GitHub不再开源免费罢了. GitHub今年4月刚成立十 ...
- .NET Conf 2021 正在进行中,带你看一看微软带来了什么内容
今年最大的.NET活动正在进行, 可以通过Channel9 https://channel9.msdn.com/Events/dotnetConf/2021 看具体的Session .微软和社区一直在 ...
- [.net程序员必看]微软新动向之Android和IOS应用 visual studio 2015 Cordova[原创]
自萨蒂亚·纳德拉(Satya Nadella)上任微软CEO以来,可谓是惊喜不断,仿佛让世界尤其是我们.net程序员心中又燃起了希望.先是免费提供 iOS 版和安卓版 Office:然后在 xbox ...
- 从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构
Microsoft.AspNet.Identity简介 Microsoft.AspNet.Identity是微软在MVC 5.0中新引入的一种membership框架,和之前ASP.NET传统的mem ...
- 由两代WIN8 Surface平板看微软心态
要说win8平板的前景非常好,微软的两代surface做的真不错. 可是可是,微软就错在了把价格定的太高.为什么高,一是intel芯价格不低,二是每套win8和office微软得要价几百美金吧! 这两 ...
- 从Visual Studio看微软20年技术变迁
前言 这个世界从来都不缺变革,从工业革命到晶体管和集成电路,从生活电器到物联网,从简陋人机到精致体验,我们在享受技术带来的便捷的同时,也在为复杂设计而带来的挑战和生产力下降而痛并快乐着.而迫切期盼的, ...
- 从ThoughtWorks 2017技术雷达看微软技术
ThoughtWorks在每年都会出品两期技术雷达,这是一份关于技术趋势的报告,它比起一些我们能在市面上见到的其他各种技术行情和预测报告,更加具体,更具可操作性,因为它不仅涉及到新技术大趋势,比如云平 ...
- 如何在前台脚本通过json传递数据到后台(使用微软自带的ajax)
首先,我们要在前台引入json的脚本,以便于把js对象序列化 <script type="text/javascript" src="/js/jquery.json ...
随机推荐
- python元组 列表 (取值、替换、插入、添加、删除)
1.元组 列表 字典 元组( 元组是不可变的) hello = (1,2,3,4,5) type(hello)
- python3 安装 #zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz RHEL 8 install Python 3 or Python 2 using yum 编译安装 python3.7.4 . OpenSSL 1.0.2 or 1.1. Consequently, OpenSSL 0.9.8 and 1.0
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz Modules/Setup.dist https://askubuntu ...
- WPF显示命名空间不存在对应名称
3个办法 1 切换到Release模式,再生成.生成成功后切换回Debug模式就不报错了.这是Release模式下找不到我们自定义的控件导致的报错.所以切换为Release后生成则可以解决此问题. 2 ...
- scrapy爬虫 简单入门
1. 使用cmd+R命令进入命令行窗口,并进入你需要创建项目的目录 cd 项目地址 2. 创建项目 scrapy startproject <项目名> cd <项目名> 例如 ...
- Hash Map集合和Hash Set集合
HashMap集合的使用 1.1.每个集合对象的创建(new) 1.2.从集合中添加元素 1.3.从集合中取出某个元素 1.4.遍历集合 public class HashMapTest { publ ...
- qbxt 学习笔记 10.2
写在前面 昨晚网络咕了,而且比较晚,没交作业.解题报告写成书面的了,代码另发 + 博客. 目录 写在前面 1. 爬山算法 概述 示例 2. 模拟退火 概述 3. Meet in the Middle ...
- loj10171
牧场的安排 内存限制:512 MiB 时间限制:1000 ms 原题来自:USACO 2006 Nov. Gold Farmer John 新买了一块长方形的牧场,这块牧场被划分成 MMM 行 NNN ...
- C++的匿名函数(lambda表达式)
总述 C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). 它是定义和使用匿名函数对象的一种简便的方式.匿名函数是我们需要用到的一个函数,但是又不想去费力命名一个函数的 ...
- DOM分类及HTML DOM
DOM简介 DOM是W3C(World Wide Web Consortium)标准. "W3C 文档对象模型(DOM,全称Document Object Model)"是一个使程 ...
- Preliminaries for Benelux Algorithm Programming Contest 2019
A. Architecture 如果行最大值中的最大值和列最大值中的最大值不同的话,那么一定会产生矛盾,可以手模一个样例看看. 当满足行列最大值相同条件的时候,就可以判定了. 因为其余的地方一定可以构 ...