不要把讨论变成争论
我作为一年万年潜水者,其实是不太会写博客的。写博客也是一门艺术,要想写的好,还真需要不少扎实的基础。像我这样的菜鸟,又不精通排版,想写一篇文章还真是比较困难。最近博客园搞C#大论战,我也基本都看了一下所有的文章,对firelong和doms lab的两篇文章印象也比较深刻,里面的评论也都浏览的一遍。总的来说,有一种风气我觉得不好,那就是讨论变成了争论。
我做代码工人也有一段时间了,虽然不是某培训机构的,但是我最早是在另外个培训机构学习过JAVA,后来有些机缘从事了.NET编程,目前又在从事于JAVA的工作。比较遗憾的是知识没增加多少,年纪却越来越老。不过上年纪了也有件好事,就是能够在讨论问题的时候不太会被情绪所左右。接下来我就依据这些年来陆续的一些开发经验,来谈谈.NET吧。
1 .NET是什么?
我们这里一直所说的.NET其实是Microsoft.NET Framework的简称。打开Microsoft.NET的首页其实我们就可以得到答案 。 .NET Framework is
* Common LanguageRuntime – provides an abstraction layer over the operating system
这里说的抽象层,其实就是一个虚拟执行环境(VEE),也就是我们通常说的虚拟机。
* Base Class Libraries – pre-built code for common low-levelprogramming tasks
基础类库,也就是经常喜欢讨论的庞大臃肿的FrameworkLibrary。
* Development frameworks and technologies – reusable,customizable solutions for larger programming tasks
C# VB.NET C++/CLR语言 WPF/WCF/WF技术 各种组件都包含在内。
如果我们需要讨论例如C#慢,或者如C#写的程序如果脱离.NETRuntime(其实是CLR)或者C#的某些功能(其实是语言特性和CLI的功能)时,连基本的命题都不严谨,那么讨论的内容就很难达到合理的效果。
2 .NET带来了什么?
先说说我最早接触.NET时候的感觉吧,.NET技术可以说是从COM发展而来的,比起COM杂乱的组件,复杂的接口,.NET的Namespace技术让类库的组织的很清晰有条理。而且有了托管环境以后,类型的转换,资源的释放等方面,.NET少了很多心智负担(其实我不是很了解这个词的意思)。我第一个从事的小项目是用ASP.NET开发一个小知识库,这个就属于大家通常说的小型企业信息管理系统。在ASP还没有带.NET的时候,要做这样一个系统,就得使用ADO对象操作数据库,CDO对象来发信,还有许多其他的COM对象。没有ADO.NET和DataGrid的时候,在页面里频繁使用RecordSet和html标签是一个让很多Web程序员都挺头大的事情,在ASP.NET的WebForm提供事件驱动模型之前(虽然Postback技术有的时候很被人诟病),往往去写一些响应处理也会变的有些复杂 。就Web程序来说,.NET为我们带来了什么?——开发上的便捷。这个便捷还归功于另外一项利器VisualStudio (2005之前是VisualStudio .NET) 。我想不仅是Web程序,就桌面程序,通用组件,服务器端程序来看,.NET本身带来的开发上的便捷,大家应该是有目共睹的。除了开发上的便捷,.NET为我们带来了更多技术上的进步。这些技术进步融入了我们日常的工作学习中,也为软件行业的发展做出了贡献。作为一个coder,我想说.NETreally awesome (Java同样也很棒J)
3 .NET能做什么?
.NET什么都能做(当然,除了程序之外很多事情也做不了,呵呵)。举几个列子,Paint.NET的滤镜功能很强大,绝对不是mspaint可以比的。CurseClient管理魔兽世界的插件很方便,利用clickonce技术做部署,并不比一般的软件安装卸载麻烦多少。MySpace很火很强大。MOSS(EnterpriseContent Management), BizTalk(EAI)和CommerceServer(B2BB2C Platform)的应用也很广泛。除此之外,在PC, 手持设备,大型服务器上,在企业领域,游戏开发,桌面软件,都有.NET的身影。微软的远景很宏大,但.NET技术给我们生活带来的改变也很真实。
4 我建议应该讨论什么?
我们可以讨论CLR内部的工作机制,比如类是如何加载,虚拟机如何实现类型检查,垃圾回收具体怎么工作。我也可以讨论,如何让控件的绘制和渲染性能更好,怎样提高应用程序的用户体验效果。如何防止程序崩溃,资源泄漏,程序在哪些方面可以得到性能的改善。我们也可以讨论JavaC++ C#语言方面个有什么优点和不足。但如果我们为了争论JavaC#谁更好?C#sucks 还是C++rocks?这种连立意都不清楚的命题来打口水仗,于人于己不知道有什么收获呢…