【重構-改善既有程式的設計】讀後感

揚-avatar-img
發佈於讀後感
更新 發佈閱讀 5 分鐘
raw-image

引言

Any fool can write code that a computer can understand. Good Programmers write code that humans can understand.
                    — M. Fowler (1999)
任何一個傻瓜都能寫出電腦可以理解的程式,唯有優秀的程式設計師能寫出讓人讀懂的程式。



上述引言是個人在讀完本書後蠻喜歡的一句話。初學程式時認為寫程式是在跟機器溝通,它懂了、可以動了,我的目的達成了,結案!然而大多時候,光是連編譯器吐出來的錯誤訊息都看不懂,更別說是考慮自己寫出來的程式碼的可讀性,而且專案太小也感覺不出維護上的困難。


工作後見識到老舊專案的核心程式,疊床架屋的結果下加新功能,每一步都得小心翼翼。理解既有程式碼要花時間,更改程式碼也是一項大工程,尤其是在多人協作開發的環境下,程式碼的品質更顯重要。


接續之前的clean code演講,偶然在書店看到了演講中提到的《重構》第二版。作者為了讓更多人容易吸收書中想表達的意涵,第二版範例改用javascript呈現。老實說讀技術相關的工具書,中文翻譯常常會混淆一些名詞所表達的意思。不過比照大學啃原文書的方式,看懂了範例就成功了一大半,順便培養作為工程師必備的基本能力--推敲上下文(通靈)。


定義何謂重構

重構指在不改變程式原有行為的基礎上,對既有程式碼進行修改,以改進其內部結構。

簡單從定義上,站在管理者的角度來說,佔用了時間卻沒有任何產出!況且高機率會遇到以下情況:

  1. 原本正常運作,為什麼要改?
  2. 都是你把它改壞的!


  • 第1種狀況:最好的情形下,要有能說服長官的依據,只是過多不可控因素考量,不如不要讓長官知道你在重構!
  • 第2種狀況:必須要確保能夠安全的重構,具體的方式即:先撰寫測試。


撰寫測試

這裡帶到了測試驅動開發的概念(Test-Driven Development, TDD),在完成產品的程式碼前,應該要建立對應的測試程式碼,並且每一次的改動都要能通過原有的測試案例。一方面,這些測試案例也透露出開發程式碼應達到哪些基本的功能要求,讓需求意圖跟著被保留下來。另一方面,在重構的過程中,開發人員也會間接被要求寫出更容易被測試的程式碼,讓程式單元趨向單一職責(Single-responsibility principle, SRP )。


善用整合開發環境(IDE)

Java常用的IDE(IntelliJ, Eclipse)或是微軟Visual Studio內插件支援resharper,都可以幫助開發者進行重構,包含擷取方法、擷取類別、變數內嵌或是重新命名。

以我自己遇到的專案為例,從前輩手中接手上千行的批次程式,在沒有撰寫測試程式碼的狀況下,只能不斷擷取出方法,並且個別給予能描述其方法的命名,順便梳理整個大區段程式碼的邏輯。如此一來,就算執行後還是出現問題,也能快出推斷出是哪一個單元發生狀況,最後順利在上線前,額外多解決了幾個bug。

// 修改前示意
function main() {
  ...
  ...
  ...
}

// 修改後示意
function main() {
  doOneThing();
  doAnother();
  doTheOther();
}

function doOneThing() {
  ...
}

function doAnother() {
  ...
}

function doTheOther() {
  ...
}


結尾

The whole purpose of refactoring is to make us program faster,
producing more value with less effort.

書中後面章節大多是重構時所使用的手法,因此了解前面幾個章節作者所要表達的概念及範例後,在開發上也會有更新一層的認知。

整體而言,更適切的達到實質的clean code。

  • 無暇的程式碼
  • 清理程式碼



