应该这么说,c++正在被淘汰中
只是这个过程,可能没有那么快,毕竟已经做好的项目,还在产生现金流,所以一般下面干活的人,不敢轻易改
所以很多时候还是维护为主,但是即便是这种项目,也在慢慢用java等语言将其替换中
用python的原因就是谷歌嘛,谷歌自己写c++写不下去了,所以才有了那句话:
"Python where we can, C++ where we must"[1]
翻译过来就是,我们尽量用python,除非遇到不得不用c++的时候
这其实就是一种简化,后来python的性能不行,所以又搞出了go来简化,换来换去
但是用java的人,你会发现,好像比较少换来换去,因为java自身的进步,使得我们用java可以一直用下去,有什么好东西,直接去跟jcp的人说一下,只要是真的好特性,jcp那群人自己会做
用java的人烦恼的一般是:我该怎么升级,什么时候用的第三方类库能够支持我们的系统升级
这也是你的思路,为什么还不被淘汰,java还有python这些,到底什么时候接管c++的领域
那这个过程,我只能说,不是一蹴而就,但是一直在稳步推进
就比如用c++的比较大的项目:openjdk来说
是吧,openjdk的源代码都是c++写的,除了编译器前端也就是javac,已经用java编写以外
后端,也就是jvm这些,还是用c++写的
但是
openjdk也已经开始出现,用java取代现有的代码的项目,也就是graal,就是java的自举
其实你对比openjdk的开发和graal的开发,就能明显感觉到
graal那批人,年轻,team lead才30多岁
但是openjdk的核心开发,那五六十岁的大有人在,还有在南亚次大陆的,那个更是白发苍苍
然后是否用graal来替换openjdk里面c++写的那些东西,这两个team之间有过一次交锋
目前看,好像是老年人组,也就是维持用c++写的,暂时占了上风
但是这个从年龄结构上看,这些人还能维持多久?
再过几年,你想找一个像样的c++程序员都找不到,那时候,graal的team站出来说,用java写
而且性能更好,可以aot,native image,还可以提供多语言功能
是你,你会怎么选?
当然选用java写的graal啊,c++那些代码,谁想维护,那就维护去吧
openjdk算是好的了,其它死掉的乱七八糟的c++项目不计其数
所以为什么以前数据库都是用c++来写,等到nosql的时候,java写的nosql数据库就明显变多了,比如hbase,cassandra,为什么呢?
因为时代变了,更好的工具出现了,就没有必要执着于老旧的技术了
C++编程领域可以说是内卷程度最低的技术领域了
这就要感谢指针,虚函数,泛型,宏和头文件机制等等所谓复杂落后的特性帮C++程序员们劝退了题主及其全班同学这类人
什么用Java Python开发快,不费吹灰之力,naive,你写代码再快能比得上产品经理写需求快吗?
咦,事实上不就是被淘汰了么?
现在已经很少软件和系统提供C的API了……
一说到C/C++都说是底层了。
你要知道在上个世纪八十年代,宏汇编才叫底层呢,C这是高级语言……
一个悲哀的事实是:C++过于复杂,恐怕只是对你来说的。你写不好C++,但写得好的人太多了。就拿知乎来说,我做C++程序员近二十年了,如今在知乎上回答关于C++的问题,稍有不慎就会有人跳出来打脸,一打一个准。仅知乎就有这么多C++学得好的,何况整个行业呢?
一个充满希望的事实是,C++过于复杂,只是对如今的你来说的。只要你坚持一下,到毕业时应该至少就不觉得C++过于复杂了。
另外作为过来人提醒你一句,在计算机软件行业,如果一个技术或者一个领域,你以及周围的人都觉得很简单,很愉快,那么劝你赶紧换别的。其实从事任何一个行业都一样:“过于复杂”才是常态。掌握过于复杂的技术,才是你安身立命之本。掌握过于复杂的技术的终点是除了你换谁都干不了。到那个时候,你就是公司里的佛龛,得供着。
最后,你觉得Java和Python简单,因此应该淘汰C++,所以Java是用Java开发的?Python是用Python开发的?还是他们俩互相开发对方?嗯?
评论区里 @东程稀就 有一段关于复杂技术好还是不好的补充,我觉得说的很在理:简单技术的风险在于可替代性,而复杂技术的风险在于高成本投入之后得不到理想的回报。
“过于复杂”指的是加入了冗余的部分,使得本该简单事情变复杂了。
然而啊。。。C++的复杂并不是如你所想。
C++的核心设计哲学是Zero Overhead。啥意思?说人话就是:你没有用到的特性,不应该给你带来任何负担。
这个哲学的好处在哪里?当你没有学到/用到一个知识点的时候,你不需要为它付出代价。
当你不明白左值右值的时候,单纯地传值就可以玩的很Happy,而当你想要榨取性能,避免拷贝复制的时候,你才需要和复杂的左右值,std::move, 标准 swap 和对象内建swap等听起来就有点晕的概念搏斗一下。
当你不需要自己设计内存分配机制,就完全不需要理会allocator这个听起来就不是很简单的东西,放心地使用STL内置的default部分。但是你在嵌入式环境下或者近实时操作系统里想要确保内存分配的速度和效率,就可以看看怎么重载一下operator new 之类的方法。
当你不需要使用模板工作时,大可以把C++当成一个带类的C玩得飞起。不需要为各种偏特化,类型萃取,integral,std::tuple等高阶咒语头疼不已。但是你需要构建一套需要非常灵活拓展的framework,又不想受限于复杂的继承体制时,variadic template 和 concept 就是你最好的朋友。
在你不熟悉FP的时候,完全可以不去考虑lambda表达式,不去考虑std::function,不去写那些高阶函数。但是当你觉得想把Lisp和Haskell中有些概念比如闭包、monad等搬到C++时,你会觉得其实这些东西蛮顺手的。
这多么人性化!C++为不同的能力阶段的人提供了不同层次的工具,而且它们几乎完全正交!
但是就是有些人要跳出来“太复杂啦!我们需要简单的语言!”
爱因斯坦说过一句话“科学要简单,但不是过于简单。”简单的是概念和概念的层次,却不是概念的数量和概念本身的复杂程度。狭义相对论可以把麦克斯维方程组用一个简单的张量公式表示,却不能避免张量概念本身的复杂性。
经典力学是不是太复杂啦,我们需要简单的!有啊,牛顿力学。只要你不涉及到速度、质量足够大的场景,就不需要相对论;
流体力学是不是太复杂啦?我们需要简单的!有啊,简单流体力学。只要你不涉及湍流,就不要考虑数值求解内维尔-斯托克斯方程。
量子力学是不是太复杂啦?我们需要简单的!有啊,普通量子力学。只要你不涉及复杂多体交换关联势,你就不需要学习高量和重正化群。
C++是不是太复杂啦? 得啦,当你面对的问题还都不涉及到你暂时用不到的内容时,C++够简单啦。。。
根本原因还是实际使用C++的人通常都只在使用它的很小的一个子集,这个子集并不复杂
低情商:是的,已经结束了。
高情商:diy的时代暂停了,只不过我们暂时不知道重新开放的期限。