来源:麦叔编程
作者:麦叔
作为一个有十多年行业经验的人,我深知C语言的重要性。
但是我也时常纳闷,为什么C语言经常排在第一名呢?
放眼望去,我好像不认识一个以C语言为主要工作语言的人。这个排名第一是怎么来的呢?
image-20210316072640560
世界仍然运行在C语言之上
这里有三个问题,我们分清楚:
- C语言是否是一个优秀的语言?和就业无关。C语言是否值得学习?和就业无关。C语言的就业怎么样?
我对前两个问题没有困惑:
- C语言是一个非常优秀的语言,这个世界仍然运行在C语言之上!Windows系统,Mac系统,Linux系统的大部分模块都是C语言开发的。就连这几年大火的Python的解释器也是C语言写的,就是传说中的cpython。https://github.com/python/cpythonC语言非常的重要!对于想要成为一个名专业程序员的人,和计算机专业在校大学生来说,是非常值得学习。对于应用型程序员,只是为了学点编程,快速应用在工作中的人,没有必要。
C语言为什么排在第一位?
大家对C语言排在第一位的认知主要来源于TIOBE网站:
https://www.tiobe.com/tiobe-index/
国内各种媒体平台基本上也都是翻译的这个网站上的数据。
在我写字的今天(2021年3月份),C语言还是稳稳的排在第一名,随后是Java, Python和C :
image-20210316072640560
为什么C语言排名第一,而我却不认识一个以C语言为主要工作语言的人呢?
当然,我孤陋寡闻,圈子小是一个原因。应该也有其他原因吧?
有,原因就是这个排名不是和就业正相关的,而是基于搜索引擎的搜索结果来的。我们来看一下维基百科的说明:
https://en.wikipedia.org/wiki/TIOBE_index
image-20210316074002269
翻译成中文:
这个index是根据搜索引擎的结果中包含编程语言名字的数量来计算的。index中包括谷歌,MSN,Yahoo!,Baidu, Youtube等。
这里有一份更完整的搜索引擎列表,官方说明:
https://www.tiobe.com/tiobe-index/programming-languages-definition/
image-20210316074334868
哈哈,天猫的权重竟然比百度还要多。牛了!还有qq.com, sohu.com等等。
搜的多确实可以代表流行程度,但是不能代表就业多。很多搜的人都是学生。
前面我也说了,C语言还是非常值得学习的。所以学习的人很多一点都不奇怪,学习者们会:
- 去天猫买书百度上搜教程论坛上提各种问题
这样就排名就上去了。
看就业更好的排名
从就业和专业程序员的角度,有两个更好的参考。
一个是github的编程语言排行:
https://madnight.github.io/githut/#/pull_requests/2020/4
这是去年的数据,但是一年变化不大。这里可以看到:
- 前面是JavaScript, Python, Java, Go, C 。这和我所了解的情况基本属实。C语言排在第10位,占比3.127%,这是C语言比较合理的就业位置。
image-20210316075016807
这里也可以看到各大语言历年的情况:
https://octoverse.github.com/
和上面的排名基本一致。
image-20210316075248563
还有一个地方就是我前面说过的全球第二大同性交友社区Stackoverflow:
找代码上github,找答案上Stackoverflow。
https://insights.stackoverflow.com/survey/2020
这是2020年的数据,我觉得前3个都不是主流语言(JavaScript是前端主流语言),真正的排名可以从第4个开始算。和上面基本吻合。
image-20210316075456790
C语言仍然是很牛的语言
说到这里,大家千万不要误解我的意思。
- 这个世界仍然运行在C语言之上,前面说了。我现在正在打字的电脑也是用C语言写的内核。C语言一个很优秀的语言,值得大家去学习和研究。只能不能作为主要的就业语言。
同时C语言仍然有一定的就业空间,总的方向:
- 是偏底层的地方:用C语言开发一个Python解释器,这个就比较底层了。但是从就业的角度,Python的使用者和Python解释器的开发者相比,前者肯定多的多的多的多的多。需要效率的地方:比如Python的科学计算库numpy就是用C语言开发的,因为需要效率。速度是Python的列表的百倍。运行在资源比较少的硬件上:各种嵌入式软件的开发,比如智能体重秤等。但随着硬件的性能提升和价格降低,这其实也不是很大的问题了。
从行业上来看,下面行业用C语言比较多,这也和上面的方向吻合:
- 通信行业物联网行业安防行业工控行业嵌入式与自动控制物联网底层开发(操作系统、数据库、网络协议栈)