Neuzilla官方微信公众号:搜 架构师联盟 或 neuzilla

我是.NET铁杆粉丝,所以如果你要在评论里跟我撕逼.NET怎么怎么烂,Java、C++、PHP、JavaScript怎么怎么好,我奉陪。我这人没什么优点,就是说话直入主题,然后骂到你爽为止,当然咯我不是纯流氓,我是有文化的流氓,呵呵。

为什么我喜欢.NET

我用.NET十年了,说实话C#这个语言我很喜欢,比C++不知道人性化多少,当然前提是不考虑性能的情况下,C++的性能比.NET好上10倍左右,这是官方MSDN里提到的,所以不用质疑。但问题是Java也好不到哪去,慢的跟狗屎一样,只能说半斤八两。倒是JavaScript的V8引擎异军突起,你看Node.js最近多火呀,当然V8也是用C++写成的,性能赞也不足为奇。

.NET的设计理念是会一种语言即可,但程序会被编译成同一种代码(MSIL),然后运行在同一个虚拟机上(CLR)。其实不得不说微软的有些理念还是很不错的,虽然理想很丰满,现实很骨感。虽然微软经常干虎头蛇尾的事,但.NET是个例外,至少目前来看,.NET的语言层面的推广和维护做的还是很不错的,近期微软对于开源及Linux系统上Mono的支持力度还是很不错的,并且已经开源了CLR,我们可以预见不久的将来很多高级的定制CLR会诞生,微软正在仿效当年Sun的模式来推广.NET。

.NET中最棒的语言自然是C#,这个没有之一,因为C#融合了C++的所有优秀特性,同时也增加了新的东西,如LINQ、Lamda表达式、匿名委托等。有很多特性即使是Java,目前也未实现。而且C#比C++多了两个+,哈哈(这是个笑话)。

微软有全球最好的集成开发环境(IDE),没有之一,这也是我喜欢.NET的关键因素。当然有些脑残程序员会昧着良心说,这种傻瓜IDE是给不懂程序的人用的,我只能说你要羡慕嫉妒恨我是没办法的,Eclipse这种鸟玩意定制IDE是不错,要说体验我还真觉得不咋地,启动慢的要命,各种啃爹界面设计。只可惜Visual Studio目前还没有开源,等开源了就没Eclipse什么事了,哪凉快哪呆着去!

另外么,有些脑残.NET黑会说.NET那帮人只会拖控件,我可以明确的告诉你,我现在基本用notepad写css, html, js,即使用Visual Studio有没有智能感知对我来说没太大区别,更不要说什么toolbox拖住控件了,这是说明你不懂呢?还是说明你不懂呢?你这种门外汉也好意思来评论.NET,闲得蛋疼大概!

中国.NET生态系统现状

其实中国.NET程序员最痛苦的一件事情恐怕是找工作,据非官方猎头数据,微软.NET程序员的需求量在去年减少了一半以上,大量企业已经转向或正在转向非微软技术,比如Java、Python等,当然有一部分原因可能是一些企业需要更稳定的操作系统平台,比如Ubuntu或CentOS,Java在跨平台方面确实是有优势的,这点我不否认;Python开发web有点类似于当年的PHP,再加上各种类库齐全(特别是大数据这块),正在逐渐成为一些程序员的主要吃饭语言。

.NET在中国究竟怎么了?是水土不服还是怎么回事?其实吧,我的经验告诉我,与其说.NET本身有问题,不如从人的身上找找原因。基本上我的很多朋友也在转其他语言,理由很简单,因为很多公司不用.NET,那为什么不用呢?因为领导觉得.NET不行,所以要换,问题来了,为什么是“觉得.NET不行"?有数据能说话吗?还是拍脑袋的?领导说,.NET大型网站成功案例太少,行吧,这确实是个问题!但是这能说明.NET不行吗?还是做的人水平不行?!如果完全没有案例,那确实是.NET本身的问题,但如果有网站用.NET跑的很溜(比如stackoverflow),然后你说.NET不行,那你说这是谁的问题?是.NET还是人?大家心里有数。目前.NET阵营的情况是紧缺资深架构师,这个问题不解决,再牛的语言也是白搭,因为一群菜鸟在领导着一些大型项目,而且参考案例少,导致他们都不知道该怎么搭建自己的架构。相对而言,Java你即使是菜鸟架构师,随便找个案例一样画葫芦总会把,就这么回事。当然Java也有画错的时候,比如12306那个做的烂呀,你们不是说Java很棒吗?我笑笑。

重建的时机好不好?

