能用java,当然是用java。没法用java,采用c++。因为成本才是合乎职业道德的选择。
鼓吹c++的人该闭嘴。你们不专业。
c++算啥?一门编程语言而已。一个有三五年经验的合格程序员学一门新语言,不应该超过一个月时间。太把一门语言当回事,说明此人也就是只会一门语言的水平。
从职业道德的角度,你应该怎么选择编程语言?选择编程语言的唯一理由,是在性能够用,成本尽量低。
受人之托,忠人之事。拿了公司的工资,却不想着怎么给公司省钱,亏了是老板的事情,只管怎么让老板付出更多成本,甚至把项目搞得很乱,绑架公司,让老板不得不继续付高薪雇佣他。这样的人,应该开除。
至于c++擅长内存管理,还是别吹这个牛。你是写过gc?gc的算法你实现过几种?都没搞过,你也敢说自己擅长内存管理。
c++唯一的优势,在于极致的性能优化,和实时响应较快。这种场景很少需要。即使需要,也不是没法把多种语言结合,节约成本。
你用c++开发的成本,比我用java低?我用java在成本上可以吊打全世界的c++大师。本来就不是一个数量级的较量。
当然,不会c++的java程序员,也是不合格的。人家一吹内存指针就蒙,光嘴强没用。
合格的程序员应该熟练掌握c#/java/c++/c/python/js。c++和java有一种不会,工资不该超过15k。
为啥批c++程序员?因为危害太大。能用java的项目用了c++,损失太大了。
如果让我推荐,我推荐的第一组和是c#和c++混合编程。差不多可以覆盖大多数场景。有时候难免会遇上c++的库,就得用c#包装它,总不能啥都重写。成本才是第一考虑。java想包装c++的库,非常麻烦。而且java的设计者太固执,坚持不让java有指针,也没有值类型的struct,导致它实用性不高。游戏不用java,就是因为它性能确实不行,或者很麻烦。比如一个1000个vector3,你把vector3搞成类,它性能就会很低,甚至没法工作。不搞成vector3,搞成float数组,用起来就很麻烦。而且,你移植一个c++库,用struct去对应struct,是最方便的。然后再用class去包装struct。而java就做不到。在很多场景都不得不用类这种重度的东东,导致性能下降。我想这一个例子就足以说明java的劣势了。没体会的人,应该是写复杂代码的经验不多。
因为有了指针,所以c#在性能上的潜力,其实跟c++一模一样。如果你禁用gc,全部采用malloc的方式分配内存,那它就是个c语言。你甚至可以搞个特殊的编译器来实现这玩意。所以别吹性能了。c++的i++,不会比java和c#的i++快。
总而言之别争了。c#第一选择,java第二选择。c++尽量不要选择,作为遗产包装起来使用。绝大多数场景c++就是个毫无价值的历史包袱。都吹啥牛皮啊。成本对决,肯定被打得妈都不认识。
当然,也有些场景的确是要用c++。比如内存很少的设备,增加内存就是增加成本,导致产品竞争力下降。这种情况下,确实需要c++,这时候也别吵着上其它语言。但如果内存超过1g,就别考虑c++了。
有个回答说c++写的service可以服务10万,而java只能一万,然后说他们公司的协议解析模块,java较慢。老实说,得出这样的结论比较外行。c++和java性能出现比较大的差距,肯定是算法不一样。协议解析模块,c++通常是直接传struct,不做任何判断和检查,而java写的是新建一个类,先解析包头,再解析包体,new了再new,当然慢。这种情况,应该用netty。简单的说,netty就是预先分配一大块内存,然后再在这块内存上映射类,并且会复用这段内存。
最后
IT行业的道路固然是充满了阳光了,一路上充满了美景,但是也充满了艰苦和崎岖,在突破了之后一路的阴霾,云霄之上,必然是一番广阔的云海。
- 整理了一份关于java的系统化资料,从Javase- ssm-springcloud,包括了面试题,PDF电子书,网上商城项目,个人博客项目,分布式项目等都有想学习Java或者转行,大学生都非常实用,无任何套路免费提供,,加我裙下载,有什么问题都可以来问我----926452303点我即可进入
- 最新Java精讲视频,PDF书籍教程,面试题,学习手册
在这里说一下,因为我是自学出来的,也深知自学的艰苦,如果你现在也在自学Java,在自学的过程当中有遇见任何关于学习方法,学习路线,学习效率等方面的问题,资料都可以评论留言,有遇见任