扎實的基本功是一切的基礎,
在這個資訊發達的時代,網路上到處都可以獲得學習資源,
如果想要系統化地學習一套完整的知識,閱讀仍舊是最好的選擇之一。
Clean Code系列
《無瑕的程式碼:敏捷軟體開發技巧守則》
Clean Code: A Handbook of Agile Software Craftsmanship
難度: ★☆☆☆☆
非常著名的一本書,號稱所有工程師都該閱讀。
可以藉由閱讀此書建立一些基本概念,理解什麼是好的程式碼。
《無瑕的程式碼 敏捷完整篇:物件導向原則、設計模式與C#實踐》
Agile principles, patterns, and practices in C#
難度: ★★☆☆☆
前一本書的延續,介紹更深入的概念,例如SOLID原則,並討論要如何面對更複雜的系統。
《無瑕的程式碼:整潔的軟體設計與架構篇》
Clean Architecture : A Craftsman’s Guide to Software Structure and Design
難度: ★★★☆☆
這本相較於前面兩本,雖然也是由物件導向切入,但這本花比較大的篇幅討論架構,談論的概念相對深的多,建議較多開發經驗的人閱讀,會比較有心得。
開發 & 軟體工程
《單元測試的藝術》
The Art of Unit Testing: with examples in C# Second Edition
難度: ★★☆☆☆
想學習單元測試概念和做法的人,可以參考的入門書。不過書中範例是用C#,不熟悉這個語言的人,可能要稍微習慣一下。
《Design Patterns, Elements of Reusable Object-Oriented Software》
難度:★★★★☆
經典的好書,設計模式的始祖,俗稱 GOF,可惜書中的範例有點古老,若能夠接受的話,可以學到很多。
由於 GOF 是比較經典的書籍,用字比較精簡,對於初學者來說比較困難,可以參考另外一筆比較口語的《深入淺出設計模式》。
《重構:改善既有程式的設計》
Refactoring
難度:★★☆☆☆
提供各種做法改善既有的程式碼,藉由這樣的過程,理解什麼是好的程式。目前出到第二版,使用 JavaScript 為範例,範例相對親切好理解。
《管理、修改、重構遺留程式碼的藝術》
Working Effectively with Legacy Code
難度:★★☆☆☆
相較於《重構》,探討更多專案開發的議題,討論如何讓一個產品或專案,要怎麼保持健康度,或恢復健康。
《程序員修煉之道》
The Pragmatic Programmer
難度:☆☆☆☆☆
工程師除了技術能力要提升,也要發展在職場上的軟實力。《程序員修煉之道》中有豐富的案例,分享了作者的開發的心法,以及職場經驗,不同階段的開發人員重新閱讀,都有所不同的啟發。
《軟體構築美學:當專案團隊遇上失控程式,最真實的解決方案》
Brownfield Application Development in .NET
難度:★☆☆☆☆
已絕版的好書,圖書館或二手市場可能還找得到。對於專案開發的現場,有非常真實的描述與建議。
PHP
《PHP Objects Patterns and Practice》
難度: ★★☆☆☆
用物件導向的方式來學習 PHP,有別於一般的 PHP 入門書,此書算是比較進階一點的。但個人認為這本書對於學習 PHP 相當有幫助,不想要永遠 CRUD 的 API 工程師,必讀。
PHP 7版本→博客來書籍連結(原文)
PHP 8版本→博客來書籍連結(原文)
MySQL
《High Performance MySQL》
難度:★★★★☆
深入理解MySQL的原理,涉及資料庫系統本身設計的原理,需要一些資料結構或演算法的基礎。讀起來的難度較高,但對於MySQL會有更深入的了解,像是書中詳細說明了index的原理,開發者日後對於設定index或是SQL要怎麼下,會更有想法。
專案管理
《人月神話:軟體專案管理之道》
The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition
難度: ★☆☆☆☆
專案管理的經典書籍,歷久彌新,即便不是主管或PM,都很值得閱讀。對RD來說,也可以更了解專案運行的方式,看到技術以外的面相。
基礎知識
《精通正規表達式》
Mastering Regular Expressions
難度: ★☆☆☆☆
正規表達式是相當方便的工具,像是從茫茫 log 中找到正確的資訊,或是撰寫欄位驗證,都可以使用;正規表達式的使用可淺出可深入,但學會正規表達式可以有效地改善您的工作效率。
《Computer Networking A Top-Down Approach》
難度: ★★★☆☆
我認為這本書非常適合作為想要學習網路架構的人。尤其對於網頁工程師來說,就是在網路架構上開發,所以不論是前端、後端或維運端,都應該懂一些網路架構,這樣才有辦法處理更困難的問題,往更深的領域邁進。
本篇是開發系列文章,更多開發相關文章請參考→這裡