如何学好C语言

2011年3月29日 发表评论 阅读评论 59,581 人阅读    

有人在酷壳的留言版上询问下面的问题

keep_walker :
今天晚上我看到这篇文章。
http://programmers.stackexchange.com/questions/62502/small-c-projects

我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!

我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:

  1. 虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。
  2. 大量的封装好的类库也屏蔽了很多实现细节。

一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实。此时,一部分程序员会不自然地想学学底层的技术,很自然的,C语言就被提了上来。

下面是我给这位朋友的一些建议:

  • 鼓励并为你叫好。我鼓励你想要去学C语言的想法和精神,很多人都觉得C语言好学,其实并不然。(你可以看看《C语言的迷题》)现在的这个社会更多地去关注那些时髦的技术,而忽略了这个流行了40+年的C语言。一门技术如果能够流行40多年,这才是你需要去关注和学习的技术,而不是那些刚出来的技术(过度炒作的技术Windows编程史)。这才是踏踏实实的精神。
  • 不要找借口。这一条路走下来并不容易,不要给自己找借口。我最不喜欢听到的就是“很忙,没有时间”这样的借口。我以前在银行做项目,早9点到晚10点,周一到周六,我一样可以每天抽1个小时来看书和专研,一年下来也能精读5、6本书。我现在的工作项目和招聘任务很紧张,刚生的小孩只有自己和老婆两人带,还需要准备讲课,但是我还是能够找到时间看文章写文章维护酷壳。所以,我可以告诉你,“时间就像乳沟,只要你肯挤,就一定会有”。

如果你能在2-3年内精读完这些书,并全部融会贯通,那么你就明白什么是一览众山小的感觉了!我足足花了5年时间才算是真正全部读完这些书的。最后,祝你好运!努力!

——-更新:2011/03/29 20:00——-

我想,这篇文章主要想告诉大家这么几件事:

  • 编程编到一定时候,你就需要了解底层系统的机制,否则,知其然不知所以然。
  • 我没有否定非C的程序员的逻辑,真正的逻辑是——如果你想要了解底层机制,请学习C语言和操作系统。
  • 40多年的Unix/C影响深远。包括影响了Windows。如果你想一通百通,一定要了解Unix。那是计算机文化真正的根。
  • 不要肤浅地去思考问题。比如,不要以为一个DBA就不会考虑数据库引擎的内存页面的问题。也不要以为Web程序员就不需要了解后台的服务器和脚本的运行性能以及TCP/IP的问题。

高手往往都是有很强的系统的基础知识的,表面的东西永远是肤浅的。

