在我不算长也不算短的计算机从业生涯里,前前后后学习了Q-Basic、VisualFoxPro、C语言、C++、Objective-C、Python、Java、JavaScript、TypeScript等多种编程语言。
其中写过大量代码的主要是C、C++、Python和Java,C/C++算是我在这行出道的时候的编程语言,转了一大圈,接触了各种各样的语言,现在又要回归C/C++了,内心还挺有感触。
今天我想结合我自己的一些个人经历,给大家分享一下我对编程语言的看法,也给还在纠结选择语言的同学一些参考。
先说说C语言吧。
C语言
C语言应该很多人都学过,因为计算机、电子通信、自动化一类的专业基本上都要学习它。
然而,学习的人多,但用它来实际开发项目的人却少之又少。
这是为什么呢?
在我看来,主要有两个原因。
第一,难度大。
在目前还在流行的主流语言里,C语言算是资历最老的了,它诞生的年代,连Windows和Linux都还没有,互联网也才刚刚起步。那个年代的编程,都是要对硬件极为熟悉的人才能驾驭。CPU、中断、寄存器、内存寻址···不掌握这些,很难写出好的程序。
再后来,有了操作系统,大家不需要直接面向硬件编程了,面向操作系统编程就可以,熟悉操作系统提供的API就行了,难度可谓降低了不少,但仍然需要对操作系统、内存知识很熟悉才行。
而放眼看去,21世纪的新一代程序员,都期望21天能从入门到精通,很显然C语言做不到。较高的学习门槛,注定让一些期望快速学来找工作的同学望而却步。
第二,岗位少。
C语言作为一门底层语言,适合系统软件开发,尤其是一些高性能的基础设施软件。但我们国家在这些方面过去很长一段时间奉行拿来主义,这方面岗位少的可怜。所以即便你把C语言学到很牛x,可能远不如一个学Java的同学好找工作。别拿个例抬杠,我说的是总体现象。
基于这两方面的原因,导致很多人认为C语言是一个偏学院派的语言,对它的印象甚至停留在谭浩强那本教材上,好像就只能拿来打打水仙花数似的。
长久以来,不知道从哪里传出来的一个谣言:C语言不适合做大型项目开发,大型项目要用C++。
我曾经还一度认为这个说法有道理,现在看来简直是扯淡。
事实上,很多优秀的软件都使用C语言开发,代码量从几万行到几十万行上百万行都有。我随意举几个例子:
Windows内核
Linux内核
nginx
redis
······
像Java、Python一类的现代语言满篇都是各种框架、封装、高级语法糖,程序员们编程就像是拼积木一般把它们攒在一块儿就行了,看这些代码,全都是封装后的调用堆砌。
而当你去阅读这些项目的C源码时,才会体会到为什么说程序=数据结构+算法
。
从软件开发的角度来说,没有好语言,只有合适的语言。
但从学习计算机编程的角度来说,去学C语言吧,你将受用终身。
接下来说说C++。
C++
这门语言可以说是让我又爱又恨了。
爱的方面是因为作为出道的语言,对我而言如同初恋一般难以割舍。C语言级别的性能+面向对象的优雅确实一度承包了我的编程快乐。
而恨的方面就是标准委员会那帮子人,这么多年一直折腾语言特性,从C++11、C++14、C++17、C++20、C++23···变得越来越怪异,越来越陌生。
借用Java界的一句话:版本任你发,我用C++98···最多用一下C++11,不能再多了。
前面提到过一句话:C语言不适合做大型项目开发,大型项目要用C++。
虽然这句话是在扯淡,但对于像我这样的大部分普通程序员,用面向对象的语言确实更能帮助我们写出大型项目,因为如果数据结构与算法以及软件架构基本功不到位的话,用纯C去挑战大型项目,确实够你喝一壶的。
所以,对于有些领域,既需要高性能,又需要用面向对象的编程思想开发大型项目,C++依然是不二之选(不过近几年Go语言抢了不少地盘了)。
这些领域主要集中在游戏、服务器开发、数据库存储、云计算虚拟化、网络安全等,这些领域技术含量比较高,加之C++程序员的供应量没那么大,想招个好点的不太容易,所以相对来说也没那么卷,对于35岁的焦虑也会相对来说小一些,很多可能干到40+成为这些方面的专家。
再来说说Java。
Java
Java这个方向可以说是相当内卷了,在成都天府三街,一板砖儿拍下去,能砸倒一片Java程序员。
没办法,Java生态真的太强了,特别适合拿来做业务开发。
就我的从业经历来看,Java程序员主要分为三类:
-
搞Web后端开发的
-
搞架构的
-
搞大数据的
第一类的应该是最多的,基本上就是学个Spring框架,然后写写接口,做做CRUD。一大片以业务驱动的小公司普遍都是这类岗位,这些公司的场景,基本上没有高并发,没有大量数据需要处理,岗位可替代性极强,每年都有一大堆年轻人跑步入场。
第二类要有点技术含量了,需要对各种中间件非常了解,什么数据库、缓存、消息队列、对象存储、容器微服务等等,给到一个业务需求,怎样设计架构,怎样技术选型,能够快速给出一套架构方案。这些人一般都是组长级别,最次也是个核心骨干员工。
第三类搞大数据的就更有含金量了。接触的都是分布式、Hadoop、Spark、Flink这些东西,大厂搞这些的比较多,就算是中小企业的话,也是公司里面技术很牛的核心员工。
Java的市场需求依然巨大,同样也是内卷严重,但大量初学者都是集中在第一类,第二类和第三类的人才还是比较吃香的,上这些船还是稳当。
搞Java的同学,还是要奔着第二类、第三类去,光做CRUD,走不长远的。
最后说说Python。
Python
不得不说,Python写起来真的爽啊,不用去关心内存,不用去写轮子,专心把精力放在业务实现上就好了,而且没有Java那么多笨重的框架依赖啥的,Flask、FastAPI多轻量,三五两下一个后端架子就搭起来了,而且还有那么多的第三方库可以用,简直不要太Happy!一个业务功能可能用C/C++要坑次坑次写一个星期,用Python可能一天就搞出来了。
Python尤其适合用在一些功能为主,性能不那么要求高的领域。
对于其他想转码的同学,Python门槛低,上手快,有成就感,是我首推的语言。
不过,同样是写业务,不管在大公司还是小公司,用Python的明显要比Java少的多。
整体来看,在后端业务开发这个领域,大家对Python的定位,还是一个男二号或者女二号,担不起领衔主演。不是说没有,有,但是少,一些小型轻量的服务可能用Python,但一旦涉及到大型后端工程,动态语言的劣势就很明显了。
Python的主要战场,个人觉得还是在机器学习、数据处理、爬虫、工具等领域,学习一下作为第二语言还是很不错的,在很多时候可以派上用场。
总的来说,今天这篇文章并不是要评价语言的优劣,而是就市场行情提供一些思考。每一种语言都有应用的场景,大家不要做编程语言的圣徒,而要让它为你所用。
以上就是对几个编程语言的一些看法,欢迎大家在评论区探讨。