众所周知,打从.Net诞生那一天起,业界就弥漫着一股贬低.Net的空气。许多公司排斥.Net,因为.Net低效的名声,加之怕被微软绑架的担心。许多C++程序员有偏见,看不起.Net程序员,认为那些人比较菜,才学入门级的语言。Java程序员对.Net也不待见,我们会Spring,Hibernate等一大堆框架,你们除了用类库还会什么?

  这些看法有些确实是偏见,我们大可以有力地回击。有些看法却也不无道理,跨平台性.Net确实不如Java,主要是没有官方的多平台支持;论运行效率也确实与Native C++有天生的差距。然而很大一部分责任,要归疚我们.Net程序员。

  其实每个开发平台,每种编程语言都有优势和劣势。做为.Net程序员,我们需要更专业一点,熟悉.Net的长短之处,最大化的利用和回避。

  我们要熟悉常用的设计模式,懂得DRY、SHY等编程原则,专业的运用Framework,写专业的代码。工作几年了,不要让人一看就是菜鸟。

  要有专业的代码风格,使用专业的命名。不要写几百行的方法,几千几万行的类,里面动辄十几层的花括号。我所见过的这种代码,一半以上都是水分。

  要知道要尽可能少地创建新对象,尽可能地减少IO和反射操作,尤其避免在循环中使用。

  要知道对客户输入作验证,要会正则表达式,要懂得如何尽可能避免类型转换,要会高效的类型转换方式。

  要明白一些基本Framework常识,比如List、Dictionary等集合类不是线程安全的,知道如何保证线程安全。

  不要再写Request.QueryString[id].ToString()和ConfigurationManager.AppSettings[key].ToString()这样的可笑代码了(我实在纳闷为什么一多半人都这么写),不要到处画蛇添足的Trim和Try…Catch了。当看到这种代码,连自己为身为.Net程序员群体一员感到羞惭。也就难怪其它语言的程序员看不起我们,以菜鸟的眼光看待我们了(参考《做Java开发这一年》),因为我们就是如此。

  其实,本来.Net虽然内存消耗大点,但运行速度总体并不比C++差,这点许多人已经实验证明过了。可以参考C#的性能到底有多差编写高效的C图像处理程序。我们要了解.Net,支持.Net,反射机制和异常处理等本是.Net的先进特性,不要把它们变成性能杀手,为攻击.Net的阵营制造磨刀送箭,反过来砍向.Net。如果你就是在循环中一次次进行IO和反射操作,硬要int.Parse+try catch来进行类型转换,甚至都懒得用StringBuilder的话,我们真该好好问问,C#不可忍受之慢,谁是罪魁祸首

  我不清楚造成.Net程序员群体这种现状的原因。我完全是自学入门的,当然开始时写了许多烂代码,现在可能也在写,但至少自己在不断提高。而很多的.Net程序员,不上论坛,不看博客,顶多案头放着一本一千多页的《.Net高级编程》(其实是低级编程,内容MSDN上全有)备查。

  我估计,不止是.Net,多数C++/Java程序员也不是一天到晚学习和提高,大家需要多样的生活。但至少,在工作中可以不断提高吧,工作几年了犯初学者的错误实在是说不过去,只能归结为态度问题。可能是.Net比其他语言平台都容易入门得多,许多生性浮躁的初学者选择了它。甚至在有些人眼里,编程就是来混饭的,只要运行出结果,其他不关我的事。平庸的程序员只会产生消极的生产力(为什么新人不会编程)。当我每次为维护项目,花一整天甚至更久解决一个Bug时,我真想把开发者再抓回来,让他们自己dogfood。

  在此的同仁们,你们是否曾有过类似的感受呢?相信大家既然能来博客园,能看到这篇文章,应该都是有志于不断学习提高而来。大家是程序员中最努力的群体,至少从代码风格上看,也跟平日接触的.Net程序员不是一个档次。不过现实中,不少人既追求专业,而对一些不太专业的用法习以为常。

  比如今天看到一篇随笔如何写健壮的代码,道法同学先展示一段代码,然后提出了许多改进思路,这种追求每个细节的做法很值得学习,然而改进后的代码仍有几个问题:

  如果要最严格的规范命名的话,parsedArgs不是改为_isArgsParsed,而是标准的Camel方式:argsParsed;还有只比较字符串相等与否,应该用Equals而不是CompareTo方法;最不应该的是出现了goto语句,这是不得已情况才用的。最后抛出异常时,应该抛一个具体的异常,在任何情况下都不应该抛出Exception异常。

  在此,我向大家强烈推荐,如果没有读过,一定要读读《.NET设计规范》这本书,如果你之前一本书也没看过,那也应该先看看它。它是设计.NET Framework的大师们的智慧结晶,作为开发高质量.Net程序的规范指南,还有什么它更权威的呢?看过这本书,几乎可以避免所有常见的规范性问题,包括在上段提出的那几条。

  园子里有好几个人写的代码是我们的榜样,像老赵,装配脑袋等人。还有一个人不得不提下,就是吉日嘎啦。作为一个半路学.Net的老程序员,十年来,不断思考并重构权限管理系统代码,大家可以看看DotNet.Common命名空间的来源说明,真实地说明了统一规范的好处。虽然大家可能因为他的商业行为不喜欢他,可谁也不能否认,至少在专业及对专业的追求方面,吉日值得敬佩。

  最后,我想对园子的.Net程序员同仁们说,也是对自己说,专业不是来自有没有证,而是来自我们的内心。我们要坚持自己的追求,坚持自己的风格,要有自信,坚决同不专业进行斗争。正价值的软件,一定出自追求专业的开发人员,我们决不会写出让火车追尾的调度程序的。 

posted on 2011-07-27 11:35  小城故事  阅读(20691)  评论(204编辑  收藏  举报