一个平台的生态系统重建绝非一朝一夕,必须大家配合,特别是微软这位大哥的配合。在过去的10年里,.NET其实有过机会,但是微软没有把握好,当然现在重建并不晚,特别是微软完善了全平台产品布局,随着win10的推出,微软将有可能统治各种设备领域,这在过去是很难想象的。

特别是单片机设备、小型手持设备领域,微软比以往任何时候都要强大,再加上bing的市场份额已经接近20%,以及新CEO的上台,2015对于微软也许是转折的一年。

如何重建中国.NET生态系统

.NET生态系统的重建其实可以参考当年Java的模式,以及Apache基金会的模式,即以开源带动整个社区的活跃性,并且通过个中合作渠道,拉高合作伙伴的商业化热情。

其实Java为什么会这么火,很大程度上要感谢开源社区,其实很多公司选择Java的一个重要原因是因为他们觉得Java的开源组件很多,其实同一个功能选择也很多,而且又是免费+开源的,何乐而不为,大不了让苦逼的程序员去理解源代码然后定制。这一点确实是.NET的软肋,但是我们正在改变这一切,我有资格这么说,因为单单我的团队就贡献了3个非常有用的框架(NPOI, Toxy和Nepy),这些框架分别对应于java的POI、Tika以及Stanford NLP(NER部分)。我朋友也有其他的.NET开源组件在维护,我是想说,通过大家的努力,.NET开源领域正在被丰富,而且逐渐你会发现你需要的开源库.NET其实都有了,只是可能没有Java这么丰富,这需要时间和人的投入,以及社区的信任才会得到发展

微软说实话,在过去的日子里很不给力,基本上.NET社区一直处于”散养“状态。如今随着微软开源运动的推进,这一切正在改变,微软正在主导社区创新,并帮助整个.NET技术社区成长,这个非常有意思。去年呢,.NET基金会也成立了,虽然这帮人到现在还在“打酱油”(谁说只有中国出酱油男),我已经发邮件给几个微软资深PM了,他们已经明确表示接下来会有改观,基金会还新聘了一个市场总监,专门负责推广事宜,既然他们都明确表态了,我相信会有不同。让时间来证明一切。

重新拉拢合作伙伴也是微软应该做的事情,其实在过去,微软中国区合作伙伴比散养好不了多少,无非是你买个白金支持包,我帮你定制一些东西,比如当年魅族的WinCE定制操作系统。但一旦微软说不能做,那帮合作伙伴基本就只能选择放弃,所以微软的MCS部门(微软客户咨询部门)和技术支持部门还是很关键的。但如今,很多东西正在被开源,比如Driver SDK,一旦厂商有了这些,他们就有了主动权,可以有效改变目前的散养格局。其实哪天微软想开了,把Windows开源了,那么微软可能会成为全球市值最高的软件公司。其实开源了又如何,有多少人真的会去改?反而有利于漏洞的发现和修复,你让他去定制好了,比如中国花了多少钱打造所谓的自主知识产权的军用操作系统——麒麟,说白了就是拿Linux改的,而且关键没改好,一堆问题,很多东西都不知道怎么改,只是改了FreeBSD的通讯加密部分,就说整个操作系统是自主知识产权了,我也算服了。你们就算骗经费也稍微搞点高大上的东西行吗?受不了这帮人,特别是某倪姓院士,脑残中的典范!

.NET社区的振兴需要大家的努力,说的大点关系到整个微软系开发的发展问题,说的小一点,社区振兴了,你找工作会好找很多,而且待遇会越来越好!我觉得Java、Python语言的高薪资只是暂时的,任何语言都有兴衰,Java自从被Oracle收购后一蹶不振;Python刚刚兴起,正值壮年,关键看谁能熬到最后。你看当年PHP多火呀,再看看现在,找个PHP的资深程序员很难,基本都转了。没事记得在你老板那里吹吹风,说说.NET最近的变化,微软的变化,人是善变的,你说一次他无动于衷,但是说十次就很难说了,但你不需要刻意去改变什么,老板也是人,是人就有跟随心理,一切顺其自然,让时间来证明一切。

关于Neuzilla

Neuzilla致力于打造.NET核心竞争力,引导并帮助.NET社区健康发展。请点击这里在Linkedin上关注Neuzilla。

也可通过扫下面的二维码关注Neuzilla官方微信公众号

