C 语言是一个老古董了,初学者即使学了,一时半会也用不上,看起来有点鸡肋。然而,几乎所有大学的计算机/软件专业都将 C 语言作为必修课,这又是为什么呢?难道真的是因为大学教育落后吗?
当然不是!
C 语言是一门基础语言,很多其它的课程都依赖 C 语言;如果你不了解 C 语言,那么这些课程是学习不了的。
不妨举几个例子:
- 编译原理课程通常以 C 语言为例讲解,因为 C 语言的编译过程相对简单、规范和透明,适合教学。
- 数据结构课程通常使用 C 语言编程,因为 C 语言比较底层,能够让大家看到数据结构的各种细节。另外,数据结构是一种被频繁调用的组件,必须要追求效率,C 语言再合适不过了。
- 学习操作系统原理(内存、进程、线程、通信等)也要具备 C 语言基础,否则是学不明白的。
C 语言是一门面向计算机的语言,它能帮助我们快速了解底层。而其它的高级语言(Python、Java、C# 等)是面向用户的,它能让我们快速上手,搞出点实用的工具来,比如 PC 软件、网站、APP 等。
借助 C 语言学习原理,相当于修炼内功;使用其它语言开发程序,相当于精通招式。既有内功也有招式,才是一名合格的程序员。
从整体上讲,计算机软件大概可以分为两种:
- 一种是基础设施,比如操作系统、数据库、浏览器、云计算系统、大数据系统、编译器、编程语言、通信协议、区块链、服务器等。
- 一种是应用软件,比如桌面软件、APP、网站、小程序等。
内功不扎实的话,开发一般的应用软件是没问题的,这也是各家互联网公司正在做的事情。但是,要想开发高性能的软件,或者开发基础设施,那绝对是不行的,门都没有。
互联网已经不再是浪潮之巅,只搞简单的应用软件越来越没有前途,所以各家公司也在慢慢下沉,越来越重视根基了。
这意味着,编程不再是一种小把戏,而是逐渐演变成了一种技术,或者一种科研,你需要系统性地学习理论和基础,
那种「上几个月培训班就能找份月入过万的工作」的时代已经越来越远了。
文章最后,我再给大家罗列一下软件相关的理论和基础:
- 数据结构
- 常见算法
- 简单的编译原理
- 程序运行流程
- 程序内存分布
- 进程/线程
- 网络通信(Socket)
- 动态/静态链接库
- 操作系统
不管将来从事开发还是研发,这些都是一个合格程序员应该具备的内功,只有掌握了这些,才算摸清了软件产业的脉络。
这些东西都是以 C 语言为基础的,不学 C 语言很难把它们搞清楚。
虽然工资高低不仅跟个人能力挂钩,还跟情商、机遇、市场挂钩,但是和半吊子程序员相比,功底扎实的程序员更容易找到高薪工作,更容易走得长远。