为什么很多人说c/c++能站在编程语言鄙视链顶端,而对于号称“21世纪的C语言”的go语言却无此说法?

经常收到这类的问题邀请,如果用吃瓜的态度提出这样的问题,那就真的很无聊。如果是因为择业或者工作中的选择那就另当别论。如果是计算机科班出身的朋友提出这样的问题,也表明了他的所有专业课并没有学进脑子里,因为专业课弄通了,肯定对C/C++有一个比较全面的认识。提问人具体什么原因提出这样的问题不得而知。我假设以择业为目的,说说对C/C++的看法。

前面很多朋友都说过C/C++的应用场景,以及它在软硬件中的地位,就不再重复了。

从计算机专业择业的角度来讲,C语言的工作更多是面向系统层面的开发。怎么说呢?具体的就是单片机,嵌入式系统的开发。应用的场景,大领域有军工,航天,电力。小领域比如路由器,手机基板,玩具机器人。这些都是看得见的产业。那么人工智能,大数据,BI之中的分析系统的开发场景就非常不适合使用C/C++开发,效率太低,成本太高,反而Python这种解析型语言更适合这类的开发。所以谁是所谓的王者,首先要看应场景。应用场景通常有两个方面要满足:高性能(编译型语言),高伸缩性(解析型语言),这两个方面正好互斥。高性能滋味着需要制造特定环境,放弃可扩展的功能,全力只做最核心的事。高伸缩性通俗讲就是随时随地随便改,想到哪改到哪,改完立即可用。

说这么多,说白了如果工作是互联网业务开发,不要主攻C语言,以学习更多的技术框架为主。如果是传统行业或者互联网网络底层,学习C语言还是很有必要的。但有一条要注意的,不是所谓的底层就工资高,工资高低基本是所在岗位所赋予的。

那么精通C语言是不是可以鄙视其他所有语言呢?肯定不是,因为从来都只有钱多鄙视钱少的,哪怕英语汉语什么语言都不懂。

因为现在Windows,Linux,安卓等操作系统无一例外都是c/c++写的,浏览器无一例外也是。其它语言,java的虚拟机也是c/c++写的,php服务器是c/c++写的,python调用的c/c++写的库。路由器交换机等网络设备都运行的c/c++写的程序。可以说现代的整个通讯,IT,互联网其实是建立c/c++基础之上。凡是高精尖的,实时要求高的,机器人导弹飞机航空宇航的控制系统都c/c++的天下。

所谓的编程语言鄙视链其实是程序猿们平日来无所事事开的玩笑,基本可以归纳一下结构:

