查看: 206|回复: 16

谈谈C语言学习与就业

[复制链接]

2

主题

6

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-9-20 08:38:30 | 显示全部楼层 |阅读模式
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语言占比
Microsoft4.7k1262.7%
Google2.2k884%
Alibaba424378.7%
Baidu10598.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
回复

使用道具 举报

3

主题

11

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2022-9-20 08:39:18 | 显示全部楼层
list_head是啥,linux的链表吗?
回复

使用道具 举报

3

主题

7

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2022-9-20 08:40:11 | 显示全部楼层
是的
回复

使用道具 举报

3

主题

13

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2022-9-20 08:40:31 | 显示全部楼层
已经补充了链接
回复

使用道具 举报

3

主题

9

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2022-9-20 08:40:49 | 显示全部楼层
像我这种只会写点驱动、写点业务代码的的…有了前进的方向,多谢
回复

使用道具 举报

3

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2022-9-20 08:40:58 | 显示全部楼层
很棒的文章,希望答主能持续更新此文,丰富更多内容[赞同]
回复

使用道具 举报

1

主题

10

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2022-9-20 08:41:40 | 显示全部楼层
有什么具体内容方面的建议吗
回复

使用道具 举报

2

主题

4

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2022-9-20 08:42:35 | 显示全部楼层
暂时还没有,等我刷完操作系统和网络再来[酷]
回复

使用道具 举报

3

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-9-20 08:42:50 | 显示全部楼层
很棒的文章
回复

使用道具 举报

1

主题

9

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-9-20 08:43:00 | 显示全部楼层
题主说的c语言是指 c和c++ 还是就单指c呀,我们也快分流了,我感觉java竞争力太大了,想去c++,怎么样呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表