有趣的语言现象学习过程Net Langua...

R语言知识体系概览
发表于 09:50|
摘要:R语言的知识体系并非语法这么简单,如果都不了R的全貌,何谈学好R语言呢。本文将展示介绍R语言的知识体系结构,并告诉读者如何才能高效地学习R语言。
最近遇到很多的程序员都想转行到数据分析,于是就开始学习R语言。总以为有了其他语言的编程背景,学习R语言就是一件很简单的事情,一味地追求速度,但不求甚解,有些同学说2周就能掌握R语言,但掌握的仅仅是R语言的语法,其实这只能算是入门。
R语言的知识体系并非语法这么简单,如果都不了R的全貌,何谈学好R语言呢。本文将展示介绍R语言的知识体系结构,并告诉读者如何才能高效地学习R语言。
R语言在线培训地址:
1. R的知识体系结构
R语言是一门统计语言,主要用于数学建模、统计计算、数据处理、可视化 等几个方向,R语言天生就不同于其他的编程语言。R语言封装了各种基础学科的计算函数,我们在R语言编程的过程中只需要调用这些计算函数,就可以构建出面向不同领域、不同业务的、复杂的数学模型。掌握R语言的语法,仅仅是学习R语言的第一步,要学好R语言,需要你要具备基础学科能力(初等数学,高等数学,线性代数,离散数学,概率论,统计学)
+ 业务知识(金融,生物,互联网) + IT技术(R语法,R包,数据库,算法) 的结合。所以把眼光放长点,只有把自己的综合知识水平提升,你才真正地学好R语言。换句话说,一旦你学成了,你将是不可被替代的。
1.1 R的知识体系结构概览
R的知识体系结构是复杂的,要想学好R,就必须把多学科的知识综合运用,所以最大的难点不在于语言本身,而在于使用者的知识基础和综合运用的能力。
首先,从宏观上让我们先看一下R的知识体系结构的全貌,然后再分别解释每个部分的细节。
注:此图仅仅是我对R语言的理解,不排除由于个人阅历有限,观点片面的问题。
图中我将R语言知识体系结构分为3个部分:IT技术 + 业务知识 + 基础学科。
&IT技术:是计算时代必备的技术之一,R语言就是一种我们应该要掌握技术。
&业务知识:是市场经验和法则,不管你在什么公司,都会有自己的产品、销售、市场等,你要了解你的公司产品有什么,客户是谁,怎么才能把产品卖给你的客户。
&基础学科:是我们这十几年在学校学的理论知识,当初学的时候并不知道是为了什么,毕业后如果你还能掌握一些知识并实际运用,那么这将是你最有价值的竞争力。
每个部分知识单独看都有其局限性,但如果能把知识两两结合起来,就构成了我们现在社会的各种技术创新点。
&IT技术+业务知识:创造了阿里巴巴的电子商务帝国,腾讯全生态链的社交网络。
&IT技术+基础学科:创造了Google搜索的神话,华尔街金融不败的帝国。
当然,R语言只是一门计算机语言技术,不能独自承担改写历史的重任,但R语言确实给了我们很大的想像空间,让我们能动手去了解这个世界的规律,找到无穷无尽的交叉点,创造出新的帝国。
如果你和我一样,都能站在这个角度来学习和使用R语言,那么我们一定可以成为并肩向前的同路人。欢迎加入我的团队,我们正在努力改变着未来。
R语言在线培训地址:
1.2 R语言基础的知识
蓝图总是宏大和美好的,具体落实也将是困难重重的。接下来,我将会梳理思路,把所有的知识点对应到可操作的文档上,希望帮助大家掌握R语言的全貌!
,包括R语言的语法,R语言核心包的使用,R语言的内核编程,R语言包的开发,以及R语言的虚拟机。
1.2.1 R语言的语法
语法是我们了解R语言的第一步,和所有人一样,我也在很短的时间就适应R的语法规则,数据结构,基本类型,常用函数等等。但其实R的语法上坑,远比你知道的多得多。
我举个例子,看谁能准确的回答。比如,最基础的符号操作 “=”、“&-”、“&&-” ,三者有什么区别,分别在什么时候用?不要偷偷说问题太偏了,实际根本用不到。我的代码里处处都在用这3个符号,只是你不知道而已。在学习R的时候,不要用已经掌握的C、
Java、Python的经验直接去套R的语法,掉坑里的就是这些人。要重头开始学,一路上没有捷径。
R语言是函数式语言,语法自由,命名自由,使用简单,这只是对于普通用户来说的。作为一个有理想的极客,怎么能只停留在语法上呢!R是完全面向对象的,你了解什么是面向对象吗?R的面向对象打破了R原有的自由,但又要兼容原有的自由语法,多么纠结的设计啊,你能体会到吗?并不是记住了R的语法,就代表掌握了R语言。里面种各坑,只有自己踩了,再自己爬出来,才是真正的成长。
1.2.2 R语言核心包的使用
R语言同其他语言一样,在软件启动时,为我们提供了7个核心包,包括了众多的基础函数,如 数学计算函数,统计计算函数,日期函数,包加载函数,数据处理函数,函数操作函数,图形设备函数等。通过search()函数,可以查看到R启动时默认加载7个核心包。
& search()
[1] ".GlobalEnv"
"package:stats"
"package:graphics"
[4] "package:grDevices" "package:utils"
"package:datasets"
[7] "package:methods"
"Autoloads"
"package:base"
这7个核心包,就是我们构建复杂模型的基础。由于这几个核心包比较底层,很多函数都是用C语言封装的没有R的源代码,而且除了官方文档,几乎没有其他更详细的文档介绍,所以这几个核心包就是学习的门槛,不要觉得某些函数会用了就行了,背后还有更深一层意义。
再问个问题,R的所有操作都是函数操作,那么“a&-1:10” 语句会被解析对应什么函数?
& a&-1:10;a
答案是,"1:10"对应"seq()“,”&-“对应assign()。
& assign('b',seq(1:10));b
掌握这种对应关系的意义在于,因为R是解释型语言,我们可以通过传递一个函数A的句柄,让其他的函数B动态调用这个函数A,这就是动态语言中的闭包特性的使用思路。在Javascript中,已经被广泛使用了,但在R语言中,却只有核心包的一些函数在使用这种语法。在R语言中,这种需要有计算机背景知识的地方还有很多,特别是在考虑如何提升R性能的部分。所以,不要太轻易就说自己掌握了R语言,多想想如何才能把其他语言的基础带到R语言的世界里。
1.2.3 R语言的内核编程
R语言的内核编程,又是一个比较复杂的计算机学科的问题。R的内核编程应该包括哪些内容呢,除了刚才说的R的语法和R的核心包,还有面向对象编程,量向化计算,特殊数据类型,环境空间等。我的第二本书《R的极客理想-高级开发篇》将会重点介绍这部分的内容。
面向对象编程,是一种对现实世界理解和抽象的方法,主要用于解决复杂问题的设计及实现。在Java的世界里,从2003年开始我接触Java的时候,社区就已经在聊面向对象的程序设计了。对于R语言来说,直到2011年发布的2.14版本,才最终有了RC类型的面向对象实现。面向对象的成熟,标志着R已经具备了构建复杂大型应用的能力,但如何真正地把面向对象用好,似乎也并不是统计人擅长的。有能力写出像Hadley
Wickham面向对象代码的人,在R的圈子里,实在是极少数的。
量向化计算,是R语言特有的一种并行计算方式。在R中,向量是R的基本数据类型(vector),当你对一个向量进行操作时,程序会对向量中每个元素进行分别计算,计算结果以向量的形式返回。比如,最常见的两个等长的向量相加。
& 1:10+10:1
[1] 11 11 11 11 11 11 11 11 11 11
向量化计算,在R中有很广泛的应用场景,基本可以取代循环计算,高效的完成计算任务。我们定义两个向量,先相加再求和,run1()函数用向量化计算实现,run2()用循环方法实现。
& a&-1:100000
& run1&-function(){
# 向量化计算
sum(as.numeric(a+b))
& run2&-function(){
# 循环计算
for(i in 1:length(a)){
c2&-a[i]+b[i]+c2
& system.time(run1())
用户 系统 流逝
& system.time(run2())
用户 系统 流逝
0.14 0.00 0.14
通过运行程序,我们可以清楚地看出,向量化计算要比循环快。当算法越复杂数据量越大的时候,计算的时间差距会越明显的。R的编程中的一条法则就是用向量计算代替所有的循环计算。
特殊数据类型,R语言中除了那些基本的数据类型,还有一些高级的数据类型,并不是不常用,而是你不知道。
S3类型,S4类型,RC类型分别对应R语言支持的三种面向对象编程的数据结构。
环境类型(environment),由内核定义的一个数据结构,由一系列的、有层次关系的框架(frame)组成,每个环境对应一个框架,用来区别不同的运行时空间(scope)。
可能还有我不知道的类型…(请发现的同学通知我!)
环境空间,在进行R包开发时,是必备的一个知识点。每个环境空间都是环境类型的一个实例。每个R包都会被加载到一个环境空间中,形成有层次关系的、可调用的空间结构。
我们定义的函数和变量,都会存在于R的环境空间中,通过ls()就可以看到当前环境空间中的这些变量,比如,刚才量向化计算定义的变量和函数。
除了我们自己定义的变量和函数,环境空间中还有很多其他的变量和函数,比如sum(), length(), system.time()等,这些函数我们可以直接使用,但是它们并不在当前环境空间中,所以直接用ls()是查看不到的。当我们切换到base的环境空间时,就可以找到sum()的函数定义了。
>ls(pattern="^sum$",envir=baseenv())
R语言内核编程,如同其他语言一样,有很多的知识细节,并不是只有我提到的这几点。但由于缺少文档,同时R核心技术的不普及,所以知道的人就不多,会用的人更少。我也在每天探索,期待发现更多的秘密。
R语言在线培训地址:
1.2.4 R语言包的开发
R包的开发,是R语言编程中比较难的,又不得不面对的问题,不仅要把上文中所提到的各种R语言技术综合运用在一起,还要符合R包的开发规范,并用Latex写好文档,最后提交给CRAN发布。技术问题虽然难,花时间还是可以解决的,但想要在CRAN上发布,那就只能用“难于上青天”来形容了。R语言发展了20多年,只有5000多个包在CRAN上发布,审核不是一般严格啊!我写的gridgame游戏包和chinaWeather天气包,改了很多次,都没能通过,都到了要放弃的边缘了。
换个角度想,只有审核严格才能保证用户在安装第三方的R包时候不会出错。由于CRAN的审核过于严格,Hadley Wickham也受不了了,又开发了devtools包,不仅提供了简化R包的开发的工具函数,还支持Github社区发布。这样就可以脱离CRAN的束缚,以个人的名义发布各种奇思妙想的R包,甚至是“不误正业”的R包。嘿嘿!!
1.2.5 R语言的虚拟机
终于到我不熟悉话题了,已我3年多R语言使用经验来说,还碰不到R语言的虚拟机。不过,网上看到很多高手在生产环境都会重新编译R软件,比如 用OpenBLAS加速R的矩阵运算,在虚拟机层实现矩阵的并行化计算,也有用GPU实现矩阵并行计算的;还有牛人把R实现的各种算法,都用C++重新实现,然后通过Rcpp封装,直接与R的虚拟机进行连接调用。
我看着各种大神走远不送了,希望他们把虚拟机优化好了,免费发布个补丁包什么的。
1.3 R语言的第三方包
R语言的第三方包,主要包括了在CRAN上的5000多个第三方包,以及其他社区的R包,这些包在各种领域中都发挥着重要的作用。在《R的极客理想-工具篇》一书中,我介绍了30多个包的使用,包括
时间序列包(zoo、xts、xtsExtra),性能监控包(memoise、profr、lineprof),R跨平台通信包(Rserve、Rsession、rJava),
R服务器包(Rserve、RSclient、FastRWeb、Websocket),数据库访问包(RMySQL、rmongodb、rredis、RCassandra、RHive)、Hadoop操作包(rhdfs、rmr2、rhbase)等。
还有很多常用的包,比如 数据处理包(lubridate、plyr、reshape2、stringr、formatR、mcmc),机器学习包(nnet、rpart、tree、party、lars、boost、e1071、BayesTree、gafit、arules),可视化包(ggplot2、lattice、googleVis),地图包(ggmap、RgoogleMaps、rworldmap)
R语言对于金融也有很好的支持,时间序列包(zoo、xts、chron、its、timeDate)、金融分析(quantmod、RQuantLib、portfolio、PerformanceAnalytics、TTR、sde、YieldCurve)、风险管理(parma、evd、evdbayes、evir、extRemes、ismev)
等。同时,我正在量化投资的创业中,R语言作为是系统架构中的算法引擎在最核心的位置,R正在承担着最有价值的业务,在后续的《R的极客理想-量化投资篇》一书中,我将会完整的介绍R语言在我的量化投资系统中的运用。
1.4 数学的基础知识
数学的基础知识,主要包括初等数学,高等数学,线性代数,概率论,统计学等。我们曾在大学中学过的各种数学,那些不知道有什么用,只为考试而学的数学,是能真正决定R语言掌握深度的基础知识。
当R语言普及以后,变成大众话的编程语言,入门会越来越容易,第三方包的调用会越来越简单,最后就是拼基础学科功底了,数学就是对所有人来说最难的基础学科。
初等数学,中国人一直都在强调数学是我们的优势,比老外强很多,其实强的部分仅限于初等数学,加法口诀和乘法口诀让我们可以口算100以内的四则运算。
高等数学,大学里挂科最多的一门课,那种照本宣科的教学方法,完全不知所谓。至到遇到了R,我才恍悟 为什么最小二乘法能进行最优化的计算。重新捡起高数,是学R的必经之路。
线性代数,直到读完了Google的PageRank论文的N年后,自己才想明白,原来矩阵可以处理海量数据的计算,实现分步式算法与单机算法的一致性。
概率论,通过R语言进行各种分步的随机实验,并利用概率密度曲线函数应用到实际的业务中,才让我理解概率才是可以衡量客观事件发生的指标。
统计学,通过R语言我们可以很简单的构建各种统计模型,利用Bayes分别器判断垃圾邮件,利用回归模型预测未来的房价。
是R语言能让我切身地感受到,数学的基础知识在我们实际生活中的运用;也是R语言拉近了学术界和工业界的距离。如果能把我们从小到大学到的知识串起来,我想每个人都会具备与众不同的知识结构,将会在各行各业实现伟大的创新。
1.5 业务知识
业务知识涉及的面非常广,每个人都应该具备自身所处行业的知识,并结合R语言擅长的领域,发现新的机会。R语言擅长的领域包括 统计分析、金融分析、数据挖掘、互联网、生物信息学、生物制药、全球地理科学、数据可视化等。
我在软件和互联网行业呆了8年,亲身经历了两个行业的高速发展和变迁。技术一波又一波,每年都有新的主题,一路跟下来的人越来越少,虽然新鲜的血液不断补充着,但能力和经验却远达不到要求,被市场的浮躁扰动着。近些年,中国的创业公司的成功,少有技术创新,大都是商业模式创新和资本运作的成功。
面对着中国资本市场,掌握好业务的知识,就是找到了赚钱的法宝。当业务成熟,在大家都懂得游戏规则后,竞争就会变得异常激烈了,像电商,团购,旅游,酒店,游戏
都是如此。新领域新业务,才是值得80后90后年轻人奋斗的方向。如火如荼的O2O、互联网金融、物联网、机器人,也许正是明年的爆发点。如果你又懂技术又懂业务,学习又好,你将是下一个帝国的创造者。
1.6 跨学科的综合运用能力
再次强调,只要把多种学科的知识综合运用,不仅成为R语言的一代高手,更能实现自我的价值。
当IT技术与业务知识完美结合,你会在新兴的市场的找到机会。一旦市场成熟后,业务竞争就会变成资本竞争,机会将不复存在。
当IT技术与基础学科相结合,你可以通过科技创新,建立技术壁垒,保持技术优势直到成为行业老大。
当IT技术、业务知识、基础学科,三者同时具备时,那么你将是不可被替代的。只要找到属于你的团队,研发出自己的产品,推广给你的用户,你就已经成功了!
R语言可以从IT的角度,帮助你实现成功,同时你的成功也将是R语言的成功!
R语言在线培训地址:&
2. R语言学习
花了很大的篇幅,终于把我理解的R语言知识体系解释清楚了,写着写着都快跑题了。那么接下来,我们应该如何高效的学习R语言呢?有句话要说在前头,学习是艰苦的,没有捷径可言,如果你想成功,那么更要面对苦中之苦。正确的学习方法,可以让我们少走弯路,学习别人的经验,会让我们加速成长。
通过上文中对跨学科知识体系的描述,我想大家都应该明白了,要想学好R,最大的难点不在于语言本身,而在于使用者的知识基础和综合运用的能力。当然,综合运用是要以良好的基础知识为前提的,先抛开业务知识和基础学科的知识不说,只谈IT技术,应该要掌握哪些知识呢?
2.1 IT基础知识
对于R语言本身来说,我们需要掌握R语言基础的知识,包括R的语法,R核心包的使用,R的内核编程,R包的开发,以及业务相关R的第三方包的使用。
如果你在学习R语言之前,已经有了很多的Java, Python等编程语言的经验,那么这将帮助你能很快熟悉R语言,你需要再补充一些数据分析和数据挖掘算法的知识,就能马上用在实际的工作中了。
如果你之前是SAS或Matlab数据科学家,那你只需要熟悉R的编程语法和第三方R包,就能用R来完成SAS和Matlab的所有任务。
如果是BI程序员,平时工作经常有处理数据和可视化的任务,那么你可以边学R边补充一些统计的知识,从无味ETL过程中发现数据的价值。
如果你是一名在读的统计学生,R语言将帮助你把书本上枯燥知识程序化,在学习过程中,就能发现社会的规律。
如果你一直在用Excel并抱怨功能远远不够的时候,试一下R语言,你的想法很快就会变成你财富的源泉。
如果你是一名宽客(Quant),还不懂R语言的话,那么你很快就会被市场淘汰的。
如果你是一名Hadoop算法工程师,用Java写一个MR算法通常要好几千行,你可试试用RHadoop,十分之一的代码行就可以完成同样的事情。…
R语言可以与各种技术、各种思路相结合,让R语言和你已掌握的知识进行碰撞,你就会变得和别人不一样。
2.2 R语言中文图书
记得 邓一硕 写过一篇”R语言书籍的学习路线图“的文章,很有参考意义。文章分别介绍了R语言的初级入门、高级入门、绘图与可视化、计量经济学、时间序列分析和金融等内容,涉及到30多本R语言图书和小册子,但大部分是英文的。
随着时间的推移,这两年R语言又增加了好多本新书,中文图书也慢慢地多了起来。对于不同层次的R语言用户,也有了市场细分。入门的朋友可以从《R语言编程艺术》开始学习;有一定R的基础的朋友可以阅读《R语言实战》;需要扩展知识面的朋友可以阅读《R的极客理想-工具篇》;在掌握了各种R的入门技术后,高级的R语言开发者可以阅读《R的极客理想-高级开发篇》(即将出版);用R做可视化的朋友,可以阅读《ggplot2:数据分析与图形艺术》;正在学习统计学的朋友,可以阅读《统计建模与R软件》;准备用R做金融的朋友,可以阅读《时间序列分析及应用(R语言)原书第2版》和《金融数据分析导论(基于R语言)》。
以上推荐的图书,笔者都亲自读过,予以品质保证。此图书列表将不定期更新,把我读到的好书分享给大家!
2.3 R语言中文社区
除了图书,中文的R语言社区和个人博客也在蓬勃发展。
统计之都,中国大陆最权威的R语言组织,不仅积累了大量高质量的R语言文章,并主办了七届中国R语言会议。统计之都团队成员,还参与翻译了《R语言编程艺术》、《R语言实战》、《ggplot2:数据分析与图形艺术》、《R语言核心技术手册(第2版)》、《R数据可视化手册》、《R语言统计入门(第2版)》等多本图书。
炼数成金论坛,以数据分析为主题,设有R语言板块,提供在线的R语言入门培训,黄志洪老师算法讲解超一流。
人大经济论坛,以经管教育为主题,设有R语言板块,以线下培训为主。
CSDN:以线上培训以及实战经验为主。
2.4 R语言中文博客
,原创了大量的R语言技术实战文章,包括 R的极客理想系列文章、RHadoop实践系列文章、R利剑NoSQL系列文章
,并出版图书《R的极客理想》系列图书。
,统计之都创始人,现任RStudio公司程序员,博客中主要包括各种有趣的技术和吐槽文章。
,现任京东推荐算法经理,博客中主要包括R语言企业级应用的文章。
,现任Mango Solution中国区负责人,博客中主要包括R语言建模的文章。
,博客中主要包括的R语言金融数据分析的文章。
(翻墙),豆瓣算法经理,博客中主要包括R语言并行技术的文章。
最后,祝大家把R语言学好用好,在各自的领域中找到创新的突破口,实现自我价值,然后反馈给R语言社区,加速R的壮大发展。
3. 作者介绍
张丹,程序员、架构师,创业者。我的博客:
。个人著作:《R的极客理想》系列图书。
从程序员开始,到架构师一路走来,经历过太多的系统和应用。做过手机游戏,写过编程工具;做过大型Web应用系统,写过公司内部CRM;做过SOA的系统集成,写过基于Hadoop的大数据工具;做过外包,做过电商,做过团购,做过支付,做过SNS,也做过移动SNS。以前只用Java,然后学了PHP,现在用R和Node。最后跳出IT圈,进入金融圈,研发量化交易软件。
注:本文将做为《R的极客理想-高级开发篇》一书的开篇文章。
R语言在线培训地址:&
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章&& 查看话题
最有趣的英语学习方法
小学生,初高中,大学生和上班族…我可以负责任的说,大家一定都感到过学英语的枯燥和无味,怎么样才能最有趣呢?
试想一下,看看电影、动画片、名人演讲就能掌握英语最重要的应用---听说,这样不是更有趣,更高效率么?!
英语学习怎么样才能最高效?高效的工具+科学的方法+合适的材料+兴趣与坚持,这样就能快乐•高效•自主习得英语!
1.高效的工具
看影音学英语既有趣又高效:1)影音拥有日常最常用的词汇,最地道的表达习惯;2)影音拥有语言学习氛围,无意识中习得英语语法和语感;3)影音包含地区习俗宗教、建筑风格、行为习惯、思维方式,利于语言习得……
这些当然离不开对字幕的学习,高效的工具,如英语学习软件肯定不同于一般播放器或者复读机:1)中英字幕,随意隐现,任意切换;2)精准定位:想播哪句,想播哪段。鼠标点一下或者键盘敲一下,轻松掌控3)重点句、生词句个性标注,手动设置,智能播放需求次数;4)逐句跟读、听写、配音,练就自信听力和地道口语5)角色扮演。整段熟悉;分句模仿;跟读配录;放音比较;先说后听;复述剧情…
& & 影音中难免会出现不认识的生词,推荐能飞英语视听软件,满足以上功能的同时,还提供快乐•高效的记忆单词方法:1)每个单词均配有相应的图片、例句、联想记忆方法、真人发音、动画、游戏等帮助记忆;2)软件基于艾宾浩斯记忆遗忘曲线,借助Super Memo记忆算法,背单词过程中无需手动添加生词、错词,便能智能记忆、复习、巩固。
2.科学的方法
1】播放影音。视音频学习材料中英字幕可以任意切换、隐现,让你迅速了解剧情;轻松设置跟读时间,让你轻松复述原声视音频材料。
2】字幕学习。视音频字幕均由专业团队切分成一句句;字幕学习能精准定位,学习者鼠标点哪句,能飞英语学习软件就播哪句;学习过程中还能标出字幕的重点句、生词,便于巩固。
3】生词记忆。在语境中背单词,利用能飞背单词进行生词记忆。学习视音频过程中标记的生词可通过能飞背单词进行快乐高效的记忆;能飞背单词每个单词均配有相应的图片、例句、联想记忆方法、真人发音、动画、游戏等帮助记忆;能飞背单词基于艾宾浩斯记忆遗忘曲线,借助Super Memo记忆算法,背单词过程中无需手动添加生词、错词,便能智能记忆、复习、巩固。
4】听写训练。实践证明听、写对于语言听力水平提高有显著效果。学软件
隐藏字幕,自动循环播放,学习者进行听写,软件会自动校对,正确则直接进入下句听写,错误会给出提示。
5】逐句配音。学习者可利用软件和视音频进行角色扮演。,并可进行配音欣赏,矫正发音!
3.合适的材料
能飞英语学习软件配有海量的影音学习资料。1)丰富。包括权威教材、电影、电视剧、演讲、动画片、歌曲、考试考级等等,各个年龄层、各个水平阶段的英语学习者都能找到适合自己的学习材料。2)个性化。学习者还可DIY,利用能飞英语学习软件自做自己喜欢的视音频学习材料字幕。
4.兴趣与坚持
好的方法、资源和工具只能帮助自己学习更具效率,最关键的还是需要自己有兴趣和坚持!
试试胜于雄辩!!!免费下载:
额 。。。。。 :victory::victory:不错~~ 貌似不错,I want to try .
var cpro_id = 'u1216994';
欢迎监督和反馈:本帖内容由
提供,小木虫仅提供交流平台,不对该内容负责。欢迎协助我们监督管理,共同维护互联网健康,如果您对该内容有异议,请立即发邮件到
联系通知管理员,也可以通过QQ周知,我们的QQ号为:8835100
我们保证在1个工作日内给予处理和答复,谢谢您的监督。
小木虫,学术科研第一站,为中国学术科研研究提供免费动力
广告投放请联系QQ: &
违规贴举报删除请联系邮箱: 或者 QQ:8835100
Copyright &
eMuch.net, All Rights Reserved. 小木虫 版权所有您当前位置:&->&&->&
更新时间:
文件大小:113.1MB
语言要求:英文
浏览次数:人浏览
同类热门资料
资料下载地址
(确认已经开启迅雷或电驴)
内容介绍:
《c#与.net 4高级程序设计:第5版》是c# 领域久负盛名的经典著作,深入全面地叙述了c# 编程语言和.net 平台核心,并以大量示例剖析相关概念。书中介绍了c# 的各种语言构造、.net 2.0 的类、核心api、公共中间语言(cil)、动态程序集和asp.net 扩展等内容;同时也介绍了.net 3.0、.net 3.5 和.net 4 中的新的编程api,包括wpf、wcf 和wf 的功能;另外,还介绍了最新的c# 2010 编程语言、dlr、tpl、linq 编程技术、com 与.net 的互操作性以及平台无关的.net 开发等。
   《c#与.net 4高级程序设计:第5版》由微软c# mvp andrew troelsen 编写,历经多次修订,适合各层次.net 开发人员阅读。
