如何学好C语言
有人在酷壳的留言版上询问下面的问题
keep_walker :
今天晚上我看到这篇文章。
http://programmers.stackexchange.com/questions/62502/small-c-projects我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!
我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:
- 虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。
- 大量的封装好的类库也屏蔽了很多实现细节。
一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(上,下,续)》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实。此时,一部分程序员会不自然地想学学底层的技术,很自然的,C语言就被提了上来。
下面是我给这位朋友的一些建议:
- 鼓励并为你叫好。我鼓励你想要去学C语言的想法和精神,很多人都觉得C语言好学,其实并不然。(你可以看看《C语言的迷题》)现在的这个社会更多地去关注那些时髦的技术,而忽略了这个流行了40+年的C语言。一门技术如果能够流行40多年,这才是你需要去关注和学习的技术,而不是那些刚出来的技术(过度炒作的技术,Windows编程史)。这才是踏踏实实的精神。
- 不要找借口。这一条路走下来并不容易,不要给自己找借口。我最不喜欢听到的就是“很忙,没有时间”这样的借口。我以前在银行做项目,早9点到晚10点,周一到周六,我一样可以每天抽1个小时来看书和专研,一年下来也能精读5、6本书。我现在的工作项目和招聘任务很紧张,刚生的小孩只有自己和老婆两人带,还需要准备讲课,但是我还是能够找到时间看文章写文章维护酷壳。所以,我可以告诉你,“时间就像乳沟,只要你肯挤,就一定会有”。
- 学好C语言和系统编程。我认为,学好编程有四个方面:语言、算法和数据结构、系统调用和设计。
- 语言。我可以告诉你C语言有两大主题你要好好学,一个是内存管理,一个是指针!这个世界上90%以上的C/C++出的严重性错误全是和这两个有关。不要看谭浩强的那本书,那本是本烂书。推荐这本书给你《C程序设计语言(第2版·新版)》
- 算法和数据结构。我认为,用C语言实现算法和数据结构莫过于最爽的事情。推荐你看这本书——算法:C语言实现(第1~4部分)基础知识、数据结构、排序及搜索(原书第3版),还有那本经典的《算法导论》
- 系统编程。Windows下推荐两本书——《Windows 程序设计 》和《Windows核心编程》,Unix/Linux下推荐两本书——《Unix高级环境编程》和《Unix网络编程卷1,套接字》《Unix网络编程卷2,进程间通信》尤其是《Unix网络编程》这本书,一通百通,无论Windows还是Unix/Linux,都是一样的。
- 系统设计。关于设计方面,我全力推荐《Unix编程艺术》,看完以后,你就明白什么是真正的编程文化了。然后,当你看到Windows的Fans的某些言论时,你就知道什么叫一笑了之了。
如果你能在2-3年内精读完这些书,并全部融会贯通,那么你就明白什么是一览众山小的感觉了!我足足花了5年时间才算是真正全部读完这些书的。最后,祝你好运!努力!
——-更新:2011/03/29 20:00——-
我想,这篇文章主要想告诉大家这么几件事:
- 编程编到一定时候,你就需要了解底层系统的机制,否则,知其然不知所以然。
- 我没有否定非C的程序员的逻辑,真正的逻辑是——如果你想要了解底层机制,请学习C语言和操作系统。
- 40多年的Unix/C影响深远。包括影响了Windows。如果你想一通百通,一定要了解Unix。那是计算机文化真正的根。
- 不要肤浅地去思考问题。比如,不要以为一个DBA就不会考虑数据库引擎的内存页面的问题。也不要以为Web程序员就不需要了解后台的服务器和脚本的运行性能以及TCP/IP的问题。
高手往往都是有很强的系统的基础知识的,表面的东西永远是肤浅的。
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《如何学好C语言》的相关评论
个人觉得C++描述的算法也有必要看一下。
博主这么看c语言处理字符串?我觉得对于字符串的处理,对字符串的格式化是c里面最麻烦的地方了.每次遇到要处理这种东西的时候都很头痛.不知道楼主是怎么看字符串处理这类问题的?
谢谢LZ。真正的初学者 我推荐 本入门书籍 Beginning C:from novice to professional. 同样LZ推荐的那个 C程序设计语言。等我入门看完第一本在看。
我是一个新手,英文还算行,长期以来,接触了一大堆乱七八糟的IT知识,从平面设计软件入门(当然大学时有被教授过一些数据库方面的知识,是FOXBASE),以应用开端,开始全面接触IT,第一个接触的就是WEB设计,开始要读代码了,似懂非懂的状态下,上了W3CSCHOOL,了解一点HTLM,XML,DOM,JAVASCRIPT,PHP,MYSQL方面的知识。当然一切皆是在WINDOWS环境下,不过,我很早就知道Linux,甚至于也知道BSD。
对于一个心存追本溯源想法的人来说,学习FREEBSD,C语言是很自然的事,于是今年我终于开始下决心学FREEBSD,HANDBOOK九百多页,已经看到一百多页了;C语言也从本周开始了,读的正是《C程序设计语言(第2版·新版)》,直接的上英文原版,不想再看译本了,多年的杂食积累,借助词典我居然能看下去,庆幸地是这本书只有200多页,对于我这样并不是一穷二白的伪入门者来说,再好不过了。
如果从高中时代接触DOS算起,我接触IT至少有十五年的历史了。我并非专业人士,只不过处在这股大潮下,很自然地就被卷进来了。我很欣慰,我终于开始学C语言了,而且转了一圈回来,发现我这个落伍者其实落下并不远,多年来WIN下的编程员,我其实是跟你们处在同一起跑线上的哦,而且我没有包袱。
前方的路很长,因为整个IT知识结构实在是太庞大了,我不知道我能走到哪里?但我会一直走下去,不过有一点,我至少可以教我的小孩一点编程知识。
登录进来只为向皓哥说声谢谢。皓哥你把我拉回到了正路,过去总是对将来自己要做什么现在要学什么感到迷茫,不能集中力量于一点,皓哥让我的目标更加明确。同时让我真正明白了这句“读史使人明智”。谢谢您!
读完众多经典后,使人谦虚谨慎而且心静,一种高屋建瓴般的心静。@楼兰
《黑客与画家》的作者在书中提到,黑客编程不必太去了解一些底层的计算机理论,就像画家不必去了解颜料的成分一样。对此观点怎么看?
@hheedat
个人兴趣呗,喜欢咋样就咋样
真是个好地方,能学到很多东西,谢谢
只看到C,C++,有没有“如何学好Java?”
@drangleor
Think in java 重构 设计模式
真诚的说一声:谢谢~
皓哥你好,想请问下 算法:C语言实现(第1~4部分)基础知识、数据结构、排序及搜索(原书第3版) 这本书的练习题可以找到solution不?
看了你的selector 向篇文章,讲的确实很彻底,但我想,树有专项吧,java的作用就是屏蔽底层细节,让程序员专注于业务逻辑,更好的快速开发项目,。
现在是2013.2.18早上一点,我,是一个偶尔看到你文章的大一新生。
我的专业是集成电路与集成系统,课程里有c语言,但是这一刻起,我决定要学好C。
文字教会了我谦逊,让我看到知识的浩瀚,还有我们的无知。
很多朋友也都在追新,但是见效快,收入多,真用两三年去修炼内功,恐怕得做好心理准备。
看了您的文章,受益匪浅,忍不住转载,做笔记
博主,,,我是一个学习很懒的大二学生,,,准备学习C的时候,,,偶尔看到了你的这篇文章,,终于不再迷茫了,,,谢谢你啊!顺便问一句,,,英语不好的可以学好C么??
学习了,好好看书。
数据结构好好看,把题目都写成封装接口,至于ACM跳过,实际开发中没几个人遇到这样的情况。
学会分制和动态规划就已经99%的工程就足够用了。
C语言没必要掌握多少,基础的语法掌握一种就好了,多学点操作系统和数据库知识
实际开发中语言只占20%(你研究再深能用到的也就这么多),其他数据库操作系统知识,业务知识占80%。
没必要死扣语言每个特性,我不相信你一份代码能用到c语言所有特性。更别说C++了。
越复杂的语言意味着学习,调试,维护等成本的提高。开发人员还不好找。
不管从哪方面来说这类语言都不是好的选择。除非实在没办法只能选这个。
严格的规范底层代码,灵活的设计不是体现在编码的随意上。所以那些像“奥数”一样的语言特性文章根本没必要看。看了你实际开发中也用不到,因为用不到所以没几天就忘记了,也就是吹水装13可以拿来用用。无视就好了
请问学生可以安装到的UNIX系统有哪个推荐,不是LINUX.
皓哥,可以讲讲处一篇文章,讲讲你学习经历不?(你的经历一定穿插着各方面知识的学习),让大家也能更好的看看这段艰辛的路
浩哥的文章全都带着一种C语言程序员的优越感
谢谢!看到这篇文字让我找到了方向!
真好!找到了解药,不然还在迷茫着。。。
刚看完 C语言程序设计 美版 第四版 不错的入门级教程 写的很详细
才学编程就遇上了酷壳,酷壳的精神我很喜欢!大道之行,始于足下!
同意博主的观点,玩技术就是要一览众山小的感觉,但这个感觉需要修炼好内功才能有
看你的文章学到很多东西
遇到酷客,让我收获很大的~~~
博主对于后辈的帮助很大的
最爽的事情莫过于用C语言实现数据结构和算法
对@placebo
你说的是谭老的书?不要误人子弟了@canal
不要看谭浩强的那本书,那本是本烂书!++
看了这篇文章感觉很受用啊,自己是计算机专业的,都已经大二了,现在想来却有些惭愧并不曾真正的接触到正途,现在从新上路应该还不晚。
参加工作第二年,就进入了茫然期,不知道怎样成为一名好的程序员。偶然一天,看到楼主的一篇文章《程序员技术练级攻略》,现在已经初略的完成了初级入门阶段,想好好的学习一下C语言。有时候也许就傻傻的去相信一些话,真心希望自己这职业生涯的前三年后半段,能安安静静的学习C。谢谢楼主。
学习了