众所周知,打从.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程序员同仁们说,也是对自己说,专业不是来自有没有证,而是来自我们的内心。我们要坚持自己的追求,坚持自己的风格,要有自信,坚决同不专业进行斗争。正价值的软件,一定出自追求专业的开发人员,我们决不会写出让火车追尾的调度程序的。

转载于:https://blog.51cto.com/guapian/629205

.NET程序员,我们应该更专业点相关推荐

  1. 新手Java程序员找工作更看重Java项目经验?

    动力节点IT培训,全真项目实操实训,贯穿八大行业,彻底帮助学员摆脱纸上谈兵的尴尬,一技成,天下行. 新手Java程序员找工作更看重Java项目经验?这个问题,想必是很多学Java的朋友也特别好奇的地方 ...

  2. 程序员如何学习更好的知识_如何保持学习并成为更好的程序员

    程序员如何学习更好的知识 by Kevin Gardner 凯文·加德纳(Kevin Gardner) 如何保持学习并成为更好的程序员 (How to keep learning and become ...

  3. 程序员应该如何更有效率

    程序员究竟该如何提高效率 "拖延症"这个名词近些年很火,似乎每个人都觉得自己的效率不高,很难集中注意力做好手头的事,那我们究竟该如何提高自己的工作效率呢,大牛来告诉你. Aaron ...

  4. 90 后的他带出7 个“师弟”,爱说话的程序员脱单更快?

    "我的花名是改之,不是'有则改之无则加勉'的改之,而是'杨过,字改之'的那个改之."一见面,他对自己花名的介绍,就让人耳目一新.至于为什么要用杨过的字给自己起名,他也毫不扭捏地坦诚 ...

  5. 明天520,程序员怎样表白更有效?

    明天是公历 5 月 20 日,民间意义上的一个表白节.自古以来,婚恋市场的行情就是旱的旱死,涝的涝死.有的人桃花遍地,有的人对象都只能 new 一个出来.其实,对于单身程序员们来说,搭讪表白,没你想的 ...

  6. 逼格程序员—比逼格更有逼格

    各种设计模式,用不用没关系,要会吹 各种数据结构,各种树,堆,栈,图,名字都要记住了,越拗口的越重要 各种奇葩算法,都要心中有数,名字听起来越是不知所云的,越要烂熟于胸 千万别和人争框架,一争,就lo ...

  7. 应届毕业生(程序员)如何工作更顺利、步步高升

    公司请外界的人给我们做培训,很有收获.总结如下,希望大家共同进步 1 赢得leader的信任 赢得leader的信任,才能有提升的机会,要做到不调活,没有人一开始就能担当大任,认真做好leader交代 ...

  8. 为什么程序员更喜欢用google搜索? 因为正经!

    web前端教程 用大白话,来讲编程 很多人,特别是学术.技术从业者之类的,比如:程序员,一提起搜索,肯定是更喜欢用谷歌.为什么? 搜索"Three-point perspective&quo ...

  9. 一年加班几百小时,我是二胎宝妈,更是敢拼的前端女程序员

    2008年,我毕业后嫁给大学男友,他是一名程序员,而我成为一名家庭主妇.三年内我怀了两胎.都说一孕傻三年,却没有阻断我对工作的激情. 我做过鞋店店员.移动营业厅的营业员······收入不稳定,还要整天 ...

  10. 从BAT对技术的投入、布局、发展等,深度剖析BAT哪家程序员更强

    Mike今天在网络上看到这样一个问题:腾讯.百度.阿里哪个公司的程序员最厉害? 这是一个有争议的话题,因为从不同的角度回答,会有不同的视野,有各自的理由,单纯地通过对比BAT,来讨论哪家程序员的技术更 ...

最新文章

  1. odu oracle 价格_Oracle数据库ODU的几种恢复场景
  2. LaTex 实数集R
  3. transient-java 关键字
  4. 【渝粤教育】电大中专药剂学基础知识 (3)作业 题库
  5. [Android]使用ViewPager实现图片滑动展示
  6. VMWare 修改虚拟机的swap文件
  7. eclipse中export 的jar file与 runnable jar file的区别
  8. cartographer 前端两个方法:相干性匹配与非线性优化;以及回环检测方法:利用了分枝定界的相干性匹配
  9. NBU备份Vmware
  10. 移动支付走入线下商家
  11. 蓝桥杯 -罗马数字问题
  12. 这种技术能够替代 Android 原生开发?
  13. php revel,golang,revel_Revel 的路由问题,golang,revel - phpStudy
  14. Riverbed:广域网优化应对“云”发展
  15. python自动剪视频_python剪切视频与合并视频的实现
  16. (转贴) 《超越自己》
  17. postcss-px2vw-pv 利用postcss实现 viewport 全新单位 pv
  18. 时钟源系统(时统系统)GPTP对自动驾驶的重要性
  19. 一文读懂 MySQL Explain 执行计划
  20. 三维可视化技术的应用现状及发展前景

热门文章

  1. 使用boostrap组件结合PageHelper完成javaweb网页的分页功能
  2. Unity3D官网教程:Roll-A-Ball实现C#代码,5.X版
  3. Java避免创建不必要的对象
  4. jQuery可悬停控制图片轮播
  5. 如何手动的用jigloo设计器关联java界面文件 jigloo 设计器失去关联解决
  6. 中兴ZXR10交换机配置手册
  7. WPF程序中的XPSDocumentViewer
  8. 一文告诉你,为什么要研究JVM原理
  9. linux下给php安装pdo_mysql和zlib以及测试模式的选择(禅道安装过程中遇到的问题)...
  10. 开源一个上架App Store的相机App