从业十余年谈谈对dotnet看法与坚持
前言
园子经常在讨论关于.Net发展的问题,我也这些年在工作乃至创业过程中使用.Net碰到的一些问题和看法。
个人擅长的技术面,C/C++/MFC/STL、ASM、JAVA、VB、Javascript/Typescript、C#/WebForm/MVC、Android/MonoDroid,Linux/Windows,还有没有可以吹的,还有从286一直到i7,从ms-dos到win 10,可以算是一条道跟从微软走到黑。
使用.Net的职业发展问题
每次提出这个问题,大家都会说.Net在国内也有高薪工作。事实上,我个人的感觉这些年明显感觉.Net的工作机会少;以及以前同事,朋友的发展情况来看,也是如此。当然你非要说我没有他们勤奋努力,我也没有办法。在国内Java或者PHP等等,相同的努力,背景,智力条件,获得更高收入的机会更多。所以,有一个概率,使用JAVA技术获得发展机会跟多一些,就如同在清华北大,你更容易找到技术牛人,而到三本院校比率就会变小一样。不要说也有成功的,我同学同样学历不高,现在是百度的研究员;也有在阿里巴巴任职项目经理的。
其实我不想这样来说,目前我个人推荐新同学以Java为主,如果又需要再来搞.Net。同样搞.Net的同学也可以看看Java。基础掌握的好,语言不过是工具。
碰到的问题
谈这些问题的时候,我强调一下我们从事产品的开发,可能与完全的互联网产品视角稍微不同。产品是给经销商、客户、实施人员来安装。所以最好,简易的安装,一键完成配置,需要技术支援的程度越少越好。
1、以易用性为傲的软件系统越来不易用
VS、SQLServer的安装依赖,对系统的依赖。经常是系统缺少了这个安装,缺少那个安装包。特别是SQL Server的安装,经常出现问题。我们公司的实施人员,应该对计算机是非常熟悉的,他们经常连SQL Server的安装搞不好。
我已经彻底切换到使用mysql、sqlite的方案,mysql 的安装比 sql server 好很多,而且free。
2、产品延续性与稳定性的问题
七八年前开发一个产品的时候,有一个类似于图形设计的东西。我们采用了Silverlight,当时Silverlight升级也比较快。我们觉得这样开发起来比Flash要快,当时浏览器H5技术还不如现在成熟,所以也没有考虑。Silverlight技术细节的东西不说了。测试环境都OK,最后发现在客户那里出现了很多种状况。比如页面崩溃,微软推送了新的更新无法运行…我们人少,实在没有太多的精力去分析,我选择你就是求个稳定。
微软大概自己废弃的技术还有很多。
3、产品安装与IIS
B/S系统,你没法绕开IIS,如果是一个产品直接给到客户安装,客户经常是搞不定的。甚至于有些客户直接拿XP。有些人要说客户傻逼,客户就是爷,何况竞争对手用java写的产品可以,解压,然后批处理运行()。客户说你产品没有运行起来,可以走了…..那一刻,真心蛋疼啊。
据说下一代的.net会有很好的解决办法,可以脱离IIS。为了解决这个问题,我把IIS Express 封装了一下,做了一个绿色版。
4、生态系统
Java在各方面的开源系统,组件,框架可选择的余地比较多,重要的是成功的方案也比较多。有很多组件,库都是从Java改写过来。
5、成本
我们公司基本都是购买的正版软件,从操作系统到开发工具。这个相对于选择其他的软件来说,这个也是一笔不小的费用。其实VS并不是最贵的软件,贵的是那些电路的设计工具,三维CAD之类。
如果将软件迁移到云端,Windows的虚拟机要贵一些。
6、人力资源
招聘.Net的人员比较困难,找到好的开发人员更加困难。我招聘的时候,感觉找到好的.Net开发很难。其实啊,找Java的也不容易。
坚守与实践
曾经有一段时间,我也特别困惑,打算转换到其他的平台与语言,后来觉得目前至于我来说,依然是一个比较好的选择。
1、使用Java并不能给带来跟多的效益
如果不是从个人薪酬来说,使用Java的产品,与使用 .Net ,并不能让客户多掏钱。微软体系的工具开发效率还是要一些,我们团队在.Net上的投资更多。
2、跨平台,覆盖面广
.Net相对Java,有些特性类似于C++,比如条件编译。现在很多库,编译支持多个平台的版本,比如支持mono,MonoDroid,甚至于Portable直接多平台公用。
.Net可以开发Linux,Windows、Mac上运行的程序,包括UI。支持树莓派等一些IoT设备的开发。
下一步我们会逐步把Web的部分迁移到linux,有些使用C++开发的第三方库依赖是一个难点。
3、.Net访问原生库更方便
如果使用.Net调用系统的DLL、so,通过PInvoke更加的方便。
3、移动平台
xamarin是一个非常不错的解决方案,我们将PC端开发的很多软件功能移植到了Android,同时我们继续维护Windows的版本。它能够让你实现算法,数据结构,通讯协议等很多功能的共享,降低很多的成本。能够很好的保护现有的投资。
使用xamarin不代表着你对移动平台的了解的技术要少,我认为要求更高。
4、搭配选择微软将以外的技术
比如数据库,我们现在基本选择mysql,功能足够,费用低。比如有些功能服务,考虑使用nodejs等等。
总结
所以如何选择,完全是看客官自己。但是我相信.Net最近在跨平台,移动端的发力,以后会更加的有优势,这一切来的太晚。来的太晚,总是好过没有吧。可能有一个合适的机会,我也会在项目中使用Java来替代.Net。
要做的事情比较多,匆匆随便,欢迎雅正。
本来使用Markdown写好的,不知道为什么解析的格式不对。下班以后再来调整格式吧。