我要学编程,看什么书好?--^_^,这里推荐一些个人觉得很不错的书(五)小集篇
雖然一直想寫點什么,但是感覺自己怎么寫肯定都不如書上寫的好,所以到最后感覺還是推薦點書比較好。
下面列舉一些自己感覺還不錯的書,可能會和以前的有重復,就當做總集篇吧。一般好書都有些難度,而且看很多書還需要一些鋪墊的知識,我只從我自己知道的提一些,不足之處還請見諒
編程基礎
書名:《C++編程思想》
推薦理由:雖然很多人推薦《C++ Primer》,而且確實我也覺得那本書寫的挺好的,不過如果真覺得哪本書把C++講的更讓我舒服一些,我還是選擇它。里面對于虛函數與虛函數表、多態、晚捆綁、模板、多重繼承等問題都做了很詳細的介紹,甚至還對類方法調用的機器碼都做了詳細介紹,從原理上弄明白了C++到底算什么。
書名:《Effective C++》
推薦理由:在看這本書之前建議還是先看看《C++編程思想》這本書,在沒有太多基礎的情況直接看《Effective C++》是相當痛苦的一件事情,這本書不針對整個C++體系進行介紹,而是專門針對C++在具體應用過程中非常重要的一些內容,如構造、析構、虛函數、多態、異常、模板、常量等一些我們容易忽略的細節問題中給出了詳細的討論。看這本書不僅是讓我們寫出給優美的代碼,目的更是讓我們加深對C++的理解。不知道是不是我個人的原因,感覺看侯大翻譯的很詭異,感覺看的時候語句變得很晦澀難懂。
書名:《More Effective C++》
推薦理由:這本書算《Effective C++》的一個補充版本,在一些更加深入的細節部分給予的討論,如果能夠把《Effective C++》給看個明白,這本書其實也就沒那么難了。不建議上手就開始讀它,難度有些高。
書名:《Java編程思想》
推薦理由:如果懂C++了,學習Java真心是一件很容易的事情,因為它沒有了C++中令人討厭的指針,不用像C++一樣需要自己做堆管理,多了接口、包這樣非常適合設計的內容。甚至還有大量的類似Spring、Hibernate這樣的開源框架。我們沒有理由不喜歡Java編程,它讓我們將更多的精力集中在編程,而不是語法的細節上。那這本書的好處就是,給我們詳細講述了Java的語法和基本原理。如果懂C++,這本書可以說就是一本工具書,如果不懂C++,那這本書也很適合作為一本教材。所以沒理由不推薦。
書名:《Effective Java》
推薦理由:和推薦《Effective C++》的理由一樣,Java雖然讓我們少了很多對語法細節的關注,但是如何將Java的語言特性發揮出來卻不是一件很容易的事情。這本書就在這些細節問題上給出了非常詳細的討論,如類與接口、泛型、注解、方法等很細的內容。
書名:《STL 源碼剖析》
推薦理由:學習了C++,肯定覺得立面的STL很強大,但是肯定會有很多人說STL一定要根據具體情況而使用,而不能胡亂用,那心里一定忐忑如何才能將這些容器給用正確使用。做法很簡單,只要知道它們底層的機制就可以了,所以這本書相當值得推薦,它告訴你為什么vector、list、map、heap、set、queue、dqueue、stack等等各種數據結構底層的實現,它還告訴你什么是迭代器,我們是如何使用模板這一高級特性的。這本書還為以后學習數據結構打下基礎,而且學習Java的時候,Java的容器就很容易上手了。這本書難度有些高,最好多用STL解決幾個問題后再讀。如果對C++懂的比較多,讀起來效果更佳。
書名:《程序員的自我修養——鏈接、裝載與庫》
推薦理由:講解編譯和鏈接過程的書非常的少,講編譯的書我只知道《編譯原理》,講鏈接的書我只知道《鏈接器源加載器》和這本了。這本書難度會比較大,最好懂的Linux內核中關于進程地址空間、頁表與內存尋址、進程描述符和中斷相關的知識。這樣對這本書中一些知識點才比較好理解。另外,最好還需要懂的編譯GCC工具鏈,這樣才能對書上的內容進行驗證。最后,最好還需要懂一些X86架構體系的知識,或者懂一些匯編,這樣里面的一些內容才能看的明白。所以要看這本書,需要的前期準備其實是比較久的,但是如果看懂了這本書,以后再看C++、Java、Ruby這種語言,又完全是另外一番味道了,尤其在看Java虛擬機這樣的書的時候,就非常容易理解那些書上說的是什么。如果說之前的幾本書是外功的話,這本書就是一本內功書籍,以后很多外功都可以靠它來修煉。
書名:《深入理解Java虛擬機》
推薦理由:學了Java,如果還沒有學Java虛擬機,那Java真心覺得白學了。弄明白了Java虛擬機的內容,那Java真心就沒那么難了。這本書也有一些難度,如果看懂了《鏈接、裝載與庫》這本書,那這本書就沒什么難度可言,如果沒有看懂,那這本書看起來就相對吃力了,其實它里面講的內容還是編譯、鏈接、加載過程,只是它講述的是Java是如何做到的,當然這本書還介紹了Java下的堆是如何進行管理的。標記-清理和引用計數是堆管理的兩大機制,對以后的學習很有幫助。
?
書名:《Unix環境高級編程》
推薦理由:從頂層學習Linux系統絕佳的一本書,Linux系統非常經典的就是它定義了很少的一些經典的系統調用,這本書主要就是通過介紹這些系統調用,告訴我們一個Unix系統應該有什么樣的特性,這本書不僅僅是可以當做一本工具書使用,更可以當做一本教科書使用,配合上《Linux系統管理手冊》兩本書一起看,收獲很多。
書名:《Unix網絡編程卷1:套接字編程》《Unix網絡編程卷2:進程間通信》
推薦理由:我原來是學網絡工程出生,本科學習的都是《TCP/IP協議族》《局域網與城域網》《接入網技術》《計算機通信網絡》《交互網絡》這些理論書籍,但是這些書學完以后總感覺自己光有理論知識,但是卻沒辦法將其轉換成實際的代碼,而讓我真正可以開始進行網絡編程的入門書籍就是《Unix網絡編程卷1》這本書,書中十分詳細的介紹了各種套接字,如TCP、UDP、STCP的調用接口,還很詳細的比較了各種實現方案:基于信號、阻塞、多路復用、基于線程池情況下如何進行網絡編程,在理論的基礎上更多了很多系統的知識,可以說是將理論與實際相結合。《Unix網絡編程卷2》呢,它十分細致的整理了各種進程與線程間通信和同步的方式,如果希望自己有并發編程的基礎,那這本書也可以說是入門的必選教程了。
?
?
設計基礎
書名:《UML精粹 標準對象建模語言簡明指南》
推薦理由:這本書說起來很雞肋,它僅僅告訴我們UML該怎么畫,偏偏這本書又貴的要死(另外一本我覺得貴的要死,內容又沒想象的好的書就是《編寫可讀代碼的藝術》)。當時還是需要推薦這本書,學了那么多C++和Java,或多或少都聽過對象建模,那必然需要翻看一些建模類的書籍,但是那些書籍都默認大家懂得UML,這樣一來就出現一個落差——看不懂圖。這本書的目的就是告訴我們,如何去看別人畫的圖,如何將代碼與圖對應起來。可以說它就是我們邁向系統架構的第一步基石(雖然它很雞肋)。
書名:《設計模式:可復用面向對象軟件基礎》
推薦理由:學習面向對象編程中的基礎,雖然這本書已經很久了,里面的模式已經被用爛了,但是我們還是需要學習它,學完它,我們就懂了什么是工廠,以后學習Spring這樣的框架就很容易了;學完它,我們就懂了什么是代理,以后學習AOP就顯得自然;學完它,我們就懂了什么是觀察者,以后什么MVC架構都不會吃力;學完它。。。書中給出了23中設計模式,雖然并不是每種都一樣的實用,但是它給了我們如何更加有效、合理的去利用對象、多態這樣的特性,如何更好的去做一個內聚的、高可復用的、松耦合的架構的基礎,記住:它給的僅僅是基礎,真正難的還在后頭。
書名:《敏捷軟件開發:原則、模式與實踐》
推薦理由:我才學完《設計模式》的時候,我覺得它很強大,就迫不及待的去應用它,結果在用的時候出現了各種各樣的問題。我一直弄不明白如何將這些設計模式和UML結合起來,我不知道如何將設計模式融入到自己平時的代碼中。看了這本書以后,我感覺我找到了一些答案,這本書的內容非常豐富。當然,它的要求我感覺也比較高,不懂的人覺得它從頭到尾都在貼代碼,但是其實不是這樣,這本書中隱含著整個代碼開發的過程。它告訴我們我們平時設計類的時候的原則有哪些、我們設計包的原則有哪些、我們應該抱著什么樣的心態去編碼、我們如何與他人合作編寫代碼、我們該什么時候開始利用設計模式等等。雖然好處非常多,但是我感覺沒有切身體會過自己設計、編碼、與人合作的痛苦,看這本書的共鳴肯定就會小很多,真的是痛越多,感觸就越多。
書名:《重構:改善既有代碼的設計》
推薦理由:最開始寫代碼的時候,我那個一個揪心呀,總覺得代碼寫起來是那么的困難。一會擔心效率問題、一會擔心命名問題、一會擔心代碼排版。。。代碼刪刪改改、涂涂寫寫,老半天憋了十幾行代碼,結果用的時候還是要出問題。其實,這是一個方法的問題——寫代碼其實是有一定步驟的,我們需要做到的事情就是——一次只做好一件事情。寫代碼可以分成添加功能、重構、測試三個過程,看完這本書,我們就懂的了我們應該在重構過程考慮什么問題,這本書不僅僅可以作為一本工具書,也告訴了我們怎么樣去編寫代碼。
書名:《Junit實戰》
推薦理由:本來是應該推薦《軟件測試》這本書,不過那本書我買了還沒看,我學習如何利用測試驅動開發是從《JUnit實戰》這本書開始的,所以測試相關的書也只能從這本書開始推薦了,感覺看這本書不是為了學習JUnit而看它,更多的是我們要弄明白為什么我們要測試,我們應該什么時候去測試,我們應該如何進行測試,我們應該測試什么,我們應該如何去保證我們的測試是完整的,我們如何在條件不完全的情況下構建測試。而不僅僅是學完以后,知道了一個JUnit怎么用。測試其實是一門非常難的事情,最少我看來它并不是想做就做好的,不是點擊幾下鼠標就叫做測試。我所知道的寫代碼就是:測試、重構、實現。每個環節都不是那么容易做到的。
書名:《程序員修煉之道——從小工到專家》
推薦理由:很有意思的一本書,講述了我們平時應該以什么樣的心態去面對代碼,面對項目,面對團隊合作,面對測試。。。這本書感覺沒有什么門檻之說,但是更感覺它是寫給參與過的項目開發的程序員看的,感覺越是資深的程序員,對這本書的認可度就越高。
書名:《編程珠璣》
推薦理由:也是相當有趣的一本書,不過它不是講述如何去面對團隊合作,更多的將盡力放在我們應該如何去面對我們的代碼,但是它告訴我們面對代碼的心態又和《重構》這種書介紹的不一樣。重構更強調的是代碼的命名、清晰與減少代碼重復度等內容,而這本書更多的是告訴我們應該如何從算法、性能、復雜度等方面去重新考慮代碼的編寫。但是這本書還是相當值得讀的,讀了它以后,以后學習算法的時候的心態就會變得更加的坦然了。
書名:《Linux/Unix設計思想》
推薦理由:這本書也相當的有趣,沒太多的難度,完全可以當做一本科普書來讀,但是它講述的思想死意義深遠的。其實到最后,我感覺它的思想就是我們現在項目工程的思想,只是兩者用在了兩個不同的領域,給出了不同的指導,最后的綱領其實還是一樣的。
很可惜的是我沒有做過太多的架構方面的知識,結果這一塊內容的書一直都是看的迷迷糊糊,下面會依次介紹一些,我只知道他們是好書,但是沒辦法做太多介紹。
書名:《大象:Think in UML》
推薦理由:這本書個人是感覺寫的非常好,它先介紹了UML的各個元素以及RUP的過程,最后再將這些內容整合起來,用一個具體的項目實例告訴我們如何利用UML和RUP進行架構設計。
書名:《UML和模式應用》
推薦理由:這本書也是好書,其實內容也和《Think in UML》有些像,不過這種書多看個兩本,對UML的理解就更加深刻了。
書名:《領域驅動設計:軟件核心復雜性應對之道》
推薦理由:這本書關注與領域模型的構建,但是感覺講的好抽象,看不懂,但是可以肯定,它絕對是一本好書
書名:《編寫有效用例》
推薦理由:這本書關注于用例模型的構建,但是沒有機會接手項目的這個過程,所以看起來還是很抽象,但是我還是可以肯定它絕對是一本好書
書名:《分析模式:可復用的對象模型》
推薦理由:針對領域模型的分析過程,這本書也相當的抽象,里面的圖都感覺非常難看懂,但是可以肯定它絕對是一本好書
書名:《企業應用架構模式》
推薦理由:這本書雖然對表示層、領域層和持久化中間層都做了介紹,不過感覺花費的精力更多的是如何對持久化中間層的設計,我所知道的就是,如果要深入學習Hibernate的機制,那這本書絕對可以提供非常好的指導作用,所以這本書也是一本好書。
書名:《面向模式的軟件架構卷1~5》
推薦理由:能夠出版到卷5的書相信不需要太多理由了,不過這幾本書感覺難度還是有些大,反正我看的時候也是看的云里霧里的,沒有太多的心得。
Linux與操作系統
接下來介紹一些系統原理方面的書:
書名:《Linux內核設計與實現》
推薦理由:學習Linux內核很好的一本入門書籍,Linux內核可以說相當的復雜,從任何方面入手都相當的有難度,有的人說先看0.11版的內核比較好。我不完全贊同,在不知道什么是中斷、什么是進程、文件抽象、內存管理、內存尋址、文件系統、塊I/O與頁緩存、虛擬地址空間、模塊。。。。等等概念前,看任何Linux內核的書都是很困難的。推薦這本書的理由比較簡單,它在介紹內核,但是它又不介紹內核的具體源碼;它告訴我們不同子系統下有些什么,但是又不介紹這些子系統的具體實現。所以我覺得它是一本非常好的入門書籍。看完這本書不敢說自己懂內核了,但是我們最少知道了內核有什么東西,后面會慢慢介紹一些講的更加具體的書籍。
書名:《Linux內核設計的藝術》
推薦理由:相信如果只是看了《Linux內核設計與實現》,肯定會覺得內核東西太多,完全搞不明白為什么這些東西怎么組合在一起就可以工作了,那這時候最推薦的一本書就是《Linux內核設計的藝術》,雖然這本書只是講0.11版的內核,但是它講的方式很有意思,它是從Linux內核從上電的時候開始的整個系統初始化過程,我們將在書中看到內核啟動過程中是如何從實模式轉換到保護模式、內核級和用戶級是如何調整的、中斷向量表是如何重構的、系統內核是如何加載的、中斷是如何執行的、內存是如何初始化的、頁表是如何構建起來的、文件是如何訪問的、進程間通信又是如何實現的。。。不要覺得這本書介紹的內核版本太低,其實現在的內核也是這樣做的,只是系統更加復雜而已。還有一本和這本書類似的書叫做《獨辟蹊徑:從內核源碼導入》,只是那本書我沒有看過,但是也是一本好書。不過看這本書的時候需要一些鋪墊,最少對內核中應該有哪些東西有個大致的概念,還需要對X86的架構有一些了解。
書名:《Linux內核完全剖析——基于0.12內核》
推薦理由:這本書我感覺后面2/3的內容可以不看,主要是前面一部分的內容最好看看,因為這部分恰好和《Linux內核設計的藝術》這本書相補充,看完那些內容以后再看《Linux內核設計的藝術》就變得相對容易一些了。
書名:《深入Linux內核架構》
推薦理由:它個頭很大,當然塊頭大不能成為推薦它的理由,但這本絕對要比《深入理解Linux內核》這本書要好,《深入理解Linux內核》和《深入理解Linux網絡技術內幕》這兩本書完全是被國內的翻譯者給毀掉的兩本書,雖然這兩本書都很好,但是翻譯的作者太不給力了。這本書比《深入理解Linux內核》更好的一點就是它講每個模塊的內容都講的比較詳細(只是比較詳細,因為在一些具體的模塊部分可以找到更加詳細的書)。但是就是這樣都洋洋灑灑上千頁。算是我的書柜中最厚的兩本書之一了。可以把它當做《Linux內核設計與實現》這本書的增強版就可以了。這本書不推薦入門就看,否則會被他各種細節給繞暈掉的。
書名:《深入理解Linux虛擬內存管理》
推薦理由:這本書非常的奇葩,附錄居然占據了將近2/3的內容,而且這本書也是被出版社毀掉的一本書,后面代碼縮進全部沒有了,看起來是蛋疼無比。但是我能找到的講解Linux虛擬內存的書只有它,而且它講的還是2.4的內核。但是不可否認這本書在虛擬內存部分做了很深入的解釋,在沒有出現更好的介紹Linux虛擬內存管理的書籍之前,我們只能看它了。善哉。。。
書名:《深入理解Linux網絡技術內幕》
推薦理由:雖然這本書被翻譯者給毀了,但是不可否認這本書講的的確非常的好,它認真剖析了幀傳輸、橋接、ip、icmp、tcp、udp、鄰居子系統、路由子系統等等網絡協議棧中的具體實現問題,在介紹Linux網絡協議棧上,是我看過的最好的一本書了。不過這本書的入門門檻也很高,首先需要對Linux內核有比較多的認識,包括虛擬文件系統、中斷、設備驅動、內存管理等相關的知識,此外還需要懂的網絡協議棧的知識,包括了TCP、UDP、IP、ICMP、ARP等協議的內容。所以看它需要的準備工作也非常的多。
書名:《Linux內核源碼剖析——TCP/IP實現》
推薦理由:雖然《深入理解Linux網絡技術內幕》這本書講的很好,但是網絡協議棧還是得真槍真刀的看看源碼才懂的具體的機制,這本書的好處就是它很詳細的介紹了網絡協議棧中代碼,并且還對《深入理解Linux網絡技術內幕》很多沒有提到的細節提供了補充。所以這本書完全可以和《深入理解Linux網絡技術內幕》一起搭配著具體源碼一起看,相信效果會非常的好。
書名:《存儲技術原理分析:基于Linux 2.6內核源碼》
推薦理由:這本書也是一本神書,因為它對內核存儲部分的內容可以說做了相當詳細的介紹,這在其它的一些書上絕無僅有的,從中你可以深入到虛擬文件系統、塊I/O子系統、PCI子系統、SCSI子系統、Multi-Disk、Divice-Mapper模塊的最深入部分去一探究竟。這是我最喜歡的幾本書之一,雖然其中很大一部分內容我因為不感興趣而沒看,但是我感興趣的那些內容就已經讓我相當的滿足了。當然這本書要求也很高,也是需要對內核中的設備驅動、文件系統、虛擬文件系統、內存管理等內容有比較多了解。其中還有一些因為我們都沒見過那些設備,導致看不明白的內容。
?
書名:《深入理解計算機系統》、《現代操作系統》
推薦理由:這兩本書都很喜歡,不過看的更多的還是后者,這種書怎么說呢,理論多于實際,但是我們可以利用實際來驗證理論。這種書就在一個很高的角度告訴我們計算機系統(操作系統)為什么應該長這樣,還可以有其他的實現方式么,為什么我們不采取其他的實現方式,我們現在使用的方式存在問題么等等問題。
算法
書名:《算法:C語言實現》
推薦理由:雖然不玩ACM,但是感覺還是有必要學習一些算法,最少懂的一些基礎是數據結構,算法類的書看的很少(因為太難了),最喜歡的還是這兩本(作者說要寫3本的,結果多少年了第三本還沒出來)。不過最近有一點心得,看這本書最重要的就是理解它里面想要表達給自己的思想,而不是對著書抄一遍,然后運行,發現成功了,再把代碼背住就算自己學會了。所以說會算法的人都是神呀,這東西完全就是只可意會不可言傳。反正我就一個感覺,什么時候我們看算法能夠得出“看山是山,看山不是山”的結論的時候,就算有些明白到底要學什么了。
書名:《算法導論》
推薦理由:這本書也是神書(和TAOCP那種超越神的書沒法比了),我覺得每隔一段時間看它總有一種新的體悟,不過這本書也不是太好懂。個人的一些心得就是,先到網易公開課找到MIT算法導論的公開課(老師就是這本書的作者),看它一遍,另外,自己動手寫代碼,這里的寫代碼不是將書上的偽代碼實現了就叫寫了,而是去做一些算法的題目,比如《編程之美》上面的題,或者任何一些競賽入門的題,再看看類似《背包九講》《男人八題》《微軟面試100題》這些的文章。我也說不清那種感覺,反正每隔一段時間,對這些東西就會有一種完全不同的體悟。可能算法的魅力就在于此吧。
?
接下來的書都是沒怎么看,或者看不懂的書了
書名:《計算機程序設計的藝術》
推薦理由:神書,不解釋,看不懂
書名:《信息檢索導論》
書名:《數據挖掘導論》
?
書名:《模式分類》
?
新入手的一些好書
下面介紹的書籍都是剛剛入手的好書,雖然沒有讀過,
?
書名:《領域特定語言》
書名:《代碼大全2》
書名:《持續集成:軟件質量改進和風險降低之道》
書名:《離散數學及其應用》
書名:《組合數學》
書名:《具體數學》
書名:《圖論》
書名:《事務處理》
書名:《HTTP權威指南》
書名:《Git權威指南》
書名:《計算機程序的構造與解釋》
書名:《大數據挑戰與NoSQL數據庫技術》
書名:《Java虛擬機并發編程》
書名:《MySQL技術內幕:InnoDB存儲引擎》
書名:《軟件調試》
書名:《DEBUG HACKS》
總結
以上是生活随笔為你收集整理的我要学编程,看什么书好?--^_^,这里推荐一些个人觉得很不错的书(五)小集篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 会声会影html5项目是什么意思,会声会
- 下一篇: 智能控制和计算机控制的区别,BA楼宇控制