闲来无事,浏览自己的QQ空间,意外发现自己在13年1月份的发在QQ空间写的一片关于技术的随笔,觉得应该将其移到这里:

这些年,我们一直追随的.NET
       前两天,意外地看到了.NET平台为异步编程提供的最新选择:使用Async和Await。这让我感到非常惊喜——因为它大大的简化了异步编程,使得异步编程和同步编程在结构上几乎没有差异。兴奋之余,让我回想了很多.NET和C#这几年来的变化。
 
       大概在08年,我开始接触.NET,更确切的说,是.NET的C#编程语言。坦白地说,我对它的第一印象,就是C#是微软推出的一个类Java语言。但随着对C#和.NET平台的了解和深入,才发现我太小看它了。
   
      微软在02年就发布了.NET Framework的第一个版本,这个版本提供了公共语言运行时和C#语言,其目标就是为下一个十年的应用程序开发者提供语言、框架和快速开发环境。C#作为Java的竞争者,那时候的它还羽翼未丰。但它提供了用户自定义和访问元数据的功能,确实令人称赞。
   
      之后,.NET和C#快速进化。到我接触它的时候,它都已经升级到3.5版本了。但那个时候学校的机房全都装的vs2003,也只能无知的被动的用着1.0那个初级版本。也正因为这个,发生了一些很有趣的事儿.
 
      还清晰的记得,那是在学习C#的第一堂课上,出于好玩,写了一个Windows程序:使用一个后台线程定时去改变一个按钮的位置,这样那个按钮看起来就在满屏幕跳了...郁闷的是,当把那个程序用自己的电脑打开的时候,却不能运行了。抛出的异常内容大致是:一个UI控件只能被它创建的线程访问!
  
       当时,是没有立即明白是什么意思。在百度谷歌几遍后,才大致明白了:Framework2.0以后 ,禁止UI控件被不是创建它的线程访问——因为这可能造成UI控件的不一致性。然后又是几遍百度谷歌,知道怎么处理了。最后得出结论——Framework2.0真是麻烦。但后来发生的一件事儿,让我开始对Framework2.0肃然起敬。
 
      那是在学习ASP.NET的时候了,去图书馆借了一本红皮书,名字忘了,只清楚的记得书皮上有几个大字:ASP.NET之父倾力推荐。里面讲了很多关于C#和ASP.NET的东西,不过现在也都忘了,只记得里面讲的关于泛型的那个章节,让我久久不能忘怀——因为在那之前看《Think in Java》的时候,作者就为当时的Java没有提供一个强类型的列表非常感慨。终于不用在处理集合时,进行转型操作了!那是我第一次觉得C#比Java更优越(当然,现在的Java版本已经提供了泛型的支持)。
 
       另外一个让我偏爱C#而非Java的原因是它们对于事件的实现。C#在语言层方面提供了原生的支持:委托,它已经实现了观察者模式;Java注册一个事件却需要定义事件接口,内部维护监听者列表等几个步骤,相对来说,要麻烦多了。
   
      在09年,先后看了《你必须知道的.NET》和《CLR Via C#》。彼时彼刻,才终于对C#以及.NET平台有了一个大致的了解。知道了中间语言、CLR、装箱拆箱、GC等等好多好多的东西。不由得感叹:.NET平台就是牛逼!并且深信:我已经彻底喜欢上这门语言了。
 
      09年底,参加实习,并在工作中接触了.NET 3.5在语言层提供的最为牛逼的功能:linq和lambda表达式。其实,最初对它的感觉是:Linq这玩意儿不就是通过扩展方法的方式提供了一组操作集合的API嘛。后来才知道这种认识的局限性:通过对linq的扩展,linq可以查询多种数据源,而非仅是内存对象,比如说Linq to xml,Linq to sql,Linq to NHibernate...通过lambda表达式这一直观的方式来操作集合,简直天衣无缝。据说Java 8都准备支持lambda表达式了...而且C#以及.NET的进化之旅还在继续之中...
   
       在12年初的时候,意外中看到了微软推出的ASP.NET MVC。真是不看不知道,一看吓一跳,它被设计得是如此的优雅。以至于几个之前的基于.NET平台的开源MVC项目很快淡出了开发人员的视野。我完全被它折服了,坦白的说,如果要我现在去做一些页面,我一定会选择ASP.NET MVC ,而不是ASP.NET WebForm。它两者面对Http的无状态性的态度完全相反。MVC让视图看起来更加“干净”,而且没有了WebFrom里面那些复杂的控件和页面的生命周期。另外,MVC设计得如此灵活,以至于它可以很好的与IOC容器融合在一起,鼓励我们面向接口编程,写出更容易维护和单元测试的代码...
   
        后来,就到了两天以前...
 
       此刻,已是凌晨1:31,写到此吧,回味学习.NET过程是如此的美妙。但,明天还要上班,不得不停止敲击键盘...

