Joel和公司阐述了学习C的优点以及学习语言的最佳方式是如何使用它来实际编写程序.为此,哪种类型的应用程序最适合C编程语言?
编辑:我正在寻找C擅长的东西.这可能与学习C的最佳方式不一致.
代码,您需要绝对控制内存管理.您需要完全控制速度与内存权衡的代码.非常低级别的文件操作(例如访问原始设备).
示例包括OS内核和嵌入式应用程序.
在20世纪80年代后期,我担任C系统维护团队的负责人,该系统的代码超过一百万行.它做了数据库访问(Oracle),X Windows图形,进程间通信,各种好东西.它运行在VMS和几种Unix上.但如果我今天要重新创建该系统,我肯定不会使用C,我会使用Java.其他人可能会使用C#.
低级功能,如OS内核和驱动程序.对于那些人来说,C是无与伦比的.
你可以用C写任何东西.这是一种非常通用的语言.在这样做了一会儿后,你会明白为什么还有其他"更高级别"的语言可用.
无论如何,"学习C",但不要坚持太长时间.其他语言的效率要高得多.
我认为那些说你需要学习C的人的要点就是让你理解高级代码和机器内部之间的关系以及比特,字节,程序执行等都会发生什么.
了解这一点,然后继续前进.
这100行python代码占你执行时间的80%.
没有用户界面的小型应用,尤其是在您尝试学习时.
编辑:在考虑了一点之后,我将添加以下内容:如果您已经了解更高级别的语言并且您正在尝试了解有关C的更多信息,那么一条好的途径可能是不创建一个全新的C应用程序,而是创建一个C DLL并为其添加可以从更高语言调用的函数.通过这种方式,您可以替换您的高级语言已经拥有的简单函数,以确保您的C函数能够执行它应有的功能(为您提供预构建的测试),让您主要使用您熟悉的函数进行编码,在语言中使用你已经熟悉的问题,并教你互操作.
数字运算(例如,要在某些其他语言(如Python)的更高级别使用的库).
嵌入式系统编程.
你想到使用装配的任何东西.
很多人都在说OS内核和设备驱动程序当然是C的良好应用程序.但C对于编写任何需要使用硬件能力的每一点性能的性能关键应用程序也很有用.
我正在考虑应用程序,如数据库管理系统(mySQL,Oracle,SQL Server),Web服务器(apache,IIS),甚至我们的浏览器(看看chrome编写的方式).
您可以在C中进行许多优化,这些优化在Java或.NET等虚拟机中运行的语言中是不可能的.例如,数据库和服务器支持许多同时用户,并且需要非常好地扩展.数据库可能需要在多个用户(线程/进程)之间共享数据结构,但这样做是为了有效地使用CPU缓存.在C中,您可以使用操作系统调用来确定缓存的大小,然后将数据结构适当地与缓存行对齐,以便当多个线程访问相邻但不相关的数据时,该行不会在缓存之间"ping" (所谓的"虚假分享".这是一个例子.还有很多其他的例子.
引导程序.一些装配也需要,这实际上非常好..
您认为需要100%控制您的程序.这通常是在低层操作系统的东西,如设备驱动程序,或基于MCU的真实嵌入式设备等等(所有这些和其他已经在上面提到)
但请注意,C是一种成熟的语言,已存在多年,并将存在多年,它有许多非常好的调试工具,并且仍有大量的开发人员使用它.(它可能已经失去了很多时髦的语言,但它仍然是巨大的)所有的优点和缺点都是众所周知的,语言可能不会再改变.所以没有太大的惊喜空间......
这也意味着如果您的应用程序具有较长的预期生命周期,那么它可能是一个不错的选择.
/约翰