文章内容
2017/2/5 11:24:40,作 者: 黄兵
asp.net 是不是受人鄙视?
对于新问题,要看对“鄙视”的定义。就我个人的体会来说,http://asp.net的确存在被一些人怀有偏见的现象。原答案回答了对于被“鄙视”的情况下“鄙视”的原因,当然并不表示这些理由是正当的。
======原始答案分割线
首先强调,我是一名http://asp.net开发者,并不认为其应该受鄙视,只是对于其目前或者以后被鄙视可能的原因做一个粗略分析,方便找出问题的所在。
倾向于认为一味的自以为优越然后鄙视其他语言或平台都是没有任何意义的。我个人希望的是消除偏见,不管是针对其他语言还是被其他语言针对。
有很多层次的原因,依鄙视链发出者对http://asp.net的了解水平而异。
1. 微软
在很多人,特别是与开发无关人员的印象中,微软是一个专门垄断、高收费、压榨无产阶级劳动人民的公司。因此,支持微软就是在助长其垄断的趋势,不利于世界和平与发展。对于开发人员,部分可能认为支持微软就是在反对开源,阻碍代码界的进步。甚至可能在没有做过了解的情况下认为微软的所有东西都是漫天要价的,自己肯定用不起,在生产环境下又不能用盗版,所以直接放弃。
2. Windows
作为一个操作系统来说,Windows一旦和其他系统比起来,很多时候都逃脱不了被鄙视的命运。由于各种各样的原因,很多人(包括部分开发人员)会认为Windows效率低下、稳定性差、兼容性差,以及在设计上存在各种缺陷,甚至于反智等等。使得很多人在自己没有并没有做过Profile也没有看过别人的Profile的情况下想当然假定Windows不适合作为服务器操作系统。(当然有部分问题是缺失存在的,但其实很多问题都是XP/Server 2003时代的问题,早已被解决,另外其他问题也有很多被特意夸大)然后接下来还有对IIS的性能等各方面的质疑等,类似。
3. .NET Framework
对非微软系的人来说,这是一个很难解释的东西,虽然叫Framework,但又不好说它是一个框架,然后.NET这个名字也是个奇葩,实际上很难一两句话说明它是什么东西。于是很多误解就出现了,比如.NET就是在你电脑上另外开了一个虚拟机,然后来运行C#等语言,效率低下什么什么的。第一句其实还不能说完全错,C#编译成的IL实质就是一个机器语言,CLR相当于虚拟出了一个CPU来执行IL。问题在于很多人对虚拟机的理解是在虚拟机里装另一个操作系统然后在虚拟机的操作系统执行软件,而这里的虚拟机是虚拟出一个CPU来直接执行机器码。就效率上来说,基本上除了内存消耗比直接编译成本地代码要大,速度上并不会更慢的,甚至可能更快。.NET有NGen.exe,可以直接编译成当前主机的本地代码的,但是实际上真的不一定就会更快。具体的性能细节自己多看书或者谷歌吧,一两句话很难说。实际上Java的JVM也是一个道理,但说到Java,可能都觉得中间语言(字节码)是一个很好的设计;而说到.NET,很多人就担心这样效率到底有没有影响,这就是赤果果的认知偏见。
4. ASP
是的,这里说的就是ASP。因为http://asp.net这个东西实在是真心不好读,很多人就喜欢简称asp。问题是,asp这个东西确实是存在的,而且和http://asp.net基本关系不大,最终导致很多人把其和asp混为一谈,而asp早就是一门被淘汰的技术,所以很多人在并未严格区分asp和http://asp.net的情况下,认为其是一门早已淘汰的技术。(没错,很多人可能并不是觉得http://asp.net哪里不好,他可能就是以为你说的是asp,他也许根本就没有去了解http://asp.net是什么东西)当然,这个名字确实是个人都想吐槽,叫个稍微高大上一点的名字不行么,像Javascript这么叫是因为Java火呀,问题是asp又不火呀,再加一个后缀名你让别人不懂的怎么去理解。
5. http://asp.net WebForm
这个是其他答案里提到较多的原因,WebForm(也就是Web窗体)是http://ASP.NET中的一个东西,具体说它是个什么东西也是很困难的,倾向于描述其为一种框架,或者说一种模式。它的主要问题就在于大大”简化“了Web开发,让网站开发可以像桌面开发那样直接拖控件,然后定义事件,写响应代码。这里的服务器控件可能是让其他语言的Web开发者根本无法理解的事情。确实,这样做是有很多其他方面的问题的,比如:无法直接得知生成的HTML代码,前端不好设计样式;每一个事件响应都需要HTTP通信,相对于用js实现来说浪费了大量不必要的流量,而且速度慢,性能受到网速限制;无法做到关注点分离,每个页面间的代码独立性较强,甚至于大量使用Response.Write(/*part_of_html*/)方法返回HTML和Javascript,使得不同类型代码混叠,同类型代码分散,导致可维护性较差。还有很多不好的地方,在其他很多地方会有专门的讨论,此处从略。所以如果真要说是搞http://asp.net开发的,最好说清楚是http://asp.net MVC、WebAPI(其实WebAPI也还是某种意义上的MVC,所以vNext里合并了)、SignalR,最后可以并一个WebForm上去。当然,如果是简历的话主要还是看项目经历,你可以在具体项目里说明用的不是WebForm就好。
6. Developer
开发人员的素质也是一个比较严重的问题,由于Windows平台的廉价性(相对来说能装Linux或者用Mac的人而言),使得开发门槛过低,另外很多专门的培训机构也有http://asp.net课程,所以导致越来越多的人认为asp.net是小白开发人员的入门玩具。而且这里面真的绝大多数人用的都是WebForm,对MV*、前端的HTML/CSS/JS、数据库设计基本不了解,只是简单的拼页面和用各种事件响应凑成网站的业务逻辑。另一个问题在于,大部分计算机专业都不教授.NET方面,进一步导致了高素质人员的匮乏,很多所谓会http://asp.net的开发人员根本连C#的高级语法、各种设计模式、编程范式、基本算法和数据结构、计算机的运行原理都不了解,使得代码质量差,网站性能差,之后就被不知情的人归因为http://asp.net的原因。
7. C#
其实http://asp.net还可以用http://vb.net以及第三方或者开源项目支持的其他语言开发,不过目前应该最主要的就是C#。C#除了名字难读之外,在整个语言界其实也是比较孤立的。汇编和C主要搞底层,不屑于上面写高级语言的,C的往上做可以转C++,面向对象化;C++的开发人员主要做偏系统或基本组件,依旧可以不屑于上层的,如果要往Web发展大部分都转Java,然后和C#处于半相互不屑的状态;前端的开发人员如果转后台基本主要Java、PHP或者其他新兴的Self Hosting类语言,依旧不屑C#;P系(PHP、Perl、Python,甚至可以包括Ruby)的一直都对C系的语言比较不屑。总的来说,如果走向C#这条不归路,基本是孤立于其他语言的,之后也会有很多转出到别的语言(很多是因为工作需要)。不过其实C#就语言来说基本也算是最好的之一,单算语法糖基本就在开发效率上完虐。不过由于之前提到的很多原因,很多http://asp.net开发人员其实C#也就根本不怎么样,反而影响C#语言的名声。
8. 社区
虽然http://asp.net是开源的,但大部分情况下甚至很多http://asp.net开发人员都没觉得其是开源的,因此没有很多类似于各种开源社区或者论坛这样的东西(特别是国内),导致很多http://asp.net开发人员都是看书看MSDN各自为战,本身的团结性不是太高,因为有官方的存在导致很多开源库或框架没有收到足够的重视。
作者:Trotyl Yu
链接:https://www.zhihu.com/question/21902002/answer/35134759
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论列表