天啦,大学为什么要学习C语言?

chinesedragon00 2019-05-17

那么如题,大学为什么要学习C语言? 为什么要选择一门诞生了将近半个世纪的语言?

对于理工科学生来说,这个答案可能很简单,因为这是一门必修课。

而对于程序员来说选择一门编程语言,在某种程度上,对职业生涯的发展会产生重大的影响,所以必须慎之又慎。

所以,下面我将做一轮理性的分析,且听我细细道来!

C语言

C 语言是由美国 AT&T 贝尔实验室的研究员 Dennis Ritchie 在 B 语言的基础上,最初作为改造 Unix 操作系统的开发语言,并伴随着 Unix 操作系统兴起而流行。

后来,随着微型计算机的发展,C 开始被移植到其他操作系统平台上,成为独立的程序设计语言。

下图摘自 TIOBE 编程语言排行榜,过去 30 年 90% 时间里 C 都是独领风骚的,仅偶尔被 Java 超越:

天啦,大学为什么要学习C语言?

那么是因为一门语言一直位于排行榜的第一名就该去学习和使用吗?

显然不是,人云亦云是程序员的大忌。

为操作系统而生的标签注定了 C 不可能平庸。

实话实说,C 是一门很难学习和使用的编程语言,没有编译原理、操作系统和计算机体系结构扎实的基础知识,根本不可能把 C 学的明白、用的顺手。

C 作为一门工程实用性极强的语言,提供了对操作系统和内存的精准控制,高性能的运行时环境,源码级的跨平台编译等优点,才是我们必须学习和使用 C 的理由。

同时,幸运的是 C 也是个有趣的东西,对编程的认知越深,就会越觉得有意思。

简单列举一些 C 的优点:

结构化设计语言:

语法清晰、结构简单,模块化使得程序的各个部分除了必要的信息交流外彼此独立,便于开发、调试以及调试。

运算符多:

把括号、赋值、强制类型转换等都作为运算符处理,灵活使用各种运算符可以大大提高编程效率。

数据结构丰富:

能实现各种复杂的数据类型的运算,引入指针、结构体概念使程序效率更高。

为操作系统而生:

可以像汇编语言一样对位、字节和地址进行操作,允许直接访问物理地址对硬件进行操作,把高级语言的基本结构和语句与低级语言的实用性结合起来。

程序执行效率高:

一般比汇编程序生成的目标代码效率低 10%~20%。

可移植性好:

C 语言抽象了针对 CPU 编程的细节,能广泛应用于针对大型操作系统和系统软件的编写。

具备强大的绘图功能:

和 C++ 一样也可以写出很优雅的二维、三维图形和动画。

有人说,C 是 C++ 的子集,C 能做到的事,C++ 一样能做到,并且还可以做的更好。

如:三大面向对象特性、GUI 编程。

诚然,在 GUI 编程领域 C++ 占据着绝对的统治地位,至今无人能撼动。

但真的有必要用 C++ 来替代 C 完成工作吗?

很多时候 C++ 解决问题的思路真的比 C 更先进吗?

C和C++比较

C、C++ 是广大程序员都很熟悉东西,打起嘴炮来也是极其恐怖的,其实在关乎信仰的问题上,任何的争论都是无止境的,也是无意义的。

希望大家不要把大量精力用来争论纯粹的语言优劣上。

而是去思考如何的正确的把事情做好,什么是正确的做事——快速高效的开发,保障快速稳定的运行,快速简单的维护。

下图是嘴炮大神 Linus Torvalds 当年抨击 C++ 和他周围那些 C++ 大牛程序员们的犀利言辞。

虽然并不欣赏 Linus 的个人风格,但是还是希望大家能心平气和的谈谈 C 相比 C++ 的一些优点和现状:

天啦,大学为什么要学习C语言?

隐式操作:

C 简单直接、结构清晰,每行代码都能清楚的被反汇编成相应的语句,系统会严格按照你的代码去执行。

而 C++ 则不尽然,简单的语句也说不清楚究竟有多少次构造和拷贝,这样编写底层代码是完全不行的,底层需要精准和严格的控制。

语言接口:

现代软件工程项目的开发,不但对性能有很高要求,对于语言接口的对接能力也有很高要求。

因为偌大的一个项目很少仅使用一种语言来进行开发,对于底层,C++ 对内存和硬件的控制不如 C 简洁精准;

对于很多动态语言和中间件,如:PHP、Python 和 Apache、Redis,都受了 C 的很大影响,甚至就是 C 开发出来的东西,对接起来非常方便。

没错儿,其实 C++ 采用迂回的方式也能对接的,但是,远远不如 C 方便,开发和维护成本非常高。

硬件层

分配内存:

系统加电后运行,经过汇编初始化栈,然后再跳转到 C 语言的 start_init() 函数去,这时候内存分配机制都还没有建立,C++ 如何定义类?如何实例化对象?

标准库依赖:

C 的所有特性都可以不依赖任何库运行,如有必要,可以按照特定需求自己编写库。

处理器兼容:

C++ 的类是依赖基地址+偏移地址的寻址方式,很多微处理器只有简单的给定地址寻址,不支持一条语句实现 base + offset 的寻址机制。

很多 C++ 代码编译出来需要更多的指令来运算地址,导致性能下降了太多。

应用层:

C++ 在做应用层尤其是 GUI 编程,这是 C++ 的传统强项。

C 也能优雅的做出图像和动画,但开发效率确实较 C++ 低很多

总结

下面列举了 10 多个目前热门的发展方向,粗略的介绍了下列项目里最常用的编程语言:

天啦,大学为什么要学习C语言?

由上图可知,操作系统、编译原理、数据结构与算法等等基础知识,是深入理解、掌握和灵活运用 C 的重要前提。

现阶段程序员职业生涯超过一半的热门方向直接或间接与 C 有关,学好 C 的重要性也就不言而喻了。

天啦,大学为什么要学习C语言?

加C/C++学习交.流群获取C语言、C++、Windows高级编程,MFC框架编程、QT框架编程,大型企业实战项目。Linux应用程序开发,Linux内核研究等多个知识点高级进阶干货的直播免费学习权限 都是大牛带飞 让你少走很多的弯路的 群...号是 1023934779

注:加.群要求

1、零基础,目前遇到困难不知从何下手可以加。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

3、基础非常扎实,但对目前主流技术欠缺,需要突破技术瓶颈的可以加。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5.企业一线C/C++高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

相关推荐