我去年曾经在论坛发起过关于.NET技术前途问题这个话题的讨论,也引起了很多同行和朋友的回复,时间过去大半年,自己也有了一些新的理解。本文的目的就是将其中一些精彩的观点整理出来并谈谈自己的观点。
引子
我们都知道微软.NET技术更新速度快,很多技术还没成为主流就已经退出历史舞台。
曾经的SilverLight给了我们多少惊喜,结果微软直接支持HTML5取代它。
xna也是风靡一时,可惜微软直接抛弃了它。
虽然微软提出了“移动优先,云计算优先”的战略口号,但是目前来看WP也没多大作为,甚至有不少Windows Phone方向的微软MVP都转向了Android开发。
那么目前来说,.NET技术主要的方面就是ASP.NET(webforms、mvc、web api等)和少量的Windows桌面应用开发(主要是Winform还有少量的WPF)。虽然vs2015集成了android和ios开发,但是是收费的,而且开发者似乎也没有多大热情。
作为使用微软.NET技术的您,对.NET技术的前途这个话题有什么看法呢?欢迎讨论。
观点
- sp1234
从windows10开始具有的UWP很可能制定将来的前端应用程序的一种工业标准,应该从现在就考虑如何用它来对自己公司的产品进行宣传。唯一的问题就在于“它的性能如何?”,现在还不好说。
微软需要自己能够在手机上跑起来几个强劲的传统桌面软件,例如把Photoshop在手机上跑起来,把Word和Excel跑起来(而且不是像office365那种web阉割版,而是完整的有深度的功能),把各大银行的桌面支付软件(而不是web版的)跑起来,能够用桌面windows的远程桌面程序去操作手机桌面(包括用鼠标直接把文件从桌面windows拖入手机的文件夹内或者放到应用界面上),在手机上直接跑windows桌面版的QQ而不需要另外再开发手机版本……
这些都能轻松实现,不再开出“空头支票”,那么“三屏一云”将能让微软雄霸下一个10年。而微软的“三屏一云”中的“云”还没有落地,还停留在推销它自家的服务商,还没有让开发人员发现可以自由架构的东西。微软还应该在.net framework中内置一套服务器集群分布式任务管理框架,哪怕性能不是最高的,哪怕比较简单,但要是最可靠的,例如实现基本的 Gearman式的功能,能够分布式地调用方分布在1000+台服务器上的 windows 服务程序。
我认为许多人都是在2006~2013年之间接触 .net 的,因此可能不很知道微软平台技术的潜力在哪里。
实际上假设我想为一个“部级”国营企业集团的几十位中层领导单独开发一个办公系统(不是那种随便弄的小OA),那么我可能就要纠结silverlight、wpf、web前端技术等等,既要考虑到对美工的(应该使用专门开发“酷炫的2d动画绘图组件”的平台),又要考虑到对程序员的要求(希望门槛不高的javascript程序员就可以开发大系统),而且希望所有的应用的服务端都有符合当今世界潮流的大数据、复杂事件处理集群技术为基础。
如果有UWP,这个选择就轻松多了,我可以把精力用在内容技术而非肤浅的技术层面上。而且不愁领导们不喜欢更换windows
phone手机或者平板电脑,因为Android上的所有应用也可以同时在上面使用。这就是 .net程序员在2015年底、2016年初可能可以学习技术架构了。
- github_22161131
现在 .net 就是守着传统的桌面和web开发领域,向跨平台和云端发展。
然而这对于国内的 .net 开发人员未必是好事。为了实现跨平台和云端发展,当然也因为 .net
的核心采用开源形式开发,迭代会加速,问题会增加,文档会进一步跟不上,官方的中文资源会更少。也就是说,.net
前沿的发展会进一步拉开与国内开发者的距离。如果把CSDN论坛的帖子作为平均水平,那可以说差距已经很大了,继续拉大的话会让更多人无所适从。如果silverlight和xna也算技术的快速更新,那么未来的.net会更快,不过开源模式下如果微软不管了社区也可以继续发展,像F#现在就是已经完全社区化发展的。可以说大环境就是技术更新会更快,能适应这样环境的开发者会有更大的优势。
客户端技术里面,WinForms和WPF应该没什么变化,基于WinRT的技术依赖Win10应该能够扩大些市场,不过看不到能够爆炸性发展的可能。Xamarin/Mono技术依赖的是iOS和Android市场,短期内应该比较稳定。
而在服务端,因为跨平台,应用的领域可以大大增加。
在云端,因为跨平台,也可以增加.net的使用可能。同时可能会出现更多支持.net的paas云平台。
IoT端,因为Win10和跨平台,也可以增加一些.net的市场。在我看来,.net未来的发展与Win10的关系并不大,Win10能够多带来一些基于WinRT技术的市场,然而这个市场微软想扩大并不容易,可能大部分只能集中在企业领域。影响最大的是官方推动的开源和跨平台,这会让整个.net生态系统慢慢摆脱对微软和windows的依赖。与Mono相比,微软做的更为彻底,重新设计了.net,将其完全模块化,支持多clr,这是 .net 的一次质变。
- bigbaldy
直接用linux呀,而且C#是除了C++以外调用NativeMethod最方便的语言,C#没有现成解决方案或不好实现的直接调用C++的,在加上目前mono4.0的大幅改进,用linux已经没有任何问题,其实.net真的已经非常全面,桌面、移动、web、游戏等等什么都能干,而且某些还非常精,只可惜现在xamarin不免费,u3d都有免费版,现在缺的就是开发者,抓住开发者才能抓住市场,真不知道决策层是怎么想的。
著名的漏洞挖掘工具peachfuzzer为何在3.0版时用C#全面重写,而且是全平台的,那会还是mono3.0时代,这已经说明C#在linux下的表现,官方还说,换了C#后性能大幅提升。 目前全球最大的游戏平台steam上发布的游戏,u3d的游戏已经非常多,而且有很多还是大型3D游戏,原来这可是C++独占的。
吾爱破解论坛,.net的帖子也非常多,各种学习教程,破解逆向教程,实用小工具等。
游戏论坛中以3dm举例,很多游戏修改器也都是.net的,毕竟C#开发效率高而且是与nativeapi交互最方便的高级语言
再看社区活跃度,现在不论是全球的stackoverflow还是国内的csdn上,发帖量能在C#前面的只有Java种种迹象表明.net要火,而且说句实在话,纯语法角度,还真难找出像C#这么优雅的(除了python),从基础类库来看,C#是最好用的,没有之一。
- ajianchina
说那么多没卵用,最重要的问题在于微软的盈利模式的改变,如果这个不改,还是束手束脚,哪天android爬上了桌面也说不准,那么庞大的移动用户基础,再加上免费,呵呵,微软现在不改盈利模式,还想着吃老本,我看到时候够他受的,他的盈利模式改了,才能降低操作系统的授权费用,甚至免费,那样才会有更多企业愿意加入到windows平台,开发人员总是跟着企业需求走的,所以不要谈什么.net技术的前途,没有意义,一切需要从商业角度出发,你才能够看到什么才是有钱途的!
- sp1234
微软的 windows 10 以及 UWP 功能,已经让 Android 和 iOS 的程序可以在桌面 windows
上运行了。windows 10 上可以同时运行各种平台的应用窗口!windows 10
开启了真正的开放战略(是产品战略,而不是什么“开源”之类的),允许别人家的软件跟自己的操作系统上跑,而且设备驱动的共通就一定会让不同系统的进程更方便地通讯。微软专门设计windows系统来把 android上自己的桌面的!
- xuanbg
.net对比java,有三大优势,其中排第一的就是效率呀。其他两项是IDE和相对统一和完整的框架,其实java最大的坑就是那些乱七八糟的框架,不用不甘心,用了全是坑。。。
- bigbaldy
基础类库最人性化的就是.net,能够在没有任何文档的支持下让一个初学者凭着摸索写出一个像模像样的程序,其他任何语言也许照着API文档都得琢磨会,何况现在又全面开源,跨平台也得到官方大力支持,.net是除了驱动以外任何功能都能实现的,请问可以轻松开发单片机(microframework)、web(webform,MVC)、桌面(winform,WPF)、移动(Xamarin)、游戏(U3D)等各个领域的语言还有谁?shellcode可以写,键鼠钩子可以装,内存指针轻松操作,富客户端应用各种动画超炫效果信手拈来,各种官方非官方MVC框架数不胜数,android,IOS APP也可以借助xamarin大显身手,真不知道为何会有人不看好.net。
- gentle_wolf
玻璃上的苍蝇。前途光明,没有出路。 .net确实是很好的平台,就是在中国不受待见。
百度,阿里,京东,去哪儿,58,赶集,土豆,优酷,搜狐,网易,新浪都不用.net 只有腾讯还用一点点.net,结果还放弃uwp的开发了。
携程,汽车之家,搜房网用的是.net,比例太小了。
- unearth
只要Windows不倒。.NET就不会倒。除非有比Windows更好的一套生态系统。估计也就是人工智能了。
- liveths
我看技术是没有对错的。区别是有没有用对而已。Net也好Java也好。在对的地方用对就行,没有过时不过时之分。
我自己的个人看法是,我熟悉Net,那就用Net。然后既然android有需要去学Java就是。
目前个人看法是Net加android是最好的。全java那个低下的开发效率。。。。。。坑啊。
总结
- C#比Java简洁、优雅。对比一下同样5年开发经验的Java工程师和C#工程师写的代码就知道了。
- .NET是跨语言(C++、C#、VB、F#等)的平台。VS2015开始内置了Python、R等大数据用到的语言和工具,并集成了Android、iOS移动应用开发。
- .NET是跨平台的。通过Mono可以将WinForm、ASP.NET等发布到Linux环境中运行,这块已经很成熟了。
- 游戏开发中的Unity3D就使用了C#进行开发。
- 至于说开源,微软已经开放了很多项目的源码甚至内核,有些项目甚至完全由社区来推动。