從C#轉C++有段時間了,一直想分享點什麼,但又不太好意思分享,畢竟本身作C++的時間不太長,最近感受本身已能勝任現有工做,想分享的想法又強了點,前幾天看到這樣一篇博客《那些年·咱們讀過的專業書籍》,裏面列了不少你們認爲很好的書,加上本身在自學C++的工程中也看了很多書,感受並非全部的書都值得花時間去看的,畢竟不少人一年下來也看不了2,3本書,不一樣的技術能力的人,適合看的書都不太同樣,在這麼多你們都認爲是經典的書中,選出幾本真正適合本身的纔是王道,經典一多了,有些比起來就不是那麼經典了,固然你們都說經典,天然有可看之處,若是有多餘的時間,多看些書天然是好的。html
下面是我看過的技術書籍(不必定看完),還有本《程序員的自我修養》在老家,其餘幾本不怎麼樣就沒有列出來。程序員
買的第一本技術書籍是《數據結構與算法分析》面試
當時剛畢業不久,在學校時沒有買技術書籍的概念,在學校時也沒怎麼逛過技術網站,畢業後逛得比較多,當時是作C#,那時Android很火想學,心裏又一直認爲成爲一名好的程序員,底層知識是要會的,當時的狀況是:在作C#,想作Android,又想作C++,沒準備長作C#,最後買了這本算法相關的書籍,決定學C++,注意準備開始吐槽:是誰說程序=算法+XX,這個等式對於不少剛畢業的同窗們根本不成立,算法對於大部分的程序員來講都是弱項好很差,不少菜逼根本就不會算法,就會增刪改查,有木有,別一開始就來最難的,容易打擊自信心,是誰說算法很重要的,哥才寫了90多篇博客,就有19篇跟算法有關的,私底下也學習了不少算法相關的文章,哥是要轉C++好很差。吐槽告一段落,算法仍是很重要的,有時間仍是要好好研究一下。算法
《Effective C++》買的第一本徹底關於C++的書編程
剛開始都看不懂,反覆看以後,就很懂了,到如今爲止應該至少看了4遍,感受如今給我大半天的時間,能大體在看一遍,曾經一度想把書中的50條法則寫成幾篇博客的,最後因爲太懶只寫了3篇性能優化
Effective C++構造函數析構函數Assignment運算符app
開始沒看懂的時候,沒以爲這書怎麼樣,等一條一條的看懂以後,發現這書他媽的寫得太好,我忍不住的要讚美他,做者用很短的幾句話就把事情說得很清楚,做者的表達能力的確牛逼,再次發現做者表達能力特別牛逼的是看吳軍的《數學之美》,他用幾句話就把一個關於圖的問題講得很清楚,其餘的一些所謂的經典做者寫的內容看起來就不是那麼好理解,固然這跟講的內容、跟讀者所掌握的的知識以及讀者的理解能力有關。編程語言
若是你要學C++,那麼我推薦你看這本,雖然它沒有教咱們入門C++,也沒有教咱們深度理解C++,也沒講更底層的知識,可是它是第一本,將不少關於C++編程的重要知識點收錄成的第一本書,第一本天然收錄的是在開發中出現頻率較大的,值得一講的內容,以後有不少所謂經典的跟風之做,如
《Exceptional C++》和《More Exceptional C++》,包括做者本身的《More Effective C++》,
固然這些書中講的內容多是你八輩子也用不上的,但多是要掌握的,這些書講的差很少是一些技巧性的東西,或是實現了一個XX功能,有點通用性,人家把這些點講得很清楚,這類書不用急着看,等你C++學得差很少了,再看也不遲,那時會看得很快,由於他們沒講什麼新的知識,都是對現有知識的運用。
《深度探索C++對象模型》要想更深刻的理解C++,固然是這本,這本真的是經典中的必看。
這本書共7章320頁,但出版社卻把它弄得比較厚,好像不厚就感受不是好書似的。每章的內容都很不錯,建議重點看第三章和第四章,第三章講C++對象的內存佈局,第四章講C++的各類方法編譯後是啥樣子的,以及方法是怎麼被調用的,這是C++最重要的東西,其餘任何技術不都是創建在數據和方法之上嗎!固然若是你是菜鳥看完以後你仍是菜鳥,你不會變成大牛,由於我看了這些書後我並無變成大牛,你一樣也不會,但你會更深刻的理解C++,你會對你本身的能力更自信。看完這本書後,我以爲我能夠作C++了,因而跨部門面試,十分鐘左右,我如今的經理就問我何時能夠過來。固然剛開始作C++時各類不順,實戰太少。你不會由於看了幾本書而成爲大牛。看這本書以前除了《編譯原理》尚未買,其餘的書都看完或是看過一些,剛開始的時候有點看不懂,以後很快的看懂並看完了,由於看這本書以前我反覆看了《深刻理解計算機系統》的第七章(連接)和《程序員的自我修養》的大部份內容,對編譯和連接仍是有些瞭解,再看這本書天然會快些。看完這本書我寫了三篇博客,但看的人不多。
《深刻理解計算機系統》就很少說了,估計每一個過來人都會推薦,若是你想成爲一名好的程序員,就是必看必看,無論你是什麼程序員,我相信不少C#牛逼的程序員都看過,這本書講了不少重要的知識,不是很深,但裝逼足以,要全都看懂仍是有些難的,以前就有個同事買了這本書,裏面夾了一張跟他有純潔男女關係的女性朋友的照片,做爲書籤,,這的確是督促本身看書的好方法。關於這本書我寫了兩篇博客,用這本書的內容寫博客能夠寫不少篇。
因爲我一直在自學C++,重點推薦這3本,前兩本推薦指數更高:
1:深度探索C++對象模型
2:深刻理解計算機系統
3:Effective C++
其餘的一些書都是值得看的,寫到這裏就有點不想寫了,再說一本吧,其餘的就很少說了,看完了上面這三本,再看其餘的。因爲我是作Windows C++開發,就說說《Windows核心編程》,作Windows開發的同窗要看看。關於這本書我寫了4篇博客
這4篇博客基本上是講線程、進程、內核對象、線程同步。這本書講了Windows操做系統的不少東西,如內存管理,動態連接庫,這些都是作Windows開發須要知道的,也是我比較薄弱的,在開發中基本都是用庫,如今作的項目,兩個Solution,其中一個有100多個project,剛開始來的時候常常編譯都經過不了,加上每次編譯的時間較長,搞了半天編譯失敗,挺打擊人的。
關於書的內容就說到這裏,省得你們覺得我是來講書,顯然說書不是個人強項,如今就來講說轉C++的一些感覺。
老實說若是如今用的是C#、JAVA、PHP等,且沒用過C/C++不太建議轉C/C++,但很是建議多看看底層的知識,C#作了幾年以後發現也就是那點東西,不深刻學習,不少東西實際上是隻會用,根本不知道究竟是怎麼回事。我相信不少C#程序員不知道多態究竟是怎麼實現;方法究竟是怎麼被調用的;不知道哪些是在編譯器肯定,哪些是在運行時肯定的;常常聽到字符串池的概念等,微軟把C#封裝得太好了,掉坑裏的機會太少了,大不了無論3721,try...catch一下,也讓有些人變得不那麼愛思考了,像C/C++一不當心就掉坑裏了,不思考都不行。常常聽到有人說:C#入門容易,精通難。那是由於學底層的知識更難些好很差。說這些不是針對誰,之前寫C#就是吃着火鍋唱着歌,各類輕鬆舒服,C++就兩字:苦逼。要啥啥沒有,如分割字符串這種最基本的功能都得本身實現,剛作C++的感受就是:本身坐在豪華的遊艇上,看到對面的海盜船很酷,因而就往海盜船一跳,一上船發現這坐船處處都在漏水,各類設施都不好勁,一不當心就掉水裏了,各類感受不適應。
學C++好很長時間嗎?不要
從自學C++到如今差很少3年時間,期間屢次想放棄,心中常有的一個念頭就是:把這些時間用在學C#,C#能夠學得更好,工資能夠拿得更多,每次看到發到手中的這點工資,就沒啥幹勁了,但我也一直明白若要把程序當作一個長久的職業,我是要必會C/C++的,期間偶爾有幾個月沒有學C++,但最後仍是放不下,又想起她。最後拖到兩年多才作本身一直想作的C++,感受是個很漫長的過程,心裏的針扎仍是挺多的。這兩年來業餘時間拿來學習C++的時間平均在半個小時左右,跟10000個小時比起來仍是不多的,固然10000個小時是要成爲真正的大牛的,而我是剛上賊船,看了這麼多書理論仍是有些,還需大量實戰。
C++很難嗎?NO
C++被成爲世界上最難的編程語言,其實並無傳說中的那麼難,但有一點是能夠確定的C++程序員在沒有成爲小牛以前一直都在針扎,對,就是針扎,過得很苦逼,我在上個部門作C#的時候沒加過一天班,作C++後,之前的同事說我瘦了,之前作C#用一個月的時間一我的重寫了公司的工做流,作C++後,花了兩個多月作個歷史管理器,還常常加班。雖然如今自信多了,但還要繼續針紮下去。等成爲小牛後,我相信就不分編程語言了,但若是你不是作C/C++,卻想作C/C++,就別聽語言都是浮雲這種廢話。在你成爲小牛以前你纔是浮雲,你得苦逼,並且這是轉行,這也是我不太建議轉C/C++的一個緣由,你以前學到的不少東西都是白學的,你要從0.1開始,又開始作菜鳥,你們都知道菜鳥的日子不是那麼好過,等你成爲小牛以後編程語言纔是浮雲。爲何你們都說他難呢?我估計就是被哪些沒學好的人宣傳的,沒學好以前過得苦逼,那固然發自心裏的認爲難,其餘的朋友們聽他們一說估計也以爲難。在加上一些大牛也說C++難,人家說難不是由於本身沒學好而說難,人家是由於知道得大多,發現C++太靈活,坑太多,新手很容易掉坑裏。要我說,任何編程語言,基礎語法也就那點東西,等你明白了這些基礎的東西是怎麼實現,爲何要這樣實現,編譯後是個什麼樣子,你也就發現C++也就那樣,無論牛不牛,也都是在用C++幹活,只不過是有的人再用C++作增刪改查,有的人在作你們都在用的產品。
怎麼學習C++?標準答案是:多思多寫多看
做爲新菜鳥的我,是不該該回答這個問題的,但這個問題的正確答案的確是多思多寫多看。如今來講說個人失敗經歷,做爲智商不過低的我,學了兩年多才作C++,這顯然是失敗(哈哈,程序員就應該自信,千萬別懷疑本身的智商,一點都不能有)。的確我是走了彎路,因此我像不少有失敗經歷的前輩同樣,來分享本身的失敗經歷,以避免後輩們重蹈前輩們的覆轍。
我學了很久的C++,都不會寫一個C++的類,其實開始的時候一直都是在寫C,一直在用C寫算法,嚴重受了算法重要的影響,其實開始的時候我都不是在學C++,買的第一本技術書,不是關於C++的,而是關於算法的。學C++的時候也沒有買一本比較好的系統介紹C++的書籍。直接第一本C++書籍就是Effective C++,看這本書仍是要必定基礎的。看這本書的時候我已經作了兩年多的C#,在學校裏有一點C的基礎,以後也看過《高質量C++編程指南》,仍是有必定的程序基礎,若是你有必定的程序基礎,想轉C++,仍是建議先看本系統介紹C++的書籍,如《C++ Primer》,這本書的做者也是《深度探索C++對象模型》的做者,還有C++他爹寫的那本啥也值得一讀,你們都是這麼說,應該不會錯,兩本選一本,有必定基礎以後再看Effective C++,感受不錯以後再看《深度探索C++對象模型》,這本差很少以後再看《深刻理解計算機系統》,這本不是講C++的,講的是底層的東西,你學C++不就是想學底層的東西嗎,C++語法就那點東西,成爲牛人以前還有一堆的書等着你去看,你還要寫一堆的代碼。
我http://www.gwdang.com/app/extension如今在學習Windows的一些東西,作Windows C++方向嗎!業餘時間看看《編譯原理》,比較難懂,看懂以後,我相信不少東西都會明白得更透徹。明年估計是我成爲小牛的重要階段,阿漢加油。http://www.gwdang.com