您應該重寫C#的遺留代碼嗎?深入了解Derek Comartin的觀點
重寫舊代碼是許多開發者面臨的兩難境地,尤其是在那些感覺笨重、過時或無法擴展的長期項目中。 揮之不去的夢想是清理一切,從頭開始構建一些現代且可維護的東西。 但這是正確的舉動嗎?
在本文中,我們將探討使用C#重寫遺留系統的複雜性,Derek Comartin在其 YouTube 頻道CodeOpinion.com中的視頻Never Rewrite Code?中進行了詳盡的說明。 Derek將個人的經驗與社群的智慧結合,提供了很多開發人員和技術決策者會欣賞的見解。
"從不重寫代碼"原則
Derek開場承認在软件开发中經常收到的建議是:不要從頭重寫代碼。這種觀念源自Joel Spolsky的一篇著名的部落格文章"Things You Should Never Do",該文章強烈警告說不要重寫舊系統。
在0:32,Derek指出Spolsky文章中最關鍵的想法:
"他們犯了任何軟體公司都可能犯的最大的戰略錯誤:他們決定從頭重寫代碼。"
Derek解釋說,主要的教訓是這樣的:當從頭開始時,沒有理由相信您一定會比第一次做得更好。尤其是在大型、複雜的系統中,人們很容易低估當前實現中蘊含的隱蔽價值。
簡單的假象
在1:07時,Derek回憶了他作為初級開發者的早期時光。 和很多人一樣,他經常想重寫系統中的大部分,因為他覺得代碼很差。 但他後來意識到這種信念往往源於不理解代碼,而不是代碼本身固有的問題。
他分享了一個令人感同身受的真相:
"從頭開始做一些新東西比真正深入研究,進入代碼庫,所有的複雜性、極端情況要容易得多,真的很困難。"
本質上,看起來像"火災現場"的東西可能只是不被理解的邏輯,經過多年的演變和修補。 開發人員常常將不熟悉與設計不佳混淆。
何時重寫可能有理
然而,Derek並不說重寫總是錯的。 在1:44左右,他開始引入細微差別。 對於那些多年來深入代碼庫了解所有領域複雜性和系統限制的團隊,重寫可能是一個有效的選擇。
"如果您已經在一個系統中呆了很長時間…… 然後就是細微差別的體現。 您可以說是的,這東西是一個火災現場並且限制了我們。 也許適合進行重寫。"
"以差為優"和80/20法則
Derek在2:01引入了"以差為優"的概念,將其與帕累托法則(80/20法則)聯繫起來。 他認為通常系統80%的價值來源於僅僅20%的代碼庫。 因此,在重寫時,目標不應該是複製一切,而是專注於真正提供價值的核心。
"有一點則更少的功能—也就是更差的功能—是可取的選擇。"
他解釋說,簡單性和實用性常常比完整性更有價值。 可用且可維護的有限系統可能比分佈廣泛但難以維護的舊平台運行得更好。
評估成本與收益
在2:47,Derek建議最終的決策通常歸結於成本效益分析。 無緣無故地重寫是沒有意義的。 但如果維護舊代碼或受限於舊技術的成本大於重建的成本,那麼方程式可能偏向重寫。
他參考了一些情況,當您的競爭優勢因為受限於過時的平台或工具而減少時。 在這種情況下,技術差距本身成為重建的合理原因。
來自Greg Young的教訓
Derek在3:12帶來了Greg Young的一篇精彩文章,其中原型意外進入生產並被重寫。 重寫花了9個月。 結果?
"在我們9個月的精美架構和代碼工作之後,我們每月大約多掙1萬美元。"
Greg總結道,他們本可以更好地構建30個新原型來測試新策略,而不是投入大量地重建那一個原型。 Derek喜歡這個結論,因為它挑戰了技術完美總是目標的假設。
有時候,"夠好"的軟體獲勝,尤其是當它已經提供商業價值時。
"舊與新"偏見
在4:20,Derek討論老的就是壞的,而新的就是好的常見心態。 他提供了個人例子:他集成了兩個提供相同功能的第三方服務。 一個使用現代JSON,可能是用Python構建的。 另一個,令人驚訝地,返回XML,可能是1990年代用ColdFusion構建的。
"它們都相等。 它們穩定。 它們提供我和我的客戶相同的價值。"
這強調了新不一定是更好的。 穩定性、可靠性和有用性往往比技術棧更重要。
Derek的個人重寫經驗
Derek最後在5:31分享了自己的故事。他參與了一個大型重寫項目,在原有系統的領域中花了超過六年時間。 重寫花了約14個月,主要是由於技術差距限制了系統集成現代電子商務工具和在線服務的能力。
"我們確實需要為此目的重建一些新的東西。"
這不僅僅是"壞代碼"的問題—系統根本無法演變,所以重建是唯一可行的前進道路。
最後的思考
在視頻末尾,約6:11時,Derek強調答案不是簡單地"是"或"否"。
"我不認為明確的答案是否定的。我認為您應該謹慎決定,因為背景很重要,且有很多細微差別。"
重寫遺留C#代碼可能是必要的,但只有當上下文、領域知識、價值傳遞和技術限制都支持這一決定時。
結束語
Derek Comartin的視頻在軟件發展中最具爭議的主題之一:您應該重寫舊代碼嗎之上進行了一次平衡且具有經驗驅動的探討。 他的建議不是教條式的,而是深思熟慮、穩健且富有個人見解的。
通過反思歷史教訓、現實世界的故事以及"新即是好"的陷阱,Derek幫助觀眾建立面對軟件架構中最具影響力決策之一的成熟框架。
如果您在自己的C#項目中面臨類似的選擇,重看Derek的視頻並仔細考量您的情境。 有時,舊代碼並不是敵人—它只是被誤解了。
在Derek的YouTube頻道上觀看更多有啟發性的视频。 訪問CodeOpinion.com以獲取更多Derek的內容。
