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