|
C语言很流行,也很容易入门,但是精通难,就业更难。这篇文章是写给还没有学习或者学习C语言不久的朋友的,希望你们慎重选择,也给学C的朋友一些学习建议。
在知乎上看到很多关于C语言学习的方方面面的提问,我也回答了一些,其中一篇回答还成为最佳回答。我用这篇文章,把之前的回答综合一下。欢迎批评、补充。
为什么 C 语言没有被 C++ 取代? C语言的流行趋势
我们经常从语言的流程趋势排名中看到C语言的流行度经常在前5名,并且经常超过C++,占比大概在10%左右,下图是从TIOBE - The Software Quality Company截下的2022年3月份的语言流行排名。

2022年3月份编程语言流行图
什么C语言的流行度这么高?我猜测:长时间积累了一批极度流行的C语言项目,它们在整个计算机世界中扮演者极重要的角色,在流行趋势中有着不容忽视的权重。例如:
类型 | 项目 | 操作系统与虚拟化 | Linux Kernel,FreeBSD
glibc,OS-commands,qemu | 编译与调试 | GCC,LuaJIT,valgrind | 加密 | Openssl,boringssl,openvpn | 网络 | nginx, haproxy,keepalived,redis,memcached,libevent, libev,frr,curl,wrk,iperf,DPDK,nghttp2,nghttp3 | 数据库 | postgre,sqlite | 嵌入式 | openwrt | 库 | FFmpeg,c-json,http-parser | C语言的使用场景
从上面的表格中可以看出,C语言主要用在操作系统内核(包含驱动)、虚拟化、网络、加解密、数据库等基础领域;并没有广泛用于应用层的开发(如游戏)。大厂的C语言的使用场景主要集中在操作系统、虚拟化、网络这个领域。
C语言的就业市场
看到C语言这么流行,是不是决心要成为C程序员呢?然而C语言的就业市场并不乐观。我们看下各企业在github仓库上开源项目数量中C语言项目的占比(统计日期是2022年3月18日)。
企业 | 开源项目总数 | C语言项目数目 | C语言占比 | Microsoft | 4.7k | 126 | 2.7% | Google | 2.2k | 88 | 4% | Alibaba | 424 | 37 | 8.7% | Baidu | 105 | 9 | 8.6% | Microsoft与Google的开源项目比较多,C语言项目的占比能反映企业内语言的使用情况。另外,如果考虑到企业只会把优秀的项目开源出去,企业内C语言项目的真实占比还会更低。
C语言教育
C语言看似容易入门,要达到精通的程度、并且能够达实际工作的要求,需要学好后续课程:
- 数据结构。C语言编程,数据结构几乎全部要根据具体场景定制(造轮子)。
- 操作系统。C语言编程往往要直接使用系统调用,需要对系统调用有非常清晰的认识。出于对性能的追求,需要熟悉操作系统的行为。
- 编译原理。熟悉每条语句的开销。
- 网络。网络编程是C语言的一个非常重要的分支。
可惜很多学校在操作系统、编译原理、网络这几门课程的教学资源配套与考核标准上都不尽人意。换句话说,很多学校不具备培养合格的C语言开发者的条件。
我一个亲戚在一个二本学校学计算机专业,大三时有java与C两个方向选择,寻求我的建议。因为我是C程序员,觉得C很简单,然后建议他选择C。可惜他专业学得不精,目前从事的不是C方向。
C语言学习的建议
- 按照编程规范编码。可以参考Kernel的编程规范,也可以参考Nginx编程规范, DPDK编程规范。
- 使用list_head。这是C语言编程中使用最广泛(万能)的数据结构。
- 看知名开源项目代码。看下大牛是怎么写程序的,找下差距。例如:nginx,Linux Kernel IPVS,FreeBSD Kernel。
- 算法于数据结构参考项目。这是github上非常火的项目,强烈推荐学习C语言数据结构于算法的小伙伴看下。
- C语言编程环境。我用的是linux环境,编辑器是vim,编译器是gcc,优点是不花钱,缺点是上手要花点时间。
考虑到大牛的开源项目代码对新手并不是那么友好。我推荐一个更加适合新人学习的C语言项目:dperf。
dperf
dperf是Linux基金会旗下的DPDK官方生态项目,列在了在DPDK官网。dperf是目前世界上性能最高的网络压测工具,运行在普通X86/ARM服务器上,性能可以达到100Gbps,几十亿HTTP并发连接数,每秒1千万TCP新建连接数,其性能远远超过售价数百万元人名币的商用测试仪。
dperf项目体量较小,代码不到1万行,它实现了精简的TCP/IP、socket、HTTP,项目包含详细设计文档,且支持中文。
总结
现在编程语言越来越多,必须要使用C语言的场景越来越少,单从就业的角度讲,C语言就业不乐观;对志于从事计算机底层技术的朋友来说,C语言必须精通。
如果喜欢dperf请去github上点个star吧,谢谢!
附录(编程规范):
- Linux Kernel编码规范:Linux kernel coding style
- Nginx编码规范: Development guide
- DPDK coding style: 1. DPDK Coding Style
- 数据结构与算法实例项目:https://github.com/TheAlgorithms/C
|
|