如何学习一门较复杂的编程语言.doc_第1页
如何学习一门较复杂的编程语言.doc_第2页
如何学习一门较复杂的编程语言.doc_第3页
如何学习一门较复杂的编程语言.doc_第4页
如何学习一门较复杂的编程语言.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【zt】如何学习一门较复杂的编程语言C转贴一个如何学习C+如何学习一门较复杂的编程语言前言呵呵,大家好,又来了,其实天天在,大多数时候总是回答一些套话,比如同意上传。文件名:.文件夹:.,或者确认完毕,加1分,谢谢支持之类,大概传过书的朋友都见过吧。前几天,心血来潮,写了一篇如何选书的帖子,写完以后,手痒难忍,不知哪条虫又醒了过来,趁热再来一篇,谈谈如何学习C+,总题为斑竹观点,不知道以后还会写什么,也许就这两篇打住,也许会洋洋洒洒写成系列(吹牛不上税吧?税务局别来找呀),那就要看有没有心情和那么多闲工夫了,至于别人想不想看,爱不爱看,可管不了,自己痛快就行啦。你自己愿意恶心自己,就往下看,哈哈.闲话少叙,书归正传。话说在很久很久以前,C+红红火火,风头正劲,天下多少英雄豪杰为其马首是瞻.(呸,废话连篇,看西红柿.)哇,不好,躲,躲,躲躲躲.惨,掌声没有,烂西红柿来了一筐,等去换身衣服先.西服换成马褂,咱接着来。睡觉的醒一醒啦,快看呀,窗户外面下刀子了!自从JAVA问世以来,C+阵营人气日下,唉,人的本性就是喜新厌旧,最近又新出一小妞,叫什么C#的,搅得人心惶惶,明明是JAVA的克隆加变异,她干妈(那个叫什么M$的)非要和人家C+攀亲戚,说是C+亲生,和JAVA对着干。唉,这世道,乱套了,不知道这人心都是怎么长的。不怕你们的西红柿了,准备了纸糊盾牌,嘿嘿,除非本拉登亲自出马.但是,C+周围总还是有一群誓死效忠的追随者长伴左右,任你风吹雨打,自岿然不动。C+把纯粹与高效,精美与诡异完美地,近乎奇迹般地集于一身,吸引着那些喜欢寻幽揽胜的探险家们。当然C+并非不实用,但今天不想谈C+的工业应用(那是的工作,俗),超脱起来,来看看纯粹的C+。如果你想为了找工作而学习C+,劝你就此打住,别往下看了,帮不了你,瞎耽误工夫,也劝你别学C+,改行JAVA吧,或者VB也成。如果你是一个专职程序员,下一个项目是关于C+的,而你还不会,想临时抱抱佛脚,你也别看了,想你的公司会组织你们集体去抱的,你们可以针对你们的项目学习一个够用的子集大概就可以了。这篇帖子不是佛脚,不讲如何速成,只是想针对现在众多想学习C+却又无从下手的学生提出自己的建议。你可以不同意的观点,那么请准备好西红柿,等讲完了,给你们时间扔(事先声明,要好的,烂的不要啊)。好了,如果你的耐心已经让你忍耐至此,而且还想忍耐下去的话,希望你能忍到最后,再也没一句废话了,你没有理由看完上面的废话不往下看。一、什么是C+?一看的标题,大概又有人举西红柿了,您慢着点儿,别闪了腰或岔了气!很多人不知道这个问题的正确答案。如果你还认为C+是C的超集,那你可是大大落伍了,这是二十年前的答案了。如果你说C+是一种面向对象的程序设计语言,哈哈,沾边,但也不对,在98年C+国际标准公布以后尤其不对!C+之父BJARNE STROUSTRUP曾有一篇论文LEARNING STANDARD C+AS ANEW LANGUAGE,程序员杂志2001年4月号有陈崴的译文将标准C+视为一个新语言,把C+和它那个好像还不是右派的爹彻底划清了界限。文章对C和C+在COMPLEXITY(复杂度)和EFFICIENCY(效率)两方面做了比较,指出C+已经完全不同于C的观念,并对如何学习标准C+提出建议。有兴趣的朋友可以看看,很有启发性。C+发展至今,其历史已足够写一本书了,BJARNE的经典名著THE DESIGN AND EVOLUTION OF C+,详细记述了C+设计和发展过程中(1979-1994)的种种考虑与妥协,它不讲C+是什么样的,它只讲C+为什么会成为这样。不建议初学者去看这本书,实在是咬不动,当初已经看得头破血流了,而且这本书只讲到1994年为止,多少有些过时了,如果你已比较好地掌握C+,并想了解其历史,看看倒是有些参考价值。C+虽然起源于C,语法也比较相似,其迅速成功并成为主流很大程度上也归功于C的成功。但经过多年的发展,其最精妙,最有吸引力的部分正是不同于C的那一部分。KOENIG&MOO夫妇在为想成为更好的C+程序员的人提出的3条建议中第1条就是避免使用指针,你相信吗?指针正是C的核心呀。C的宏、位运算、结构、联合、数组、强制类型转换、指针,在C+程序中都应该尽量避免(在少量涉及底层的程序设计中例外),C+语法上强调的是类、对象、模板、标准库、引用、异常和CONST关键字,思想上强调的是面向对象和泛型。在PROCEDURAL PROGRAMMING,OBJECT-BASED PROGRAMMING,OBJECT-ORIENTED PROGRAMMING,GENERIC PROGRAMMING中,C仅仅支持第一种,而就是在PROCEDURAL PROGRAMMING的程序中,如果使用了标准库,一个C+程序也可以和实现同样功能的C程序完全不同。BJARNE曾不止一次强调C+不仅仅是一种OBJECT-ORIENTED PROGRAMMING LANGUAGE,那是JAVA,C+是一种集各种编程风格于一身的程序设计语言,OBJECT-ORIENTED PROGRAMMING只是其中一种,并不比其它几种风格重要。目前很怀疑C+对面向对象的支持程度,虽然它一度在这方面风光无限,但多年发展,它并没有形成一个类似于JAVA或PYTHON或其它语言那样的类库,也很少取得成功的像样的类库(不能说一个没有,但毕竟很少),反而,在难产到1998年的C+的第一个标准化文本中的库却是基于TEMPLATE和GENERIC的。哈,这多少有些讽刺意味,在别的语言还唧唧喳喳讨好面向对象的时候,C+抛下一个媚眼,却转身投入泛型的怀抱。见风使舵的JAVA和C#好像上错了贼船,又都赶着往自己身上贴泛型的金,弄得人不人鬼不鬼,当初,JAVA可是批判C+过于复杂最起劲的一个,在可以预见的将来,它的复杂程度将不低于C+。拜托,有点创意好不好,别总让人神经衰弱了!JAVA FANS们不要扁,下次写如何学习JAVA时,咱哥们友情后补。废话太多,第一个问题就此打住。二、选用什么样的编译器?这个问题也是初学者经常问的问题,其实一句话,对于初学者来说,现有的较新的编译器,除了易用性外,没有任何区别。有人总是在用VC还是BCB还是GCC上争论不休,想如果你能把这三种编译器的区别用出来,你现在就不会看这篇破玩意儿了。但有人现在还在用TURBO C+3.0/3.1,如果你真想学好C+,劝你还是换换的好,那东东确实是个好东东,但已经被BORLAND FANS们当作古董收藏起来了(也留着一套呢,还有TC 2.0),你也收起来吧,没准什么时候能卖个好价钱。要讲的一个重要问题是不要把VC与C+混为一谈,也不要把VC当作另一种语言。首先,VC的全称是MICROSOFT VISUAL C+,注意,前面带有公司的名字,即使是JAVA,也没有叫过SUN JAVA,这就意味着VC是一个产品,它是C+众多编译环境中的一种,它不仅仅带有一个C+语言的编译器,它还带有一个用于开发WINDOWS应用程序的APPLICATION FRAMEWORK-MICROSOFT FOUNDATION CLASSES LIBRARY(MFC),又一个带公司名的家伙,它只是用C+语言在WINDOWS API外面加了一层包装而已,省得赤裸裸的,让程序员们在工作的时候总走神去看那些不该看的地方,这个东西多少让开发WINDOWS程序变得更容易一些。呵呵,不要再把VC当作语言了。在易用性层面上,还是推荐初学者使用VC,用这个东东的比较多,遇到问题也好找人问。至于版本,6.0应该够用,但这个版本已经是5年前的东东了,毕竟早了些,与标准的兼容性也多有诟病,如果有条件的话,可以用VC.NET,这个东东的最新版本是刚刚发布的2003版,还没见过,只用过它的上一个版本。经过C+大腕LIPPMAN亲手调教过的2003版,据说对标准的兼容性已经有了根本性的转变,管他呢,又是一个宣传用语,只要你不是特意去实验标准中的那些犄角旮旯,现在流行的编译器都已经绝对够用了。三、选书很重要这是一个最让人挠头的问题,选什么书总是见仁见智,什么书最好是一个永远找不到标准答案的难题,来们这个论坛的朋友多半是冲着书来的。不想评论哪本书好哪本不好,只是大致列一个书单,简单讲两句。的书单并不定位于一个没有任何语言编程基础的初学者,觉得这样的初学者不适合直接学习C+语言。的书单定位于那些有其它语言的一定的编程基础的C+初学者,他至少应该知道什么是变量,什么是运算符,什么是表达式,关键字,语句,程序,至少应该知道赋值语句是干什么的,分支判断语句干什么,循环语句干什么,当然他不必知道C/C+的词法和语法,也就是说他有以上的概念,但不知道这些东西在C/C+中是如何实现的。在这个基础上,把书单分为入门类、进阶类、应用技巧类。作者:WDKNIGHT发表时间:2006-2-11 6:03:00第1楼入门类:C+PRIMER,3RD EDITION THINKING IN C+,2ND EDITION C+大学教程(这本书没看过,但不少初学者说不错,留此存目)THE C+STANDARD LIBRARY:A TUTORIAL AND REFERENCE进阶类:THE C+PROGRAMMING LANGUAGE,SPECIAL EDITION THE DESIGN AND EVOLUTION OF C+INSIDE C+OBJECT MODEL C+TEMPLATES:THE COMPLETE GUIDE STL源码剖析GENERIC PROGRAMMING AND THE STL MODERN C+DESIGN:GENERIC PROGRAMMING AND DESIGN PATTERNS APPLIED应用技巧类:EFFECTIVE C+,2ND EDITON MORE EFFECTIVE C+EXCEPTIONAL C+MORE EXCEPTIONAL C+EFFECTIVE STL RUMINATIONS ON C+对这个书单有几点说明:1、除注明的那本以外,其它书基本看过,或浏览过,了解其大致内容。也因此这些书就局限在的眼光之内,既然不愿给大家推荐没看过的书,也就难免有遗珠之憾。2、很多人认为THE C+PROGRAMMING LANGUAGE是入门书,认为不妥,这本书号称专家自学指南,并非浪得虚名,读者水平越高越能从这本书里学到更多的东西。如果身边没有一个很好的老师随时指导的话,不建议初学者选用这本书,一上来就看这本书容易产生挫折感,影响学习的信心。这本书也可以作为语言参考手册常备身边,随用随查。3、入门类前三本选一本即可,第一本详细读过,第二本大致浏览过,第三本没看过。第四本极力推荐,每个初学者都应该好好看看,很多人认为应该归入进阶类,放在入门类自有的道理。有网友反应THINKING IN C+对于初学者太难,感觉如果符合了上面对初学者的初步要求的话,读这本书应该没什么问题。4、不建议用国内的书入门,见过大部分国内书的内容只是讲了一个更好的C,不是C+。认为初学者应选择一本对语言介绍比较全面、详细的书,以便对C+有一个全面而系统的认识,一知半解是学习的大忌。如果一本自称全面的C+书中缺少STRING,CONTAINERS,GENERIC ALGORITHMS,NAMESPACES,TEMPLATES,EXCEPTION HANDLING,RTTI中的一个,你有理由不看它,如果一本自称全面的C+书没有讲到标准库或STL,你有理由不看它,如果一本自称全面的C+书中的头文件还带有.H后缀,你有理由不看它。5、应用技巧类并非最后再看,单独把这些书列出,是因为这些书要和前两类书一起看,没有先后顺序。6、选书的原则以及与每一阶段学习的关系,到下一部分还要继续展开。7、上述大部分书都有中文版,翻译质量大部分还不错,建议英文较好的最好直接读英文版,英文不好的也可看中文版。下面谈谈对纸版书和电子版书的看法。初学时最好去买一本纸版书,这样无论你躺着,坐着还是站着,也无论你身在何处-教室、图书馆、实验室、湖边长廊,你都可以很方便地拿出来看。很多同学的实验室和寝室中都配有电脑,似乎看电子版很方便,但是当寝室中老大在大呼小叫地打CS,老二抱着电话和准老婆谈情说爱,老三抱着枕头说着梦话,老四抱着吉他唱着调跑到北冰洋去的自创情歌时,无论你是老几,不相信你能对着电脑屏幕,心平气和地看着C+PRIMER电子版,寝室根本不是学习的地方,最好还是拿上一本纸版书,到自习室、图书馆去吧。课间短剧讲到此处,DIGERATI同学举手发言:老师,有笔记本电脑啦,可以带到自习室去,还是看电子版。涅盘老师当场被噎出四个跟头,晕了过去。五分钟后悠悠醒转,感觉口干舌燥。水.水.涅盘老师喝了两口水,清清嗓子,继续讲课:刚才,DIGERATI同学说得.说得.很好.是吧.哈哈.这个.那个.是呀.啊.你可以把笔记本电脑带到自习室去,但你在马路边等MM或者GG的时候,或者坐公共汽车的时候,笔记本电脑总是不如纸书方便嘛?是吧?ZHAZHA同学举手发言:老师,有掌上电脑啦,比你那本两块砖头重的书方便多了,可以在等MM的时候看电子版。涅盘老师当场被噎了八个跟头,一天都没有醒。转天,涅盘老师才醒过来,有气无力地抬起胳膊,伸出手:眼镜.给眼镜.ZHAZHA:老师,您戴着呢。涅盘老师:那怎么什么都看不见啊?ZHAZHA:您还没睁眼呢!涅盘老师艰难地睁开眼睛:怎么还看不见呢?ZHAZHA:老师,您睡了一整天了,揉揉眼睛。涅盘老师用力揉揉眼:还是不清楚。ZHAZHA:您再揉揉.涅盘老师:还是不行.ZHAZHA:您再揉揉.涅盘老师:还是不行.如此反复50次。涅盘老师双眼红肿,极为愤怒,不耐烦地嚷着:不能再揉了!为什么还是看不清?DIGERATI:老师,很抱歉,们忘了告诉您,昨天您眼镜的两个镜片都摔碎了,现在您只戴着眼镜框.涅盘老师:#&*$%$#&又晕了过去.几天以后,继续上课,涅盘老师原来只有两名同学,现在他面对空空的教室.同学们,啊.上次课,啊.DIGERATI同学和ZHAZHA同学,啊.上课捣乱,啊.被停课请家长,啊.家长至今未到,啊.他们现在还在办公室罚站,啊.如果其他同学,啊.再上课捣乱,啊.就和他们一样的下场,啊.就在涅盘老师对着空教室慷慨激昂的时候,DIGERATI和ZHAZHA正舒舒服服地坐在办公室的沙发上,翘着二郎腿,喝着涅盘老师的龙井茶.哈哈!四、学习过程很辛苦不要问学习C+有什么捷径,因为也不知道。如果你的学校里开设C+课程,那你很幸运,送你八个字:课前预习,课后复习,按时完成作业之类是作为学生的基本要求,就不在这里重复了。下面的内容是针对学校里不开设C+课程的学习者的。不可能一步一步教你如何学习C+,不同的人经历不同,环境不同,学习能力不同,适用于一个人的方法不一定适用于另一个人,只讲几条经验,供大家参考:作者:WDKNIGHT发表时间:2006-2-11 6:03:00第2楼1、不要死抠语法:初学者最容易犯的错误就是抱着一本大书死抠语法,结果语法倒是很熟,程序还是一行都不会写,学习的积极性也受到很大打击。学习编程,语法是最不重要的,最重要的是思路。语法可以从任何一本书上查出来,比如说,用到循环语句的时候,你忘了语法,你可以翻书去查,但如果该用循环的时候你不知道用循环,该赋值的时候不知道用赋值,语法再熟有什么用呢?2、建立面向对象的概念:在这一点上,很欣赏THINKING IN C+,第一章是INTRODUCTION TO OBJECTS,第二章是MAKING&USING OBJECTS,先让读者建立起对象的概念。面向对象概念开始建立的时候确实比较难,但这一关早晚得过,不过这一关就永远写不出真正的C+程序,因此从开始就要培养这一思维方式,不必一蹴而就,要慢慢来,一点一点把思想方法转变过去。只要面向对象的概念建立起来,以后无论学习JAVA还是C#,都不过是小菜一碟,新东西很少了。3、尽早接触标准库:这也就是把THE C+STANDARD LIBRARY:A TUTORIAL AND REFERENCE归入入门类的出发点,标准库的概念接触越早越好,要把使用标准库作为天经地义的事情,作为自己的编程习惯,能用的地方一定要用。几乎所有的C+大师都强调过这一点,THE C+PROGRAMMING LANGUAGE第三章就是A TOUR OF THE STANDART LIBRARY,已经提前得不能再提前了,可见其重视程度。而国内的C+教材要么不讲,要么简简单单一带而过,晕!4、认真分析例题:从别人的源代码中学习是最简单的学习方法。书上的例题大部分都是作者精心挑选的,最能体现某种语法特点或思想观念的程序,认真体会这些例题,理解程序的逻辑和结构,多问自己几个问题:作者为什么要设计这个类?这个类有什么作用?作者是如何设计这个类的?如何使用这个类的?这个类是否还可以用在别处?等等。把上述问题中的类换成函数、模板等同样适用。遇到不好理解的例题有一个笨办法,就是把源程序输入一遍,这个办法确实很有效,看了半天也看不懂的程序,只要输入一遍基本就能理解了,而且还加深了印象。不要不动脑子一个字母一个字母敲,敲完都不记得敲的什么了,要看一行或一段再自己输入。5、培养良好的编程风格,积累编程技巧:只要你对C+有了一个初步的概念,就可以开始看在上一部分列出的应用技巧类书籍了。并不是每一个条款都那么高难,你也不是一定要按顺序读,一边学一边就可以挑选自己能看懂的条款研究一番。当然初学者不可能理解很深,好在这些书也不是看一遍就够的,有些条款随着你学习的深入,反复阅读会有更深的体会。如果一本全面的书是正餐的话,这些书就是佐餐的小菜,提供人体必须的维生素、矿物质和微量元素,全面吸收才能茁壮成长。6、擅

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论