我对学习 C 很感兴趣。我读过K & R,甚至在 R 和 Python 中做了一些简单的 C 扩展工作。用 C 做一些更实质性的事情是什么有价值的项目想法?有什么好的在线资源,类似于Dive Into Python吗?特别是,资源集中在那些已经知道正在尝试学习 C 的新语言的程序员上(其中提到了诸如“在 C 中询问数组的长度是无稽之谈,你这个懒惰的 Pythonista”)。
我的背景:
数学/统计,Python、R 的日常编程,主要围绕自然语言处理、算法等。
我对学习 C 很感兴趣。我读过K & R,甚至在 R 和 Python 中做了一些简单的 C 扩展工作。用 C 做一些更实质性的事情是什么有价值的项目想法?有什么好的在线资源,类似于Dive Into Python吗?特别是,资源集中在那些已经知道正在尝试学习 C 的新语言的程序员上(其中提到了诸如“在 C 中询问数组的长度是无稽之谈,你这个懒惰的 Pythonista”)。
我的背景:
数学/统计,Python、R 的日常编程,主要围绕自然语言处理、算法等。
几年前,我的一个朋友问我同样的问题:“我如何学习 C?” 我告诉他写一个设备驱动程序。
想象一下,当他真正做到这一点时,我会感到惊讶。
有点离题,但既然你提到你的背景是数学和统计,你应该尝试一下 Project Euler。有超过 200 个数学/统计相关问题可供解决。此外,一旦找到解决方案,您可以查看问题论坛以了解其他人如何解决相同的解决方案。非常方便查看其他人如何解决问题......而且很有趣!
我和你有相似的背景。我使用 Python 为我的博士研究以及网络编程进行大量数学和数据分析。不同之处在于我早在 90 年代就开始学习 C。
如果您可以为 Python 编写 C 扩展,那么我会说您非常了解 C 的优点。在我看来,今天的 C 语言最适合做两件事:
当然,许多高级应用程序也是用 C 编写的,尤其是在我发现的 Linux 下,但在很大程度上,这些应用程序并不是真正用 K&R 的“基本”C 或标准库编写的。相反,他们使用 Glib、wxWindows、Apache Portable Runtime 或其他框架,它们都使用某种面向对象的结构或约定,并且经常抽象出 C 的一些基本内存管理细节。
所以我认为让你的 C 技能在当今的编程语言环境中有用主要是为了做低级工作,或者熟悉这些高级框架之一。我个人非常喜欢 Glib 和 GTK 库,因为它们使用了一个非常动态的面向对象模型(很像 Python),而不会阻止您使用 C 的低级特性。
您可以为一种简单的语言编写解释器。使用弹性/野牛。使其成为多线程等。这很有趣,并且往往会大量使用指针。我为一个学校项目写了类似的东西:一种简单的基于堆栈的语言,具有两个不同的垃圾收集器、TwoSpace 和一个并发版本。那很有趣。并且可以作为第一个比“你好,世界”更大的 c 程序!
看看Learn C the hard way,这是一本免费的电子书,它带你学习许多C代码示例和练习,以便你学习。
在您的日常工作中发现或定义一个问题,并强迫自己使用 C 而不是 Python 来解决它。这将迫使您学习语言,同时保持问题与您通常所做的事情相关。
实现一个虚拟机(例如 JVM)。