当前位置: 首页 > 科技观察

微软程序员最好的时代来了

时间:2023-03-16 18:08:37 科技观察

每隔一段时间就会有人跳出来说微软死了,.NET死了,然后开始舔Java,但总让我觉得奇怪的是,那些人还在用.NET,还在继续喷.NET,舔JAVA,在我看来,这些人还有天天喷自己公司的人,却还在那个公司,天天喷中国的人,却还在那个公司在中国也是一样。语言只是一种工具,因为我对JAVA不是很熟悉,所以我不知道JAVA擅长什么,但我认为基本上一切都可以。可以这样做。不过奇怪的是,经常看到.NET的人喷.NET,很少听到JAVA的人喷.NET,不过我猜很多JAVA的人应该也在忙着喷JAVA。其实这与语言无关,而是与人的心理有关,因为人们总觉得“碗里的东西不如锅里的”。语言之争已持续多年。其实谁都知道这是没有意义的。网络上不是流传着鄙视链吗?我看大家只是拿他当笑话,别当真,因为不管你怎么鄙视他,我们终究是要吃饭的。本来我也觉得写这篇文章没有意义,但是当我看到那些.NET的文章,基本上我说的一切都没有意义,但可能会给刚入行的人带来很多误解,就像骗子一样很容易对孩子说谎,因为孩子对世界的投入并不深。做开发10多年了,学过很多语言,但真正用来吃饭的最重要的语言其实是visualBasic和.NET,当然还有“中文”。我还学习了Java、JSP、SSH。但是***选择.NET,为什么,第一,因为.NET技术上手真的很快,而且上手快的好处之一就是你马上就会有一定的生产力,也就是你可以开始工作快点,这样你就有了公司愿意给你发工资的意思,也就意味着你可以早点和父母断奶了。另一个原因是.NET面试比JAVA多。C#语言我学过C、Java、VisualBasic、Ruby、Node.js等,但我仍然认为C#是一种生产力非常高的语言,比如一些非常好的语言特性,只有从其他语言才能看到刚才说了一点,比如自动属性,LINQ,Lamda表达式,Action等。另外,C#对多线程的封装,让我们在多线程编程中变得异常方便,比如TPL。还有让大家头疼的异步回调的问题。C#用的很ElegantAsync,有待解决,我们看到ES7已经开始实现类似的东西了,是不是借鉴了C#?多语言混用对于稍微复杂一点的程序,为什么一定要只用一种语言呢?比如我们前端可以用ASP.NETMVC,后端可以用Java甚至其他任何语言,服务可以用WCF,搜索可以用Solr等等,甚至WEB层和业务层都用.NET,数据库可以使用MySQL或者MongoDB。.NET或JAVA只是系统的一部分。我们知道,一个WEB程序,除了后端,还有很多其他的东西,比如HTML、CSS、JavaScript、数据库等等。不管你是做Java还是.NET,都是按需要做的。也就是说,前端技术都是一样的,HTTP协议和TCP/IP也不分语言。不管你是JAVA还是.NET,AngularJS、ReactJS、HTML5、Bootstrap、Bower、Grunt、Gulp对你来说都是一样的吧?微软技术能做什么我没有做过JAVA程序,但是我用微软技术已经10多年了,所以我就说说微软技术能做什么。桌面程序VisualBasic毕业后不久,我就加入了中国的一家马来西亚软件公司。这家公司主要做票务系统。当时,我们选择了VisualBasic。除了方便的Form,所见即所得,想要的组件几乎都有。另外,众所周知,Windows是桌面系统中当之无愧的霸主。不知道JAVA在这方面有什么优势。跨平台,但是我做企业软件这么多年,很少有企业软件需要跨平台的。当时公司建设了票务系统、闸机系统、POS系统。估计很多人不知道门禁系统也可以用VisualBasic来搭建。当年广州和北京一流的游乐园都是我们建的,整个乐园的信息系统都是用微软的技术。WPF微软推出的WPF,我认为是桌面开发程序的一大进步。几乎所有的桌面程序都可以使用WPF来显示,而WPF可以让我们非常方便快捷的制作出非常炫目的桌面程序,WPF的XAML方式给了我们一种非常方便的方式来编写桌面表单。同时,模板、动画等在WPF中实现起来极其容易。此外,MVVM在WPF应用程序中非常流行。WPF的出现比Angular早很多年。UWP不久前,微软推出了Windows10,它使得一个系统可以运行在台式机、平板和手机上,我们可以使用XAML,甚至JavaScript来开发一套可以运行在多个终端上的程序。用户可能没有多少,但对企业用户来说太重要了。具体细节我想你可以看看MSDN或者Channel9WEBASP.NETWEBForms。我想很多人对微软的误解可能主要是因为这一部分。ASP.NETWEBForms因为Forms是一个快速拖动控件,界面生成了很多难以理解的代码,大量的ViewState等等,但这并不代表ASP.NETWEBForms不好,***我们可以使用ASP.NETWEBForms来快速完成一些WEB小程序,再加上大量的第三方控件,开发一些常规程序简直快如闪电。其次,我们可以尝试使用Repeater等客户端控件,现在还有很多网站是用ASP.NETWEBForms做的。这些网站没有用户吗?!ASP.NETWEBMVC由于很多人对ASP.NETWEBForms充满了怨言,而WEB开发技术也在不断创新。微软也顺势而为,适时推出了ASP.NETMVC。使用MVC可以写出非常清爽的代码。我们团队从ASP.NETMVC1.0beta就开始用了,因为我也学过RubyOnRails,基本上这两个框架很相似,极其方便的路由管理,View,Controller,Model分层,让我们用起来强类型类开发,我们用过ASP.NETMVC成功提交了很多项目,从来没有遇到过来自.NET本身的问题。WEB服务WCF使用了统一的模型,这使得我们开发WEB服务极其方便。大多数情况下,我们只需要定义一个接口,配置相关的Binding和EndPoint,就可以非常方便的使用Http、TCP、Https。各种安全策略使用起来很方便,这些只需要简单的几行配置。WCF大大简化了WEB服务的开发。ASP.NETWEBAPI除了WCF,微软还推出了ASP.NETWEBAPI,这使得我们开发轻量级的WEB服务变得异常容易。使用ASP.NETWEBAPI,我们可以轻松实现Restful服务。使用OWIN,我们可以以任何方式部署我们的API。AzureMicrosoftCloud微软的云非常强大。用过微软云的都知道,微软云几乎可以满足我们所有的项目需求。我们可以使用Azurewebapps轻松创建一个WEB,Webjob,我们可以使用AzureSQL,使用Azure存储,使用云端Queue,Bus等极其方便,而且云端集成了很多优秀的第三方程序,例如,我们可以使用Redis作为缓存。此外,Microsoft的云服务使我们能够管理我们的部署。这让我们很多程序员很快就可以从一个程序员变成可以运维企业整个系统的人,而你只需要学习一些Azure的管理知识,比如自动扩容等等,这些都可以快速和在云中轻松配置。我们几乎一半的客户系统都运行在Azure中,我们可以一键部署。如果出现问题,我们甚至可以使用VisualStudio直接在云端调试网站。移动开发感谢Mono,现在您可以使用.NET开发移动应用程序。使用Xamarin,你可以用C#开发出和原生程序一样性能的iOS和Android程序。我也熟悉Objective-C,也用Objective-C开发过程序。Objective-C虽然在某些方面很优秀,但是开发效率实在是不敢恭维,不然苹果也不会推出Swift自取灭亡。另外,当你同时需要iOS和Android时,你至少需要一个熟悉Objective-C的人,需要熟悉Java。而且同样的事情需要做两次。而使用Xamarin作为企业级APP,可以共享大量的业务逻辑,更不用说可以直接使用非常高效的C#语言。我们已经成功提交了多个基于Xamarin的程序。另外,Xamarin推出的Xamarin.Forms可以用XAML和C#一套代码开发iOS、Android和WindowsPhone程序,性能和原来完全一样。我们还成功开发了基于Xamarin.Forms的程序。游戏开发现在有很多基于Unity开发的程序,基于Unity的游戏可以选择C#作为主要语言。大家可以搜索一下,上架已经有大量的游戏是使用.NET开发的。总结当然,以上只是我使用的微软相关技术。目前,除了客户明确选择其他语言外,Java能做到而.NET不能做到的实在是太少了。桌面、WEB、移动开发都可以使用.NET。简单的说,你可以用一种语言,也就是C#来开发开发工具VisualStudio来做.NET开发。配套的开发工具是VisualStudio。我觉得VisualStudioStudio是最好的IDE之一,几乎可以用任何语言来开发,用过的人很清楚,虽然Vim是编辑器之神,Emacs是编辑器之神,但是显示世界上能有多少神?ResharperResharper是每个.NET程序员必备的工具之一。基本上可以提高我们三分之一的开发效率。谁用过就知道。领域驱动设计如果我没记错的话,虽然EricEvans更早写了一本关于领域驱动设计的书,但是真正提倡领域驱动设计的.NET开发者还有很多,比如GregYoung,我们可以看看NServicebus。看看NServicebus我们已经提交了一个非常大的项目,使用领域驱动设计,这个项目是世界500强的一个主要系统。并且本系统使用.NETC#,使用了CQRS、NServicebus、ASP.NETMVC、ASP.NETWEBAPI、SQLServer等,系统运行了几年,没有发现问题。有兴趣的可以关注我的领域驱动系列。长尾理论很多人说一些大型系统不用.NET,比如BAT,比如新浪微博。我不知道他们是否根本没有使用过。我想说的是那些系统比较大。使用JAVA或PHP通常是基于历史的选择。另外,这些系统就那么几个,而且不是所有的软件都是电商的,微博呢?这里要说的长尾是中小企业几乎占了所有企业的80%,这些企业需要各种各样的系统,而这些企业不管是国内的还是国外的,Windows占了大部分。虽然我也很喜欢苹果的产品,但是企业是要赚钱的。也就是说,80%的企业都不会像BAT那么大,所以至少80%的系统使用.NET开发没有问题,.NET的开发效率很高。我们为什么不选择它?使用.NET应该是企业或客户项??目的最佳选择。如果你只做WEB系统,或者只做电商,那你用什么语言都可以,但是一旦你做企业系统,.NET一开始往往非常吃力。安全的选择,为什么?因为很多企业用的系统是Windows,办公软件是Office,服务器是WindowsServer,用的是AD,邮件系统是ExchangeServer。不知道大家有没有用JAVA和PHP来集成这些系统。方便,但是用.NET很方便。目前,.NET几乎可以满足企业应用的所有现有需求和潜在需求。关于开源,关于免费现在.NET里面很多东西都是开源的,.NETCORE和ASP.NETVNext已经可以在Mac和Linux上运行,相信以后会有越来越多的.NET程序运行在Linux服务器上,此外,大多数程序根本不使用那么多服务器。如果我们真的需要那么多服务,那证明公司已经有钱了,买不起几个Windows?而如果我们真的需要那么多服务器,我们可以使用MicrosoftAzure。买几个Windows比请几个Linux运维工程师便宜多了。***,没有人限制你只能.NET没有人可以限制.NET程序员学习其他语言,.NET程序员可以学习Java,Ruby,Node.js,可以学习EventDriven,MessageQueue,Solr,学习MongoDB,Redis,学分布式缓存,学任何其他语言需要学的东西。关于薪水,我不相信一个人学了两个月的JAVA,不学其他东西就可以立马成为一名优秀的程序员,并且拿到高薪,因为在我看来,成为一名优秀的.NET程序作为会员,需要学习很多知识,相信JAVA程序员也是一样。如果说.NET程序员的年薪是几百万,我没见过,但是学好.NET,拿个比较不错的薪水,不是问题。