|
众所周知,打从.NET诞生那一天起,业界就弥漫着一股贬低.NET的空气。许多公司排斥.NET,因为.NET低效的名声,加之怕被微软绑架的担心。许多C++程序员有偏见,看不起.NET程序员,认为那些人比较菜,才学入门级的语言。Java程序员对.NET也不待见,我们会Spring,Hibernate等一大堆框架,你们除了用类库还会什么?
这些看法有些确实是偏见,我们大可以有力地回击。有些看法却也不无道理,跨平台性.NET确实不如Java,主要是没有官方的多平台支持;论运行效率也确实与NativeC++有天生的差距。然而很大一部分责任,要归咎我们.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#图像处理程序。不过如果你就是在循环中一次次做IO操作,硬要int.Parse+trycatch来进行类型转换,甚至都懒得用StringBuilder的话,我们真该好好问问,C#不可忍受之慢——谁是罪魁祸首?
我不清楚造成.NET程序员群体这种现状的原因。我完全是自学入门的,当然开始时写了许多烂代码,现在可能也在写,但至少自己在不断提高。而很多的.NET程序员,不上论坛,不看博客,顶多案头放着一本一千多页的《.NET高级编程》(其实是低级编程,内容MSDN上全有)备查。
我估计,不止是.NET,多数C++/Java程序员也不是一天到晚学习和提高,大家需要多样的生活。但至少,在工作中可以不断提高吧,工作几年了犯初学者的错误实在是说不过去,只能归结为态度问题。可能是.NET比其他语言平台都容易入门得多,许多生性浮躁的初学者选择了它。甚至在有些人眼里,编程就是来混饭的,只要运行出结果,其他不关我的事。平庸的程序员只会产生消极的生产力(为什么新人不会编程)。当我每次为维护项目,花一整天甚至更久解决一个Bug时,我真想把开发者再抓回来,让他们自己dogfood。
在此的同仁们,你们是否曾有过类似的感受呢?相信大家既然能来博客园,能看到这篇文章,应该都是有志于不断学习提高而来。大家是程序员中最努力的群体,至少从代码风格上看,也跟平日接触的.NET程序员不是一个档次。不过现实中,不少人既追求专业,而对一些不太专业的用法习以为常。
比如今天看到一篇随笔如何写健壮的代码,道法同学先展示一段代码,然后提出了许多改进思路,这种追求每个细节的做法很值得学习,然而改进后的代码仍有几个问题:
如果要最严格的规范命名的话,parsedArgs不是改为_isArgsParsed,而是标准的Camel方式:argsParsed;还有只比较字符串相等与否,应该用Equals而不是CompareTo方法;最不应该的是出现了goto语句,这是不得已情况才用的。最后抛出异常时,应该抛一个具体的异常,在任何情况下都不应该抛出Exception异常。
在此,我向大家强烈推荐,如果没有读过,一定要读读《.NET设计规范》这本书,如果你之前一本书也没看过,那也应该先看看它。它是设计.NETFramework的大师们的智慧结晶,作为开发高质量.NET程序的规范指南,还有什么它更权威的呢?看过这本书,几乎可以避免所有常见的规范性问题,包括在上段提出的那几条。
园子里有好几个人写的代码是我们的榜样,像老赵,装配脑袋等人。还有一个人不得不提下,就是吉日嘎啦。作为一个半路学.NET的老程序员,十年来,不断思考并重构权限管理系统代码,大家可以看看DotNET.Common 命名空间的来源说明,真实地说明了统一规范的好处。虽然大家可能因为他的商业行为不喜欢他,可谁也不能否认,至少在专业及对专业的追求方面,吉日值得敬佩。
最后,我想对园子的.NET程序员同仁们说,也是对自己说,专业不是来自有没有证,而是来自我们的内心。我们要坚持自己的追求,坚持自己的风格,要有自信,坚决同不专业进行斗争。真正有价值的软件,一定出自追求专业的开发人员,我们决不会写出让火车追尾的调度程序的。
it知识库:.NET程序员,我们应该更专业点,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。