机器语言 > 汇编语言 > C/C++ > 高级语言(C# Java等)

可以看出如果真的追溯根源机器语言才是最牛P的存在,但是现在级别没人用了。越是底层语言越难学习,付出的精力和时间会大大增加,并且在编写的时候也是越低级语言越麻烦。你可以想想用C#或者JAVA写一个“Hello World!!!”是多么的容易,用机器语言试试。(瑟瑟发抖,嘻(#^.^#))

GO语言是近几年比较流行的,要想了解GO为何不在“鄙视链”的顶端那先简单了解下计算机语言发展史。看完级别就明白了。

计算机语言发展史:

第一阶段——机器语言

说道计算机语言肯定无法脱离计算机这个硬件实体。1946年2月15日,世界上第一台通用电子数字计算机“埃尼阿克”(ENIAC)在美国研制成功。他长啥样子呢?就是下面这个样子:

它当时由1.8万个电子管组成,是一台又大又笨重的机器,体重达30多吨,占地有两三间教室般大。它当时的运算速度为每秒5000次加法运算。这在当时是相当了不起的成就。

ENIAC使用的是最原始的穿孔卡片。这种卡片上使用的语言是只有专家才能理解的语言,与人类语言差别极大,这种语言就称为机器语言。这这种机器语言人类将会使用几十年。

说白了机器语言就是就是就是语言就是0和1,不需要编译直接可以被计算机读取。上图的打孔纸带就是用来编写机器语言的。所以用机器语言写个“Hello world”知道有多费劲了吗?

第二阶段——汇编语言

这是一种面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。因为是机器指令的符号化表示,故不同的机器就有不同的汇编语言。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。

汇编语言用助记符代替了操作码,用地址符号或标号代替地址码。这样就用符号代替了机器语言的二进制码。汇编语言也称为符号语言。比起机器语言,汇编大大进步了。尽管还是复杂,用起来容易出错,但在计算机语言发展史上是机器语言向更高级的语言进化的桥梁。

汇编语言长啥样呢,类似下图:

第三阶段——高级语言

第三阶段就是“面向人类”的高级语言。高级语言是一种接近于人们使用习惯的程序设计语言。它允许用英文写计算程序,程序中的符号和算式也与日常用的数学式子差不多。高级语言发展于20世纪50年代中叶到70年代,流行的高级语言已经开始固化在计算机内存里了,比如 basic语言。

值得一提的是C/C++一般归类于高级语言与汇编语言的过度语言,因为C还是比较底层的。学习起来付出的时间和精力也远大于其他高级语言。

GO

Go 非常易学。我知道人们经常吹捧这一点,但是我真的为自己生产力的飞速提高而感到震惊。多亏了 Go 语言以及它的文档和工具,我仅仅花了两天时间就可以写出「有价值」、可以提交的代码。

所以就时间成本来看,学习C/C++需要跟多的时间,也正是应为这个特性才使得GO得以迅速发展壮大。因为学习时间成本高因此付出的努力也就多,我花了1年才熟练掌握的技术当然有资本“嘲笑”1个月学会的语言。这就形成了所谓的鄙视链。

多说一句越是低级语言学习的人越少,物以稀为贵。如果真的碰到需要底层开发的软件或者系统,还就得C/C++来完成,比如游戏引擎。这时候天生的优越感油然而生,不得不鄙视一波高级语言。(有本事用C#\JAVA写个牛批的游戏引擎啊。嘻嘻!!!)

之所以GO不会像C/C++那也被誉为“鄙视链”顶端的语言,也是因为易学、上手快、从业人员多、难以胜任更底层开发所致。

总结:

任何语言都有存在的价值,只不过运用的领域不同。低级语言面向计算机,编写底层与计算机交互架构。而更多的高级语言则为我们服务,现在能接触到的绝大部分软件、APP都是高级语言编写出来的。因此语言没有高低贵贱只需要在最合适的场合运用好的语言就OK了。

所谓的“鄙视链”大家茶余饭后开心一笑就好。

手动回答不易,点个关注再离开((#^.^#))

C语言可以自举,就是自己可以编译自己,这是以前可以秒杀各类程序设计语言的存在,因为其他编程语言的编译还要用C/ C++编写自己的编译器。现在go也完成了自举,就不存在这种鄙视了。

因为其他语言都是C/C++语言写的可以说是其他语言的父亲。而且c++大型工程、小型驱动通杀,这一点c/c++的父亲汇编做不到,汇编现在单片机都不怎么用了,同时也是其他语言办不到的。当然,随之而来的问题就是入门门槛高,难度大。所以这一系列既是其他语言之父,又有大量实际应用,占比还不小,同时还难于掌握。所以能精通c/c++语言的当然有理由站在鄙视链顶端了。

当计算机性能进一步提高,一定会有其他语言取代c/c++,就好比现在c基本已经取代汇编一样。但目前还没有哪个语言体现出这种潜力,至少JAVA、js、Python,go都不可能。

这个不存在谁鄙视谁,任何一个向外提供服务的系统都需要和其他开发语言结合,其系统性能才更安全稳定可靠。

另外也是要看在什么领域开发什么产品来选择最适合的开发语言。C语言和类C语言相对枯燥死板没那么灵活。好像发明C语言的两位科学家在20多年后的这两年,在这两位科学家再次开发出go语言的时候是这么评价C语言的。go语言比较适合大型工程开发。

2021-10-31

2021-10-31