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强信息产业亦是如此(去上查查就明白了)。
只要你精通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级的巨著呀。
(看我多大方,把我的所知毫无保留的都传授给你了)
依据我给出的顺序,你应该很容易自学这些书(均有中文译本,此处给出的都是中文版的信息,在各大电子科技书店都应该买得到):
一、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 ProgrammingC专家编程
原出版社:PH PTR作者:Perter Van Der LinDen译者:徐波书号:7-115-10627-4 页码:291 开本:16开版次:1-1丛书名:C和C++实务精选出版社:人民邮电出版社出版日期:2002-12-1定价:¥40.00
四、C Traps and PitfallsC陷阱与缺陷原出版社:Addison Wesley作者:Andrew Koenig译者:高巍书号:7-115-10623-1 页码:172 开本:16开版次:1-1丛书名:C和C++实务精选出版社:人民邮电出版社出版日期:2002-11-1定价:¥30.00
C语言学习方法
学习不论讲不讲方法,最终都能学会。
但是别人1个月学会了,而你却100年才学会,这不就晚了么?:)所以说,学习还是要讲究方法的。
学习方法正确,事半功倍;学习方法不正确,事倍而功半。
什么才是学习C语言的捷径?我的答案是看书。
书中所写,是前人数十年经验所写,看十本书,就相当于汲取了前人数十年的功力,那么你的内功也会迅速上升1甲子。
:)书当然要看好书,只有好书才营养丰富。
假如你花了1天时间看了一本破书,而该书介绍的知识虽然对于你来说是全新的知识,但是由于书中组织不当、或者深度不够,使你获取的营养很少,还不如自己研究一天来的快,这种书就不值当看了。
学习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 ****ing 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遍。
到现在虽然已经时隔五六年,很多内容早已淡忘掉,但却培养了我很强的编码能力和调试能力,直到现在还对我的工作有很大的帮助。
学习忌贪多、忌浮躁、忌急功近利、忌目中无人。
把学习计划放的长一些,培养一个好的学习方法,一步一步慢慢走,终能成为高手。