How To Study C Programming Language

来源:互联网 发布:英语聊天软件 编辑:程序博客网 时间:2024/04/24 03:55
How To Study C Programming Language
网络上一些大虾的学习经验,我转载了借鉴一下!
C语言学习方法
谈谈偶的学习方法,抛砖引玉!:)
学习不论讲不讲方法,最终都能学会。但是别人1个月学会了,而你却100年才学会,这不就晚了么?:)所以说,学习还是要讲究方法的。学习方法正确,事半功倍;学习方法不正确,事倍而功半。
什么才是学习C语言的捷径?我的答案是看书。书中所写,是前人数十年经验所写,看十本书,就相当于汲取了前人数十年的功力,那么你的内功也会迅速上升1甲子。:)书当然要看好书,只有好书才营养丰富。假如你花了1天时间看了一本破书,而该书介绍的知识虽然对于你来说是全新的知识,但是由于书中组织不当、或者深度不够,使你获取的营养很少,还不如自己研究一天来的快,这种书就不值当看了。学习C语言要看那些好书?我认为首先要把基础书给看扎实了,比如拙著《C语言之四书五经》中介绍的4本。(虽然这些书很多已经绝版了,但我相信电子版也是很有益处。况且,如果你真的想看,我相信你一定有办法搞的到。)这些书你会在很短的时间内看完(比如一两个月),这取决于你的基础和悟性。之后要看那些书呢?我不妨再列几本。Bjarne Stroustrup的《C++程序设计语言》(The C++ Programming Language)一定要看,这本书里面对于C的一些基础概念的定义,比我见过的其他任何C语言书都要全,都要仔细;Bjarne Stroustrup的《C++语言的设计与演化》(The Design and Evolution of C++)和David R.Hanson 的《C语言接口与实现 创建可重用软件技术》(C Interfaces and Implaementations Techniques for Creating Reusable Software)一定要看,这两本书讲述了如何用C来实现异常处理、实现类型的封装和扩展等一些大的项目中经常用到的高级技术。其他的书,操作系统的要看,编译原理的要看,算法的要看,模式的也要看。读书破万卷,coding如有神。总而言之,就如《传》中云:“生而知之者,上也;学而知之者,次也;困而学之又其次也。”我们不能总是因困而学之,而要做到兵马未动,粮草先行。
看书是学习的导向,书中能一一介绍清楚概念,但书却不能把应用的细节一一介绍给你,因为应用总是招数繁复,变化多端。因此我们要想熟悉招数,懂得书中所讲怎么使用,还要多读源码。Linus给别人解答问题的时候,常说Read the fucking source code;候捷也在其文中提到“源码之前,了无秘密。”这就是大师的箴言呀。源码就像是动画、就像是幻灯片,把书中的招式一一演练给你看。可以说高手的经验大都是源自代码。源码和书一样,也是要看好的,不要看差的。在此,我推荐看Linux kernel source code 和 Linux tcp/ip source code。这两套代码都是开源的,垂手可得。此外,还可以配合着Andrew S.Tanenbaum的《操作系统的设计与实现》(Operating Systems:Design and Implementation)、毛德操 胡希明的《Linux内核 源代码情景分析》、Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman合著的《Linux设备驱动程序》(Linux Device Driver,3e)、W.Richard Stevens《TCP/IP详解(3部)》 (TCP/IP Illustracted )、W.Richard Stevens《UNIX环境高级编程》(Advanced Programming in the UNIX Environment,新版增加了Linux kernel的内容)等书来看,方便的很。
当然程序不是看出来的,是写出来的。我高中的时候每天坚持写6个小时程序,《数据结构》和排列组合、图论方面的习题反复做了N遍。到现在虽然已经时隔五六年,很多内容早已淡忘掉,但却培养了我很强的编码能力和调试能力,直到现在还对我的工作有很大的帮助。
学习忌贪多、忌浮躁、忌急功近利、忌目中无人。把学习计划放的长一些,培养一个好的学习方法,一步一步慢慢走,终能成为高手。
C语言之四书五经
C 语言教学早就进入了我国各大高校的教程,但是大家对它的认识以及重视程度还很是不够。很多人认为C语言无非是一种教学语言,是一种工业语言,它很老了,该淘汰了,比不上VC++、Java、C#等新兴语言牛B,所以不是很重视C语言。我认为,这些朋友是受了某些舆论的误导才会有此看法。C语言是各大操作系统的基础,Unix、Linux、Windows其内核都清一色是C语言开发的,(某些地方是和汇编语言混合开发的),君不见Windows API都是C语言函数的接口?Unix/Linux绝大多数应用都是C语言开发的;Windows应用程序用纯API开发已然不多,大多都是依靠某种 Application Framework,比如所谓的VC++,其实就是指VC IDE + C++语言 + MFC(现在重点已转向ATL、WTL),但是Windows服务、网络、驱动程序等底层软件,还是C语言开发的。各种语言的编译器,包括java虚拟机,都是用C语言开发的。各种嵌入式设备,如手机、PDA也都是C语言开发的。C语言历史悠久,其内容也绝非谭浩强老师的《C语言程序设计(第二版)》所描述的那么简单——那本书只是针对中国国情的教学入门书而已(并且很多地方都不符合ISO C 99标准了)。
论坛中很多还是高校的学生总喜欢问:那种语言好?学那种语言有前途?这种问题天天在讨论,永无休止。其实我觉得大家所关心的,无非是那种语言更有 “钱途”,学习那种语言毕业后能够轻松找到高薪的工作——当年我也是这么想。那么,在这里我要给这些朋友吃一剂定心丸了——C语言大有应用市场,国内知名的四家电信制造企业巨龙、大唐、中兴、华为(简称“巨大中华”,如果你对此四大家耳生,我劝你应该google一下学习学习了)无不热招C开发人才;各大外资、世界500强信息产业亦是如此(去51job.com上查查就明白了)。只要你精通C语言,即使你不了解C++等其他语言,找到高薪工作也是轻松得很。
为什么我如此推崇C语言,而对C++语言尚未提半字?一方面受本篇题目的限制(偶不能跑题呀),另一方面,我认为C语言比C++好学得多,学习成本也很低。为什么这么说?下文中所列举的4部C语言经典巨著,平均每本定价不到40元,如果你依次把它们学透了,那就够了,不需要再买C语言书了(事实上也没什么其它书好买了)。下一步就是从实践中学真知了——一方面从工程项目中锻炼,另一方面从分析老外源码(比如linux源码、GNU源码等)中提高,功夫下到,收获自然来。而C++语言,拿我自己来说,买书投入的资金已经超过千元了,也认真学习了1~2年(时断时续)了,终究对标准C++语法彻底理解的部分占不到40%。引用vckbase论坛一大牛“七猫”兄的话说:“我不打算再往C++书上投钱了”,那简直是无底洞。从另一方面说,这几本C语言经典巨著,对于学习C++的PO、OB设计也是很有帮助的(PO、OB应该算是C++的基本功了,PO指的是Procedure Oriented, OB指的是Object Based);国外的顶尖C++高手,往往也是C语言高手。
好,罗嗦了这么,下面就介绍C语言的几本经典之作。另外BTW一句:很多朋友一定会问:为什么我们学校不用这些书做教材?这个问题就很难回答了,我觉得你应该致电国家教育部、或你们学校教导处询问,人家自然会给你个说法。:)不过有一个原因大家都能理解,(冒死说句大不敬的话),教这些书估计你的任课老师未必罩得住,也说不准。:) 因为这些都是国际上Hacker级的巨著呀。(看我多大方,把我的所知毫无保留的都传授给你了:p)
依据我给出的顺序,你应该很容易自学这些书(均有中文译本,此处给出的都是中文版的信息,在各大电子科技书店都应该买得到):
一、The C Programming Language
C程序设计语言(第2版·新版)
原出版社: Prentice Hall PTR
作者: [美]Brian W.Kernighan,Dennis M.Ritchie
译者: 徐宝文 李志
书号: 7-111-12806-0
页码: 258
开本: 16开 版次:2-1
丛书名: 计算机科学丛书
出版社: 机械工业出版社
出版日期: 2004-1-1
定价: ¥30.00
二、Pointers on C
C和指针
原出版社: Pearson Education
作者: Kenneth A.Reek
译者: 徐波
书号: 7-115-11456-0
页码: 450
开本: 16开 版次:1-1
丛书名: C和C++实务精选
出版社: 人民邮电出版社
出版日期: 2003-9-1
定价: ¥55.00
三、Expert C Programming
C专家编程
原出版社: PH PTR
作者: Perter Van Der LinDen
译者: 徐波
书号: 7-115-10627-4
页码: 291
开本: 16开 版次:1-1
丛书名: C和C++实务精选
出版社: 人民邮电出版社
出版日期: 2002-12-1
定价: ¥40.00
四、C Traps and Pitfalls
C陷阱与缺陷
原出版社: Addison Wesley
作者: Andrew Koenig
译者: 高巍
书号: 7-115-10623-1
页码: 172
开本: 16开 版次:1-1
丛书名: C和C++实务精选
出版社: 人民邮电出版社
出版日期: 2002-11-1
定价: ¥30.00
**********************************
**********************************
李开复的建议:
(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。不妨试试Donald Knuth的Art of Computer Programming里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面的功力不错了。
(2)多实战。通过编程的实战积累经验、内化知识。建议大家争取在大学四年中积累编写十万行代码的经验。
(3)求实干。不要轻视任何的实际工作,比如一些看似简单的编码或测试。要不懈追求对细节一丝不苟的实干作风与职业精神。
(4)不放弃数学。数学是思维的体操,数学无处不在。尤其当你对一些“数学密集型”的领域有兴趣,例如视频、图像处理等等,你需要使它成为你的利器。
(5)培养团队精神,学会与人合作。
(6)激励创新意识,不为书本和权威意见所束缚。
(7)有策略地“打工”。在不影响学业的前提下,寻找真正有意义的暑期工作或兼职。去找一个重视技术的公司,在一个好的“老板”指导下完成真正会被用户使用的程序。不要急于去一个要你做“头”而独挡一面的地方,因为向别人学习,是你的目的。打工和找工作一样,“不要只看待遇和职衔,要挑一个你能够学习的环境,一个愿意培养员工的企业,一个重视你的专业的公司,最后,要挑一个好老板。”


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8844/showart_58115.html
原创粉丝点击