.NET程序员,我们应该更专业点

标签: net 程序员 专业 | 发表时间:2011-07-27 11:35 | 作者:小城故事 華
出处:http://www.cnblogs.com/

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

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

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

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

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

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

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

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

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

  其实,本来.Net虽然内存消耗大点,但运行速度总体并不比C++差多少,这点许多人已经实验证明了。可以参考C#的性能到底有多差 编写高效的C#图像处理程序。不过如果你就是在循环中一次次做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程序员同仁们说,也是对自己说,专业不是来自有没有证,而是来自我们的内心。我们要坚持自己的追求,坚持自己的风格,要有自信,坚决同不专业进行斗争。正价值的软件,一定出自追求专业的开发人员,我们决不会写出让火车追尾的调度程序的。 

作者: 小城故事 发表于 2011-07-27 11:35 原文链接

评论: 116 查看评论 发表评论


最新新闻:
· 盛大游戏CEO:明年斥资2亿美元用于海内外收购(2011-07-27 22:44)
· 人人总裁刘健:浏览器将成为游戏的最大客户端(2011-07-27 22:36)
· 网游裂变:Zynga之火带动社交游戏的崛起(2011-07-27 22:16)
· 谷歌为开发者发布 Chrome14为Lion设计(2011-07-27 22:09)
· 东芝将推首款WP7“芒果”系统手机(2011-07-27 22:00)

编辑推荐:.NET程序员,我们应该更专业点

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [net 程序员 专业] 推荐:

.NET程序员,我们应该更专业点

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

【外刊IT评论网】为什么我们不要 .NET 程序员

- - 外刊IT评论网
本文是从 Why we don’t hire .NET programmers 这篇文章翻译而来.   也许你已经知道了,我们 正在招聘最优秀的程序员. 但是我们的程序员能打败你们的——任何时候. 比如,米奇虽然只有5英尺高,但他是一个有相当实力的击剑手. 维托尔德以前是一个6’3″的职业冰球选手.

工作多年的.NET程序员,是否建立了自己的开发知识库?分享制作电子书的经验

- L - 博客园-首页原创精华区
经过多年的编程经验的积累,工作中肯定会遇到很多问题,也都通过各种办法解决了. 无论是上网搜索,或是向同事寻求帮忙,在遇到问题时,都会把这个系列的问题的网页都保存起来,以便以后查找起来方便. 这样,随着时间的积累,知识库的内容会越来越多,如何整理这些文件,方便查找,一直是工作之外努力的方向. 曾经用EverNote建立各种知识库,如下图所示,定期抽出时间,在网上搜索,看到好的文章,都剪贴下来.

Debugging .NET Core on Linux with LLDB | RayDBG

- -
The LLDB debugger is conceptually similar to the native Windows debugging tools in that it is a low level and command live driven debugger. Part of the reason the .NET Core team chose the LLDB debugger was for its extensibility points that allowed them to create the SOS plugin which can be used to debug .NET core applications.

Microsoft .NET Gadgeteer 简介及其它

- 王雪松 - 博客园-首页原创精华区
     Microsoft .NET Gadgeteer 为开发小型电子模块或嵌入式设备的用户,提供一个快速构建原型机的平台. 它结合了面向对象编程的优点,提供一系列电子模块,可以快速地用这些模块进行计算机辅助设计.      通过.NET Gadgeteer模块可以很容易的构建简单或复杂的设备.

Windows 8将Silverlight和.Net打入冷宫?

- Will - ITeye资讯频道
微软近期在D9和Computex 2011大会上演示了Windows 8,普通用户对于Windows 8的全新界面和触摸功能相比是欣喜不已,但是有那么一群人,却倍感沮丧和担忧. 他们就是Silverlight和.Net开发人员,Windows 8会采用什么样的开发平台呢. 是不是会将Silverlight和.Net打入冷宫.

微软推出开源平台.NET Gadgeteer

- dydso - Solidot
微软推出了一个开源软件和开源硬件平台.NET Gadgeteer,但兼容.NET Gadgeteer的硬件价格不菲. .NET Gadgeteer是一套用于创造不同用途的小型电子设备的开源工具集,使用.NET Micro Framework和Visual Studio/Visual C# Express,结合硬件模块和.NET软件,让用户能在不十分了解硬件知识的情况下,在数小时内创造出智能电子设备,制造出快速原型设备,帮助教师设计新颖的交互教育仪器,帮助业余爱好者创造出想象中的事物.

Visual Studio 2012和.NET Framework 4.5发布

- - 博客 - 伯乐在线
摘要:好消息,微软负责Visual Studio部门的公司副总裁Jason Zander发表博客,宣布Visual Studio 2012和.NET Framework 4.5现在已经可以下载,同时提供MSDN订户、付费版本、试用版和免费Express版. 此外,他还列举了升级到Visual Studio 2012的十二大理由.

微软宣布将开源.NET

- - Solidot
微软宣布它计划在MIT许可证下开源.NET软件架构,源代码(项目页面目前只有文档)将托管在GitHub上. .NET架构目前只支持在Windows上运行,微软表示它计划让.NET跨平台支持OS X和Linux. 微软计划在下一个版本中开源整个.NET服务器堆栈,从 ASP.NET 5到通用语言运行库到基础类库.

说说.NET反编译工具

- - 标点符
自己都不会.NET,但是目前团队里都是使用的.NET开发,整理一些.NET相关的知识,以便和团队一起成长. .NET和先前我接触的PHP、Python不一样的是代码需要经过编译,很多提供到网站的组件都是编译过的,很难看到源代码. 所以造成了一部分反编译工具的流行. Reflector应该是最为熟知的.NET反编译工具,最早由微软员工Lutz Roeder编写并免费提供,它除了能将IL转换为C#或Visual Basic以外,Reflector还能够提供程序集中类及其成员的概要信息、提供查看程序集中IL的能力以及提供对第三方插件的支持.