谈谈我对C#之父谈话的解读
呵呵 前些天我发了一个“我和C#之父的谈话”http://topic.csdn.net/u/20111224/20/65a3b3a1-bd1e-4ac2-82ea-50832a550dd4.html帖子 很多热心的朋友表示看不懂我在说什么
这个的确,有些内容要靠读者自己揣摩,比如我说“C#中的Linq和.net4.5中的异步是不是借鉴了javascript的思想?”这句话,看似不符合逻辑,摸不着头脑,其实您如果了解Linq的来源,深入它的原理,并且非常熟练掌握Javascript,了解Anders等一些大师对javascript的赞美,您就会明白了
当然还有 比如“我发现.net类库怎么越来越像Windows API,难道不能像Javascript设计的更好些吗?” 明眼人一看,什么.net类库像Windows API,明显就有语法错误,但是抛开这个表面,您如果搞过Windows的C SDK编程(以及了解程序员、Linux阵营对它的批评、讽刺),并且了解javascript在语义化话API的佳作,您就明白这个问题十分尖锐了
我就解释两句,抛砖引玉,剩下的就看读者抱着怎样的心态理解了
当然,这篇文章中有太多值得讨论的技术话题,不仅如此,除技术之外,文笔中处处洋溢着对大师的致敬,比如Anders谈他对Java之父的看法,谈 我们选择Java还是C# 以及 语言之争的问题,这些回答处处展现出Anders大师的风范
不仅如此,文章中还介绍了大师的一些生活片段,这些描述可不是多余的,意在说明对待大师不要盲目崇拜,大师也是人,他也吸烟,爱吃红烧肉,而且也像我们大部分人一样---学历不好,出身不好
特别的是最后阐述Anders大师对问题的讲解的特点---“总是给你一个精确深刻的分析,给你详细说明情况,至于结论,你要自己下”意指对待问题我们要有独立的思考意识,自己选择自己的道路 这才是本文的点睛之笔
[解决办法]
光说些大道理可能你不爱听,但是其实这比我下面说的更有意义。
下面谈谈具体的技术。几个问题,我只能大概说说,如果有兴趣呢,对不起,我不建议你看IL,我建议你看书。
首先是LINQ,这一点呢,LINQ版的督察是高手,我只是谈谈我的一点看法。这个LINQ的实质呢,和什么Lambda表达式,Extend Merhod,或者var,没有太大的关系,而且你也没有说完整。实际上,LINQ还用到了如下的语法现象,比如类初始化器,比如泛型接口,比如迭代器算子和yield。当然,最重要的是,它使用了Expression Tree,表达式树和Lambda的配合,使得长期以来我们对C#的认识发生了根本性的改变,而且直接影响了之后的一些有趣的东西。
之前我们一直认为,C#编译器的作用是将C#源程序翻译成IL。而CLR则调用JIT产生本地代码并且执行。在表达式树的时候,这一点被打破了。C#可以把一些C#代码编译成描述性的数据(表达式树),而不是最终的代码。这样做,使得运行期间,Linq to SQL 将这些描述性的数据转化为SQL在数据库端查询成为了可能。
也正是从这个时候开始,C#编译器的作用变得多元,C#可以为SilverLight,产生代码,而不是CLR。同时,C#可以和DLR交互,实现了动态。最后,微软将开放编译器模型,我们有了Rosyln。
当然上面这些只是题外话,LINQ根本的思想是,将描述式编程引入了C#和.NET平台。之前的技术种种,包括你说的那些,使得LINQ成为一个经典的Meta Programming和Domain Language(确切地说,是sub language)的实践。
[解决办法]
在我上大学的时候,我也沉浸于算法的研究中,参加了很多的算法比赛。为了写出更精炼的程序和同学PK过。把技术玩得很深。当然那时我钻研的是VB和API。我可以让VB做很多不可思议的事情。
这很好。尤其是大学的时候能认识一两个高手同学,一起进步。
我想工作以后来看也许这的确没有什么太大的意义,但是会成为你一段美好的回忆。