全文共3184字,預計學習時長6分鐘程序員
圖源:Ehud Neuhaus\Unsplash面試
我喜歡創造東西,因此先學習了編程(固然也多是由於我有點太喜歡電腦了)。或許有不少人和我同樣。算法
從某些方面來看,計算機編程是人類創造力的最終實踐。我曾經擔任過青年志願顧問,那時咱們將創造力定義爲「從無到有」的過程。編程
這就是程序員的工做:推進「從無到有」的過程。微信
從一個空白的文本編輯器開始,程序員能夠創造出自動駕駛汽車、互聯網和超現實VR。數據結構
做爲一名程序員,想要錘鍊編程水平絕非易事,但這個過程能夠是趣味盎然的。數據結構和算法
你覺得學了幾種編程語言以後,學習之路就已經走到了盡頭,但事實上一切纔剛剛開始。編程語言
工具在手,打遍天下無敵手,接下來咱們須要思考的就是:如何運用它們。熟練掌握一種語言天然有所裨益,但關鍵還在於如何使用。編輯器
若是你擅長解決難題,也頗有耐心,那麼閱讀如下書籍將幫助你從一名普通碼農變成一名編程專家。工具
注意:本文中全部書本封面圖像全部權均屬原做者全部。
一、《編碼:隱匿在計算機軟硬件背後的語言》(Code:The Hidden Language of Computer Hardware and Software)
做者:Charles Petzold
出版社:微軟出版社
本書並未教讀者如何編程,也未分享在技術行業找到工做的技巧。
但這本書倒是走向職業程序員的第一步。許多程序員經常由於編程痛苦掙扎,這是由於他們缺乏對技術的必要深刻認知。本書解決的就是這個問題。
「計算機處理器作的每每是一些簡單到近乎愚蠢的事——將一個字節從內存轉移到寄存器,給一個字節加上另外一個字節,將結果返回到內存。這個過程最有意義的地方在於它極快的速度。用 RobertNoyce的話來講:‘若是你理解了納秒,那麼從概念上來講,計算機操做就很是簡單了。’」
就算讀者已經接觸了好久的編程,仍然能夠從本書中學到一些新東西,最起碼也能夠重新角度看待某些舊事物。
這是任何技術行業的起點,也是成爲高級程序員必不可少的一步。
二、《程序員修煉之道》(ThePragmatic Programmer)
做者:Andrew Hunt, DaveThomas
出版社:Addison-WesleyProfessional
版本:20週年記念版;第2版
在本書中,兩位做者爲讀者分享了一系列提升編程輸出能力的實用技巧。
這些技巧主要圍繞一個原則展開——編程的核心在於追求協做。若是你立志要成爲一名軟件工程師,或任何種類的程序員,那麼你接觸的大多數代碼每每是別人寫的。本書就旨在引導讀者如何在此類環境中工做。
書中的技巧都很是實用,經過實踐來學習效果最佳。讀者閱讀時能夠放慢速度,下次寫代碼時能夠回過頭來想一想書中的建議。這不是一次性的閱讀,而是經過不斷實踐得到真知的過程。
如下是一些例子:
建議11:避免重複代碼
建議30:沒有人能寫出完美的軟件
建議44:成功的代碼不是靠運氣的
建議50:不要使用你不懂的嚮導代碼
建議70:記得給你的成果署名
對任何從事與代碼相關工做的人來講,本書提出的建議都珍貴異常,每位程序員都應當對其進行閱讀。
三、《算法導論》(Introductionto Algorithms)
做者:Thomas H.Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
出版社:麻省理工學院出版社
版本:第3版
已經拿到計算機科學學士學位的讀者或許知道這本書,甚至已經作過了一些練習。但若是你尚未,請仔細閱讀下面的內容。
在沒有老師的狀況下,讀這樣一本書可能會讓人望而生畏,但這也有好處,那就是你能夠慢慢讀。對於任何認真對待自身職業發展的程序員來講,花再長時間閱讀本書中有關基本數據結構和算法的知識都是有價值的。
固然,即便記不住QuickSort的時間複雜性,或者根本不知道在不去Stack Overflow複製或者不使用內置庫的狀況下該如何寫出DFS代碼,你仍然能夠勉強當幾年的軟件工程師。
可是,認爲數據結構和算法沒必要要的這種概念已通過時了。程序員正是用數據結構和算法來解決問題的,它們是現代軟件工程師的飯碗。
若是不熟悉本書(或者其餘你所選擇的算法書)的內容,不管是程序員、軟件工程師,仍是計算機科學家,都很難繼續向前發展。
四、計算機程序設計藝術(第1卷:基本算法)(The Art of ComputerProgramming: Volume 1Fundamental Algorithms)
做者:Donald E.Knuth
出版社:Addison-WesleyProfessional
和前面幾本書同樣,閱讀《計算機編程的藝術》也是一項艱鉅的任務,不多有人可以堅持不懈地將它從頭看到尾,可以仔細閱讀前幾章中全部數學運算的讀者更是寥寥無幾。
雖然並未通讀這系列書,但我仍然向你們強烈推薦這本著做。這本書有本身的問題,主要是由於做者Knuth提出的MIX語言每每很難被現代讀者接受。但若是跨過這一道坎,你會發現這本書對基本算法和數據結構提供了深刻獨到的精彩看法。
此書對讀者的智力和毅力提出了雙重挑戰,但也蘊含着巨大的信息財富。
比爾·蓋茨都說,若是你能讀完這本書,應該給他寄一份簡歷。這夠有誘惑力了吧?
五、程序員面試金典 (Cracking the Coding Interview)
做者:GayleLaakmann McDowell
版本:第6版
做者本人出版
你是否想成爲一名軟件工程師?即便不想,這本書也值得一讀。
雖然有關算法和數據結構的教科書是必讀書目,但這些書其實不多、甚至並未提供實踐練習。前面提到的兩本書在每次介紹概念時都會提供許多練習,但要注意的是:你必須始終清楚應該用什麼工具。
在實際操做中,想解決一個軟件問題,並無人會告訴你該用哪一種數據結構、算法或技術。
本書先介紹了基本的數據結構和算法(順便提示一下,這本書的內容並不適合初學者),並在後面額外添加了兩個章節,分別列出了中等難度和高級難度的問題。
這些問題隨機排列,讀者須要努力找出最好的解決方案。若是在閱讀前面章節的時候,你已經開始留心這些問題,那麼在解決過程當中,當你須要選擇正確的數據結構或者算法時,你每每能想出不同凡響的解決模式和解題線索。
本書能讓讀者更遊刃有餘地解決計算機編程問題,因此即便你在近期沒有面試的打算,本書也值得一讀。
六、人月神話 (The MythicalMan-Month)
做者:Frederick P.Brooks Jr.
出版社:Addison-WesleyProfessional.
版本:第2版
這是一本具備歷史性意義的軟件工程類書籍,是軟件項目管理的必讀書目。
若是要與一些工程師進行團隊合做,本書中提出的一些概念將有利於擴展你的思惟,並提醒你在開發軟件時哪些是有效的,哪些是無效的。
這本書的核心信息在於,軟件工程並不一樣於其餘那些人力和時間能夠互爲替代的學科。做者指出,若是必定要說,那麼在軟件工程領域,人力和時間是徹底不能夠互換的。「好的烹飪是須要時間的。若是你等上菜等了好久,那都是爲了你能享受到更好的服務和佳餚。」做者在第二章的副標題如是引用。
本書及許多其餘有關軟件工程實踐的文章都有助於避免程序員掉入軟件工程中的陷阱,也有助於程序員正確認識本身在團隊中的角色,甚至是在整個科技行業中的角色。
總之本書值得閱讀,也值得巧妙地推薦給你的經理閱讀。
七、《算法之美》(Algorithms to LiveBy: The Computer Science of Human Decisions)
做者:BrianChristian, Tom Griffiths
出版社:Henry Holt and Co.
本文要推薦的最後一本書並不徹底與寫代碼有關,而更多的是在研究從某些算法設計中衍生出來的問題解決技術(或許你已經遇到過這些問題,由於你看到了最後)。
做者在人類心理學和計算機科學之間創建起了絕妙的聯繫,將一些精心挑選的算法的原理融入了平常生活中的問題。
除了在電腦上寫代碼,程序員也常常懷疑本身所學的概念究竟有多適用於生活。幸運的是,本書爲此提供了答案——兩位做者將通用算法應用於非計算機科學問題,並將答案量化成了平常瑣碎。
學習算法和數據結構,一方面固然是爲了寫出更好的代碼,另外一方面也是爲了如何跳脫出文本編輯器而更好地運用這些知識,這會讓學習變得更爲有趣。
看到這裏,是否是巨心動巨想要?
小芯福利時間到~
歷經千辛萬苦,九九八十一難,小芯終於將這七本書的電子原版湊齊,給你們安排上啦。(是否是很棒棒?快誇我快誇我)
想要的小夥伴能夠關注微信公衆號:讀芯術,微信公衆號後臺回覆「20191118」,就能夠免費得到所有電子書啦~(驚不驚喜?意不意外?記得是微信公衆號後臺回覆哦~)
集齊七本書,接下來你們就能夠召喚神龍,邁上大神的階梯啦。加油!米娜桑!
留言 點贊 關注
咱們一塊兒分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 「讀芯術」
(添加小編微信:dxsxbb,加入讀者圈,一塊兒討論最新鮮的人工智能科技哦~)