跨平台对开发商是一个巨大的诱惑。一次开发,多个平台使用,降低了迁移成本,有利。但Java的开发工具没有.net顺手,对编码人员的要求比.net要高。
.net培训成本低,上手快。尤其如果开发人员以前都是做windows开发的话,转型成本低得让老板眉开眼笑。
最重要的决定力量是市场。开发商所定位的市场用户的需求和开发上在技术上的历史积累,决定了开发商最终的策略。
2 站在从业人员的立场上
从业人员被市场所驱动,反过来也引导市场。
Java起手的过程比较漫长。Java开发者要做很多DIY工作,才能写出第一个像样的程序。DIY多了,对于从业的基础素质,必有提高。
.net入门快,windows最大的好处“可视化”在.net延续,集成环境好,单步调试强,这是Java团队中下至程序员上达项目经理历来羡慕的地方。做惯了windows和.net下的开发,难免觉得Java下的开发调试实在比较原始:代码大多要一行一行写,单步调试很多时候不可能。
但Java人员的付出也有回报。我还记得当年Pascal编程课和Unix操作系统带给我的思维冲击,那门编程课应该更准确地说成“结构化编程 ――pascal”。Pascal强调的结构化编程带来了非结构化语言如Fortran之流无法比拟的美和乐趣,Unix崇尚的“小即是美”、“没有消息就是好消息”深入我心。在软件开发这一生产过程中,除了得到维持生计所需的报酬,同时能得到美的享受和满足的心情,实为天赐。Java从业者乐于谈论 Java的美,这一点上比.net有福。
结束语
就服务端市场来讲,Java目前在技术先进性上有绝对优势。应用系统需要各个层面的框架(framework),Java都有大量已完成或正在进行的开源项目帮助开发人员更好地完成自己的任务。诸如struts/JSF类的框架,.net没有对应物,而且Java在扬弃的同时保持着相对的稳定。
.net开发效率差不多是Java的三倍(经验数据),致命的诱惑。在Java放弃的客户端程序上,.net是老大,但在服务端,.net还是个小弟弟,有待成长。微软最初想要构建一个新的技术来回应J2EE,但发现一己之力还办不到。于是匆匆祭出com/com+,被绝大多数程序员评为“丑陋繁杂,迟早会被替换掉”。什么时候替换呢?这一替换对应用的影响有多大呢?微软的新操作系统对.net又会有多大影响?拭目以待。
绕来绕去的意思是,我不觉得两个平台有截然的高下之分。在这个互动的世界上,不想被淘汰的竞争者始终保持警惕,努力学习对手的优点。Java的努力之一就是提供更易用的工具帮助开发人员快速轻松地开发Web应用程序。而.net的当务之急是改进架构,完善框架。
还是那句话:没有最好的技术,只有对于具体项目来说最适用的技术。
为什么那么多公司不用 .NET,而选择 PHP、JSP,是 .NET 有什么缺点吗?
看了一大圈,只有@翁伟一个答案是靠谱的。.net在互联网圈使用率低是事实,而且原因基本和技术本身优劣无关,就是生态环境和人才的问题。
单从语言特性上讲,C#早就把风格近似的Java远远抛在了身后(我从03年开始两者交替用,C#进步极其明显),与各种现代编程语言比一圈的话都绝对不输。相反,很多看低.net的人其实对它并不了解,拿出来说的很多缺点根本就是七八年甚至十几年前的成见,都不值一驳。
问题就出在人才结构上。据我所了解,国内政府、传统企业、银行、工厂等.net应用最广泛的领域中,存在大量水平低劣、不思进取、恨不得只会拖拽控件和百度搜代码就自称程序员的人。他们对计算机原本就没兴趣,编程的目标是尽快不再编程,想在三年内转管理或售前,可惜失败了。高不成低不就,又干不了别的,只好迷茫地继续不思进取,编写bug丛生的代码。
这种人想跳到工资较高的互联网圈都困难。除了加班强度之外,根本就跟不上需要快速学习新知识、新语言和框架的节奏,自己还恨不得学一次吃一辈子呢。
我在十几年的工作生涯里这种人见得太多了。有的2013年仍然在维护Windows Server 2003;有的时至今日都只熟悉 .net Framework 1.1那一套,连反射和泛型都不知道怎么用;算法更是像听天书一样,不提二叉树、有向图了,拿冒泡排序都能扫倒一大片。一点都不夸张。
至于为什么只有.net而不是其他语言变成了这样?无他,门槛太低而已。Java只比它难一点,就滤掉了一大堆垃圾程序员。而且.net是能在Windows下部署的,要知道这些人根本连linux命令行都懒得学,能省一点是一点……
其实过去几年的App热潮导致大批零基础培训三五个月就上岗的iOS和安卓「程序员」涌入业界,那个代码质量之惨不忍睹,跟早年这批.net程序员刚入行时有一拼。但他们之所以有人肯要是因为没有代替品。而.net在Web端要跟一百多种服务器语言竞争,这帮人的下场可想而知。也只有在慢节奏、靠市场关系不靠技术吃饭的企业有活路了。
当然,并不是所有.net程序员都水平低下到这程度,有很多也是有热情、肯学习的,但越往上升发现方向越窄,很多就干脆去了微软。如果不去的话,发现可去的地方越来越少,既然都是要学习,学别的语言也没问题啊,就这么换到别的平台去了。
整个.net生态圈(特指国内)的情况是,高水平的大神不少,越往下,良品率越以惊人的速度下降。如果你打算打造一支开发.net的团队,那不好意思了,可能会招到一个不错的Leader,但招底下干活的人时,筛选成本一下子就变成了其他语言平台的好几倍。时间和人力都是钱啊。
这种恶劣环境不知道什么时候会有转机。我倒觉得.net core现在正处于一个很好的节点上:根据微软的东西第三个版本才能用的原则,配合VS2017的.net core已经足够可用和完善了,既能发挥出C#的优秀特性、又有开放的平台。最重要的是,如果有人正在研究它的话,说明肯定是个有足够热情和动力吸收新知识的程序员啊,比很多傍着热门平台吃老本的强多了。