我很迷茫。多年来,我一直是.NET/Microsoft技术栈下的开发人员(从这里开始我将简称为.NET,并且我指的是Windows/ASP/.NET/IIS/SQLServer等产品系列或少数),不是出于任何“宗教”原因,也不是因为我已经像其他一些人一样受到企业思想的影响,或者受到业务范围的限制——而且只是因为一个巧合,我开始使用VisualBasic2为了开发,后来我就用了后面的版本失控了,之前的版本就成了历史和回忆。为.NET祈祷多年来,我一直在阅读有关使用Unix/Linux/Ruby/Python的“酷”人的信息;他们可以使用虚拟机快速修复一个问题;假设开源软件社区如此之大,而且充满了敬业的人;比方说他们的工具或框架有多稳定和多快。与其质疑事实,我总是只看,不知何故我仍然我行我素,.NET堆栈功能强大、丰富且稳定,它有一流的工具(主要是VisualStudio),并且有非常友好的文档。尤其是最近几年,微软和第三方库、工具、框架的爆炸式增长,让.NET更加牛逼。这些工具中的许多都受到Linux的“启发”——尽管它们的创建者很少承认这一事实。一些东西被命名——顺序和重要性完全随机:ASP.NETMVC、Chocolatey、NuGet、EntityFramework、Nancy、WebAPI、PowerShell、WindowsServerCore……当然还有更多其他“更小”的工具丰富了整个生态系统,例如:NUnit、Resharper、WebEssentials、GitHubforWindows、Dapper、Lucene.Net、Autofac、Cmder等等数以千计的其他项目。更不用说许多其他源自.NET的项目,或它们自己的演变:OctopusDeploy、Hangfire、Xamarin、SignalR。我总觉得我在.NET世界中没有遗漏任何东西——工具在那里,稳定性也在那里;年轻人喷它只是为了酷,或者至少他们是这么认为的。一直以来我最认同的一个问题是,使用Windows/.NET生态系统需要支付许可费用,而*nix是免费的。但这场辩论并没有弄清楚什么,因为有使用免费的东西和没有得到企业级支持等因素。(我知道这场争论源于微软的营销策略,是非常主观的,现在我不会回头细说。)某种觉醒。然而,我所看到的是一幅越来越令人担忧的画面。微软的代码不开放,当他们几年前终于开始开源他们的一些项目时,他们不会接受代码的拉取请求。*nix中的优秀库和框架是否比Windows中的InternetExplorer大得多?甚至不要让我开始。我已经写了这部分内容。许多基准测试声称IIS的性能比nginx差。壳?实话实说:PowerShell是一个很大的改进,但是从使用的稳定性、易用性、性能和速度上还是落后于sh/Bash。Windows用户仍然没有改变使用键盘操作shell的心态。所有指南/教程/问答都向您解释了如何获得IT任务——打开程序,单击此处,从列表中选择等等——而命令行版本通常只是您实际复制的一行工作内容-粘贴和重新使用,版本之间不会丢失任何步骤,或更改位置等。一些.Net/Windows老手开始迁移到*nix并在博客上写了它。这不是什么新鲜事。在我的印象中,这种现象近五年来一直很显着。人们提出各种反对.Net/Windows的论据,并开始支持*unix。起初,我只是认为这是一些极客的意见:微软不够酷,Linux让我工作得更快,Windows一点也不安全,微软没有开源软件的优点。我听过一些人说他们迁移到LMAP堆栈并感觉他们是免费的。但是我还是不认同这个观点,我之前说过,.Net的生态环境比较健壮,还在发展,有足够的支持。慢慢地,我开始发现一些道理。就像和别人争论的时候,没有认真听取别人的意见一样。但是当你静下心来,放下主观意见,公正地判断问题的对错,你就会理解别人的看法,发现别人的看法并不是那么站不住脚。我实践了很多写博客的想法。他们中的大多数人讨论.NET,这是我的技能来源。但是当你简单地过滤关于软件设计的博客时,你看到的都是关于创业、精益创业、黑客马拉松的文章——这些都不是企业动态——而且他们很少谈论.NET。他们不讨厌.NET,也不会一直嘲笑.NET。他们只是不关注.NET。他们在Python/Node/Go/Meteor上工作(我没有提到RoR,因为它现在不是很流行),他们使用精简的Linux虚拟机或Docker容器,他们将他们的系统发布到Heroku或GoogleAppEngine或DigitalOcean上精简的Linux虚拟机,仅此而已。这并不意味着他们的架构不够强大,因为他们确实有数据库、框架和所有需要的工具,这些都是免费的,而且那些框架/工具是稳定的,他们在生产中使用这些东西。如果你看看早期和成熟的初创公司——他们90%的代码(好吧,我编造了确切的数字,但实际数字接近那个数字)使用Linux技术架构。在硅谷,很难找到优秀的.NET工程师。现在,NodeJS(考虑到成本,它运行在Linux上,尽管它在Windows上运行得一样好)很受欢迎——部分原因是它是MEAN框架(一个完整的WEB开发框架,由MongoDB、ExpressJS、AngularJS、NodeJS组成)的一部分的。我越来越多地听到.NET开发属于过时的传统团队,真正轻量级、敏捷、MVP架构系统是使用MEAN框架(以前称为LAMP,一种用于开发PHP的框架)开发的。.NET革命另一方面,变革之风正在微软总部雷德蒙德刮起,而且风力越来越大。这种变化始于微软开放.NET堆栈的一些技术,并发展于微软建立开源组织如Outercurve和MSOpenTech。我们开始看到这些组织对一些著名的开源项目做出了重大贡献,最后Microsoft开始接受代码提交——从ParallelTechnologies开始,现在进展到.NETCore类库并引入下一代.NETvNext。微软不再否认Linux的存在。他们不仅接受了Linux的存在(我敢肯定他们的营销部门在一些重要的内部政策的要求下被迫改变了他们的销售模式),他们甚至在MicrosoftAzure云平台上提供了一个官方的Linux虚拟机,作为撰写本文时,Azure云平台上有20%的虚拟机使用的是Linux系统。Docker也将在不久的将来支持Windows系统。下一代.NETvNext的发布让微软飞速发展。Microsoft已反复修改.NET代码以在Linux系统和Mac系统上工作——不再有用于编写helloworld但不用于生产的Mono项目。最后,.NET项目不再与.csproj文件捆绑在一起——基于物理路径中的内容,项目可以转换并且完全可移植,包括项目运行的.NETFramework版本。所有这些都迅速弥合了我之前提到的.NET堆栈技术和框架之间的差距。作为.NET爱好者,.NET现在看起来比以前好多了。几年前,我为成为.NET合作开发程序员感到羞耻,现在我不再有这种感觉了。几个月前,我在Reversim博客(希伯来语)中对此进行了详细描述。又糊涂了。我一直想不通微软是做得太少还是起步太晚。虽然,在意识到其传统而独特的产品已经失去市场之后,微软一直在努力跟上市场的步伐。但微软的嚣张气焰不复存在。也许它在桌面领域(包括个人桌面系统和商务桌面系统)仍然占据主导地位,但它在浏览器领域早已失去了优势。服务器领域(1、2),在开发栈领域优势不多。关键是,微软能否紧跟潮流,阻止开发者继续输给Linux,甚至扭转整个局面?另一个问题是LinuxCan.NET和MacOS版本100%实现Windows版本的功能。且不提微软是否真的为非Windows系统提供了完全兼容的.NET。我觉得技术上能不能实现是个大问题。虽然我是一个经验丰富的.NET程序员,所以按理说我应该支持.NET。但是选择哪种技术取决于它是否适合手头的项目。以我下一个webgig为例,除非其他开发框架有明显的优势,比如:NodeJS+Express、Meteor、Go、Python+Django(当然这些框架在客户端或者服务端的某些方面各有优势)——否则,我实在想不出有什么理由不用它。网。我的意思是服务器端——网络应用程序。至于客户端,那是另一回事了。如何?您认为.NET有未来吗?IP和IP不再是问题,*nix程序员会考虑使用.NET吗?去dotnet还是不去dotnet就是这个问题
