2020-04-26 13:58:55來(lái)源:尚訓(xùn)網(wǎng)綜合
若想成為一名優(yōu)秀的軟件工程師,在努力寫代碼的同時(shí),“讀代碼”同樣至關(guān)重要。
在當(dāng)代社會(huì),人們的日常生活因各種各樣的新奇玩意兒而變得豐富多彩,比如播客、視頻以及博客等等。盡管如此,仍然有許多人會(huì)選擇捧讀一本好書。筆者作為一名資深“書蟲”,也已經(jīng)涉獵過(guò)許多技術(shù)類書籍,例如軟件工程。至今,筆者仍然在試圖通過(guò)閱讀以求新知。
軟件工程領(lǐng)域的發(fā)展日新月異,今天的熱門可能不久后就淪為明日黃花,因此要在該領(lǐng)域?qū)さ靡槐竞脮?,?shí)為不易。尤其是如果要找一本與某一特定編程語(yǔ)言相關(guān)的書目,則更為艱難。
然而,在該領(lǐng)域也有一些書籍歷久彌新,比如那些探討元主題、設(shè)計(jì)模式或者一般思維模式的軟件工程類書籍。
在下文筆者列出的書單中,就包括目前最熱門、最暢銷的軟件工程類書籍。下文所推薦的書目非常經(jīng)典,至今依舊光彩熠熠,并且頗受高級(jí)軟件工程師們的推崇,因此常將其推薦給初級(jí)開發(fā)人員。在當(dāng)今這個(gè)時(shí)代,時(shí)間的確很寶貴,尤其是對(duì)軟件工程師而言。但是,如果真的能花上些許時(shí)間拜讀一下這些書目,則無(wú)論對(duì)于自身的提高還是未來(lái)的職業(yè)生涯而言,必將有所裨益。在這里有必要說(shuō)明一下,下文書目的排列順序完全隨機(jī),與其重要性的大小無(wú)關(guān),因?yàn)槊勘緯衅鋫?cè)重且值得被推薦。
《代碼大全(第二版)》(Code Complete)
《代碼大全(第二版):軟件構(gòu)建之實(shí)踐指南》(Code Complete: a Practical Handbook of Software Construction, 2ndEdition)出自著名IT暢銷書作者史蒂夫·邁克康奈爾(SteveMcConnell)之手,完全稱得上是“有生之年”系列圖書之一,因?yàn)閹缀趺恳粋€(gè)程序員都曾拜讀過(guò)此書。
此書對(duì)軟件構(gòu)建進(jìn)行了全面分析,邏輯嚴(yán)密,因此在業(yè)界頗受好評(píng)。在本書中,涉及的話題主要涵蓋軟件設(shè)計(jì)、編碼、調(diào)試以及測(cè)試等。
因此,對(duì)于有著一至三年專業(yè)編程經(jīng)驗(yàn)的工程師而言,這本書尤其值得閱讀,因?yàn)樗麄儠?huì)受益良多。但是筆者認(rèn)為,即使是軟件編程的初學(xué)者也不妨試讀一下,因?yàn)樗麄兛梢詮倪@本書中獲得更多的自信,以面對(duì)未來(lái)的軟件編程工作。
指點(diǎn)迷津:軟件開發(fā)人員必須要有能力處理復(fù)雜事物,編寫易于維護(hù)的代碼,并且手不釋卷——這不僅僅是為了自己,也是為了他人。
《程序員面試金典》(Cracking the Coding Interview)
無(wú)論參加編程面試是出于個(gè)人興趣還是職業(yè)需求,《程序員面試金典:189道知名科技公司編程面試真題及解答》(Cracking the Coding Interview: 189 Programming Questions &Solution)都是一本非常值得推薦的編程類書籍。本書作者蓋爾·拉克曼·麥克道爾(GayleLaakmann McDowell)是一位經(jīng)驗(yàn)豐富的軟件工程師,不僅親身參與過(guò)編程面試,而且還曾擔(dān)任過(guò)面試官。在這本書中,她幫助面試者尋找問題背后的細(xì)枝末節(jié),并將問題進(jìn)行拆分,從而更好地理解各個(gè)概念。
此外,作者還在書中講解了189道知名企業(yè)的編程面試真題及答案,為即將參加編程面試的人們助力。
《代碼整潔之道》(Clean Code)
“Bob大叔”羅伯特·馬丁(RobertC. Martin)的著作《代碼整潔之道:整潔代碼的敏捷實(shí)踐方法》(Clean Code: A Handbook of Agile Software Craftsmanship),是全世界最受追捧的編程書目之一。作者希望通過(guò)此書來(lái)教授軟件工程師如何編寫整潔的代碼。在此書中,作者通過(guò)許多實(shí)例講解來(lái)告訴人們?nèi)绾沃貥?gòu)現(xiàn)有代碼,從而使其更加易于閱讀與維護(hù)。但值得注意的是,本書主要針對(duì)的是Java編程語(yǔ)言。雖然本書所涉及的某些模式與方法也同樣適用于一般編程或其它編程語(yǔ)言,但其主要受眾仍然是Java程序員。
另外同樣值得注意的一點(diǎn)是,由于此書著于2009年,且受限于現(xiàn)有的工具與IDE,因此書中某些內(nèi)容已經(jīng)過(guò)時(shí),例如代碼格式部分。但總體來(lái)說(shuō),這本書仍然值得拜讀。
《重構(gòu)(第二版)》(Refactoring)
《重構(gòu)(第二版):改善既有代碼的設(shè)計(jì)》(Refactoring: Improving the Design of Existing Code, 2nd Edition)的作者是世界軟件開發(fā)大師馬丁·福勒(Martin Fowler),正如在20前的第一版中一樣,在這第二版中作者也首先向公眾闡述了何為“重構(gòu)”。在此書中,作者總結(jié)了人們可能會(huì)有的疑問,并一一予以解答,具體如下:
· 為什么應(yīng)該重構(gòu)代碼?
· 如何辨別哪些代碼需要重構(gòu)?
· 如何成功重構(gòu)代碼?
在閱讀此書后,人們將能更好地理解重構(gòu)的過(guò)程及其一般原則,并將其快速應(yīng)用于自己的代碼庫(kù)。另外,此書的讀者可能還會(huì)額外獲贈(zèng)一個(gè)靈敏的“狗鼻子”,當(dāng)自己的隊(duì)友寫的代碼亟需重構(gòu)時(shí),這個(gè)鼻子就能立馬聞出來(lái)并提醒對(duì)方。
《Head First設(shè)計(jì)模式》(Head First Design Patterns)
編程著作《Head First設(shè)計(jì)模式:重視大腦的學(xué)習(xí)指南》(Head First Design Patterns: A Brain-Friendly Guide)由埃里克·弗里曼(Eric Freeman)、伯特·貝茨(Bert Bates)、凱西·塞拉(Kathy Sierra)與伊麗莎白·羅伯森(Elisabeth Robson)合作完成,主要教授人們?cè)O(shè)計(jì)模式與方法,以供其他開發(fā)人員用于創(chuàng)建可重復(fù)使用且靈活度高的功能性軟件。在該書中,有許多高質(zhì)量的可視化圖表,通過(guò)這些圖表,讀者們能夠更加容易地學(xué)習(xí)新概念。
對(duì)于想要了解工廠、單例或者依賴注入等模式的人而言,這本書絕對(duì)是不二選擇。由于本書所使用的案例均由Java寫成,因此讀者最好能對(duì)該語(yǔ)言或其它面向?qū)ο蟮木幊陶Z(yǔ)言有所了解。
《企業(yè)應(yīng)用架構(gòu)模式》(Patterns of Enterprise Application Architecture)
《企業(yè)應(yīng)用架構(gòu)模式》是馬丁·福勒的又一力作,主要旨在探討企業(yè)應(yīng)用發(fā)展的實(shí)踐。在本書中,前一部分主要是關(guān)于如何開發(fā)企業(yè)應(yīng)用的教程;之后,作者又提供了40多種模式,用以解決在創(chuàng)建企業(yè)應(yīng)用過(guò)程中可能會(huì)遇到的常見問題。此外,書中還包含許多UML圖以及Java代碼或C#代碼示例。
通過(guò)閱讀此書,人們將能夠?qū)ζ髽I(yè)應(yīng)用進(jìn)行分層,獲悉組織業(yè)務(wù)邏輯的主要方法,使用MVC模式來(lái)組織Web應(yīng)用,并且在多事務(wù)運(yùn)行時(shí)處理并發(fā)數(shù)據(jù)。
然而,這本書正逐漸淘汰于時(shí)代無(wú)情的洪流中,因此許多現(xiàn)代術(shù)語(yǔ)都未及時(shí)更新,例如REST、云端、JSON等。盡管如此,此書仍然不啻為一本好書,但在真正閱讀時(shí)要注意取其所長(zhǎng),棄其所短。
《修改代碼的藝術(shù)》(Working Effectively with Legacy Code)
《修改代碼的藝術(shù)》是世界級(jí)計(jì)算機(jī)專家邁克爾·費(fèi)瑟(Michael Feathers)的經(jīng)典之作,作者在書中提供了許多策略用于處理未經(jīng)測(cè)試的大型遺留代碼庫(kù)。在這時(shí),或許許多人都會(huì)心生疑惑:已經(jīng)到2020年了,人們一直都有整潔且易于維護(hù)的代碼和微服務(wù),難道處理遺留代碼還算得上什么大問題嗎?實(shí)際上,事情絕非如此簡(jiǎn)單。目前對(duì)于大部分公司而言,遺留代碼問題仍然是一大挑戰(zhàn)。
通過(guò)閱讀此書,人們將能夠理解修改軟件的一般機(jī)制,例如添加特性、修正缺陷、優(yōu)化性能、改進(jìn)設(shè)計(jì)等。除此之外,讀者也能學(xué)會(huì)如何準(zhǔn)備遺留代碼的測(cè)試,以及如何確定哪些代碼需要修改。
在本書中,作者還提供了包含Java、C++、C和C#的示例,并詳細(xì)介紹了如何處理非面向?qū)ο蟮倪z留代碼。