如何学好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语言》的相关评论
以前看过一句话:学习计算机的,不看《算法导论》还有《深入理解计算机系统》,就犹如基督徒不读圣经,只有空洞的膜拜,而没有坚定的信仰。
学习computer architecture and design对软件学习有帮助吗?
《Pointers on C》 和 《TCP/IP Illustrated》 是不错的
呵呵,我看出来了.兰州是来卖书的…
呵呵,我看出来了.楼上你很二逼…
推荐的书都不错哦。。
另外推荐两本《C语言接口设计与实现》《C缺陷与陷阱》
学习底层光看这些书是不够的 想掌握好C语言 最好有较扎实的汇编功底 有操作系统的设计经验或者对其有一定了解 从事嵌入式开发也会又不小的帮助
这方面 推荐于渊和赵炯的书 另外 《深入理解计算机系统》也是本不错的书
初学者也不要错误认为给自己一张书单看完了就是高手了 书肯定是要看 但是在过程中 是否认真的思考深入的去探索才是最重要的 学习C不像学习Python 没有速成的可能性
C语言另一个大头就是内存管理 基本大型的基于C的库都会自己实现一套内存管理 可以找源码读读 然后试着在自己的项目里做一套 再就是C的异常处理机制的实现 亦可以做一套
路漫漫 不断求索~
ps:steven的三套书都很好 TCP/IP三卷中对源码的解读对于C也很有帮助 而APUE英文版很好 中文版被尤晋元糟蹋了 楼主说的C程序设计语言是K&R版本 新手可别找错了
“不要看谭浩强的那本书,那本是本烂书。”,只可惜很多人看的就是这本烂书。
5年时间看完了这么多书,非常佩服.前进的方向啊
很详细的补充呀,很受教,多谢了!
这篇文章看了很多遍,每次都觉得受益匪浅
很好的文章。。知道该怎么做了
谭浩强的书和《C程序设计语言(第2版·新版)》我都认真读过,我认为谭浩强的书才是经典。
作为一名前java coder,感受颇多。。最近一直再看Unix网络编程,神作
不断学习,从大学就用linux,而现在工作也同样在Linux~~
哈哈,学无止境,而独学则无友,感谢博主分享经验,
第一次来,却看到很多新鲜的东西,受益匪浅~~~
强大的10楼!
再推荐一本《代码大全》,也是一本很不错的书。
只是还没有看完。
绝对的2 B,博主只是好心准确的告诉你书 还推销书那 你以为互动是博主家的啊
“不要看谭浩强的那本书,那本是本烂书”说出了我的心声啊
额……好多啊……慢慢看吧
受益匪浅。好好潜心读书。
系统编程 是不是看windows 或者是Unix 都是一样的??
看到原版了
推荐的书只有两本没看过~ 准备看看
@道法自然
谭浩强的书适合考试用,不适合做技术
@道法自然 <谭浩强的书你学会了可以读清华的研究生,博士生都没问题,那估计你也就是个博士。上面的说烂书完全是抬举,简直就是垃圾书
@Demon 上大学 时候的教材。。。
我亲爱的学长拿了本超厚的全英文版《深入理解计算机系统》砸我面前——”看!”
最近正好有点迷茫了 , 感谢分享
学习C语言,如果不知道内存结构,跟学BASIC,pascal没两样。
@道法自然
谭浩强前三页有17个错误,真经典
我能问个问题吗,我的数学不太好,对于电脑的程序有兴趣,学起来是不是会费劲很多?
谢谢!
这本书的特点是什么
哇哈哈哈哈哈哈哈哈,果然这书害人不浅啊。
基本上都看过这些书,但都是囫囵吞枣滴看的!现在工作主要集中在图形界面上,话说我是不擅长做图形界面的。应该把更多的时间花在该花的地方上。也算半个linux控!看得次数最多的要算《深入理解操作系统》和《intel汇编》。但是对《深入》还是没有吃透,汇编的确帮我理解了以前很多理解不了的东西,不过工作中不会涉及到!
不明白为什么这么多人骂《C程设》,科班出身的人必学之一。在读一本书之前请你一定要仔细看看这书的目的,谭老写这本书是给不懂编程的人看的!这是中国的编程入门书,不是工具书,想买工具书 《Unleashed C》 在那等着呢。
很多人没有经过系统的学习就出来混 IT 不是不可以,但是你一定要记住对一般人来说入门是一件很难的事情。就像你小学念书时背的那些面积公式一样,到了大学你可以用积分推导出来,但在小学的时候你只要背下来就可以了。编程也是一样,给第一次接触编程的人就看《The C Programming Language》才是扯。这本书是给想学 C 的人看的,而不是给从来不懂编程为何物的人。当然硬要说的话,pascal 更适合进行教育,但这也只是语言的区别。
我认为博主这样轻易诋毁一本书很不得体,即便你觉得它对你没用,也不用把它当作垃圾。
说得很不错,现在的人都太浮躁了。不舍得花时间去学习这些东西。
@两点水
哎……
《C程设》我就没看过,我看的是《C Primer plus》,也能入门。另外《The C Programming Language》不能入门吗?不解
很佩服博主不断学习的精神,时间总是有的。向博主学习