如何学好C语言

如何学好C语言

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

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的问题。

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

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

好烂啊有点差凑合看看还不错很精彩 (162 人打了分,平均分: 4.69 )
Loading...

如何学好C语言》的相关评论

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

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

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

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

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

  5. 我的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

  6. 看你的文章我好感动!
    《UNIX编程艺术》绝对是一本设计圣经。但是我发现公司里还没有其他人这么重视它。
    我决定跳槽了,摆脱体力密集型劳动!

  7. 当国人在无限崇拜C语言和unix时,美国那些编程牛仔们开始重回LISP时代了,开始关注ruby了。底层编程固然值得景仰,但函数式编程,那些抽象的数学编程照样能和C语言媲美

  8. 就这本书《算法:C语言实现(第1~4部分)基础知识、数据结构、排序及搜索(原书第3版)》,我猜博主是看的是英文版的,不知道猜对了没有?

  9. 要有本Algorithms in C, Parts 1-4: Fundamentals, Data Structures, Sorting, Searching (3rd Edition)的电子版就好了

  10. 呵呵,我觉得操作系统、计算机组成原理、汇编、离散数学都是学习语言的过程必须要同步学习的。
    个人觉得其实学计算机(包括编程)是一个系统的过程,在不具备系统的计算机知识之前(不一定要多么深刻),没有人能只通过一本或N本C教材就能把C语言学会, 只有当了解操作系统的设计策略、一般实现,了解计组、汇编、数据结构、理解离散数学等等计算机的基础知识之后,加以融合,方能一览众山小,C什么的也就能一下了然于心,这时学习什么都很简单了,需要的知识一点时间罢了,数据库、Linux系统的学习等等,不过是那些计算机设计思想的一个实例罢了,计算机 么,无非就是一个冯 诺依曼体系的实现、数学逻辑的机械表达。
    当然, 计算机基础知识和编程语言的学习必须同步进行, 这样才能更深刻理解理论,用已知理论去解决实际问题。——个人体会

  11. Pingback: 性能调优攻略

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注