2019年初級程式設計師必備書單:《程式碼整潔之道》《重構》等
編者按:在程式設計師的職業生涯中,總是需要學習新知識(也許不光是程式設計師)。本文作者 Khalil Stemmler 最喜歡的學習方法之一就是看書,他總結了業內人士高度評價的9本書,希望能給程式設計師帶來啟發。原文標題 Books that Junior Developers should read in 2019 。
無論你是剛入行的新人,還是經驗豐富的程式設計師,你都會意識到工作並非你提高自己程式設計技能和知識的最佳途徑。
你在業餘時間所做的事情、你掌握自己所學知識的方法……是這些因素最終決定你在這個行業能否成功。這就是為什麼對我們程式設計師來說,增長的心態如此重要。
作為程式設計師,我們學習和改進的方法特別多,比如:結對程式設計、學習線上課程、參加聚會、更多的工作經驗、做專案和聯絡導師。
我個人最喜歡的學習方法之一是:選擇一本不錯的書看,試著從那些在這個行業浸淫多年的人那裡學習一些東西。
這都是我的個人建議,是我認為所有程式設計師(尤其是初級程式設計師)都應該在某些階段來閱讀的書目。業內專業人士高度評價這幾本書,它們有可能對你的工作質量和你的發展、學習速度產生深遠影響。
其中一些書和技術細節沒關係,而更多地關注於優秀程式設計師也應當重視的人際關係和專業性,它們為你提供了一些實用規則。
1. 程式碼整潔之道
作者:Robert C. Martin(Uncle Bob)
在你克服了開發的基本挑戰,逐漸得心應手地用寫程式碼來解決問題之後,最好看看這本書。事實證明,寫出可以成功執行的程式碼實際上是比較容易的,最難的部分是讓你的程式碼可讀性高,這樣,其他人就能輕鬆理解,方便未來的修改。
還記得你上一次必須看這種奇葩程式碼是什麼時候嗎?
鬼知道它到底是幹嘛的啊。這樣的程式碼可能可以執行,但當我們需要修改它的時候,我們必須祈禱寫這幾行程式碼的人還在公司,祈禱他們能夠以某種方式破譯這些可能已經運行了好幾年的程式碼。
如果不注意程式碼的可讀性和可維護性,我們最終只會得到這樣的程式碼,每個人都不敢碰它,如果它崩潰了,我們就完了。
Uncle Bob的《程式碼整潔之道》通過比較整潔程式碼和不佳程式碼,教會你整潔程式碼應該是什麼樣的,並教會你如何將不佳程式碼轉換為整潔程式碼。對於大多數人來說,這樣的任務聽起來小菜一碟,但是你會驚訝地發現,把一些簡單的軟體設計原則變成習慣,可以幫你寫出更加專業和可擴充套件的程式碼。
我們是軟體匠人。建造一座房子與建造一個應用程式在原則上沒有太大的不同。我們需要注意細節,否則,如果一開始做得不對,將來要修復這些細節可能會花費不菲。
2. 程式碼整潔之道:程式設計師的職業素養
作者:Robert C. Martin(Uncle Bob)
這本書不是一本技術書籍,它是一本教你成為業內專業人士的書——專業人士指那些在面對挑戰、不確定性和壓力時,將繼續把開發軟體視為一種工藝,並決心堅持自己的專業價值的人。
《程式碼整潔之道:程式設計師的職業素養》在評估、重構、測試、處理衝突、日程安排、避免疲勞等方面提供了很多實用的建議。這本書全都是值得信賴的建議,畢竟它的作者花了幾十年時間做這件事。
它教給我們很多東西,最好的之一是:作為一名程式設計師,如何保持正直,何時說“不”,以及如何拒絕。
這是一本關於專業性的書。
3. 重構 改善既有程式碼的設計
作者:Martin Fowler
Martin Fowler是我最喜歡的作家之一。首先是因為他很搞笑,他寫書也特別Fowler,很搞笑。另一個原因是,他非常擅長用簡單的話解釋複雜的話題,而且可以說是非常簡單,不會讓讀者感到疲勞。
《重構 改善既有程式碼的設計》是Ruby on Rails的建立者曾經推薦過的書,他說:你應該“在寫另一行程式碼之前閱讀”。Fowler能指導你重構一個簡單的應用程式,並向你介紹了他在多年的諮詢工作中收穫的一些技術。
Fowler在書裡展示瞭如何在編碼和重構之間切換,告訴你應該多久提交一次程式碼、什麼時候應該測試。我強烈推薦這本書。這本書的最新版本用JavaScript重寫了程式碼範例,這對我來說是簡直不能更棒了,因為它是我最喜歡的語言。
4. 設計模式:可複用面向物件軟體的基礎
作者:Erich Gamma, Richard Helm, Ralph Johnson, & John Vlissides
這是一本關於設計模式的開創性著作。你可能會問,什麼是設計模式?設計模式就是軟體開發中常見問題的通用解決方案。如果你熟悉這些模式,你將發現你能夠大大減少解決這些問題需要的時間。
良好的設計模式意識還能讓你與其他程式設計師更有效地溝通解決方案。
這的的確確是本老書,但它仍然是當前最好的參考之一。如果你對這個話題感興趣,想了解一些更新的東西,我還推薦Eric Freeman的《Head First設計模式(中文版)》(購買連結: 京東 丨 噹噹 丨 亞馬遜 )。
5. 領域驅動設計 軟體核心複雜性應對之道
作者:Eric Evans
要使大型程式碼庫能夠繼續擴充套件,我們需要將程式碼合乎邏輯地分割成不同的部分。這樣做的目的是對程式碼進行分割槽,使獨立的團隊能夠在不影響任何人的情況下處理系統的這些部分。
支援程式碼向這一發展方向的基本概念是領域驅動設計(Domain-Driven Design,縮寫DDD)。它是一種軟體開發方法,將“問題域”(現實世界)中存在的問題建模為多個解決方案域。
如果程式碼庫非常龐大,那麼DDD就非常重要。大型企業部署DDD,將團隊分配到公司程式碼庫的各部分。
Eric Evan創造了術語“通用語言”,這個術語是開發人員、領域專家和領域中的任何其他使用者或參與者之間實用的一種通用的、包羅永珍的語言。通過使用通用語言,它可以確保最重要的領域概念被很好地理解,並在軟體中建模。
這本書比其他幾本書更具有技術性和挑戰性,但是如果你熟悉這些概念,你就會很好地理解當今的大公司是如何保持程式碼庫的可管理性和可擴充套件性的。
6. 軟技能 程式碼之外的生存指南
作者:John Sonmez
作為一名程式設計師,我們應該努力保持平衡。不幸的是,保持良好的平衡並不是大多數程式設計師擁有的品質。事實上,作為一名程式設計師,投資於你的學習、健康和整體幸福感是非常重要的。
“軟技能”指的是程式設計能力之外的重要東西,比如生產力、職業目標和理財能力。Sonmez還探討了投資、他在33歲退休的方法、黑客健身技巧和維持人際關係等內容,其中很多東西在程式設計界少有人涉及。
這本書的架構讓你能在遇到問題時,立即翻到相關章節查閱。
7. 架構整潔之道
作者:Robert C. Martin(Uncle Bob)
Uncle Bob第三次出現了,他的書確實很棒。
在學校裡,很多人關注演算法,但很少關注軟體設計原則。我認為這有點不幸,因為在現實中,你不經常遇到那麼多來自演算法的挑戰。相反,更常見的情況是:你將面臨要求程式碼以模組化、靈活性強、可讀性高的方式來組織的挑戰,並且還要允許你在需要更改時快速新增新特性。
《架構整潔之道》關於基本的軟體設計原則和模式,你將能夠使用它們來應對這些挑戰。
“整潔的架構”,謝謝 Robert!
本書中最好的幾個關鍵點是依賴關係的成本、穩定程式碼與非穩定程式碼的對比以及SOLID原則:一種編寫程式碼的方法,使程式碼更容易理解、更靈活、更易於維護。
這本書其他非常有用的方面是“尖叫的軟體架構”和“按元件封裝”的概念,它們交給你如何組織模組,以便“尖叫”著告訴他人這些專案到底是幹什麼的。
這本書與領域驅動設計(DDD)密切相關,它通過使用“分層架構”或Uncle Bob所稱的“整潔架構”(也稱為埠和介面卡)來實現。這是一本很棒的書,適合任何想要提升架構能力、想在高層次上有效地設計系統、以及要在微觀層次上處理依賴關係的人。
8. The Effective Engineer(高效工程師)
作者:Edmond Lau
購買連結:尚無中文版,英文版 連結
時間是我們生命中唯一的、最有價值的資產,我們應該更有效地利用它。在工作中,我們很容易陷入困境,花費大量時間修復bug、浪費精力。高效的工程師能夠在更短的時間內完成更多的工作,減少重複性工作。
我們可以通過一個叫做“槓桿”的框架來減少在重複性工作上浪費的時間和精力。
槓桿能夠幫助你確定哪些工作的產出成果和投入時間比最差。這個框架適用於任何事情。
9. 程式設計師修煉之道:從小工到專家
作者:Andrew Hunt & David Thomas
《程式設計師修煉之道》一書因易於遵循和理解而備受稱讚,是一本應該被所有級別程式設計師放在桌面上的書。Andrew和David都是程式設計師,他們不僅從事程式設計多年,而且還在程式設計的時候浸淫於此,然後想找到做得更好的方法。
經過他們多年的反思,這本書介紹了一些在你的職業生涯中必須遵循的基本程式設計師哲學,比如:程式設計師應該有“一次性完成,或把它自動化”的哲學。
它包含了一些簡單但細緻的建議,在寫新一行程式碼或開始一個新專案之前,你應該將這些建議牢記在心。
最後的話
作為一名初級程式設計師,書籍確實是提高知識和技能的最佳工具之一。書籍往往有很高的投資回報——畢竟程式設計還是很賺錢的:wink:
而這些只是當前最好的幾本書,它們都不是真正的新東西,但都是程式設計多年來一直保持著的一般哲學和最佳實踐。作為一名教授,我不得不說:“你完全能夠在這個行業賺很多錢,你只需要閱讀那該死的手冊”。
你讀過這些書嗎?你覺得他們怎麼樣?你認為還有什麼別的書也不錯?請在評論中告訴我!
其他資源
這裡列出了幾篇非常優秀的文章,它們涵蓋了上述書中的一些主題。如果你沒時間看完一整本書,那你可以點開下面的連結看看,熟悉這些概念對你的程式設計生涯也很有幫助!
Refactoring.guru
https://refactoring.guru/SOLID Design Principles
https://stackify.com/solid-design-principles/DRY (Don’t Repeat Yourself)
https://en.wikipedia.org/wiki/Don%27t_repeat_yourselfNodeJS and Good Practices
https://blog.codeminer42.com/nodejs-and-good-practices-354e7d76362Implementing the SOLID and the onion architecture in Node.js
https://dev.to/remojansen/implementing-the-onion-architecture-in-nodejs-with-typescript-and-inversifyjs-10adBetter Software Design with Clean Architecture
https://fullstackmark.com/post/11/better-software-design-with-clean-architectureThe Clean Architecture
http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html編譯組出品。編輯:郝鵬程