这些年,我们一直追随的.NET的更多相关文章

  1. 追随自己的价值观:用研经理 Anne Diaz 职业探索之路

    『漫谈』系列聚焦了人性脆弱面的价值.每期的对话嘉宾可能是爱彼迎设计团队的成员,也可能来自设计界的其他领域.对话主题都是我们在工作中很少讨论的话题. 这些话题涉及不同方面,比如失败.人生道路.冲突.成长 ...

  2. 《如何成为一位大家愿意追随的Leader》读后感

    今天看了左耳朵耗子老师的文章<如何成为一位大家愿意追随的Leader>深有感触.每一行字都往心里说,文章里说到Leader和Boss的不同点在于,Leader是大家跟我一起上,而Boss则 ...

  3. 技术管理进阶——什么Leader值得追随?

    原创不易,求分享.求一键三连 ​Leader眼里的主动性 前几天孙狗下面小A身上发生了一件Case,让他感到很疑惑: 有一个跨部门较多的项目推进不力,于是善于交流的他被临时提拔成项目负责人,但马上令人 ...

  4. Getting started with Processing 示例11-9 追随鼠标移动

    程序片段 int num = 60; int[] x = new int[num]; int[] y = new int[num]; void setup(){ size(240,120); noSt ...

  5. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  6. 去IOE的一点反对意见以及其他

    某天在机场听见两老板在聊天,说到他们目前销售的报表老跟不上的问题,说要请一个人,专门合并和分析一些发过来的excel表格,我真想冲上去说,老板,你需要的是一个信息处理的系统,你需要咨询么.回来一直耿耿 ...

  7. Linux硬件IO的优化简介

    Linux硬件IO的优化简介 首先简单介绍下有哪些硬件设备如下(由于硬件种类厂家等各种因素我就不在此多做介绍有兴趣的可以自行学习): 1.CPU:中央处理器,是计算机运算控制的核心部件之一,相当于人的 ...

  8. github入门到上传本地项目【网上资源整合】

    [在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ...

  9. 前端学HTTP之客户端识别和cookie

    前面的话 Web服务器可能会同时与数千个不同的客户端进行对话.这些服务器通常要记录下它们在与谁交谈,而不会认为所有的请求都来自匿名的客户端.本文主要介绍客户端识别及cookie机制 HTTP首部 HT ...

随机推荐

  1. rhel-server srpms iso

    http://ftp.redhat.com/pub/redhat/linux/enterprise/7Server/en/ ftp://ftp.pslib.cz/pub/linux/redhat-cz ...

  2. Filecoin:一种去中心化的存储网络(二)

    开始初步了解学习Filecoin,如下是看白皮书的内容整理. 参考: 白皮书中文版 http://chainx.org/paper/index/index/id/13.html 白皮书英文版 http ...

  3. [会装]Spark standalone 模式的安装

    1. 简介 以standalone模式安装spark集群bin运行demo. 2.环境和介质准备 2.1 下载spark介质,根据现有hadoop的版本选择下载,我目前的环境中的hadoop版本是2. ...

  4. centos7.4通过yum安装mysql

    安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo ...

  5. html,图片上传预览,input file获取文件等相关操作

    input file常用方法: var obj=document.getElementById("upimage"); var file=obj.files[0];//获取文件数据 ...

  6. Python 从基础------进阶------算法 系列

    1.简介                                                                                               关 ...

  7. springboot的mvn与gradle启动方式

    1 很简单,直接鼠标右击项目,run启动项目 2 项目目录下的命令行  mvn spring-boot:run 或者  gradlew bootRun 3 进入libs下或者target下 java ...

  8. BotFramework Nodejs示例

    关于Bot Framework知识,可以参考<Nodejs Bot学习> 本文是根据bot framework sample<https://github.com/Microsoft ...

  9. 字符串匹配&Rabin-Karp算法讲解

    问题描述: Rabin-Karp的预处理时间是O(m),匹配时间O( ( n - m + 1 ) m )既然与朴素算法的匹配时间一样,而且还多了一些预处理时间,那为什么我们还要学习这个算法呢?虽然Ra ...

  10. go chapter 7 - 类型

    任意类型 interface{} 遍历并判断类型 func MyPrintf(args ...interface{}) { for _, arg := range args { switch arg. ...