留言
avatar-img
Err500
18會員
84內容數
遇到的坑、解過的題、新知識的探索、舊時代的遺毒!? 工作後我發現,文件更新往往跟不上新需求的更迭,犯錯的歷史總是不斷重演。因此,我改變了方式,蒐集從程式上、系統上的每一次異常處理過程,好讓再次遇到相同的問題時能快速應變。此專題就是我的錯題本,期待日後不管在工作上或交流上遇到難題,都能輕鬆地應答:有什麼難的,我都踩過。
Err500的其他內容
2024/12/01
這本書是由大人學Podcast上的內容,重新整理修訂成書,因此針對特定主題想快速尋求建議,可以從目錄找到特定單元;如果有時間想深入了解主題,可以回去Youtube找到該集的Podcast,畢竟是由作者本人實際的對談,更能理解所要傳達的意圖。
Thumbnail
2024/12/01
這本書是由大人學Podcast上的內容,重新整理修訂成書,因此針對特定主題想快速尋求建議,可以從目錄找到特定單元;如果有時間想深入了解主題,可以回去Youtube找到該集的Podcast,畢竟是由作者本人實際的對談,更能理解所要傳達的意圖。
Thumbnail
2024/10/06
在生日前夕,無意間在書店翻到這本書《28歲決定你的人生》,雖然已經超過28歲一段時間了,具有成長型的思維的人,才不會輕易相信這種幾歲之後就定型的標語。又或者,把書中內容拿來檢視自己符合哪些觀點、而又有哪些可補足的地方,參考檢視一下也無妨。
2024/10/06
在生日前夕,無意間在書店翻到這本書《28歲決定你的人生》,雖然已經超過28歲一段時間了,具有成長型的思維的人,才不會輕易相信這種幾歲之後就定型的標語。又或者,把書中內容拿來檢視自己符合哪些觀點、而又有哪些可補足的地方,參考檢視一下也無妨。
2024/04/27
2024-04-26晚上跟到了在twitch上的直播,ThePrimeagen邀請到了Uncle Bob進行訪談—沒錯,就是那位《Clean Code》、《Clean Architecture》、《Clean Agile》等書的作者Robert C. Martin。
2024/04/27
2024-04-26晚上跟到了在twitch上的直播,ThePrimeagen邀請到了Uncle Bob進行訪談—沒錯,就是那位《Clean Code》、《Clean Architecture》、《Clean Agile》等書的作者Robert C. Martin。
看更多
你可能也想看
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
這篇文章將會分享 Clean Code 關於註解的重點,內容主要以個人閱讀後心得為主,有興趣了解更多請自行購買這本書。
Thumbnail
這篇文章將會分享 Clean Code 關於註解的重點,內容主要以個人閱讀後心得為主,有興趣了解更多請自行購買這本書。
Thumbnail
這篇文章將會簡單介紹無瑕的程式碼(Clean Code)是一種什麼樣的程式設計流派,並且分享以及命名相關的概念。
Thumbnail
這篇文章將會簡單介紹無瑕的程式碼(Clean Code)是一種什麼樣的程式設計流派,並且分享以及命名相關的概念。
Thumbnail
這篇文章專門寫給「非」資訊相關科系畢業的人,說明怎麼樣開始學寫程式,還有到什麼程度才能轉到資訊相關產業。 我大學跟研究所都是念土木系,因為對寫程式蠻有興趣,所以除了系上的課之外,還有去資工系還有電機系修一些相關課程,因為不是資訊相關科系,所以有走了一些冤枉路,但是研究所的時候我已經可以開發套裝軟體了
Thumbnail
這篇文章專門寫給「非」資訊相關科系畢業的人,說明怎麼樣開始學寫程式,還有到什麼程度才能轉到資訊相關產業。 我大學跟研究所都是念土木系,因為對寫程式蠻有興趣,所以除了系上的課之外,還有去資工系還有電機系修一些相關課程,因為不是資訊相關科系,所以有走了一些冤枉路,但是研究所的時候我已經可以開發套裝軟體了
Thumbnail
寫程式是一件讓人感到害怕的一件事,但是寫程式真的對職場幫助很大,不管是邏輯思考或是資料處理,都讓我跟不會寫程式的人高度不一樣......
Thumbnail
寫程式是一件讓人感到害怕的一件事,但是寫程式真的對職場幫助很大,不管是邏輯思考或是資料處理,都讓我跟不會寫程式的人高度不一樣......
Thumbnail
軟體開發是在虛擬的空間重新描述並解決現時的問題,多數時候並不存在正確答案。如何穿越這些不確定及未知就體現了開發者的功力以及對事物的把握度。 標題有點聳動,但且以這篇短文紀錄幾個印象比較深的、飛一陣後發現什麼節論都沒得到的可能作法(? 所以其實是要反著看 … 以下列舉三個常碰到的情況跟大家分享
Thumbnail
軟體開發是在虛擬的空間重新描述並解決現時的問題,多數時候並不存在正確答案。如何穿越這些不確定及未知就體現了開發者的功力以及對事物的把握度。 標題有點聳動,但且以這篇短文紀錄幾個印象比較深的、飛一陣後發現什麼節論都沒得到的可能作法(? 所以其實是要反著看 … 以下列舉三個常碰到的情況跟大家分享
Thumbnail
這系列大概花了快兩個月的時間快速的把學到的一些知識記錄下來,然而還是有許多內容很難用文章簡單的說明。
Thumbnail
這系列大概花了快兩個月的時間快速的把學到的一些知識記錄下來,然而還是有許多內容很難用文章簡單的說明。
Thumbnail
我們已經了解到了驗收驅動開發、持續整合以及壞味道這幾個概念,要減少技術債的方式就是重構,然而在實踐重構的時候並非我們所想像的必須「安排時間」重構,而是在開發的過程中不斷的進行。
Thumbnail
我們已經了解到了驗收驅動開發、持續整合以及壞味道這幾個概念,要減少技術債的方式就是重構,然而在實踐重構的時候並非我們所想像的必須「安排時間」重構,而是在開發的過程中不斷的進行。
Thumbnail
當我們使用主幹開發(Trunk-based Development)、以及驗收測試驅動開發(A-TDD)之後,所撰寫的程式碼會逐漸的變多,也因此我們會開始注意到程式碼有壞味道(Code Smell)的出現。
Thumbnail
當我們使用主幹開發(Trunk-based Development)、以及驗收測試驅動開發(A-TDD)之後,所撰寫的程式碼會逐漸的變多,也因此我們會開始注意到程式碼有壞味道(Code Smell)的出現。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News