C#轉C++的一點分享


前幾天看到這樣一篇博客《那些年·我們讀過的專業書籍》,里面列了很多大家認為很好的書,加上自己在自學C++的工程中也看了不少書,感覺並不是所有的書都值得花時間去看的,畢竟很多人一年下來也看不了2,3本書,不同的技術能力的人,適合看的書都不太一樣,在這么多大家都認為是經典的書中,選出幾本真正適合自己的才是王道,經典一多了,有些比起來就不是那么經典了,當然大家都說經典,自然有可看之處,如果有多余的時間,多看些書自然是好的。

下面是我看過的技術書籍(不一定看完),還有本《程序員的自我修養》在老家,其他幾本不怎么樣就沒有列出來。

買的第一本技術書籍是《數據結構與算法分析》

當時剛畢業不久,在學校時沒有買技術書籍的概念,在學校時也沒怎么逛過技術網站,畢業后逛得比較多,當時是做C#,那時Android很火想學,內心又一直認為成為一名好的程序員,底層知識是要會的,當時的情況是:在做C#,想做Android,又想做C++,沒准備長做C#,最后買了這本算法相關的書籍,決定學C++,注意准備開始吐槽:是誰說程序=算法+XX,這個等式對於很多剛畢業的同學們根本不成立,算法對於大部分的程序員來說都是弱項好不好,很多菜逼根本就不會算法,就會增刪改查,有木有,別一開始就來最難的,容易打擊自信心,是誰說算法很重要的,哥才寫了90多篇博客,就有19篇跟算法有關的,私底下也學習了很多算法相關的文章,哥是要轉C++好不好。吐槽告一段落,算法還是很重要的,有時間還是要好好研究一下。

 

《Effective C++》買的第一本完全關於C++的書

剛開始都看不懂,反復看之后,就很懂了,到現在為止應該至少看了4遍,感覺現在給我大半天的時間,能大致在看一遍,曾經一度想把書中的50條法則寫成幾篇博客的,最后由於太懶只寫了3篇

Effective C++面向對象與繼承

Effective C++ 類與函數設計和申明

Effective C++構造函數析構函數Assignment運算符

開始沒看懂的時候,沒覺得這書怎么樣,等一條一條的看懂之后,發現這書他媽的寫得太好,我忍不住的要贊美他,作者用很短的幾句話就把事情說得很清楚,作者的表達能力的確牛逼,再次發現作者表達能力特別牛逼的是看吳軍的《數學之美》,他用幾句話就把一個關於圖的問題講得很清楚,其他的一些所謂的經典作者寫的內容看起來就不是那么好理解,當然這跟講的內容、跟讀者所掌握的的知識以及讀者的理解能力有關。

如果你要學C++,那么我推薦你看這本,雖然它沒有教我們入門C++,也沒有教我們深度理解C++,也沒講更底層的知識,但是它是第一本,將很多關於C++編程的重要知識點收錄成的第一本書,第一本自然收錄的是在開發中出現頻率較大的,值得一講的內容,之后有很多所謂經典的跟風之作,如

《Exceptional C++》和《More Exceptional C++》,包括作者自己的《More Effective C++》,

當然這些書中講的內容可能是你八輩子也用不上的,但可能是要掌握的,這些書講的差不多是一些技巧性的東西,或是實現了一個XX功能,有點通用性,人家把這些點講得很清楚,這類書不用急着看,等你C++學得差不多了,再看也不遲,那時會看得很快,因為他們沒講什么新的知識,都是對現有知識的運用。

 

《深度探索C++對象模型》要想更深入的理解C++,當然是這本,這本真的是經典中的必看。

這本書共7章320頁,但出版社卻把它弄得比較厚,好像不厚就感覺不是好書似的。每章的內容都很不錯,建議重點看第三章和第四章,第三章講C++對象的內存布局,第四章講C++的各種方法編譯后是啥樣子的,以及方法是怎么被調用的,這是C++最重要的東西,其他任何技術不都是建立在數據和方法之上嗎!當然如果你是菜鳥看完之后你還是菜鳥,你不會變成大牛,因為我看了這些書后我並沒有變成大牛,你同樣也不會,但你會更深入的理解C++,你會對你自己的能力更自信。看完這本書后,我覺得我可以做C++了,於是跨部門面試,十分鍾左右,我現在的經理就問我什么時候可以過來。當然剛開始做C++時各種不順,實戰太少。你不會因為看了幾本書而成為大牛。看這本書之前除了《編譯原理》還沒有買,其他的書都看完或是看過一些,剛開始的時候有點看不懂,之后很快的看懂並看完了,因為看這本書之前我反復看了《深入理解計算機系統》的第七章(鏈接)和《程序員的自我修養》的大部分內容,對編譯和鏈接還是有些了解,再看這本書自然會快些。看完這本書我寫了三篇博客,但看的人很少。

構造函數產生的點及原因

虛方法的調用是怎么實現的(單繼承VS多繼承)

C++ Data Member內存布局

深入理解計算機系統就不多說了,估計每個過來人都會推薦,如果你想成為一名好的程序員,就是必看必看,不管你是什么程序員,我相信很多C#牛逼的程序員都看過,這本書講了很多重要的知識,不是很深,但裝逼足以,要全都看懂還是有些難的,之前就有個同事買了這本書,里面夾了一張跟他有純潔男女關系的女性朋友的照片,作為書簽,,這的確是督促自己看書的好方法。關於這本書我寫了兩篇博客,用這本書的內容寫博客可以寫很多篇。

數據對齊

在開發中你可能沒有考慮到的兩個性能優化

由於我一直在自學C++,重點推薦這3本,前兩本推薦指數更高:

1:深度探索C++對象模型

2:深入理解計算機系統

3:Effective C++

其他的一些書都是值得看的,寫到這里就有點不想寫了,再說一本吧,其他的就不多說了,看完了上面這三本,再看其他的。由於我是做Windows C++開發,就說說《Windows核心編程》,做Windows開發的同學要看看。關於這本書我寫了4篇博客

多線程編程--5種方法實現線程同步

Windows幾種線程同步方法介紹

Windows線程基礎

Windows內核對象簡介

這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++語法就那點東西,成為牛人之前還有一堆的書等着你去看,你還要寫一堆的代碼。

我現在在學習Windows的一些東西,做Windows C++方向嗎!業余時間看看《編譯原理》,比較難懂,看懂之后,我相信很多東西都會明白得更透徹。明年估計是我成為小牛的重要階段,阿漢加油。

為了不讓我的博客因偏差太大,而讓想做C++的朋友走彎路,在這里付上耗子叔的《如何學好C++語言》 http://coolshell.cn/articles/4119.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM