kernighan和ritchie——我该如何学习C



我对学习C感兴趣。我读过K&R、 我甚至用R和Python做了一些简单的C扩展工作。对于用C做一些更实质性的事情,什么是有价值的项目想法?有什么好的在线资源,类似于Dive Into Python吗?特别是,资源集中在那些已经了解新语言并试图学习C语言的程序员身上(其中提到"在C语言中询问数组的长度是无稽之谈,你这个懒惰的Python主义者")。

我的背景:

数学/统计,Python、R的日常编程,主要围绕自然语言处理、算法等。

几年前,我的一个朋友问我同样的问题:"我如何学习C?"我告诉他写一个设备驱动程序。

想象一下,当他真的这么做的时候,我会感到惊讶。

看看在K&R用哪本书来学习纯C语言的编程?

有些离题,但既然你提到你的背景是数学和统计,你应该试试Project Euler。有200多个与数学/统计相关的问题可供解决。此外,一旦你找到了解决方案,你就可以查看问题论坛,看看其他人是如何解决同一解决方案的。非常方便查看他人如何解决问题。。。踢起来很有趣!

www.projecteuler.net

我和你有相似的背景。我使用Python为我的博士研究和网络编程做了很多数学和数据分析。不同的是,早在90年代,我就先学会了C。

如果你能为Python编写C扩展,那么我认为你已经很好地掌握了C的优点。在我看来,今天的C最适合做两件事:

  • 编写与硬件交互的低级软件
  • 编写重复、乏味、占用CPU的代码(数学、XML解析等)……也许是对高级语言的扩展

当然,许多高级应用程序也是用C编写的,尤其是在我发现的Linux下,但在很大程度上,这些应用程序并不是用K&R或标准库。相反,他们使用Glib、wxWindows、Apache Portable Runtime等框架,这些框架都使用了某种面向对象的结构或约定,并且经常抽象掉C.的一些基本内存管理细节

因此,我认为在当今的编程语言环境中,让你的C技能变得有用主要是做低级工作,或者熟悉其中一个高级框架。我个人非常喜欢Glib和GTK库,因为它们使用了非常动态面向对象的模型(非常像Python),而不会阻止您使用C.的低级功能

您可以为一种简单的语言编写一个解释器。使用flex/bison。让它成为多线程的等等。这很有趣,而且经常锻炼指针。我为一个学校项目写了这样的东西:一种简单的基于堆栈的语言,有两个不同的垃圾收集器,TwoSpace和一个并发版本。那很有趣。作为有史以来第一个比"你好,世界"更大的c程序,它是可行的!

看看如何艰难地学习C,这是一本免费的电子书,它会带你学习许多C代码和练习的例子。

http://c.learncodethehardway.org/

在日常工作中发现或定义一个问题,并强迫自己使用C而不是Python来解决它。这将迫使你学习语言,同时让问题与你通常做的事情相关。

实现一个虚拟机(例如JVM)。

最新更新