好烂啊有点差凑合看看还不错很精彩 (89 人打了分,平均分: 4.91 )
Loading ... Loading ...
  1. leeo
    2011年3月31日09:26 | #1

    呵呵,我看出来了.兰州是来卖书的…

  2. Enjoy
    2011年3月31日17:58 | #2

    呵呵,我看出来了.楼上你很二逼…

  3. huomosi
    2011年3月31日21:04 | #3

    推荐的书都不错哦。。

  4. placebo
    2011年4月1日09:36 | #4

    另外推荐两本《C语言接口设计与实现》《C缺陷与陷阱》
    学习底层光看这些书是不够的 想掌握好C语言 最好有较扎实的汇编功底 有操作系统的设计经验或者对其有一定了解 从事嵌入式开发也会又不小的帮助
    这方面 推荐于渊和赵炯的书 另外 《深入理解计算机系统》也是本不错的书
    初学者也不要错误认为给自己一张书单看完了就是高手了 书肯定是要看 但是在过程中 是否认真的思考深入的去探索才是最重要的 学习C不像学习Python 没有速成的可能性
    C语言另一个大头就是内存管理 基本大型的基于C的库都会自己实现一套内存管理 可以找源码读读 然后试着在自己的项目里做一套 再就是C的异常处理机制的实现 亦可以做一套
    路漫漫 不断求索~
    ps:steven的三套书都很好 TCP/IP三卷中对源码的解读对于C也很有帮助 而APUE英文版很好 中文版被尤晋元糟蹋了 楼主说的C程序设计语言是K&R版本 新手可别找错了

  5. 2011年4月4日12:25 | #5

    “不要看谭浩强的那本书,那本是本烂书。”,只可惜很多人看的就是这本烂书。

  6. 2011年4月4日14:39 | #6

    5年时间看完了这么多书,非常佩服.前进的方向啊

  7. 吞吞吐吐
    2011年4月8日11:22 | #7

    placebo :
    另外推荐两本《C语言接口设计与实现》《C缺陷与陷阱》
    学习底层光看这些书是不够的 想掌握好C语言 最好有较扎实的汇编功底 有操作系统的设计经验或者对其有一定了解 从事嵌入式开发也会又不小的帮助
    这方面 推荐于渊和赵炯的书 另外 《深入理解计算机系统》也是本不错的书
    初学者也不要错误认为给自己一张书单看完了就是高手了 书肯定是要看 但是在过程中 是否认真的思考深入的去探索才是最重要的 学习C不像学习Python 没有速成的可能性
    C语言另一个大头就是内存管理 基本大型的基于C的库都会自己实现一套内存管理 可以找源码读读 然后试着在自己的项目里做一套 再就是C的异常处理机制的实现 亦可以做一套
    路漫漫 不断求索~
    ps:steven的三套书都很好 TCP/IP三卷中对源码的解读对于C也很有帮助 而APUE英文版很好 中文版被尤晋元糟蹋了 楼主说的C程序设计语言是K&R版本 新手可别找错了

    很详细的补充呀,很受教,多谢了!

  8. 御剑逍遥
    2011年4月9日16:20 | #8

    这篇文章看了很多遍,每次都觉得受益匪浅

  9. 伤风
    2011年4月10日00:21 | #9

    很好的文章。。知道该怎么做了

  10. 道法自然
    2011年4月11日09:27 | #10

    谭浩强的书和《C程序设计语言(第2版·新版)》我都认真读过,我认为谭浩强的书才是经典。

  11. jarcher
    2011年4月16日15:31 | #11

    作为一名前java coder,感受颇多。。最近一直再看Unix网络编程,神作

  12. rainchou
    2011年4月18日20:56 | #12

    不断学习,从大学就用linux,而现在工作也同样在Linux~~
    哈哈,学无止境,而独学则无友,感谢博主分享经验,
    第一次来,却看到很多新鲜的东西,受益匪浅~~~

  13. LP
    2011年4月20日21:12 | #13

    强大的10楼!

  14. 2011年4月22日11:05 | #14

    再推荐一本《代码大全》,也是一本很不错的书。
    只是还没有看完。

  15. 黑骑士
    2011年4月24日12:04 | #15

    leeo :呵呵,我看出来了.兰州是来卖书的…

    绝对的2 B,博主只是好心准确的告诉你书 还推销书那 你以为互动是博主家的啊

  16. Gary
    2011年4月26日15:26 | #16

    “不要看谭浩强的那本书,那本是本烂书”说出了我的心声啊

  17. 信才
    2011年5月3日15:38 | #17

    额……好多啊……慢慢看吧

  18. toryl
    2011年5月4日16:39 | #18

    受益匪浅。好好潜心读书。

  19. question
    2011年5月9日21:22 | #19

    系统编程 是不是看windows 或者是Unix 都是一样的??

  20. William
    2011年5月18日22:47 | #20

    看到原版了

  21. 2011年5月20日14:52 | #21

    推荐的书只有两本没看过~ 准备看看

  22. 北冰
    2011年5月20日17:51 | #22

    @道法自然

    谭浩强的书适合考试用,不适合做技术

  23. 愤怒GTK
  24. 213
    2011年6月3日11:49 | #24

    @Demon 上大学 时候的教材。。。

  25. Walkerinwind
    2011年6月3日18:47 | #25

    Karl :
    书单可以加个《深入理解计算机系统》,把汇编、计算机系统结构、OS和C融汇贯通的入门读物。

    我亲爱的学长拿了本超厚的全英文版《深入理解计算机系统》砸我面前——”看!”

  26. ChunCui
    2011年6月3日23:16 | #26

    最近正好有点迷茫了 , 感谢分享

  27. 三毛
    2011年6月7日19:05 | #27

    学习C语言,如果不知道内存结构,跟学BASIC,pascal没两样。

  28. Tydus
    2011年6月9日08:19 | #28

    @道法自然
    谭浩强前三页有17个错误,真经典

  29. 刚从高考战线上下来
    2011年6月14日00:32 | #29

    我能问个问题吗,我的数学不太好,对于电脑的程序有兴趣,学起来是不是会费劲很多?

    谢谢!

  30. 林秒出手
    2011年6月23日17:15 | #30

    这本书的特点是什么

  31. gosh
    2011年7月12日19:05 | #31

    道法自然 :
    谭浩强的书和《C程序设计语言(第2版·新版)》我都认真读过,我认为谭浩强的书才是经典。

    哇哈哈哈哈哈哈哈哈,果然这书害人不浅啊。

  32. ywergs
    2011年7月21日04:08 | #32

    基本上都看过这些书,但都是囫囵吞枣滴看的!现在工作主要集中在图形界面上,话说我是不擅长做图形界面的。应该把更多的时间花在该花的地方上。也算半个linux控!看得次数最多的要算《深入理解操作系统》和《intel汇编》。但是对《深入》还是没有吃透,汇编的确帮我理解了以前很多理解不了的东西,不过工作中不会涉及到!

  33. 两点水
    2011年7月23日17:14 | #33

    gosh :

    道法自然 :
    谭浩强的书和《C程序设计语言(第2版·新版)》我都认真读过,我认为谭浩强的书才是经典。

    哇哈哈哈哈哈哈哈哈,果然这书害人不浅啊。

    不明白为什么这么多人骂《C程设》,科班出身的人必学之一。在读一本书之前请你一定要仔细看看这书的目的,谭老写这本书是给不懂编程的人看的!这是中国的编程入门书,不是工具书,想买工具书 《Unleashed C》 在那等着呢。

    很多人没有经过系统的学习就出来混 IT 不是不可以,但是你一定要记住对一般人来说入门是一件很难的事情。就像你小学念书时背的那些面积公式一样,到了大学你可以用积分推导出来,但在小学的时候你只要背下来就可以了。编程也是一样,给第一次接触编程的人就看《The C Programming Language》才是扯。这本书是给想学 C 的人看的,而不是给从来不懂编程为何物的人。当然硬要说的话,pascal 更适合进行教育,但这也只是语言的区别。

    我认为博主这样轻易诋毁一本书很不得体,即便你觉得它对你没用,也不用把它当作垃圾。

  34. 2011年8月8日11:03 | #34

    说得很不错,现在的人都太浮躁了。不舍得花时间去学习这些东西。

  35. Arthur
    2011年8月9日11:45 | #35

    @两点水
    哎……
    《C程设》我就没看过,我看的是《C Primer plus》,也能入门。另外《The C Programming Language》不能入门吗?不解

  36. 2011年8月14日10:26 | #36

    很佩服博主不断学习的精神,时间总是有的。向博主学习

  37. qun169354445
    2011年8月18日23:42 | #37

    呵呵,推荐的这些书挺好的!我觉得新手应该先看 谭浩强 的那本书!太经典了!然后再看C程序设计语言(第2版·新版)!!

  38. 无心X柳
    2011年8月23日15:31 | #38

    @Demon
    原来是本烂书,怪不得我当初学习C++咋这么差

  39. 宁静
    2011年9月1日17:31 | #39

    Arthur :
    @两点水
    哎……
    《C程设》我就没看过,我看的是《C Primer plus》,也能入门。另外《The C Programming Language》不能入门吗?不解

    我也不解, The C Programming Language 入门怎么就扯了,难道米国人民要看谭浩强的英文版?
    谭浩强自己都说不是给专业计算机人员看得

  40. =.=
    2011年9月2日22:14 | #40

    @无心X柳
    = =谭那本书是教C的.你当C++学当然不行了.

  41. gibsonboy
    2011年9月7日17:06 | #41

    @Demon
    说得太对了!

  42. manu
    2011年9月10日10:34 | #42

    @楼兰
    在项目中写出这种代码的人,直接开除。代码怎么维护?

  43. 2011年10月4日21:08 | #43

    悲剧,我一直在看谭浩强的那本书 = =

  44. Patmos
    2011年11月1日13:33 | #44

    我只是不懂,怎么调节爱好和生活的平衡性。天天看高数,信号与系统,dsp,一堆数学的东西,数学嘛,尤其是中国的应试教育,不做题不行,一做题,哪有时间啊。。。题永远都做不完的啊。

  45. 2011年11月1日15:14 | #45

    推荐个可租这些书的网址:http://www.olezu.com

  46. kim
    2011年11月6日12:31 | #46

    mark

  47. 轻似梦
    2011年11月7日10:35 | #47

    好多评论,只是不明白为什么用java就弄不明白底层呢,难道用java写的编译器,vm,就和C的原理不一样了,那些个引用计数才是让维护的人头疼不已!

  48. 2011年11月17日23:44 | #48

    我的C语言学习历程:
    (1),语言
    就学C语言(计算机专业学生),
    《C语言精要12讲》介绍很基础的程序设计,主要就是让你可以跑起hello world,而且环境什么的讲得很详细!最初的入门,
    《21天精通C语言》(呵呵,有人要鄙视了,其实这是外国的书,我当时可是花了很多时间的),
    《The C programming language》看的是英文版,不过看懂的不多,英语基础不好,不过还是根据原有的知识,印证了很多的知识点。
    《C Traps and Pitfalls》C语言陷阱与缺陷,真正让我了解了C语言底层的很多东西,特别是对指针的介绍,讲的是缺陷,其实是C语言底层的东西。
    《C专家编程》C语言的高级主题,数组指针,内存等。
    (2),算法和数据结构
    《算法导论》只能看懂小部分。。。
    (3),系统编程
    博客主人推荐的书我多准备好了,学习中!《windows程序设计》-> 《windows核心编程》->《Unix环境编程》->….
    (4),系统设计
    未来目标。
    @placebo

  49. ericax
    2011年11月26日05:53 | #49

    lz能谈谈对lisp的看法么?

  50. ChinLung_Yang
    2011年12月21日02:38 | #50

    受益匪浅,听您讲课绝对是一种享受,默默支持您。