重建中国.NET生态系统的更多相关文章

  1. 对《重建中国.NET生态系统》评论贴的总结

    Neuzilla官方微信公众号:搜 架构师联盟 或 neuzilla,也可以扫下面二维码 在看了<重建中国.NET生态系统>的各种哭爹喊娘骂街的评论之后,我觉得哦,淫才确实很多,但是么真正 ...

  2. 解密Arm中国:全球最具影响力的芯片公司中国布局浮出水面

    经济观察报 记者 陈伊凡 沈怡然 李华清 对于Arm与中国合资公司事宜,5月4日下午,Arm授权的代表邮件回复<经济观察报>称:“合资公司目前刚开始运营”,“我们的重点是让这个新的合资公司 ...

  3. 2012高校GIS论坛

    江苏省会议中心 南京·钟山宾馆(2012年4月21-22日) 以"突破与提升"为主题的"2012高校GIS论坛"将于4月在南京举行,由南京大学和工程中心共同承办 ...

  4. 独家揭秘,106岁的IBM靠什么完成了世纪大转型|钛度专访

    IBM大中华区董事长陈黎明 到2017年2月,陈黎明就担任IBM大中华区董事长整整两年了. 五年前,IBM历史上首位女CEO也是第9位CEO罗睿兰上任,三年前,IBM在罗睿兰的带领下以数据与分析.云. ...

  5. 数据时代的的企业管理 记SAP商业同略会

    [PConline 资讯]在2012 SAP中国商业同略会城市论坛深圳站上,自SAP中国的萧洁云总裁和张志琦先生,对SAP中国的战略.SAP的技术战略,以及SAP对于行业趋势分析与媒体进行了沟通,对数 ...

  6. 微软与Node.js的开源之旅

    微软近年来在开源领域可谓是大刀阔斧的前进中,继2015年微软与红帽合作,微软智能云Azure与Linux进一步融合等举措之后,2016年,微软继续加大开源之举,大力推进Node.js的开发和开源社区的 ...

  7. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  8. 如何评估 Serverless 服务能力?这份报告给出了 40 条标准

    编者按:两年前,我们还在讨论什么是 Serverless,Serverless 如何落地.如今,已经有评测机构给出了 40 条标准来对 Serverless 的服务能力进行评估,这些评估细则既是技术生 ...

  9. 全国气象数据/降雨量分布数据/太阳辐射数据/NPP净初级生产力数据/植被覆盖度数据

    ​        气象数据一直是一个价值较高的数据,它被广泛用于各个领域的研究当中.气象数据包括有气温.气压.相对湿度.降水.蒸发.风向风速.日照等多种指标,但是包含了这些全部指标的气象数据却较难获取 ...

随机推荐

  1. Sqlite学习笔记(一)&&编译安装

    Sqlite简介 sqlite是一个开源的嵌入式文件数据库,sqlite以动态链接库的方式供应用程序调用,所有的数据库对象都存储在同一个文件中. sqlite动态库非常小,最新的3.8.11版本也只有 ...

  2. MySQL online ddl原理

    背景 dba的日常工作肯定有一项是ddl变更,ddl变更会锁表,这个可以说是dba心中永远的痛,特别是执行ddl变更,导致库上大量线程处于“Waiting for meta data lock”状态的 ...

  3. FATAL ERROR: Could not find ./bin/my_print_defaults的解决办法

    对mysql数据库初始化过程中,会有如下报错信息: 1 2 3 4 5 6 7 [root@localhost scripts]# ./mysql_install_db --user=mysql FA ...

  4. jqGrid 学习笔记--数据异步加载方法(转)

    var commonQuery = '../importantInfoReport/pageQueryImportantInfoReport.action?type=0'; jQuery(" ...

  5. Spark大数据的学习历程

    Spark主要的编程语言是Scala,选择Scala是因为它的简洁性(Scala可以很方便在交互式下使用)和性能(JVM上的静态强类型语言).Spark支持Java编程,但对于使用Java就没有了Sp ...

  6. 二、Android学习第二天——初识Activity(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...

  7. cookie和session详解

    cookie和session的区别 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当下次你再光临同 ...

  8. Windows 10 L2TP 809错误

    今天不知道为什么,一直工作正常的L2TP不能连接了.我用的是Surface Pro 3,Windows 10 专业版,操作系统一直保持自动更新,而且最近也没有安装什么软件.点击连接后,等一段时间就报8 ...

  9. jQuery入门第二天&&&正则表达式完结篇——仿smarty引擎的制作

    hi 周一完全的不在状态...中午还去观战,没有睡觉的我,晚上的smarty不知道能不能做完,加油吧 1.jQuery ---过滤性选择器(二)--- --[attribute=value]属性选择器 ...

  10. c++关于析构的那点小事(个人吐槽向

    #include<iostream> using namespace std; class test { int *i; public: test(int n) { i = new int ...