結論:
(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 ,對以後學習分布式系統很有好處。 我在學習C++ 的過程中,是先走了一遍基礎,然後逐個擊破,並輔助一定的實踐,花了大量時間,不敢說學的比較好,只能說我在看一些優秀的開原始碼時,心裡沒有畏懼感了,因為有能力可以深入到任何代碼細節。
這裡特別提一下C++ 的Lock-Free 程序設計:
我學習C++ ,是工作了多年之後,感覺最燒腦的是Lock-Free 程序設計, 為了學習這貨,看了很多內存一致性模型相關的paper,把看了一遍(千萬不要看中文版,且不要看網上的一些文章),應該是理解的非常透徹,並輔以實踐,我是看的brpc 中相關Lock-Free 設計及Folly 源碼。 這裡提下java : java 的內存一致性模型與C++同根同源,在java 中,很多人可能只知道volatile,但是volatile 開銷太大,在這點上C++ 又給了你足夠的靈活性與不同性能的選項。
另外有人diss 了 這本書。我覺得作為C++ 入門書籍非常好,主要是翻譯的比較好。 但是相關地方,如果你想把知識點連成線的話,需要自己拓展和總結下。
當然,如果你想把C++ 學的好點, 至少要看5-6 本經典書,並賦予實踐。
Anyway , it's only up to you !