评论分页
  1. 2011年3月29日16:55 | #1
  2. 2011年3月30日08:51 | #2
  3. 2011年3月30日12:19 | #3
  4. 2011年3月31日22:00 | #4
  5. 2011年4月2日22:49 | #5
  6. 2011年4月6日08:49 | #6
  7. 2011年4月6日18:50 | #7
  8. 2011年4月8日09:20 | #8
  9. 2011年4月13日10:17 | #9
  10. 2011年4月18日11:16 | #10
  11. 2011年7月31日00:18 | #11
  12. 2011年7月31日00:28 | #12
  13. 2011年8月11日13:05 | #13
  14. 2011年8月14日01:28 | #14
  15. 2011年8月14日16:15 | #15
  16. 2011年8月27日11:03 | #16
  17. 2011年10月29日16:03 | #17
  18. 2011年11月10日17:36 | #18
  19. 2011年12月17日22:19 | #19
  20. 2011年12月20日08:39 | #20
  21. 2011年12月20日13:16 | #21
  22. 2011年12月20日14:24 | #22
  23. 2011年12月20日15:13 | #23
  24. 2011年12月28日13:17 | #24
  25. 2011年12月28日21:57 | #25
  26. 2012年1月6日09:59 | #26
  27. 2012年1月8日21:03 | #27
  28. 2012年1月9日23:22 | #28
  29. 2012年2月13日14:37 | #29
  30. 2012年4月24日09:42 | #30
  31. 2012年4月30日18:57 | #31

无觅相关文章插件,快速提升流量