Why .NET Sucks?

写此文纯粹为了回复.NET不死,为什么企业招聘都要java? 一文。从01年以来,.NET从最初的2000beta2一路凯歌猛进到了2008,Framework从1.0一下子跃进到了3.5,从3.5以来 wpf,wcf,wwf,Linq,ASP.NET MVC,我们的感觉是.NET很好很强大,什么都有。但是.NET的程序员怎么就越来越不值钱了呢?很简单的对比,在我原来所在的一个公司里,有java的项目也有.NET的项目,做Java的程序员待遇普遍比做.NET的高出一大截。就程序员本质来说其实并没有多大的区别,那么问题就只能在.NET本身上头来找,所以就有了本文:Why .NET Sucks?

第一,一种技术是否值钱,首先取决与市场价值,当然对于C#或者Java这类应用领域非常一致的商用语言来说,其实越难学的也就是工资越高的。越难学的工资越高这句话绝对是话糙理不糙。难学说明了人力成本中的培训成本会比较高,所以这类技术人员的工资确实就要高一些。那么.NET的超级工具,让我们开发起来超级方便的超级工具:VS.NET其实就是制约我们工资提升的最大障碍,老板会理直气壮的告诉你,会用VS.NET拖拖拉拉就能开发的程序员量产起来快得很,就这点工资你不老实干就开掉你换一个,你后头还有好几个找不到工作的.NET程序员供我选呢。

其二,.NET提供给我们的发展空间太狭窄了(或许是我眼光太狭窄),罗列一下之前我提到过的:wpf,wcf,wwf,Linq,ASP.NET MVC,微软把什么都做了,留给我们的除了傻乎乎的拿起linq,wcf,wwf去吭叱吭叱的码格子堆代码,还剩下些什么呢?架构设计?那是少数人的事情毕竟也轮不到程序员。做业务分析?那也是少数派报告。不可能一个项目从头开始全部手写代码吧?这样是不是活回去了?java程序员从Struts到Spring到Hibernate可谓武装到了牙齿。整套下来还不要钱,觉得Hibernate不合适还可以换ibatis,apache下头一大队候补的佳丽,可谓是后宫佳丽3千,试问.NET又能够靠什么让六宫粉黛无颜色呢?前有JAVA的堵截,后头还有ROR,Python,PHP,一大群追兵,从标榜自己开发起来不是一般得快的ROR(不知道沉得是否也快),到标榜自己跑起来飞快的Python(豆瓣的神话造就了Python的急速传说),还有标榜自己光膀子不怕穿鞋,完全免费的PHP。再换句话说,我们就坚定不移的跟着微软走吧,那么除了拿着VS.NET做网站,我们还剩下了些什么事情做呢,那就怪不得人家招JAVA的人多了,用JAVA做工作流中间件的可以卖钱,你用.NET试试,人家直接跟你说我们用WWF了,还用花钱用你的?做个ORM,MVC框架能卖钱?到处都是免费的,微软自带的,绝对没有任何一个开发企业会为了ORM还是MVC什么的花一分钱,要用都用开源的,所谓微软这种大包大揽的行为极大的打击了开源团队的积极性,MonoRails还没说要收钱呢,微软就忙不迭的搞了个自己的MVC框架出来。看着Java下第三方厂商的中间件热火朝天的时候,还真不知道我们应该在.NET下做点什么能卖钱的。

 

其三是我个人多年来在使用.NET的时候的积怨,其实我到现在为止都挺厌恶微软给.NET设计的API,太恶心,尤其是Drawing下边的哪些API流露出浓重的MFC的味道。而且异常处理的机制也异常的混乱,既然有了异常处理的机制就用异常来解决问题嘛,结果有的通过返回bool来提示错误,有的通过错误标示的参数来返回错误,异常也没有声明的机制,结果很多时候在使用一些类的时候根本不知道有哪些异常需要处理,很多新手就很笼统的给个Exception了事,那么这个异常处理的机制还有什么用呢?习惯了JAVA的声明式异常之后会很迷惑于这种模糊的方式。

 

还有一个很搞笑的地方就是异常的抛出:throw ex,throw,throw new XXException("error",ex);一个会中断异常的堆栈,一个不会另一个也不会,这不是多此一举么,简直就是茴香豆的回有四种写法。直接让throw ex不会中断异常堆栈就行了何必还要多此一举呢?

-------------------------------------------------------原文------------------------------------------------------------------------------------

还有一个很搞笑的地方是,你在捕获到一个异常的时候还不能直接把它抛出去,还要new一个异常,把捕获到的异常作为InnerException包裹一次后才能抛出去,不然在调试的时候就跟踪不到真正出现错误的地方而是在直接抛出的那个地方中断了。

-----------------------------------------------------------------------------------------------------------------------------------------------

都到了3.5了都还没有提供对DynamicProxy的支持,结果现在.NET下的AOP看起来都还是那么怪异,实现起来也麻烦。

 

其实发了很多牢骚,说.NET Sucks也不过是气话,我们无法否认.NET是一个伟大的开发平台,无法否认微软是一个伟大的公司,不过.NEt再伟大,得到利益的始终是微软而不是广大的开发人员而已。

 

 

posted on 2008-09-08 23:17  亚历山大同志  阅读(7707)  评论(43编辑  收藏  举报

导航