很多高手都建议小白从C语言开始学起,很多大学也把C语言作为软件专业的基础课程,很多底层软件也使用C语言编写……
种种迹象表明,C语言是一门极其重要的编程语言,它在某些方面不可被替代。
但是,初学者看到这个观点又非常困惑,都已经写了几个月的C语言代码了,除了能在控制台上输出字符,也就没有别的玩法了,实在不知道C语言有什么能耐。
好了,不要着急,本文即将为你揭开C语言的神秘面纱,告你它在软件产业中的支柱地位。
C语言是核心语言
也许是机缘巧合,C语言出现后不久,计算机产业开始大规模爆发,逐渐进入普通家庭,而C语言则成了底层编程的主力军,获得了前所未有的成功,操作系统、基础组件、核心算法、硬件驱动、数据库、通信协议等,都使用C语言开发。
雷军说过,站在风口上,猪都能飞起来;C语言就是那头猪,不管它好不好,反正它飞起来了。
在计算机高速发展的关键阶段被大量使用,C语言无疑会成为整个软件生态的基础与核心。不了解C语言的话,你就触碰不到软件产业的本质,最终还是一个重复劳动的码农,无法成为具有核心竞争力的专家。
软件行业的很多细分学科都是基于C语言的,学习数据结构、算法、操作系统、编译原理等都离不开C语言,所以大学将C语言作为一门公共课程,计算机相关专业的同学都要学习。
C语言还被誉为“上帝语言”,它不但奠定了软件产业的基础,还创造了很多其它语言,例如:
- PHP、Python 等都是用C语言开发出来的,虽然平时做项目的时候看不到C语言的影子,但是如果想深入学习 PHP 和 Python,那就要有C语言基础了。
- C++ 和 Objective-C 干脆在C语言的基础上直接进行扩展,增加一些新功能后变成了新的语言,所以学习 C++ 和 Objective-C 之前也要先学习C语言。
C语言是不可逾越的一门编程语言:要想成长为高手级别必学C语言,要想挣大钱必学C语言,要想做黑客/红客必学C语言,要想面试大厂必学C语言。
C语言是菜鸟和大神的分水岭
程序是在内存中运行的,一名合格的程序员必须了解内存,学习C语言是了解内存布局的最简单、最直接、最有效的途径,C语言简直就是为内存而生的,它比任何一门编程语言都贴近内存(除了汇编)。
所有的程序都在拼尽全力节省内存,都在不遗余力提高内存使用效率,计算机的整个发展过程都在围绕内存打转,不断地优化内存布局,以保证可以同时运行多个程序。
不了解内存,就学不会进程和线程,就没有资格玩中大型项目,没有资格开发底层组件,没有资格架构一个系统,命中注定你就是一个菜鸟,成不了什么气候。
以上这点我有深刻的体会!工作期间我曾专注于网站开发,虽然能够设计出界面漂亮、体验良好的网页,但是对内存泄漏、多线程、共享内存等底层概念一窍不通,感觉和周围同事的差距很大,这让我非常郁闷,不知道如何突破。我曾多次尝试学习内存和线程,也找了很多资料,但是无论如何都啃不懂,到头来还是一头雾水。
离职后我全职运营C语言中文网,于是决定再次系统、深入、全面地学习C语言,并结合C语言去了解一些内存知识,这个时候我才发现,原来C语言就是为内存而生的,C语言的设计和内存的布局是严密贴合的,我因为学习C语言而吃透了内存,了解了计算机内存是如何分布和组织的。
C语言无时无刻不在谈内存,内存简直就是如影随形,你不得不去研究它。
至关重要的一点是,我能够把内存和具体的编程知识以及程序的运行过程结合起来,真正做到了学以致用,让概念落地,而不是空谈,这才是最难得的。
另外一个惊喜是,攻克内存后我竟然也能够理解进程和线程了,原来进程和线程也是围绕内存打转的,从一定程度上讲,它们的存在也是为了更加高效地利用内存。
从C语言到内存,从内存到进程和线程,环环相扣:不学C语言就吃不透内存,不学内存就吃不透进程和线程。
我感觉自己瞬间升华了,达到了一个新的高度,之前的很多谜团都解开了,和大神交流也没有障碍了。
「内存 + 进程 + 线程」这几个最基本的计算机概念是菜鸟和大神的分水岭,也只有学习C语言才能透彻地理解它们。Java、C#、PHP、Python、JavaScript 程序员工作几年后会遇到瓶颈,有很多人会回来学习C语言,重拾底层概念,让自己再次突破。
总结
学习C语言的目的不是做出炫酷实用的软件,这也不是C语言的长项,你能写几个简单的控制台程序就行了。
学习C语言的重点是了解操作系统、数据结构、算法、内存、进程、线程、通信、驱动、编译原理等基本概念,它们都是软件产业的基石,不了解它们的话,就写不出高效的代码,就进不了大厂。
这里举几个例子:
- 我们编写的程序都是运行在操作系统之上的,不了解操作系统的基本运行原理,简直就是扯淡。
- 程序 = 数据结构 + 算法,这对菜鸟来说是一句空话,但是对大神来说就是看透本质。
- C++、Python、C#、Java 等高级语言中的容器/集合其实就是对常用数据结构和算法的封装,不了解数据结构和算法的话,那么也玩不转容器/集合。
以上这些基本概念,都是要学习C语言,甚至少量汇编的,没有C语言和汇编打底,压根就吃不透的。
很多小厂、外包公司、培训班或者自学的小伙伴可能会反驳,说道:
我就不了解这些基本概念,但是我的代码写得就挺好的,领导安排的任务我都能完成。我觉得,了解这些概念对我现在的工作并没有什么帮助。
嗯,这就是典型的码农思维,而不是专家思维,以后可能会遭遇危机。
增删改查和业务开发都是重复性地劳动,它们的可替代性非常强,如果我们的编码能力一直停留在这个层面,那么吃的就是青春饭,早晚会被年轻人拍死在沙滩上。
我面试过很多程序员,说实话,有些 30 多岁的大叔,还不如刚毕业的小哥哥给力,他们连基本的概念都搞不懂,只会展示自己做了多少项目。
哎,这种项目,做 2 个和做 20 个有什么区别呢?都工作五六年了,你怎么一点都没进步呢?
有人可能会说,我就想做一个写代码的美男子,不想进步,不行吗?对,一般都不行!
因为随着年龄的增长,你的工资会越来越高,精力会越来越少,和拥有相同能力的年轻人相比,你除了多出几年的社会历练,并没有什么竞争优势,所以结局就是中年危机,或者工资封顶。
说白了,你得跳过「靠体力吃饭」的阶段,升级到「靠经验吃饭」的阶段,只有这样才能端稳铁饭碗。
[转载自:为什么说C语言如此重要? (biancheng.net)]