内容截图:
第一部分 c#与.net平台
第1章 .net之道 2
1.1 .net之前的世界 2
1.2 .net解决方案 5
1.3 .net平台构造块(clr、cts和cls)简介 5
1.4 其他支持.net的编程语言 7
1.5 .net程序集概览 9
1.6 cts 14
1.7 cls 17
1.8 clr 18
1.9 程序集/命名空间/类型的区别 19
1.10 使用ildasm.exe探索程序集 24
1.11 使用reflector来查看程序集 26
1.12 部署.net运行库 27
1.13 .net的平台无关性 27
1.14 小结 28
第2章 构建c#应用程序 30
2.1 .net framework 4 sdk的作用 30
2.2 用csc.exe构建c#应用程序 31
.2.3 使用notepad++构建.net应用程序 36
2.4 使用sharpdevelop构建.net应用程序 36
2.5 使用visual c# 2010 express构建.net应用程序 38
2.6 使用visual studio 2010构建.net应用程序 40
2.7 小结 50
第二部分 c#核心编程结构
第3章 c#核心编程结构ⅰ 52
3.1 一个简单的c#程序 52
3.2 有趣的题外话:system.environment类的其他成员 57
3.3 system.console类 58
3.4 系统数据类型和c#简化符号 62
3.5 使用字符串数据 70
3.6 窄化和宽化数据类型转换 76
3.7 隐式类型本地变量 81
3.8 c#迭代结构 84
3.9 条件结构和关系/相等操作符 86
3.10 小结 89
第4章 c#核心编程结构ⅱ 90
4.1 方法和参数修饰符 90
4.2 c#中的数组操作 99
4.3 枚举类型 105
4.4 结构类型 109
4.5 值类型和引用类型 112
4.6 c#可空类型 118
4.7 小结 121
第5章 定义封装的类类型 122
5.1 c#类类型 122
5.2 构造函数 125
5.3 this关键字的作用 128
5.4 static关键字 133
5.5 定义oop的支柱 139
5.6 c#访问修饰符 142
5.7 第一个支柱:c#的封装服务 144
5.8 自动属性 154
5.9 对象初始化器语法 157
5.10 常量数据 160
5.11 分部类型 162
5.12 小结 163
第6章 继承和多态 164
6.1 继承的基本机制 164
6.2 回顾visual studio类关系图 168
6.3 oop的第二个支柱:继承 169
6.4 包含/委托编程 174
6.5 oop的第三个支柱:c#的多态支持 176
6.6 基类/派生类的转换规则 187
6.7 超级父类:system.object 189
6.8 小结 195
第7章 结构化异常处理 196
7.1 错误、bug与异常 196
7.2 .net异常处理的作用 197
7.3 最简单的例子 199
7.4 配置异常的状态 202
7.5 系统级异常(system.system-exception) 206
7.6 应用程序级异常(system.applica-tionexception) 207
7.7 处理多个异常 210
7.8 谁在引发什么异常 215
7.9 未处理异常的后果 215
7.10 使用visual studio调试未处理的异常 216
7.11 损坏状态异常简介 217
7.12 小结 218
第8章 对象的生命周期 219
8.1 类、对象和引用 219
8.2 对象生命周期的基础 220
8.3 应用程序根的作用 223
8.4 对象的代 224
8.5 .net 1.0 至.net 3.5的并发垃圾回收 225
8.6 .net 4下的后台垃圾回收 225
8.7 system.gc类型 225
8.8 构建可终结对象 229
8.9 构建可处置对象 231
8.10 构建可终结类型和可处置类型 234
8.11 延迟对象实例化 237
8.12 小结 240
第三部分 高级c#编程结构
第9章 接口 242
9.1 接口类型 242
9.2 定义自定义接口 245
9.3 实现接口 247
9.4 在对象级别调用接口成员 248
9.5 接口作为参数 250
9.6 接口作为返回值 252
9.7 接口类型数组 253
9.8 使用visual studio 2010实现接口 253
9.9 通过显式接口实现解决命名冲突 254
9.10 设计接口层次结构 257
9.11 构建可枚举类型(ienumerable和ienumerator) 260
9.12 构建可克隆的对象(icloneable) 265
9.13 构建可比较的对象(icomparable) 269
9.14 小结 273
第10章 泛型 274
10.1 非泛型集合 274
10.2 泛型类型参数的作用 281
10.3 system.collections.generic命名空间 285
10.4 创建自定义泛型方法 292
10.5 创建自定义泛型结构和类 294
10.6 类型参数的约束 297
10.7 小结 300
第11章 委托、事件和lambda 301
11.1 .net委托类型 301
11.2 在c#中定义委托类型 302
11.3 system.multicastdelegate与system.delegate基类 304
11.4 最简单的委托示例 305
11.5 使用委托发送对象状态通知 307
11.6 方法组转换语法 313
11.7 委托协变 314
11.8 泛型委托 316
11.9 c#事件 318
11.10 c#匿名方法 325
11.11 lambda表达式 328
11.12 小结 333
第12章 高级c#语言特性 335
12.1 索引器方法 335
12.2 操作符重载 339
12.3 自定义类型转换 347
12.4 扩展方法 352
12.5 分部方法 360
12.6 匿名类型 362
12.7 指针类型 367
12.8 小结 373
第13章 linq to object 374
13.1 linq特有的编程结构 374
13.2 linq的作用 377
13.3 将linq查询应用于原始数组 379
13.4 返回linq查询的结果 385
13.5 将linq查询应用到集合对象 387
13.6 c#linq查询操作符 389
13.7 linq查询语句的内部表示 396
13.8 小结 400
第四部分 用.net程序集编程
第14章 .net程序集入门 402
14.1 定义自定义命名空间 402
14.2 .net程序集的作用 407
14.3 .net程序集的格式 409
14.4 构建和使用单文件程序集 412
14.5 构建和使用多文件程序集 421
14.6 私有程序集 423
14.7 共享程序集 427
14.8 使用共享程序集 433
14.9 配置共享程序集 435
14.10 发行者策略程序集 439
14.11 [codebase]元素 440
14.12 system.configuration命名空间 441
14.13 小结 442
第15章 类型反射、晚期绑定和基于特性的编程 443
15.1 类型元数据的必要性 443
15.2 反射 447
15.3 构建自定义的元数据查看器 450
15.4 动态加载程序集 454
15.5 反射共享程序集 457
15.6 晚期绑定 458
15.7 .net特性的作用 461
15.8 构建自定义特性 465
15.9 程序集级别(和模块级别)特性 467
15.10 使用早期绑定反射特性 469
15.11 使用晚期绑定反射特性 470
15.12 反射、晚期绑定和自定义特性的使用背景 471
15.13 构建可扩展的应用程序472
15.14 小结 477
第16章 进程、应用程序域和对象上下文 478
16.1 windows进程的作用 478
16.2 .net平台下与进程进行交互 480
16.3 .net应用程序域 488
16.4 与默认应用程序域进行交互 489
16.5 创建新的应用程序域 492
16.6 对象上下文边界 495
16.7 进程、应用程序域和上下文小结 498
16.8 小结 499
第17章 cil和动态程序集的作用 500
17.1 学习cil语法的原因 500
17.2 cil指令、特性和操作码 501
17.3 入栈和出栈:cil基于栈的本质 502
17.4 正反向工程 504
17.5 cil指令和特性 510
17.6 .net基础类库、c#和cil数据类型的映射 515
17.7 在cil中定义类型成员 516
17.8 剖析cil操作码 518
17.9 使用cil构建.net程序集 522
17.10 动态程序集 526
17.11 小结 534
第18章 动态类型和动态语言运行时 535
18.1 dynamic关键字的作用 535
18.2 dlr的作用 540
18.3 使用动态类型简化后期绑定调用 542
18.4 使用动态数据简化com互操作 544
18.5 使用c# 2010的特性进行com互操作 548
18.6 小结 552
第五部分 .net基础类库
第19章 构建多线程应用程序 554
19.1 进程、应用程序域、上下文及线程之间的关系 554
19.2 .net委托的简短回顾 556
19.3 委托的异步性 557
19.4 异步调用方法 559
19.5 system.threading命名空间 564
19.6 system.threading.thread类 564
19.7 以编程方式创建次线程 567
19.8 并发问题 572
19.9 使用timer callback编程 578
19.10 clr线程池 579
19.11 .net平台下的并行编程 581
19.12 并行linq查询(plinq) 588
19.13 小结 590
第20章 文件输入输出和对象序列化 591
20.1 研究system.io命名空间 591
20.2 directory(info)和file(info)类型 592
20.3 使用directoryinfo类型 593
20.4 使用directory类型 596
20.5 使用driveinfo类类型 597
20.6 使用fileinfo类 598
20.7 使用file类型 601
20.8 stream抽象类 603
20.9 使用streamwriter和streamreader类型 605
20.10 使用stringwriter和stringreader类型 608
20.11 使用binarywriter和binary-reader 609
20.12 以编程方式&观察&文件 610
20.13 对象序列化 612
20.14 为序列化配置对象 614
20.15 选择序列化格式化程序 616
20.16 使用binaryformatter序列化对象 618
20.17 使用soapformatter序列化对象 620
20.18 使用xmlserializer序列化对象 621
20.19 序列化对象集合 623
20.20 自定义soap/binary序列化过程 624
20.21 小结 628
第21章 ado.net之一:连接层 630
21.1 ado.net的宏观定义 630
21.2 ado.net数据提供程序 632
21.3 其他的ado.net命名空间 634
21.4 system.data命名空间的类型 635
21.5 使用接口的抽象数据提供程序 639
21.6 创建autolot数据库 641
21.7 ado.net数据提供程序工厂模型 645
21.8 ado.net的连接层 650
21.9 使用数据读取器 654
21.10 构建可重用的数据访问库 656
21.11 创建控制台ui前端 664
21.12 数据库事务 669
21.13 小结 673
第22章 ado.net之二:断开连接层 674
22.1 ado.net断开连接层 674
22.2 dataset的作用 675
22.3 使用datacolumn 677
22.4 使用datarow 679
22.5 使用datatable 682
22.6 将datatable对象绑定到用户界面 687
22.7 使用数据适配器 695
22.8 向autolotdal.dll添加断开连接功能 698
22.9 多表dataset对象和数据关系 701
22.10 windows forms数据库设计器工具 706
22.11 将强类型的数据库代码隔离到类库中 713
22.12 linq to dataset 717
22.13 小结 722
第23章 ado.net之三:entity framework 723
23.1 entity framework的作用 723
23.2 创建和分析edm 730
23.3 对概念模型进行编程 739
23.4 autolotdal 4.0版,加入实体 744
23.5 将数据实体绑定到windows forms gui 748
23.6 小结 752
第24章 linq to xml简介 753
24.1 两个xml api的故事 753
24.2 system.xml.linq命名空间的成员 756
24.3 使用xelement和xdocument 759
24.4 在内存中操作xml文档 762
24.5 小结 766
第25章 wcf 767
25.1 各种分布式计算api 767
25.2 wcf的作用 772
25.3 wcf核心程序集 774
25.4 visual studio wcf项目模板 775
25.5 wcf应用程序的基本构成 776
25.6 wcf的abc 777
25.7 构建wcf服务 781
25.8 承载wcf服务 784
25.9 构建wcf客户端应用程序 791
25.10 用wcf 4.0简化配置设置 795
25.11 使用wcf服务库项目模板 800
25.12 以windows服务承载wcf服务 803
25.13 从客户端异步调用服务 807
25.14 定义wcf数据契约 809
25.15 小结 813
第26章 windows workflow foundation4.0简介 814
26.1 定义业务流程 814
26.2 构建简单的工作流 815
26.3 wf 4.0运行时 818
26.4 检查wf 4.0中的活动 823
26.5 构建流程图工作流 825
26.6 用专门的库隔离工作流 833
26.7 使用工作流库 840
26.8 小结 842
第六部分 使用wpf构建桌面用户界面第27章 wpf和xaml 844
27.1 wpf背后的动机 844
27.2 各种形式的wpf应用程序 846
27.3 wpf程序集 850
27.4 创建不使用xaml的wpf应用程序 856
27.5 仅使用xaml构建wpf应用程序 863
27.6 将标记转换为.net程序集 867
27.7 wpf xaml语法 871
27.8 使用代码隐藏文件构建wpf应用程序 879
27.9 使用visual studio 2010构建wpf应用程序 881
27.10 小结 889
第28章 使用wpf控件编程 890
28.1 wpf核心控件概述 890
28.2 使用面板控制内容布局 894
28.3 使用嵌套面板构建窗口框架 903
28.4 wpf控件命令 907
28.5 使用expression blend构建wpf用户界面 912
28.6 构建ink api选项卡 919
28.7 documents api 928
28.8 构建documents选项卡 929
28.9 wpf数据绑定模型 934
28.10 小结 941
第29章 wpf图形呈现服务 942
29.1 理解wpf的图形呈现服务 942
29.2 使用形状呈现图形数据 943
29.3 wpf画刷和画笔 952
29.4 图形变换 955
29.5 使用expression blend处理形状 958
29.6 使用绘图和几何图形呈现图形数据 962
29.7 使用expression design生成复杂的向量图形 965
29.8 使用可视化层呈现图形数据 967
29.9 小结 972
第30章 wpf资源、动画和样式 973
30.1 理解wpf资源系统 973
30.2 使用对象(逻辑)资源 978
30.3 理解wpf动画服务 988
30.4 用xaml创建动画 992
30.5 wpf样式的作用 994
30.6 使用expression blend生成样式 1001
30.7 小结 1003
第31章 wpf控件模板和用户控件 1004
31.1 依赖属性的作用 1004
31.2 构建自定义依赖属性 1008
31.3 路由事件 1013
31.4 逻辑树、可视树和默认模板 1016
31.5 在visual studio 2010中构建自定义控件模板 1022
31.6 使用blend构建自定义usercontrol 1028
31.7 创建wpf应用程序jackpot deluxe 1035
31.8 小结 1043
第七部分 使用asp.net构建web应用程序
第32章 构建asp.net网页 1046
32.1 http的作用 1046
32.2 web应用程序和web服务 1047
32.3 html的作用 1048
32.4 客户端脚本的作用 1053
32.5 回发到web服务器 1054
32.6 asp.net api的特性 1055
32.7 构建单个文件的asp.net网页 1058
32.8 使用代码文件构建asp.net web页面 1066
32.9 asp.net web site和asp.net web application 1070
32.10 asp.net网站目录结构 1072
32.11 页面类型的继承链 1073
32.12 与传入的http请求交互 1074
32.13 与输出http响应交互 1077
32.14 asp.net网页的生命周期 1078
32.15 web.config文件的作用 1081
32.16 小结 1082
第33章 asp.net web控件、母版页和主题 1083
33.1 web控件的本质 1083
33.2 control和webcontrol基类 1085
33.3 asp.net web控件的类别 1089
33.4 构建asp.net汽车网站 1091
33.5 验证控件的作用 1104
33.6 使用主题 1110
33.7 小结 1114
第34章 asp.net状态管理技术 1115
34.1 状态问题 1115
34.2 asp.net状态管理技术 1117
34.3 asp.net视图状态的作用 1117
34.4 global.asax文件的作用 1120
34.5 应用程序状态与会话状态的差别 1123
34.6 使用应用程序缓存 1127
34.7 维护会话数据 1131
34.8 cookie 1134
34.9 [sessionstate]元素的作用 1136
34.10 asp.net用户配置api 1137
34.11 小结 1143
第八部分 附 录
附录a windows forms编程 1146
a.1 windows forms命名空间 1146
a.2 创建一个简单的windows forms程序 1147
a.3 visual studio windows forms项目模板 1152
a.4 剖析form 1157
a.5 响应鼠标活动 1163
a.6 设计对话框 1166
a.7 通过gdi+呈现图形数据 1171
a.8 创建一个完整的windows forms应用程序 1175
a.9 小结 1182
附录b 使用mono进行平台无关的.net开发 1183
b.1 .net的平台无关性 1183
b.2 获取和安装mono 1186
b.3 mono开发语言 1188
b.4 兼容microsoft的mono开发工具 1189
b.5 使用mono创建.net 应用程序 1190
b.6 谁在使用mono 1196
b.7 推荐学习 1196
b.8 小结 1197
相关学习资料
&&&& &&&&&&&&&&&&&&&&
学习资料库,由广大资源爱好者通过共享互助而共享各种学习资料,但学习资料库无法保证所共享资料的完整性和合理性
版权所有 Gzip enabled

我要回帖

更多关于 有趣的语言现象 的文章

 

随机推荐