转自 http://www.zhihu.com/question/25908953/answer/32119971
因为这是一个商业问题,不是技术问题。
我在面试时探讨过这个问题,对方创业期,问我如果有需要的话我能不能从.NET转Java或者PHP。我说,客观地跟你说,要选择哪个平台,是个商业问题,不是技术问题。
决定技术选型的,抛去逗比领导二产品那不知道那里来的“Java比.NET好,Linux比Windows强”的技术信仰,是个商业问题,三点:反应速度、实施成本、技术梯队。
1. 反应速度
商场无大不破,唯快不破。技术基本都是新兴市场,谁吃第一口蛋糕谁就是大哥,无谓技术好坏。你们还记得大明湖畔的IE6,还有它的好基友Flash吗?还有OpenSSL呢?
在做企业站,Java和.NET都是渣渣,1块钱5000套淘宝模板的PHP才是王道呢。如果是一些企业开发,成型的Java生态系统可谓比.NET多不少参照物。就像SSH说到底不过是MVC、IoC、ORM,大家都有这些东西,只是Java的成型产品更多,复制黏贴就能解决很多问题。
不过在这个时代,个性化的开发更加有开发市场,拼的就是框架能力、资源量、开发工具,Java并不比.NET具有明显优势。至少从创业公司或者传统公司转互联网的这个市场里,个人见到.NET比Java多。
2. 实施成本
很多人有开源崇拜,我倒觉得这里混杂了很多圣母病和共产病,得治。
事实基本上是人力和正版化。许多影响成本判断的就是对工具功能的忽视,这在中国是严重现象,说到底能是软件工程管理能力太低,没办法把投资变现。一套宇宙第一IDE才多少钱,一条内存条才多少钱,但对码农的攻击力加成有多少管理人员能变现?你花钱买IOE不就是因为花钱能解决问题么?
其实关乎.NET来说通常是Windows Server和Linux、IDE、SQL Server和MySQL的问题。在这个泡沫时代,能Build Linux优化MySQL的有几个?微软的那套东西又已经进步了多少了?没理由做技术的不相信科技的生产力吧?
实施成本在后期会放大化,在服务集群的时候。IOE不说,Windows Server确实贵,不过这个成本差异在多少台服务器的时候会体现有多少人真的算过?
在这里不得不补充一句,Mono确实是.NET的希望,虽然不一定是微软的希望。
3. 技术梯队
在IT届,牛人和渣渣是类似的。牛人要换平台,成本很低,渣渣也是。在牛人和渣渣中间的这批人,就是广大的中产,也是IT届主要“纳税人”。但稀缺领域渣渣会被当牛人用。
人脑的进步是有限的,再牛的牛人都砸不过钞票,当产品发展,你需要在合适的时候请到合适的人。在你就缺个敲代码的时候招个能敲代码的,在你到花钱请人帮你搞定的时候你要请到人。
这个时候你就要考虑人才市场的情况了。Java那么老了,加上Android带起的风,人才琳琅满目,给得起钱就有人来。.NET由于Windows不年轻,人才市场分布情况也十分乐观,只是少那种互联网式的贵价人才。如果你做两年Python、PHP、前端、iOS、Android能拿15k~25k,作为一个应届生对.NET竖中指也是很正常的。这不代表做企业开发的人弱,我想中国人都应该知道“如果当初买了房”的故事。
只是企业必须考虑人才市场对技术梯队的影响,这个领域现在花钱能不能请到我要请的人,将来花钱又能不能请得到。因为最可悲的是有钱花不出,然后渣渣当牛人用。作为企业是觉得Android拉高了Java价格而倾向.NET,还是打算未来等移动互联网泡沫破灭抄底,这是企业实际的考虑情况了。
去年的薪酬调查如果数据真实,那么反应的情况还是非常明显的:
Java狗确实比.NET狗多。你可以认为吹嘘Java的比吹嘘.NET的人多1.5倍,拍马屁的Java狗比拍马屁的.NET狗多1.5倍,需要自信的Java狗比需要自信的.NET狗多1.5倍,Java在二货领导耳边出现的次数比.NET高1.5倍......这个世界上还有人相信PHP是世界上最好的语言呢。
以上不过是客观情况的考虑问题,因为我们对理性抱有太天真的想法了,特别是技术领域。你永远应该高估犯二的产品、领导、老员工所能产生的巨大AT力场。你以为他们的所有理由都需要理由?