有一个说法,恋旧的人是好人。我也很恋旧,所以我相信我是好人。

  花花世界,充满着诱惑,诱惑我们迷失,诱惑我们犯错。怀旧的人往往实践着“贫贱之交不可忘,糟糠之妻不下堂”的原则。如果一个人对能老婆很好,白头到老,那他多半是个好人。

image 程序员要禁得住诱惑

  程序员就是最佳老公职业之一,可以参考《嫁给程序员的好处》(版本一版本二)。

  对老婆好自然天经地义。”别把代码当老婆“其中一层含义是:Coding不是生活的全部,程序员和常人一样,除了工作还有许多重要的事。关于本文真正主题,是另一层含义:很多程序员不只对老婆恋旧,对自己的Code也恋旧,和对老婆一样,一见钟情,誓死不渝。

  看我们的程序员有多怀旧:使用Hashtable实现简单的关键字过滤闲话Hashtable与DictionaryhashTable和多线程问题。在.Net支持泛型多年后,很多人依然对HashTable、ArrayList津津乐道。

  直到现在,经常看到同事写这么一段代码:

FileStream fs = new FileStream(filename);
StreamReader sr = new StreamReader(fs);
string content = sr.ReadToEnd();
sr.Close();
fs.Close();
return content;

  我曾经十分纳闷,他们为何要搞得这么曲折呢?看了《.Net设计规范》才明白,当时.Net Framework1.1对文件读写支持上,收到了许多易用性差的反馈,所以从.Net2.0起,简化了许多常用的IO操作。

  对于.NET技术,目前仍在上升期,发展得很快,有不少技术或实践都会不断更新,会出现很多新的编程模型,也会有很多被证明低效的实践被淘汰。事隔多年以后,要知道.Net4.0都已发布好久了,许多人还是不领微软的好心,执著地坚持.Net 1.1时代的方式。甚至有些书还在介绍这些过时的类,过时的实现。读这样的代码,顿时感到一股陈腐之气扑面而来。

  有人也许会说,微软技术发展太快,你追也追不上。很多新手,学.Net都从4.0学起,作为从.Net2.0甚至更早时期过来的老兵,难道还怕落后于新手吗?选择了.Net,说明你很有眼光,.Net是微软打造下一代平台和软件的基础。它既不会进化太快让人无所适从,又不会你Java那样固步自封。

  每次升级,新特性总是能带来生产力的解放,要么是开发效率,要么是性能。有些特性,带来了全新的领域,比如MVC、AEF、WCF等等。还有些特性,则是为了纠正或改善过去不太好的做法,没有什么技术是完美的。每次你在复制粘贴FileStream/StreamReader代码时,难道没有想过这是不是有点啰嗦?为什么不想去简化它,为自己,为世界减少一份烦扰,带来一份清新呢?

  请用泛型集合如Dictionary,多用泛型接口和泛型方法,忘掉HashTable、ArrayList吧。

  请用Framework内置的泛型的委托Action、Func,代替自己定义新委托类型。

  请用Linq To XML代替XmlDocument和XPathNavigator。

  请用Entity Framework(AEF)代替Linq To SQL。如果不是SQL Server数据库,也赶紧选择一个ORM框架吧。

  请用WCF来升级过去WSE,MSMQ,.NET Remoting。

  请熟悉System.Threading.Task 下的类,为你把多线程下的编程能力提高到新的层次吧(.Net 4.0)。

  请尽可能用ManualResetEventSlim、ReaderWriterLockSlim这些"Slim"类。请用SpinLock在部分场合代替Monitor。这些都会带来更好的性能,更舒适的使用(.Net 4.0)。

  请尽可能用dynamic,代替反射。

  请考虑System.Runtime.Caching命名空间下的类,如果你想进行全局的缓存管理。

  请使用Razor模板代替aspx页、母版页,并考虑采用MVC。

  请放弃古老的GridView吧,Ajax时代已经好多年了,这些华而不实的控件作用就是当教学的玩具。

  如果你还在用.Net2.0/VS2005,请尽快升级吧,就算不能到.Net4.0,用.Net3.5也好,一个简单的var就可以让你coding心情好很多。

  看么这么多,恋旧的程序员表示压力很大,还是无动于衷呢?当然这里列举的技术只是一小部分,大家可以继续补充。不管你想什么,我想说,请不要把你的代码当老婆,对技术喜新厌旧不是罪恶。并不是一味追求新鲜刺激,我采用上面这些新技术(有些已经不算新了),是为了减轻我们的负担,让生活更美好、世界更和谐。

  当然,也有一些新技术虽然初衷不错,但与现实脱节,比如号称一分钟创建数据驱动网站的Dynamic Data技术。可是至少你要去接触、去思考,而绝不能坐井观天,那不是恋旧,而是懒堕和不思进取。如果你真是对过去的代码恋旧,学新技术是引发了你的负罪感,那我无话可说,我道歉。

  很少有新技术是某个人哪天心血来潮就发明的,而是善于思考的先驱和牛人,在长期实践、思考、探索后的成果,响应了业界的呼声,顺应了时代的潮流。我们即使未能参与,也应该早就关注并思考任何改进现有编程方式的动态,我认为这是合格程序员的必备素质。

  比如AEF,可以消灭成千上万行的DAL层代码,可以消灭绝大部分的存储过程,可以让程序员和DBA都更轻松、更融洽。如此动人的技术,我们张开双臂拥抱还来不及,更别说排斥了。何况,一般情况我们只是学习和吸收别人的先进思想,如果连学习都做不到,更谈何去创新呢?

  恋旧的程序员还有个特点,宁可注释也敢不删掉废弃代码。这样的程序员几个特质,清晰的浮现出来,至少必居其一:一没有自信,二不敢承担责任,三做事优柔寡断有点娘。

 image 程序员要懂得取舍

  人要不断扔掉垃圾,忘掉消极的回忆,摒弃过时的理念,不要认为你失去了什么,那些留在你脑海里是负资产。人脑的容量可以无限扩展,但人的关注点永远还是几个。人只能有一份真爱,维护项目的关键是控制工作量(架构腐化之谜)。

  弱水三千,只取一瓢。既然有了更好的选择,你曾经的“老婆”就成了你的牵绊,你的枷锁。不要禁锢了自己,也禁锢了其他想有所作为的人,长此以往,整个人也变得老气横秋。程序员要果断、毫不留情地抛充陈旧的代码,落后的思想、编程方式和流程。甩开包袱,重构代码,重构自己的未来。

  以自己为例,我对浏览器兼容性比较有研究,特别是对IE6的怪脾气摸得很透。我的代码导致关于浏览器兼容性的Bug,通常比别人少一个数量级。但我没有对此津津乐道,因为这些技术特长随着WEB标准的推行会失去价值。IE6要被淘汰了,虽然IE6兼容性暂时是我一项技术特长,但我没有一点失落。在今年我负责的新项目中,我再也没有考虑IE6的支持,让那些无聊的兼容技术被忘个干净吧。我要在头脑中腾出空间,来容纳HTML5、CSS3这些新鲜养分。

  本文开头说过,我是个恋旧的人,但我不是个什么都恋旧。我不恋旧技术,正是因为对亲情、友情、爱情的恋旧。我们程序员是好老公的职业,请想想看,你的老婆(没有可以假设一下)为什么会跟你在一起,她找的是一个没有激情、不求上进的人吗?

  答案当然是否定的,上进心是女人最期待男人的素质之一。时刻不要忘了,谁是你真正的老婆。借用Visual Studio 2010发布会的一句口号,努力为她的未来,Coding一个完美世界吧。

posted on 2011-08-01 11:43  小城故事  阅读(6532)  评论(80编辑  收藏  举报