前幾天看到這樣一篇博客《那些年·我們讀過(guò)的專業(yè)書(shū)籍》,里面列了很多大家認(rèn)為很好的書(shū),加上自己在自學(xué)C++的工程中也看了不少書(shū),感覺(jué)并不是所有的書(shū)都值得花時(shí)間去看的,畢竟很多人一年下來(lái)也看不了2,3本書(shū),不同的技術(shù)能力的人,適合看的書(shū)都不太一樣,在這么多大家都認(rèn)為是經(jīng)典的書(shū)中,選出幾本真正適合自己的才是王道,經(jīng)典一多了,有些比起來(lái)就不是那么經(jīng)典了,當(dāng)然大家都說(shuō)經(jīng)典,自然有可看之處,如果有多余的時(shí)間,多看些書(shū)自然是好的。
下面是我看過(guò)的技術(shù)書(shū)籍(不一定看完),還有本《程序員的自我修養(yǎng)》在老家,其他幾本不怎么樣就沒(méi)有列出來(lái)。
買(mǎi)的第一本技術(shù)書(shū)籍是《數(shù)據(jù)結(jié)構(gòu)與算法分析》
當(dāng)時(shí)剛畢業(yè)不久,在學(xué)校時(shí)沒(méi)有買(mǎi)技術(shù)書(shū)籍的概念,在學(xué)校時(shí)也沒(méi)怎么逛過(guò)技術(shù)網(wǎng)站,畢業(yè)后逛得比較多,當(dāng)時(shí)是做C#,那時(shí)Android很火想學(xué),內(nèi)心又一直認(rèn)為成為一名好的程序員,底層知識(shí)是要會(huì)的,當(dāng)時(shí)的情況是:在做C#,想做Android,又想做C++,沒(méi)準(zhǔn)備長(zhǎng)做C#,最后買(mǎi)了這本算法相關(guān)的書(shū)籍,決定學(xué)C++,注意準(zhǔn)備開(kāi)始吐槽:是誰(shuí)說(shuō)程序=算法+XX,這個(gè)等式對(duì)于很多剛畢業(yè)的同學(xué)們根本不成立,算法對(duì)于大部分的程序員來(lái)說(shuō)都是弱項(xiàng)好不好,很多菜逼根本就不會(huì)算法,就會(huì)增刪改查,有木有,別一開(kāi)始就來(lái)最難的,容易打擊自信心,是誰(shuí)說(shuō)算法很重要的,哥才寫(xiě)了90多篇博客,就有19篇跟算法有關(guān)的,私底下也學(xué)習(xí)了很多算法相關(guān)的文章,哥是要轉(zhuǎn)C++好不好。吐槽告一段落,算法還是很重要的,有時(shí)間還是要好好研究一下。
《Effective C++》買(mǎi)的第一本完全關(guān)于C++的書(shū)
剛開(kāi)始都看不懂,反復(fù)看之后,就很懂了,到現(xiàn)在為止應(yīng)該至少看了4遍,感覺(jué)現(xiàn)在給我大半天的時(shí)間,能大致在看一遍,曾經(jīng)一度想把書(shū)中的50條法則寫(xiě)成幾篇博客的,最后由于太懶只寫(xiě)了3篇
Effective C++面向?qū)ο笈c繼承
Effective C++ 類與函數(shù)設(shè)計(jì)和申明
Effective C++構(gòu)造函數(shù)析構(gòu)函數(shù)Assignment運(yùn)算符
開(kāi)始沒(méi)看懂的時(shí)候,沒(méi)覺(jué)得這書(shū)怎么樣,等一條一條的看懂之后,發(fā)現(xiàn)這書(shū)他媽的寫(xiě)得太好,我忍不住的要贊美他,作者用很短的幾句話就把事情說(shuō)得很清楚,作者的表達(dá)能力的確牛逼,再次發(fā)現(xiàn)作者表達(dá)能力特別牛逼的是看吳軍的《數(shù)學(xué)之美》,他用幾句話就把一個(gè)關(guān)于圖的問(wèn)題講得很清楚,其他的一些所謂的經(jīng)典作者寫(xiě)的內(nèi)容看起來(lái)就不是那么好理解,當(dāng)然這跟講的內(nèi)容、跟讀者所掌握的的知識(shí)以及讀者的理解能力有關(guān)。
如果你要學(xué)C++,那么我推薦你看這本,雖然它沒(méi)有教我們?nèi)腴T(mén)C++,也沒(méi)有教我們深度理解C++,也沒(méi)講更底層的知識(shí),但是它是第一本,將很多關(guān)于C++編程的重要知識(shí)點(diǎn)收錄成的第一本書(shū),第一本自然收錄的是在開(kāi)發(fā)中出現(xiàn)頻率較大的,值得一講的內(nèi)容,之后有很多所謂經(jīng)典的跟風(fēng)之作,如
《Exceptional C++》和《More Exceptional C++》,包括作者自己的《More Effective C++》,
當(dāng)然這些書(shū)中講的內(nèi)容可能是你八輩子也用不上的,但可能是要掌握的,這些書(shū)講的差不多是一些技巧性的東西,或是實(shí)現(xiàn)了一個(gè)XX功能,有點(diǎn)通用性,人家把這些點(diǎn)講得很清楚,這類書(shū)不用急著看,等你C++學(xué)得差不多了,再看也不遲,那時(shí)會(huì)看得很快,因?yàn)樗麄儧](méi)講什么新的知識(shí),都是對(duì)現(xiàn)有知識(shí)的運(yùn)用。
《深度探索C++對(duì)象模型》要想更深入的理解C++,當(dāng)然是這本,這本真的是經(jīng)典中的必看。
這本書(shū)共7章320頁(yè),但出版社卻把它弄得比較厚,好像不厚就感覺(jué)不是好書(shū)似的。每章的內(nèi)容都很不錯(cuò),建議重點(diǎn)看第三章和第四章,第三章講C++對(duì)象的內(nèi)存布局,第四章講C++的各種方法編譯后是啥樣子的,以及方法是怎么被調(diào)用的,這是C++最重要的東西,其他任何技術(shù)不都是建立在數(shù)據(jù)和方法之上嗎!當(dāng)然如果你是菜鳥(niǎo)看完之后你還是菜鳥(niǎo),你不會(huì)變成大牛,因?yàn)槲铱戳诉@些書(shū)后我并沒(méi)有變成大牛,你同樣也不會(huì),但你會(huì)更深入的理解C++,你會(huì)對(duì)你自己的能力更自信??赐赀@本書(shū)后,我覺(jué)得我可以做C++了,于是跨部門(mén)面試,十分鐘左右,我現(xiàn)在的經(jīng)理就問(wèn)我什么時(shí)候可以過(guò)來(lái)。當(dāng)然剛開(kāi)始做C++時(shí)各種不順,實(shí)戰(zhàn)太少。你不會(huì)因?yàn)榭戳藥妆緯?shū)而成為大牛。看這本書(shū)之前除了《編譯原理》還沒(méi)有買(mǎi),其他的書(shū)都看完或是看過(guò)一些,剛開(kāi)始的時(shí)候有點(diǎn)看不懂,之后很快的看懂并看完了,因?yàn)榭催@本書(shū)之前我反復(fù)看了《深入理解計(jì)算機(jī)系統(tǒng)》的第七章(鏈接)和《程序員的自我修養(yǎng)》的大部分內(nèi)容,對(duì)編譯和鏈接還是有些了解,再看這本書(shū)自然會(huì)快些??赐赀@本書(shū)我寫(xiě)了三篇博客,但看的人很少。
構(gòu)造函數(shù)產(chǎn)生的點(diǎn)及原因
虛方法的調(diào)用是怎么實(shí)現(xiàn)的(單繼承VS多繼承)
C++ Data Member內(nèi)存布局
《深入理解計(jì)算機(jī)系統(tǒng)》就不多說(shuō)了,估計(jì)每個(gè)過(guò)來(lái)人都會(huì)推薦,如果你想成為一名好的程序員,就是必看必看,不管你是什么程序員,我相信很多C#牛逼的程序員都看過(guò),這本書(shū)講了很多重要的知識(shí),不是很深,但裝逼足以,要全都看懂還是有些難的,之前就有個(gè)同事買(mǎi)了這本書(shū),里面夾了一張跟他有純潔男女關(guān)系的女性朋友的照片,作為書(shū)簽,,這的確是督促自己看書(shū)的好方法。關(guān)于這本書(shū)我寫(xiě)了兩篇博客,用這本書(shū)的內(nèi)容寫(xiě)博客可以寫(xiě)很多篇。
數(shù)據(jù)對(duì)齊
在開(kāi)發(fā)中你可能沒(méi)有考慮到的兩個(gè)性能優(yōu)化
由于我一直在自學(xué)C++,重點(diǎn)推薦這3本,前兩本推薦指數(shù)更高:
1:深度探索C++對(duì)象模型
2:深入理解計(jì)算機(jī)系統(tǒng)
3:Effective C++
其他的一些書(shū)都是值得看的,寫(xiě)到這里就有點(diǎn)不想寫(xiě)了,再說(shuō)一本吧,其他的就不多說(shuō)了,看完了上面這三本,再看其他的。由于我是做Windows C++開(kāi)發(fā),就說(shuō)說(shuō)《Windows核心編程》,做Windows開(kāi)發(fā)的同學(xué)要看看。關(guān)于這本書(shū)我寫(xiě)了4篇博客
多線程編程--5種方法實(shí)現(xiàn)線程同步
Windows幾種線程同步方法介紹
Windows線程基礎(chǔ)
Windows內(nèi)核對(duì)象簡(jiǎn)介
這4篇博客基本上是講線程、進(jìn)程、內(nèi)核對(duì)象、線程同步。這本書(shū)講了Windows操作系統(tǒng)的很多東西,如內(nèi)存管理,動(dòng)態(tài)鏈接庫(kù),這些都是做Windows開(kāi)發(fā)需要知道的,也是我比較薄弱的,在開(kāi)發(fā)中基本都是用庫(kù),現(xiàn)在做的項(xiàng)目,兩個(gè)Solution,其中一個(gè)有100多個(gè)project,剛開(kāi)始來(lái)的時(shí)候經(jīng)常編譯都通過(guò)不了,加上每次編譯的時(shí)間較長(zhǎng),搞了半天編譯失敗,挺打擊人的。
關(guān)于書(shū)的內(nèi)容就說(shuō)到這里,免得大家以為我是來(lái)說(shuō)書(shū),顯然說(shuō)書(shū)不是我的強(qiáng)項(xiàng),現(xiàn)在就來(lái)說(shuō)說(shuō)轉(zhuǎn)C++的一些感受。
老實(shí)說(shuō)如果現(xiàn)在用的是C#、JAVA、PHP等,且沒(méi)用過(guò)C/C++不太建議轉(zhuǎn)C/C++,但非常建議多看看底層的知識(shí),C#做了幾年之后發(fā)現(xiàn)也就是那點(diǎn)東西,不深入學(xué)習(xí),很多東西其實(shí)是只會(huì)用,根本不知道到底是怎么回事。我相信很多C#程序員不知道多態(tài)到底是怎么實(shí)現(xiàn);方法到底是怎么被調(diào)用的;不知道哪些是在編譯器確定,哪些是在運(yùn)行時(shí)確定的;經(jīng)常聽(tīng)到字符串池的概念等,微軟把C#封裝得太好了,掉坑里的機(jī)會(huì)太少了,大不了不管3721,try...catch一下,也讓有些人變得不那么愛(ài)思考了,像C/C++一不小心就掉坑里了,不思考都不行。經(jīng)常聽(tīng)到有人說(shuō):C#入門(mén)容易,精通難。那是因?yàn)閷W(xué)底層的知識(shí)更難些好不好。說(shuō)這些不是針對(duì)誰(shuí),以前寫(xiě)C#就是吃著火鍋唱著歌,各種輕松舒服,C++就兩字:苦逼。要啥啥沒(méi)有,如分割字符串這種最基本的功能都得自己實(shí)現(xiàn),剛做C++的感覺(jué)就是:自己坐在豪華的游艇上,看到對(duì)面的海盜船很酷,于是就往海盜船一跳,一上船發(fā)現(xiàn)這坐船到處都在漏水,各種設(shè)施都很差勁,一不小心就掉水里了,各種感覺(jué)不適應(yīng)。
學(xué)C++好很長(zhǎng)時(shí)間嗎?不要
從自學(xué)C++到現(xiàn)在差不多3年時(shí)間,期間多次想放棄,心中常有的一個(gè)念頭就是:把這些時(shí)間用在學(xué)C#,C#可以學(xué)得更好,工資可以拿得更多,每次看到發(fā)到手中的這點(diǎn)工資,就沒(méi)啥干勁了,但我也一直明白若要把程序當(dāng)做一個(gè)長(zhǎng)久的職業(yè),我是要必會(huì)C/C++的,期間偶爾有幾個(gè)月沒(méi)有學(xué)C++,但最后還是放不下,又想起她。最后拖到兩年多才做自己一直想做的C++,感覺(jué)是個(gè)很漫長(zhǎng)的過(guò)程,內(nèi)心的針扎還是挺多的。這兩年來(lái)業(yè)余時(shí)間拿來(lái)學(xué)習(xí)C++的時(shí)間平均在半個(gè)小時(shí)左右,跟10000個(gè)小時(shí)比起來(lái)還是很少的,當(dāng)然10000個(gè)小時(shí)是要成為真正的大牛的,而我是剛上賊船,看了這么多書(shū)理論還是有些,還需大量實(shí)戰(zhàn)。
C++很難嗎?NO
C++被成為世界上最難的編程語(yǔ)言,其實(shí)并沒(méi)有傳說(shuō)中的那么難,但有一點(diǎn)是可以肯定的C++程序員在沒(méi)有成為小牛之前一直都在針扎,對(duì),就是針扎,過(guò)得很苦逼,我在上個(gè)部門(mén)做C#的時(shí)候沒(méi)加過(guò)一天班,做C++后,以前的同事說(shuō)我瘦了,以前做C#用一個(gè)月的時(shí)間一個(gè)人重寫(xiě)了公司的工作流,做C++后,花了兩個(gè)多月做個(gè)歷史管理器,還經(jīng)常加班。雖然現(xiàn)在自信多了,但還要繼續(xù)針扎下去。等成為小牛后,我相信就不分編程語(yǔ)言了,但如果你不是做C/C++,卻想做C/C++,就別聽(tīng)語(yǔ)言都是浮云這種廢話。在你成為小牛之前你才是浮云,你得苦逼,而且這是轉(zhuǎn)行,這也是我不太建議轉(zhuǎn)C/C++的一個(gè)原因,你之前學(xué)到的很多東西都是白學(xué)的,你要從0.1開(kāi)始,又開(kāi)始做菜鳥(niǎo),大家都知道菜鳥(niǎo)的日子不是那么好過(guò),等你成為小牛之后編程語(yǔ)言才是浮云。為什么大家都說(shuō)他難呢?我估計(jì)就是被哪些沒(méi)學(xué)好的人宣傳的,沒(méi)學(xué)好之前過(guò)得苦逼,那當(dāng)然發(fā)自內(nèi)心的認(rèn)為難,其他的朋友們聽(tīng)他們一說(shuō)估計(jì)也覺(jué)得難。再加上一些大牛也說(shuō)C++難,人家說(shuō)難不是因?yàn)樽约簺](méi)學(xué)好而說(shuō)難,人家是因?yàn)橹赖么蠖啵l(fā)現(xiàn)C++太靈活,坑太多,新手很容易掉坑里。要我說(shuō),任何編程語(yǔ)言,基礎(chǔ)語(yǔ)法也就那點(diǎn)東西,等你明白了這些基礎(chǔ)的東西是怎么實(shí)現(xiàn),為什么要這樣實(shí)現(xiàn),編譯后是個(gè)什么樣子,你也就發(fā)現(xiàn)C++也就那樣,不管牛不牛,也都是在用C++干活,只不過(guò)是有的人在用C++做增刪改查,有的人在做大家都在用的產(chǎn)品。
怎么學(xué)習(xí)C++?標(biāo)準(zhǔn)答案是:多思多寫(xiě)多看
作為新菜鳥(niǎo)的我,是不應(yīng)該回答這個(gè)問(wèn)題的,但這個(gè)問(wèn)題的正確答案的確是多思多寫(xiě)多看。現(xiàn)在來(lái)說(shuō)說(shuō)我的失敗經(jīng)歷,作為智商不太低的我,學(xué)了兩年多才做C++,這顯然是失?。ü绦騿T就應(yīng)該自信,千萬(wàn)別懷疑自己的智商,一點(diǎn)都不能有)。的確我是走了彎路,所以我像很多有失敗經(jīng)歷的前輩一樣,來(lái)分享自己的失敗經(jīng)歷,以免后輩們重蹈前輩們的覆轍。
我學(xué)了好久的C++,都不會(huì)寫(xiě)一個(gè)C++的類,其實(shí)開(kāi)始的時(shí)候一直都是在寫(xiě)C,一直在用C寫(xiě)算法,嚴(yán)重受了算法重要的影響,其實(shí)開(kāi)始的時(shí)候我都不是在學(xué)C++,買(mǎi)的第一本技術(shù)書(shū),不是關(guān)于C++的,而是關(guān)于算法的。學(xué)C++的時(shí)候也沒(méi)有買(mǎi)一本比較好的系統(tǒng)介紹C++的書(shū)籍。直接第一本C++書(shū)籍就是Effective C++,看這本書(shū)還是要一定基礎(chǔ)的。看這本書(shū)的時(shí)候我已經(jīng)做了兩年多的C#,在學(xué)校里有一點(diǎn)C的基礎(chǔ),之后也看過(guò)《高質(zhì)量C++編程指南》,還是有一定的程序基礎(chǔ),如果你有一定的程序基礎(chǔ),想轉(zhuǎn)C++,還是建議先看本系統(tǒng)介紹C++的書(shū)籍,如《C++ Primer》,這本書(shū)的作者也是《深度探索C++對(duì)象模型》的作者,還有C++他爹寫(xiě)的那本啥也值得一讀,大家都是這么說(shuō),應(yīng)該不會(huì)錯(cuò),兩本選一本,有一定基礎(chǔ)之后再看Effective C++,感覺(jué)不錯(cuò)之后再看《深度探索C++對(duì)象模型》,這本差不多之后再看《深入理解計(jì)算機(jī)系統(tǒng)》,這本不是講C++的,講的是底層的東西,你學(xué)C++不就是想學(xué)底層的東西嗎,C++語(yǔ)法就那點(diǎn)東西,成為牛人之前還有一堆的書(shū)等著你去看,你還要寫(xiě)一堆的代碼。
我現(xiàn)在在學(xué)習(xí)Windows的一些東西,做Windows C++方向嗎!業(yè)余時(shí)間看看《編譯原理》,比較難懂,看懂之后,我相信很多東西都會(huì)明白得更透徹。明年估計(jì)是我成為小牛的重要階段,阿漢加油。
為了不讓我的博客因偏差太大,而讓想做C++的朋友走彎路,在這里付上耗子叔的《如何學(xué)好C++語(yǔ)言》 http://coolshell.cn/articles/4119.html
聯(lián)系客服