前言
大家好。这是开通本号的第一篇文章。从事IT行业已经20年了,从使用PowerBuilder做企业信息系统开始,做了七八年开发,然后转型Java不是很成功,从07年之后,我转做产品经理,机缘巧合,在2012年之后,又接触到.Net编程,在2016年正式回归到开发的行列,整整10年。最近几年,在技术上要补以前落下的课,所以变化很快,进步也很快,16年基于DevExpress做Winform开发,17年转到基于asp.net mvc做web开发,再转java web开发,又转Andriod Java开发,18年再转微信公众号开发,和前端基于vue.js,angular,ionic做开发。压力大,动力也大,我还觉得我掌握了学习技术的窍门,这和十几年前我从技术转产品经理完全不同,那时候觉得做技术遇到瓶颈,没有学习的环境和机遇,所以才转做产品和管理。所以,我也很想将我学习的经验分享出来,大家一起学习进步。
我觉得最大的经验,就是在入门后,不要细细碎碎的学习,而是要读经典,读大部头书籍。因为只有在对一个方面有了全面的认识后,碰到问题才能举重若轻,才能有广阔的思路。所以我就考虑来解读经典书籍。
推送的第一篇文章,讲的是《C#高级编程》第七版,我通过这本书加深了对C#的理解,我读的C#高级经典仅此一本,反复读取多次,已经感觉很有裨益。在此之前,特别说明一下我觉得很重要的,是关于学习方法。我认为我以前一直想掌握而不得的学习方法,其实很简单,就好比“摊鸡蛋饼”,首先你得有面,而面要采用好的面粉,那就是在入门后就要开始猛攻经典书籍,2000页的经典书籍啃下来,再读几遍,你就有了一个好的打底。然后你针对具体问题可以搜索论坛文章,具体问题具体补充,这些是配菜。
而经典书籍太庞大,可以说十几年前,我就看过《Java编程思想》,《JavaScript权威指南》等经典书籍,结果没看下来,技术没能提升,最后转行做产品和管理。所以我就想,有没有一种方式,能让人轻松一点的了解这些经典书籍的精髓?所以我就想到了经典书籍解读。这是我想写这个专栏的原因。
现在流行写公众号,我的文章也会首发到公众号,并不定期的同步到博客园。所以欢迎大家关注我的公众号,更及时和便捷的读取文章。扫描二维码识别关注:
为了达成最好的学习效果,我的考虑是,学习应该像摊鸡蛋饼一样,既要有饼,也要有鸡蛋、葱花、配菜,这样才好吃。因此学习经典书籍,虽然够了,然而并不好吃,也不够扎实,因此我会在每篇主文章后面附两篇和当前解读相关的互联网上的文章,一般是会来自于博客园和CSDN。请大家也积极阅读附篇文章。
01
.Net和Java的对比
.Net在Java之后诞生,因此吸收了很多Java的成功经验。同时,.Net和Java一样都是基于虚拟机,能实现跨平台(当然.Net原先只是理论上的跨平台,直到后来有了Mono,最近几年微软了有自己的.Net Core)。如果将.Net和Java做个对比,它们之间大致可以按如下的等同理解:
1).Net的公共语言运行库(CLR)等同Java的虚拟机JVM。前者将高级语言编译成中间语言(IL),后者将Java语言编译成字节码(Bytecode)。
2).Net Framework等同JDK。也就是开发工具类库。
3)Java还有其他众多概念,比如JRE(Java Runtime Environment),JavaSE,JavaEE,JavaME等,对应各自不同的安装包。.Net相应比较少有对标概念。从这里可以体现出Java设计者和.Net设计者的风格区别。在我看来Java从语言到框架都想要有一种“范儿”,爱讲标准、模式,曾经很流行的所谓“21种设计模式”就来源于Java社区,有.Net开发者抄了不少,我是觉得并无必要,害处更大。而.Net的风格或者说微软的风格是简单高效,不讲范儿讲效率。.Net使用一个.Net Framework囊括了所有,配合其最优秀的开发工具Visual Studio(后面简称VS),使入门简单了很多。
02
C#和.Net的关系
.Net全称.Net Framework,它是一个框架,而C#是一门语言,基于.Net运行,基于.Net运行的语言还有VB.Net,VC++.Net等。
03
公用语言运行库(CLR)
CLR是.Net Framework的核心部分。从字面上很好理解,即其运行的是公共语言(也就是中间语言IL)。比如对于C#语言,需要先通过C#编译器(csc.exe)编译成中间语言,然后通过CLR将IL编译成不同操作系统平台的机器代码。这就是所谓的两阶段编译。因此,和JVM一样,CLR能提供平台无关性。
中间语言总是即时编译的(JIT编译),所谓JIT编译,就是某段IL被调用时,就会被立即编译成本地机器代码,之后就不再重新编译。这引发了.Net和Java谁更快的论战,我觉得这种论战意义不大。Java现在也已经引入了JIT编译机制。
JIT编译器还带来了一个性能福利,因为JIT编译器可以针对当前运行的处理器的特性进行针对性的编译优化,这是相对于C++等静态编译语言的优势。
CLR还提供了一个特性,即多语言的互操作性,比如C#和VB.Net,VC++.Net的互操作性。这是JVM所没有的,也体现了.Net的强大之处。同时.Net也对传统的COM提供了支持(通过包装器wrapper),从而能够实现和其他语言比如Delphi的互操作。
而多语言互操作性造就了一个比Java字节码还强大的中间语言。
请看下回分解。
觉得文章有意义的话,请动动手指,分享给朋友一起来共同学习进步。
附文: