解决方案
其他提示
几年前,我的一位朋友问我同样的问题:“我如何学习C?”我告诉他要写一个设备驱动程序。
想象一下,当他真正做到这一点时,我感到很惊讶。
有点偏离主题,但既然你提到你的背景是在数学和统计学中你应该尝试在项目欧拉。有200多个数学/统计相关问题可供解决。此外,一旦您找到解决方案,您可以查看问题论坛,了解其他人如何解决相同的解决方案。非常方便看到其他人如何解决问题......以及开机的乐趣!
我和你有相似的背景。我使用 Python 为我的博士研究以及网络编程进行大量数学和数据分析。不同之处在于我是在 90 年代首先学习 C 的。
如果您可以为 Python 编写 C 扩展,那么我想说您对 C 的优点有很好的把握。在我看来,当今的 C 最适合做两件事:
- 编写与硬件交互的低级软件。
- 编写执行重复、乏味、CPU 密集型工作的代码(数学、XML 解析等)...也许作为高级语言的扩展。
当然,许多高级应用程序也是用 C 语言编写的,特别是在我发现的 Linux 下,但在很大程度上,这些应用程序并不是真正用 K&R 的“基本”C 语言或标准库编写的。相反,他们使用 Glib、wxWindows、Apache Portable Runtime 等框架,这些框架都使用某种面向对象的结构或约定,并且通常抽象出 C 的一些基本内存管理细节。
所以我认为让你的 C 技能变得有用 在当今的编程语言环境中 主要是做低级工作,或者熟悉这些高级框架之一。我个人非常喜欢 Glib 和 GTK 库,因为它们使用了非常 动态的 面向对象的模型(很像 Python),而不妨碍您使用 C 的低级功能。
您可以为简单的语言编写解释器。使用flex / bison。使它多线程等。这很有趣,往往会运用指针。我为学校项目写了类似的东西:一个简单的基于堆栈的语言,有两个不同的垃圾收集器,TwoSpace和并发版本。那很有趣。并且可以作为比“hello,world”更大的第一个c程序!
退房学习C很难,这是一本免费的电子书,它带你通过很多C代码和练习的例子,以便你学习。
在日常工作中查找或定义问题并强制自己使用C而不是Python来解决问题。这将迫使你学习语言,同时将问题与你通常做的相提并论。
实现虚拟机(例如JVM)。