關(guān)于我們
書單推薦
新書推薦
|
大規(guī)模重構(gòu) 本書的主要內(nèi)容有:理解代碼是如何退化的,以及為什么一些退化是不可避免的。在重構(gòu)之前,量化和評(píng)定你的代碼狀態(tài)。起草一個(gè)具有戰(zhàn)略里程碑且精心設(shè)計(jì)的執(zhí)行計(jì)劃。贏得領(lǐng)導(dǎo)層的支持。建立和協(xié)調(diào)一個(gè)最z適合項(xiàng)目的團(tuán)隊(duì)。在團(tuán)隊(duì)內(nèi)外進(jìn)行高效溝通。正確使用重構(gòu)的最z佳實(shí)踐。 一句話推薦 前言雖然有很多關(guān)于重構(gòu)的書籍,但大多數(shù)都是處理如何一行行改進(jìn)代碼的細(xì)節(jié)問題。我認(rèn)為重構(gòu)最困難的部分通常不是找到改進(jìn)手頭代碼的精確方法,而是需要在其周圍進(jìn)行的所有其他事情。事實(shí)上,我甚至可能會(huì)說,在任何大型軟件項(xiàng)目中,小事情很少有意義,協(xié)調(diào)復(fù)雜的變化才是最大的挑戰(zhàn)。這本書是我試圖幫助你解決那些困難問題的嘗試。它是多年經(jīng)驗(yàn)的結(jié)晶,我曾經(jīng)進(jìn)行過各種規(guī)模的重構(gòu)項(xiàng)目。在Slack 任職期間,我領(lǐng)導(dǎo)的許多項(xiàng)目使公司得以大規(guī)模擴(kuò)展,我們的產(chǎn)品已經(jīng)能夠支持擁有25000 名員工的客戶,甚至是擁有高達(dá)500000 名員工的客戶。我們開發(fā)的有效重構(gòu)策略需要能夠適應(yīng)組織的爆炸性增長(zhǎng),與此同時(shí),我們的工程團(tuán)隊(duì)在同一時(shí)期幾乎增長(zhǎng)了6 倍。成功地規(guī)劃和執(zhí)行一個(gè)既影響到你的大部分代碼庫(kù)又涉及越來越多工程師的項(xiàng)目絕非易事。我希望這本書能給你提供你所需要的工具和資源來做到這一點(diǎn)。誰(shuí)應(yīng)該閱讀這本書如果你在與幾十個(gè)甚至更多的工程師一起處理大型、復(fù)雜的代碼庫(kù),那么本書就適合你!如果你是一名初級(jí)工程師,想通過對(duì)公司產(chǎn)生廣泛、有意義的影響并開始構(gòu)建更高級(jí)別的技能,大規(guī)模重構(gòu)項(xiàng)目可以是實(shí)現(xiàn)這一目標(biāo)的好方法。這些項(xiàng)目的影響范圍廣泛,超越了你所在的團(tuán)隊(duì)(它們也不是高級(jí)工程師馬上就能搶走的那種光鮮項(xiàng)目)。這是一個(gè)非常好的機(jī)會(huì),讓你獲得新的專業(yè)技能(并加強(qiáng)你已有的技能)。本書將教會(huì)你如何從頭到尾順利地完成這類項(xiàng)目。本書也是高度技術(shù)性的高級(jí)工程師的有價(jià)值資源,這類工程師可以自己編寫沒有任何問題的代碼,但卻感到其他人不理解他們工作的價(jià)值而感到沮喪。如果你感到孤立無(wú)援,正在尋找方法提升你周圍其他人的水平,本書可以教給你所需的策略,幫助他人從你的角度看到重要的技術(shù)問題。對(duì)于希望幫助團(tuán)隊(duì)通過大規(guī)模重構(gòu)的技術(shù)經(jīng)理,本書可以幫助你了解如何在每個(gè)步驟中更好地支持你的團(tuán)隊(duì)。這里沒有大量的技術(shù)內(nèi)容,因此,如果你會(huì)以管理的角色參與到大規(guī)模重構(gòu)(工程經(jīng)理、產(chǎn)品經(jīng)理、項(xiàng)目經(jīng)理),都可以從這些思想中受益。為什么寫這本書當(dāng)我開始進(jìn)行第一個(gè)大規(guī)模的重構(gòu)時(shí),我理解代碼需要改變的原因和方式,但最困惑我的是如何安全、逐步地引入這些變化,而不會(huì)傷及其他人的利益。我渴望產(chǎn)生跨職能影響,并沒有停下來思考重構(gòu)可能對(duì)其他人的工作產(chǎn)生的影響,以及我如何激勵(lì)他們幫助我完成它。我只是一直在沖刺(可以在第10 章中閱讀有關(guān)此重構(gòu)的內(nèi)容)。隨后的幾年中,我重構(gòu)了許多行代碼,并成為一些重構(gòu)不當(dāng)?shù)氖芎φ。我從這些經(jīng)歷中學(xué)到的教訓(xùn)似乎很重要,因此我開始在許多會(huì)議上演講。我的演講引起了數(shù)百名工程師的共鳴,他們都像我一樣,在自己的公司中經(jīng)歷了有效重構(gòu)大面積代碼的問題。顯然,我們的軟件教育存在某種差距,特別是在專業(yè)軟件編寫的核心方面。在許多方面,這本書試圖教授計(jì)算機(jī)科學(xué)課程中未涵蓋的重要內(nèi)容,僅僅因?yàn)樵谡n堂上教授這些內(nèi)容太困難了。也許這些內(nèi)容在書中也無(wú)法教授,但為什么不試一試呢?本書的組織結(jié)構(gòu)本書分為四部分,按照計(jì)劃和執(zhí)行大規(guī)模重構(gòu)所需的工作的大致時(shí)間順序進(jìn)行組織,如下所述。 第一部分概述。介紹重構(gòu)背后的重要概念。─ 第 1 章重構(gòu)。討論了重構(gòu)的基礎(chǔ)知識(shí)以及對(duì)比大規(guī)模重構(gòu)與較小規(guī)模的重構(gòu)有何不同。─ 第 2 章代碼是如何退化的。描述代碼可能退化的多種方式以及如何將其納入有效的重構(gòu)中。 第二部分規(guī)劃。涵蓋了計(jì)劃成功重構(gòu)所需的所有知識(shí)。─ 第 3 章測(cè)量我們的起點(diǎn)狀態(tài)。提供一個(gè)概述,介紹在進(jìn)行任何改進(jìn)之前,你可以使用哪些指標(biāo)來衡量你的重構(gòu)旨在解決的問題。─ 第 4 章起草計(jì)劃。解釋了一個(gè)全面的執(zhí)行計(jì)劃的重要組成部分以及如何制定一個(gè)執(zhí)行計(jì)劃。─ 第 5 章獲取支持。討論了不同的方法來獲取工程領(lǐng)導(dǎo)支持你的重構(gòu)。─ 第 6 章構(gòu)建正確的團(tuán)隊(duì)。描述了如何確定哪些工程師最適合參與重構(gòu)以及如何為他們提供建議。 第三部分執(zhí)行。關(guān)注在重構(gòu)過程中如何確保重構(gòu)順利進(jìn)行。─ 第 7 章溝通。探討如何最好地促進(jìn)團(tuán)隊(duì)內(nèi)部和與任何外部利益相關(guān)者之間的良好溝通。─ 第 8 章執(zhí)行策略?纯慈绾卧谥貥(gòu)過程中保持動(dòng)力的幾種方法。─ 第 9 章讓重構(gòu)保持有效。提供了幾個(gè)建議,以確保你進(jìn)行的重構(gòu)所引入的更改得以保留。 第四部分用例,包含兩個(gè)案例研究,都是從我在Slack 工作期間參與的項(xiàng)目中提取的。這些重構(gòu)影響了我們核心應(yīng)用程序的大部分,真正地達(dá)到了規(guī)模。我希望這些能夠幫助闡述書中第一部分到第三部分討論的概念。這個(gè)順序并不是一成不變的,僅僅因?yàn)槲覀冞M(jìn)入了新的階段,并不意味著我們不應(yīng)該在必要時(shí)重新審視我們之前的假設(shè)。例如,你可能會(huì)以一個(gè)強(qiáng)烈的團(tuán)隊(duì)意識(shí)開始你的重構(gòu)工作,但是在起草執(zhí)行計(jì)劃的過程中,你可能會(huì)發(fā)現(xiàn)你需要比最初預(yù)期的更多的工程師。這沒關(guān)系,這種情況經(jīng)常發(fā)生!排版約定本書使用以下排版約定。斜體(Italic)表示新術(shù)語(yǔ)、URL、電子郵件地址、文件名和文件擴(kuò)展名。等寬字體(Constant width)表示程序片段,以及正文中出現(xiàn)的程序元素,例如變量、函數(shù)名、數(shù)據(jù)類型、語(yǔ)句和關(guān)鍵字。使用代碼示例補(bǔ)充材料(代碼示例、練習(xí)等)可在以下鏈接下載:https://github.com/qcmaude/refactoring-at-scale。本書是要幫你完成工作的。一般來說,如果本書提供了示例代碼,你可以把它用在你的程序或文檔中。除非你使用了很大一部分代碼,否則無(wú)需聯(lián)系我們獲得許可。比如,用本書的幾個(gè)代碼片段寫一個(gè)程序就無(wú)需獲得許可。銷售或分發(fā)OReilly圖書的示例需要獲得許可,引用本書中的示例代碼回答問題無(wú)需獲得許可,將書中大量的代碼放到你的產(chǎn)品文檔中需要獲得許可。我們很希望但并不強(qiáng)制要求你在引用本書內(nèi)容時(shí)加上引用說明。引用說明一般包括書名、作者、出版社和ISBN,例如:Refactoring at Scale by Maude Lemaire(OReilly). Copyright 2021 Maude Lemaire, 978-1-492-07553-0 。如果你覺得自己對(duì)示例代碼的使用超出了上述許可范圍,請(qǐng)通過permissions@oreilly.com 與我們聯(lián)系。OReilly 在線學(xué)習(xí)平臺(tái)(OReilly Online Learning)近40 年來,OReilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識(shí)和卓越見解,來幫助眾多公司取得成功。公司獨(dú)有的專家和改革創(chuàng)新者網(wǎng)絡(luò)通過OReilly 書籍、文章以及在線學(xué)習(xí)平臺(tái),分享他們的專業(yè)知識(shí)和實(shí)踐經(jīng)驗(yàn)。OReilly 在線學(xué)習(xí)平臺(tái)按照您的需要提供實(shí)時(shí)培訓(xùn)課程、深入學(xué)習(xí)渠道、交互式編程環(huán)境以及來自O(shè)Reilly 和其他200 多家出版商的大量書籍與視頻資料。更多信息,請(qǐng)?jiān)L問網(wǎng)站:https://www.oreilly.com/。聯(lián)系我們?nèi)魏斡嘘P(guān)本書的意見或疑問,請(qǐng)按照以下地址聯(lián)系出版社。美國(guó):OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中國(guó):北京市西城區(qū)西直門南大街2 號(hào)成銘大廈C 座807 室(100035)奧萊利技術(shù)咨詢(北京)有限公司勘誤、示例和其他信息,請(qǐng)?jiān)L問https://oreil.ly/refactoring-at-scale。對(duì)于本書的評(píng)論和技術(shù)性問題,請(qǐng)發(fā)送電子郵件到errata@oreilly.com.cn。要了解更多OReilly 圖書和培訓(xùn)的信息,請(qǐng)?jiān)L問https://oreilly.com。我們的Facebook:https://linkedin.com/company/oreilly-media。我們的Twitter:https://twitter.com/oreillymedia。我們的YouTube:https://www.youtube.com/oreillymedia。致謝寫一本書并不是一件容易的事情,這本書也不例外,沒有很多人的貢獻(xiàn)是不可能完成的。首先,我要感謝OReilly 的編輯Jeff Bleiel。Jeff 把一個(gè)沒有經(jīng)驗(yàn)的作者(我)變成了一位出版的作者。他的反饋總是非常準(zhǔn)確,幫助我更有條理地組織我的思路,并鼓勵(lì)我在我寫得太啰嗦時(shí)進(jìn)行刪減(這種情況經(jīng)常發(fā)生)。我簡(jiǎn)直無(wú)法想象有比他更好的編輯。其次,我要感謝少數(shù)幾個(gè)朋友和同事,他們閱讀了幾章的早期版本:Morgan Jones、Ryan Greenberg 和Jason Liszka。他們的反饋?zhàn)屛掖_信我的想法是正確的,并且對(duì)廣泛的讀者有價(jià)值。對(duì)于鼓勵(lì)和引發(fā)思考的談話,感謝Joann、Kevin、Chase 和Ben。我要感謝Maggie Zhou,在第二個(gè)案例研究章節(jié)(第11 章)中與我共同撰寫。她是我曾經(jīng)一起工作過的最有思想、最聰明、最有活力的同事之一,我很高興讓世界讀到我們一起的冒險(xiǎn)!非常感謝我的技術(shù)審稿人David Cottrell 和Henry Robinson。David 是我大學(xué)時(shí)的好朋友,在Google 工作多年,領(lǐng)導(dǎo)了許多大規(guī)模的重構(gòu)。他后來創(chuàng)立了自己的公司。Henry 是我在Slack 的同事,做出了無(wú)數(shù)的開源貢獻(xiàn),并親眼見證了硅谷公司的爆炸式增長(zhǎng)。他們都是非常有責(zé)任心的工程師,這本書從他們的指導(dǎo)和智慧中受益匪淺。我感激他們花費(fèi)許多時(shí)間來驗(yàn)證書中的內(nèi)容。最終手稿中的任何不準(zhǔn)確之處都是我的錯(cuò)誤。感謝所有曾經(jīng)和我一起重構(gòu)過東西的人。你們太多了,無(wú)法一一列舉,但你們知道自己是誰(shuí)。你們都對(duì)本書中的思想產(chǎn)生了影響。感謝我的家人(Simon、Marie-Josée、Fran?ois-Rémi、Sophie、Sylvia、Gerry、Stephanie 和Celia)在場(chǎng)外為我加油。最后,感謝我的丈夫Avery。謝謝你的耐心,謝謝你給我寫作的時(shí)間、空間和鼓勵(lì)。謝謝你讓我占用了無(wú)數(shù)個(gè)下午來討論一個(gè)、兩個(gè)(或三個(gè)、四個(gè))想法。謝謝你相信我。這本書和你一樣屬于我。我愛你。 Maude Lemaire是Slack的一名軟件工程師,她的工作是提升產(chǎn)品性能,以支持一些世界上最z大的組織。她的大部分時(shí)間都在進(jìn)行人員管理、網(wǎng)絡(luò)調(diào)用、重構(gòu)復(fù)雜的代碼塊、整合冗余的數(shù)據(jù)庫(kù),以及為其他開發(fā)者構(gòu)建工具。 目錄
你還可能感興趣
我要評(píng)論
|