知乎神回复:如果一定要在C++和Java中选择,应该选择哪一种?

结论:
(1)如果你是 计算机科班,大一学生,不需要立即找工作,想提高自己,那我的建议是: 把手上有关java 的书籍全部扔掉,换成C++ 的几本经典书籍。
(2)如果你是想找工作,建议学习Java,毕竟以后想提升自己的时候,还是可以再学习C++ 的。
(3)如果你是外面培训班出生,没有科班背景,基础不扎实,Sorry,目前阶段你可能还配不上C++。
你如果选择C++,那C++ 的难度与JAVA 比,那应该不在一个层次。因为C++ 作者及委员会 想给你带来足够的抽象能力,让你可以抽象这个世界; 给你足够的自由与控制硬件的能力,及零开销的高性能。 特别是现代C++ 的发展, 可以带来更多的组合,灵活方便,可以写出非常精简,有美感的代码。这些导致了C++ 语法繁杂,学习曲线漫长。

但是学习C++ 同样会给你带来很多收益(前提是学好的情况下):
(1)你会变得自信,在有C++ 基础上,学习go 1天,java的学习也就2-3天, 学习rust 也很快,一个月吧,再练习下就可以写代码了。当然我说的只是基础语法的学习。 学习这几门语言时,你就会感觉好轻松。
(2)自己的抽象思维能力会带来提升,抽象思维是计算机领域最重要与基础的能力。另外很多人吐槽C++ 程序员比较呆板,古董,且不懂设计模式。那是因为你没有研究过好的C++的开源代码,比如Folly, Wangle,mongogdb 。特别提下Folly 的promise/future 设计, 是C++的大牛 写的, 基本上把每一行源码都看懂了,写的真好。

(3)通过学习C++ , 可以学习到很多通用的知识,这些知识也是可以迁移的。 C++ 的oop及资源所有权与生命周期管理, C++的异常处理, C++的泛型设计,C++的元编程,C++的异步编程及Lock-Free 设计等.在学习Lock-Free 过程中,你会发现并发程序设计与数据库中的并发控制的思想非常类似, 比如: Lock-Free 中的Hazard Pointer 里面 不就有MVCC 的思想么, CAS-loop 操作不就是一种乐观的思想么。
另外如果你触及到内存一致性模型的本质的话,你很有可能会去读lamport 的经典paper<Time, Clocks, and the Ordering of Events in a Distributed System> ,对以后学习分布式系统很有好处。 我在学习C++ 的过程中,是先走了一遍基础,然后逐个击破,并辅助一定的实践,花了大量时间,不敢说学的比较好,只能说我在看一些优秀的开源代码时,心里没有畏惧感了,因为有能力可以深入到任何代码细节。

这里特别提一下C++ 的Lock-Free 程序设计:
我学习C++ ,是工作了多年之后,感觉最烧脑的是Lock-Free 程序设计, 为了学习这货,看了很多内存一致性模型相关的paper,把看了一遍(千万不要看中文版,且不要看网上的一些文章),应该是理解的非常透彻,并辅以实践,我是看的brpc 中相关Lock-Free 设计及Folly 源码。 这里提下java : java 的内存一致性模型与C++同根同源,在java 中,很多人可能只知道volatile,但是volatile 开销太大,在这点上C++ 又给了你足够的灵活性与不同性能的选项。
另外有人diss 了 <C++ Primer 第五版 > 这本书。我觉得作为C++ 入门书籍非常好,主要是翻译的比较好。 但是相关地方,如果你想把知识点连成线的话,需要自己拓展和总结下。
当然,如果你想把C++ 学的好点, 至少要看5-6 本经典书,并赋予实践。
Anyway , it's only up to you !
链接:https://www.zhihu.com/question/20736151/answer/1553066228
来源:知乎作者triump
另外本人是一名CC++的程序员,如果你想更好的提升你的编程能力,好好学习C/C++编程知识的话!那么你很幸运~

UP在主页上传了一些学习C/C++编程的视频教程,有兴趣或者正在学习的小伙伴一定要去看一看哦!会对你有帮助的~
分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
编程学习书籍:

编程学习视频:


