有什么書是程序員奉為寶貝的嗎?
1 前言
對(duì)于計(jì)算機(jī)相關(guān)專業(yè)的學(xué)生來說,學(xué)校教會(huì)我們編程語(yǔ)言,學(xué)習(xí)諸如 Java,Python 或 C ++ 之類的編程語(yǔ)言很容易,但是學(xué)習(xí)編寫好代碼不是。編程并不等于寫代碼,編程是一個(gè)更廣泛的過程,它還涉及提出開發(fā)程序的想法以及對(duì)其進(jìn)行測(cè)試等等的方法,所以提升編程思想和能力也是一個(gè)合格程序員不可或缺的能力。對(duì)于從事技術(shù)崗位工作的我們來說,必須得自學(xué)編程技術(shù),提高編程的能力。編寫良好的代碼比只完成簡(jiǎn)單重復(fù)的需求更重要,這也是普通程序員與好程序員之間的重要區(qū)別因素。那么除了工作中的實(shí)踐經(jīng)驗(yàn),關(guān)注前輩的思想和閱讀相關(guān)的書籍也是不可或缺的。雖然說現(xiàn)在科技日益更新,技術(shù)網(wǎng)站和個(gè)人博客也很多,但關(guān)于技術(shù)的經(jīng)典的書籍和思想?yún)s能反復(fù)一直流傳下來。因?yàn)闀粌H是作者和編輯是對(duì)某個(gè)領(lǐng)域更加全面和系統(tǒng)的梳理,而且閱讀書籍能給自己帶來許多的不一樣的體會(huì)。本文給大家分享幾本高價(jià)值書單,并不一定全面,歡迎讀者補(bǔ)充,希望能對(duì)你有幫助。2 關(guān)于編碼與重構(gòu)
2.1 代碼整潔之道
英文名《Clean code》,該書出自 Robert C Martin 之手,又被稱為 Bob 大叔,是一位美國(guó)著名的軟件工程師和作家,他已經(jīng)寫了有關(guān)敏捷軟件開發(fā)的書籍。書中提到眾多有名的編程原則:比如 SOLID 原則、 Law of Demeter(LoD,又被稱為最少知識(shí)原則)。推薦理由:每個(gè)程序員都必須擁有本書并閱讀它。這是一本非常著名的書,它將完全改變您的編程風(fēng)格,書中介紹的規(guī)則均來自作者多年的實(shí)踐經(jīng)驗(yàn),涵蓋從命名、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο蟮脑O(shè)計(jì)原理到重構(gòu)的多個(gè)編程方面,雖為一“家”之言,然誠(chéng)有可資借鑒的價(jià)值。或許,真正整潔的代碼真能讓同行讀起來像詩(shī)一樣。任何傻瓜都可以編寫計(jì)算機(jī)可以理解的代碼。優(yōu)秀的程序員編寫人類可以理解的代碼。— 馬丁·福勒如果只能讀一本書,我就推薦這本。最后,基于本書,眾多開發(fā)者還推出了各種語(yǔ)言的整潔之道:? Javascript 整潔之道? PHP 整潔之道:https://github.com/jupeter/clean-code-php? ABAP 整潔之道:https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md? Java 整潔之道:https://github.com/leonardolemie/clean-code-java? .NET 整潔之道:https://github.com/thangchung/clean-code-dotnet還有各大科技公司的代碼風(fēng)格指南:? Google 風(fēng)格指南? Uber Go 語(yǔ)言風(fēng)格指南:https://github.com/uber-go/guide/blob/master/style.mdBob 大叔的《架構(gòu)整潔之道》也值得推薦,這本書是在架構(gòu)領(lǐng)域的登峰之作,圍繞“架構(gòu)整潔”這一重要導(dǎo)向,系統(tǒng)地剖析其緣起、內(nèi)涵及應(yīng)用場(chǎng)景,涵蓋軟件研發(fā)完整過程及所有核心架構(gòu)模式。還有《程序員的職業(yè)素養(yǎng)》,作者以自己以及身邊的同事走過的彎路、犯過的錯(cuò)誤為例,意在為后來人引路,助其職業(yè)生涯邁上更高臺(tái)階。2.2 重構(gòu)(第2版)
英文名: 《Refactoring: Improving the Design of Existing Code,2nd Edition》,作者 Joshua Kerievsky。本書是理論和實(shí)踐最佳組合的罕見書籍之一。重構(gòu)是一個(gè)使您的工作代碼更加美麗的過程,這本書可以利用已經(jīng)嘗試和測(cè)試的軟件開發(fā)世界的模式來為您提供幫助。推薦理由:重構(gòu)一詞經(jīng)常在各種大會(huì)上被提及,那就是這本書帶來的影響。重構(gòu)也就是重寫軟件的過程,而無(wú)需更改其功能,以提高其可讀性,可檢驗(yàn)性或可維護(hù)性。重構(gòu)是使工作代碼美觀的過程,重構(gòu)有助于改進(jìn)工作代碼的設(shè)計(jì)。這也是優(yōu)秀程序員的必備技巧之一,通常優(yōu)秀的程序員也擅長(zhǎng)重構(gòu)。本書將教你重構(gòu)代碼的藝術(shù)和科學(xué)。無(wú)論您是 Java 程序員、C++ 開發(fā)人員還是 Python 開發(fā)人員,每個(gè)程序員都可以從本書中受益。與《重構(gòu)》經(jīng)常被提及的書就是大名鼎鼎的《代碼大全》,書中解釋的也是久經(jīng)考驗(yàn)的技術(shù)和策略,能有效幫助程序員和軟件開發(fā)人員。筆者也曾在大學(xué)的時(shí)候把這本書圖書館借出來,發(fā)現(xiàn)這本書太厚,啃不動(dòng),到期就立馬歸還了。2.3 代碼之美
英文名:《Beautiful Code: Leading Programmers Explain How They Think》,作者:Grey Wilson。推薦理由:大牛前輩的博客合集,同時(shí)也是提高編碼技能的好書之一,因?yàn)樗鼮槟峁┝艘粋€(gè)機(jī)會(huì),讓您了解專業(yè)程序員如何處理問題、編寫的代碼以及他們?nèi)绾谓鉀Q問題,并且仍然能夠保持他們的代碼美觀。這本書是一系列案例研究的集合,揭示了 Emacs 到 Facebook 等大型網(wǎng)站架構(gòu)秘密,講述了那些專家程序員,包括布萊恩·克尼原,喬恩·本特利(Jon Bentley)(編程珠璣的作者),蒂姆·布雷(Tim Bray),卡爾·福格爾(Karl Fogel),邁克爾·菲瑟斯(Michael Feathers)(有效地使用舊版代碼的作者),以及許多更多偉大的作者和程序員。關(guān)于二分查找,在書中數(shù)次被不同作者提及,了解不同作者的觀點(diǎn)。無(wú)論您使用哪種編碼語(yǔ)言,例如 Java,C#,Python 或 Ruby,都會(huì)在本書中找到有趣的東西。代碼之美調(diào)查了一項(xiàng)努力的人類發(fā)明和創(chuàng)造力的范圍:計(jì)算機(jī)系統(tǒng)的開發(fā)。每章中的美觀來自發(fā)現(xiàn)獨(dú)特的解決方案,這是作者的力量超越界限,識(shí)別他人所忽略的需求,并找到令人驚訝的解決方案,以解決令人困擾的問題。3 關(guān)于職業(yè)成長(zhǎng)
3.1 程序員修煉之道(第2版)
英文名《Pragmatic programmer》,作者是 Andrew Hunt & David Thomas。中文版的譯者是大名鼎鼎的云風(fēng),副標(biāo)題是:通向務(wù)實(shí)的最高境界。推薦理由:本書是時(shí)隔 20 年的新版,覆蓋哲學(xué)、方法、工具、設(shè)計(jì)、解耦、并發(fā)、重構(gòu)、需求、團(tuán)隊(duì)等務(wù)實(shí)話題的最佳實(shí)踐及重大陷阱,以及易于改造、復(fù)用的架構(gòu)技術(shù)。剛出來的時(shí)候博文出版社舉辦了一個(gè)推廣活動(dòng),在云風(fēng)和皓子叔聯(lián)袂推薦下,毫不猶豫的入手了本書。程序員往往最難得就是務(wù)實(shí)主義,總想追求新技術(shù),炒新概念。工作后才逐漸明白,編程的本質(zhì),均不依賴于特定語(yǔ)言、框架和方法,技術(shù)改變世界在于能夠有效解決用戶的真實(shí)需求。本書本質(zhì)上是程序員的自助指南。它探索了良好的軟件開發(fā)實(shí)踐,并為您提供了出色的建議、提示和技巧,以更有效地編程。正是對(duì)經(jīng)典和現(xiàn)代軼事、引人入勝的類比和發(fā)人深省的例子的創(chuàng)造性使用,使每個(gè)部分的學(xué)習(xí)都變得有趣而有趣。如果說大學(xué)期間讀的都是類似于 C 語(yǔ)言圣經(jīng)和 Head First 系統(tǒng)書籍的話,工作后的人才會(huì)真正懂得為什么這本書籍不厚,讀起來拍案叫好,這大概就是大道至簡(jiǎn)。作者另一著作:《程序員修煉之道: 從小工到專家》也是值得推薦的3.2 卓有成效的程序員
英文名:《The Productive Programmer》,作者:Neal Ford。推薦理由:本書就是講述如何在開發(fā)軟件的過程中變得更加高效。同時(shí),《卓有成效的程序員》的講述將會(huì)跨語(yǔ)言和操作系統(tǒng):很多技巧的講述都會(huì)伴隨多種程序語(yǔ)言的例子,并且會(huì)跨越三種主要的操作系統(tǒng),Windows(多個(gè)版本),Mac OS X 以及 *-nix (Unix 或者 Linux)。貫穿全文的思想大概就是盡量讓機(jī)器做機(jī)器該做的事情,讓程序和程序打交道,發(fā)揮程序員在這方面的先天優(yōu)勢(shì)。學(xué)會(huì)善用工具,命令行、學(xué)會(huì)寫腳本,學(xué)會(huì)宏。提供效率,不去做重復(fù)單調(diào)的工作。最終的目的:成為一個(gè)“慵懶”的程序員。3.3 軟技能:代碼之外的生存指南
英文名:《Soft Skills: The software developer's life manual》,作者:John Z. Sonmez推薦理由:研究生期間讀過最受益的一本非技術(shù)書。程序員都知道編碼很重要,這是我們吃飯的硬技能。可是實(shí)際工作上才發(fā)現(xiàn)不止寫代碼,代碼之外的軟技能也很重要:比如面臨著與客戶溝通、與產(chǎn)品打交道的溝通問題;比如應(yīng)該關(guān)注自身發(fā)展,書中也介紹了怎么做職業(yè)突圍;還有更多章節(jié)介紹了作者如何學(xué)習(xí)、如何理財(cái)、健身、自我營(yíng)銷等等。分享書中有趣讓我印象深刻的點(diǎn)是作者去面試,面試官瀏覽過他的博客文章,兩人因此相談甚歡。 最后也想給閱讀的朋友聲明一下:這本書涉獵了很多方面,但是并不是沒一點(diǎn)都是一套可以照抄的完美答案,畢竟作者也是從當(dāng)時(shí)的環(huán)境和自己經(jīng)歷出發(fā)介紹這些內(nèi)容,每個(gè)讀者應(yīng)該都有自己的選擇,綜合而言,這本書挺適合各個(gè)階段的人閱讀的,尤其大學(xué)生和初入職場(chǎng)的朋友。作者也出了《軟技能2:軟件開發(fā)者職業(yè)生涯指南》,如果說軟技能關(guān)注于生活,那軟技能 2 則更加關(guān)注于了軟件開發(fā)職業(yè)。4 關(guān)于黑客與開源
4.1 Unix 編程藝術(shù)
書籍英文名:《The Art of UNIX Programming》,作者:《Eric S. Raymond》從 1982 年開始就是 UNIX 開發(fā)者。推薦理由:本書涉及 Unix 系統(tǒng)領(lǐng)域中的設(shè)計(jì)和開發(fā)哲學(xué)、思想文化體系、原則與經(jīng)驗(yàn),由公認(rèn)的 Unix 編程大師、開源運(yùn)動(dòng)領(lǐng)袖人物之一 Eric S.Raymond 傾力多年寫作而成。程序會(huì)過時(shí),編程語(yǔ)言會(huì)更新,代碼會(huì)跟隨業(yè)務(wù)不斷改動(dòng),但編程思想的生命力會(huì)長(zhǎng)盛不衰,好的編程藝術(shù)也是具有穿透力的,盡管書中的案例已經(jīng)偏老,但貫穿始終的 KISS 原則、思想文化體系、設(shè)計(jì)與開發(fā)哲學(xué)一定能夠給你帶來醍醐灌頂?shù)母杏X。Keep it simple stupid,簡(jiǎn)稱 KISS 原則。在做軟件設(shè)計(jì)的工作中,很多時(shí)候都不要想得過于復(fù)雜,也不要過度設(shè)計(jì)和過早優(yōu)化,用最簡(jiǎn)單且行之有效的方案也就避免了復(fù)雜方案帶來的各種額外成本。這樣既有利與后續(xù)的維護(hù),也有利于進(jìn)一步的擴(kuò)展。另外,本書還可以與“左耳朵耗子”ef="">皓子叔推薦 過的《UNIX傳奇:歷史與回憶》結(jié)合著一起看,了解 UNIX 的誕生記與發(fā)展史,貝爾實(shí)驗(yàn)室的幕后故事!本書不但書寫 Unix 的歷史,而且記錄作者的回憶,一探 Unix 的起源,試圖解釋什么是 Unix,Unix 是如何產(chǎn)生的,以及 Unix 為何如此重要。4.2 大教堂與集市
英文名:《The Cathedral & the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary》, 《Unix編程藝術(shù)》作者 Eric S. Raymond 的另一封神之作,副標(biāo)題是《對(duì) Linux 和開源革命的沉思》。推薦理由:大家都知道程序員熱衷于開源文化,都在說不要重復(fù)造輪子。開源時(shí)代下的軟件開發(fā)可能只需要三個(gè)鍵盤按鈕:CTRL + C + V,開個(gè)玩笑。說到開源文化,那么本書《大教堂與集市》是開源運(yùn)動(dòng)的《圣經(jīng)》,顛覆了傳統(tǒng)的軟件開發(fā)思路,影響了整個(gè)軟件開發(fā)領(lǐng)域。作者把軟件開發(fā)思路類比于古代的大教堂文化和集市文化,講述了集市如何變成大教堂,書中系統(tǒng)解釋了開源軟件是如何生產(chǎn)的,開源開發(fā)的優(yōu)勢(shì)在哪,開源軟件的傳承是如何做到的。4.3 黑客與畫家
英文名:《Hackers and Painters: Big Ideas from the Computer Age》,作者:Paul Graham,本書的譯者是大名鼎鼎的阮一峰大佬。推薦理由:說到黑客文化,就不得不提到硅谷創(chuàng)業(yè)之父Paul Graham 的這本書,本書主要介紹黑客 Hacker,即優(yōu)秀程序員的愛好和動(dòng)機(jī),討論黑客成長(zhǎng)、黑客對(duì)世界的貢獻(xiàn)以及編程語(yǔ)言和黑客工作方法等所有對(duì)計(jì)算機(jī)時(shí)代感興趣的人的一些話題。本書是一本為黑客正名的技術(shù)散文集,看完書后第一次將我從電影中的黑客形象顛覆過來,才了解到并不是入侵系統(tǒng)、制作病毒、各種解密的人就是黑客,Hacker 是專家級(jí)程序員,是一群與畫家有著極大的相似性,他們都是在創(chuàng)造,而不是完成某個(gè)任務(wù),“黑客”象征著第一流的能力,以及求解問題過程中產(chǎn)生的精神愉悅或享受。他們崇尚分享、開放、民主、計(jì)算機(jī)的自由使用和進(jìn)步。而那些惡意入侵計(jì)算機(jī)系統(tǒng)的人更應(yīng)該被稱為 cracker(駭客)。5 關(guān)于算法與設(shè)計(jì)模式
5.1 算法設(shè)計(jì)手冊(cè)
英文名:The Algorithm Design Manual (2nd Ed.),作者:Steven S Skiena推薦理由:關(guān)于算法的重要性大家都知道,大家肯定都知道另外兩本著名的《算法導(dǎo)論》和《算法4》:《算法導(dǎo)論》側(cè)重與算法的數(shù)學(xué)推導(dǎo),適合研究,而《算法4》側(cè)重于算法的代碼實(shí)現(xiàn),適合入門。而這次推薦的《算法設(shè)計(jì)手冊(cè)(第2版)》卻沒有那么有名氣,但也不失為設(shè)計(jì)實(shí)用且高效算法的最全面指導(dǎo)書。該書揭密了算法的設(shè)計(jì)與分析,以簡(jiǎn)單易懂的寫作風(fēng)格,介紹了各種算法技術(shù),著重強(qiáng)調(diào)了算法分析。目前市場(chǎng)上算法書層出不窮,但是經(jīng)典的算法卻一直在那里,不曾走遠(yuǎn)。5.2 Head First 設(shè)計(jì)模式
英文名:《Head first design patterns》,作者:Elisabeth Freeman / / Eric Freeman / Bert Bates / Kathy Sierra / Elisabeth Robson推薦理由:這本書完整地涵蓋了 GoF 版本全部23個(gè)設(shè)計(jì)模式,毫不費(fèi)力地解釋了世界各地熟練的軟件開發(fā)人員和程序員用來構(gòu)建優(yōu)雅、功能齊全、靈活和可重用的軟件的幾種軟件設(shè)計(jì)模式。。圖文并茂,配有大量說明性和啟發(fā)性的示例,它們將使學(xué)習(xí)同時(shí)變得高效和有趣。與其他文本繁重的編程書籍不同,這本書具有引人深思、視覺豐富的格式。Head First 系統(tǒng)書籍充滿了幽默感,選題和編輯都很用心,值得一讀。相信讀完的讀者逐步邁向?qū)浖O(shè)計(jì)模式的深入了解。再來讀 GoF 不失為一個(gè)不錯(cuò)的選擇。5.3 設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)
英文名:《 Design Patterns: Elements of Reusable Object-Oriented Software》,又被簡(jiǎn)稱為計(jì)算機(jī)領(lǐng)域的 GoF ,因?yàn)楸緯淖髡呤撬膫€(gè)人:Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides。推薦理由:本書是任何使用面向?qū)ο蟠a的開發(fā)人員的必備入門讀物。而且作者 Erich Gamma 是 jUnit、Eclipse、IBM Jazz 項(xiàng)目、Visual Studio、Azure 和 Office 365 的幕后推手。如果您沒有很好地掌握 UML,您可能會(huì)發(fā)現(xiàn)很難吸收編程書中匯編的一些信息和示例。然而,這不會(huì)阻止您欣賞設(shè)計(jì)模式書中敘述的美妙之處,它既簡(jiǎn)單又內(nèi)容豐富。《設(shè)計(jì)模式》一書詳盡地解釋了 23 種軟件設(shè)計(jì)模式,可幫助軟件開發(fā)人員和設(shè)計(jì)人員制作更好、更優(yōu)雅、更靈活的軟件。這本書討論了針對(duì)常見軟件設(shè)計(jì)問題的大量簡(jiǎn)潔明了的解決方案。如果說 GoF 太難讀下去,那么就推薦程杰的《大話設(shè)計(jì)模式》,這本書通過對(duì)話的形式帶領(lǐng)大家入門設(shè)計(jì)模式,人人都可以是好學(xué)的小菜和經(jīng)驗(yàn)豐富的大鳥。5.4 編程珠璣(第2版?修訂版)
英文名:《More Programming Pearls,Second Edition》,作者:John Bentley推薦理由:這是一本帶你真正領(lǐng)略計(jì)算機(jī)科學(xué)之美,融深邃思想、實(shí)戰(zhàn)技術(shù)與趣味軼事于一爐的奇書。與大多數(shù)其他編程書籍不同,這本書側(cè)重于基本問題和一般問題。它討論了可以提高性能或減少內(nèi)存需求的各種算法和技術(shù)。作者選取許多具有典型意義的復(fù)雜編程和算法問題,生動(dòng)描繪了歷史上眾大師們?cè)谔剿鹘鉀Q方案中發(fā)生的軼事、走過的彎路和不斷精益求精的歷程。就如書名一樣,大浪淘沙,計(jì)算機(jī)科學(xué)中的智慧正如自然界里珍珠出自細(xì)沙對(duì)牡蠣的磨礪,留下一個(gè)個(gè)編程“珠肌”。題外話:
上面的書都是本人曾經(jīng)閱讀過,或者說在圖書館中有借閱翻過的書。也是計(jì)算機(jī)領(lǐng)域評(píng)分很高、有口皆碑的書籍。但計(jì)算機(jī)行業(yè)的經(jīng)典書籍太多,本人能推薦的也只是其中一部分,想要推薦的內(nèi)容也不想針對(duì)某個(gè)特定編程語(yǔ)言和領(lǐng)域,所以像《C++編程思想》和《On Java8》這類書籍沒有進(jìn)行推薦,推薦理由也不一定完全正確,歡迎大家批評(píng)指正。另外,看完上述的書并不能說自己就能在工作中就能運(yùn)用到,看完就能成為一個(gè)頂尖的程序員。何況看書也不能完全接收前輩們的這些大智慧,但如果在某個(gè)瞬間(看書過程或者實(shí)踐過程中)對(duì)自己有一種醍醐灌頂?shù)母杏X,就已足夠。參考鏈接:
? UNIX傳奇(上篇)? 假期好讀書? Top 5 Books to Improve Coding and Programming Skills? http://www.osnews.com/images/comics/wtfm.jpg本文分享自華為云社區(qū)《【云駐共創(chuàng)】對(duì)于編程思想和能力有重大提升的書有哪些》,作者:宇宙之一粟 。