C 语言诞生与1972年,作为一中古老的编程语言一直存在着,有些人想问,现在还值得去学习C语言吗?学习更加现代的如JAVA、Python、GOLANG是否会更加合适?以下是我的梳理及看法。
C语言进化史(标准化)
- 1979年之前,混乱时代,没有统一的标准
- 1978年 Brian W. Kernighan & Dennis M. Ritchie 编写的《The C Programming Language》出版,成了事实上的标准,简称K&R C
- 美国标准协会ANSI,在1989年12月通过了第一个标准,称为ANSI C
- 1990年,国际标准化组织(ISO)将ANSI C作为国际标准。通常成为C89或C90
- 1999年,国际标准化组织(ISO)经过重新梳理,并通过了C99标准
- 2011年,国际标准化组织(ISO)通过了C11标准,增加了新的特性,提升对C++的兼容。
- 2018年,国际标准化组织(ISO)通过了C18标准,C18没有引入新的语言特性,只对C11进行了补充和修正。
为什么要学习C语言?
反方观点:
- 1970年的作品,老古董了,计算机技术日新月异,已被时代淘汰,已有更“先进”的语言供“选择”
- 应用场景少,如网页制作、APP开发、机器学习等大部分都不使用C 语言,工作机会也较少
我的观点:
- C语言有自己的市场定位,类似驱动程序、操作系统或者是编程语言都比较适合用C去实现,另外大部分语言都提供C语言接口,在一些需要接触到硬件或队性能有更高的场景下都可以嵌入C 语言代码,如JAVA有JNI,Python有CPython,Ruby也允许你使用C编程扩展。
- C 语言可以帮你更好的学习其他语言。大部分编程语言是基于C 语言实现的(如Python、PHP等),另外一部分是基于C 语言的拓展(如C++、JAVA、Objective C、Javascript等),一旦深入了解C语言后,你能更好的理解其他编程语言在更高层次上的抽象背后的原理。
- 更好的理解数据结构,相比Python或者JAVA可以让你更好的知道常见的数据结构是如何实现的,在了解各种数据结构的优缺点,也就能更好的去决定采用何种数据结构去解决现实问题。
- 更好的理解内存管理,C语言的指针可以让你更清楚的了解数据是如何存储和读取的。而像Java、Python等完全将内容管理给掩藏了(事实上编程时经常会出现GC问题)
- 学习C语言看上去不会马上给予你回报,但从长远看,学习C语言可以为你打下很好的基础。
我对C语言的认识:
- C 语言是为C编译器打造的一套语法规则
- C 编译器实质上是代码生成器(C语言->汇编到->机器码)
- C 语言的很多特性是为了方便编译器设计而建立的
- C 语言源自个人项目,一些设计上的缺陷沿用至今
- C 语言也有不断进化,一些缺陷有被改进,有添加一些新的特性
学习C语言的好处:
- C语言比较适合用来理解常见的数据结构,如堆栈、二叉树、队列等是如何构建的,其他语言,比如Python或者JAVA,虽然也支持使用这些常见的数据结构,但是你很难知道其内部是如何实现的。
- 在理解了数据结构的实现原理后,你能更清楚的各种数据结构的优缺点,也就能更好的去决定采用何种数据结构去解决现实问题。
- C语言的指针有助于我们更好的理解编程语言中的内存管理概念。而像Java、Python等完全将内容管理给掩藏了(事实上编程时经常会出现GC问题)
- 学习C语言看上去不会马上给予你回报,但从长远看,学习C语言可以为你打下很好的基础。
- 在接触gdb以后,可以让你更好的掌握调试技巧。
- 一旦深入了解C语言后,你能更好的理解其他编程语言在更高层次上的抽象背后的原理。
- C语言只是一个健身房,而真正PK的时候要使用的是拳击房(Python、JAVA)
- C短小精炼,并不像JAVA那么庞大,单它却可以完成非常多的任务。
- C语言有自己的市场定位,类似驱动程序、操作系统或者是编程语言都比较适合用C去实现。
- 大部分语言都提供C语言接口,如JAVA有JNI,Python有CPython,Ruby也允许你使用C编程扩展
- 尽快C有很多缺陷,但是大部分编程语言是使用C语言实现的(如Python、PHP等),另外一部分是基于C的拓展(如C++、JAVA、Objective C、JAVASCRIPT等)
尽管C语言在很多场景下被慢慢取代,另外也有更优秀的D语言、GO语言或Rust,但是还是非常推荐各位程序员学好C语言。
编程语言关系图:(右键可查看全图)
C语言学习书籍推荐
以下这些C语言书籍是我过去一段时间看过的关于C语言的书籍,关于书籍的评价非常的主观,推荐给大家,期望对想学习C语言的你有所帮助。
- 《C 语言程序设计现代方法 — K.N.King》
- 推荐等级:★★★★★
- 评级:基于C99标准,内容全面翔实
- 《征服C指针 — 前桥和弥》
- 推荐等级:★★★★★
- 评价:包含了大量技术内幕及细节,是知识架构的极好补充
- 《C11 编程导论 — Paul Deitel & Harvey Deitel》
- 推荐等级:★★★★
- 评价:全英文,最新的C11标准,作为阅读补充
- 《明解C语言 — 柴田望洋》
- 推荐等级:★★★★
- 评价:书写风格浅显易懂,但不深入,适合作为第一本入门书籍,如果你是应付大学计算机考级,那么推荐此书。
- 《C和指针 — Kenneth A. Reek》
- 推荐等级:★★★
- 评价:内容全面,但没第一本《C 语言程序设计现代方法》好,相比较没有什么特色,所以不太推荐
- 《C 程序设计语言 — Brian W. Kernighan & Dennis M. Ritchie》
- 推荐等级:★★★
- 评价:传说中的KR C,讲解不够详细,在当时那个年代可能存在一定的地位,与目前主流C标准存在差异,不建议阅读
- 《C 专家编程 — Peter Van Der Linden》
- 推荐等级:★★
- 评价:很多的技术内容,只适合做补充阅读资料
- 《C 陷阱与缺陷 — Andrew Koening》
- 推荐等级:★★
- 评价:书很薄,内容不多,大部分内容被第二本书《征服C指针》涵盖,不建议阅读
- 《C语言核心技术 — Peter Prinz & Tony Crawford》
- 推荐等级:★
- 评价:第一部分语言没什么新意,主要看了第二部分标准链接库和第三部分基本工具,只做补充,意义不大
- 《C 程序设计 — 谭浩强》
- 推荐等级:★
- 评价:大学教材,大部分知识过期,不建议阅读
- 《啊哈C语言》
- 推荐等级:不推荐
- 评价:仅适合小学生
参考链接: