Re: [心得] 花了很多時間重構卻被打槍用舊code
※ 引述《kingofsdtw (塔綠班)》之銘言:
: 最近案子快收尾在收斂bug
: 身為救援大隊長的老人我被指派到維護一個很老的API
: 老API的設計已經無法滿足擴充需求
: 新的擴充功能造成BUG
: 於是我花了大量時間甚至debug到天亮甚至請無薪假
: 新的API經過我反覆測試各種case都完美無缺
: 但是code review卻被質疑:
: 1. 是不是沒找到root cause
: 2. 幹嘛改動如此大? 只不過新加一點點功能幹嘛改架構?
: 心中五味雜陳...
: 好歹我也是coding master,我說該重構了就是該開始還技術債了
: 更上頭還是希望用最鴕鳥的方法繼續用舊架構一堆workaound當作root cause
: 是該離職了嗎? QwQ
分享我遇過的鬼故事
某公司裡面有A team跟B team
B team負責維護的是一個堪稱屎山等級的legacy code
A team覺得B team維護的程式碼真他媽臭 隔了一個module都能聞到臭味
花費了半年多 去寫了一個跟功能99%像的程式碼 然後也有unit tests
現在問題來了 A team有沒有要release他的傑作
答案是 沒有
因為A team也沒有勇氣 原本B team的程式碼雖然屎 但是整個產品的核心
一旦錯 客戶的機子不work FAE等著被幹 (而且A team也不熟B team業務)
所以A team又搬出了一個天才的做法 說那我們就在軟體中同時執行AB兩個版本
只要AB兩個版本結果不同 我們就能收集到錯誤case
這樣方法搞了兩三年 AB team每天都在忙著找 這個錯誤case到底是哪個版本的錯
因為誰跟你講legacy code 沒有bug?
B team還是最熟這個feature的邏輯的人 所以基本上也都是B team在處理
幾年過去後 A team的版本落地了嗎?還是沒有
但A team決定先剪綵 說:「我們要把這個新版本正式交接給B team」
B team接不接 B team心想 幹0糧我接個雞巴毛
但B team還是接了 因為開發部門的總主管是A team的
從這個鬼故事 我覺得有三種層級的經驗可以學習
1. 有unit test比沒有unit test好 但你的unit test是先射箭再畫靶嗎
你的test case能反映真實的使用狀況嗎
2. 這個module的owner到底是誰 誰平常要幫忙擦屁股
3. 你主管是誰 誰授意你去執行重構
這個三層級的經驗中 實作只是最淺的那層 也是最不重要的那層
就算你能夠證明你的程式碼是對的 只要問題2 owner不是你 owner不可能接受
因為平常是他要擦屁股
但是在這個鬼故事中 最重要的是問題3
因為A team的主管最大 B team人微言輕 所以問題2跟問題1就顯得更微不足道
只要你政治實力夠強大 懶覺要塞誰嘴裡就塞誰嘴裡
反正永遠都有需要這份工作的人
所以軟體板到底要不要重構的月經文 頻率越來越少 大家越來越懶得吵
因為幹了幾年就發現 程式碼問題最小 人問題最大
況且誰能夠證明自己的程式碼是對的 你會寫形式化證明嗎
會寫形式化證明也不會待在這種鳥公司
然後test 100%綠燈反對的人還是會說"又沒有涵蓋100%真實案例"
阿他是在槓嗎 是阿 但人家講的也有道理阿
所以吵這個沒完沒了 最後還是在炒 誰擦屁股 你主管是誰
※
可能有人以為我是那種"程式碼好好的就不要去動他"的人
啊我自己是很喜歡重構啦 以前不是被派去救火 就是跟主管提案重構然後升等加薪
只是現在公司的程式碼大家都寫得比我好 我的code反而最屎的 每天被AI幹
人要跳槽 比起被人抱大腿 抱別人大腿不管是待遇還是精神衛生 都比較香
--
推
這個故事好眼熟,應該在很多地方發生過
推
XD 看完這鬼故事笑了 但我好奇切換到A module之後是大爆
炸還是真的順利完成迭代
我不知道 我離職前還AB兩個版本都還在雙軌運行 算是開放式結局
※ 編輯: SkankHunt42 (154.47.23.51 日本), 09/14/2025 11:49:46那A幹嘛生類似的功能?是因為通通都要用B的程式?
可以強烈建議但不能不說直接做,因為責任是決定的人扛
分兩個版本不是不行,但要想好怎麼做才不會失敗
你這又不是重構 是重寫 先搞清楚問題在哪==
你琢磨是重構還是重寫 問題的本質有變嗎 甲
大刀闊斧重構diff佔整個module 80% 跟乙
大規模重寫diff佔整個module 80% 你覺得區別在哪? 有人會在意你的commit是用什麼方法論嗎 改程式碼就改程式碼 不會因為你給他一個新的名字改變本質
我是覺得RD應該要多了解infra相關知識才能避免一些問題
重構就是要限縮範圍 第一步是把一大坨屎改成許多坨小
屎 再把每一坨屎改正 中間每一步都要有足夠的信心才
能走下去 當然這是理想情況很難完全做到 但你這做法
跟理想情況也差太多?
這作法又不是我發明的 關我屁事XD 我入職時就已經是AB雙軌並行了 我從B Team離職前就跟A team主管講了阿 為什麼重構不用局部迭代的方式 他也說不上來阿 就說這是一次錯誤的經驗 原PO內文講的改動幅度我覺得不低啦 所以才舉這個例子 你程式碼差異幅度大到一個程度 本來就會被challenge 你講的小屎逐步翻新那是常規狀況 工作看到就要順便修 有些重構是為了滿足新feature就要整個模組架構跟流程改動的 那種PR一般不會小
※ 編輯: SkankHunt42 (155.2.216.9 日本), 09/14/2025 13:13:05等整個東西都99%完成了才要對接 當然就是重寫啊==
有改動AB test不是很正常嗎
我覺得維持兩年換一份工作的良好職涯紀律可以避免這些事
推人的問題最大+1
有測試是要先針對舊系統寫 再來新系統測試
A team是不是太閒,還有時間做重複的功能
可以考慮job rotation吧.. 看是搬一些人過去或是兩team互換
不意外啊。
故事好聽,給讚!^_^
重構有具體定義的啦,你要能確保行為不改變才是重構
馬上又有槓精跳出來 最後一段推給每一個人
很多時候靠既有手段重構無法走到你想要的地方
那個時候跳一小步就已經是重寫了,重寫很正常
是不用太糾結名詞,但的確太多人重寫都說自己在重構
好讚,最喜歡開放式結局
喜歡你暖暖的文字
好聽的故事 期待多多分享
A team蠻爽的,不用maintain屎code沒產值還不會被lay
34
首Po最近案子快收尾在收斂bug 身為救援大隊長的老人我被指派到維護一個很老的API 老API的設計已經無法滿足擴充需求 新的擴充功能造成BUG 於是我花了大量時間甚至debug到天亮甚至請無薪假![[心得] 花了很多時間重構卻被打槍用舊code [心得] 花了很多時間重構卻被打槍用舊code](https://img.youtube.com/vi/HvLXaAle5jw/mqdefault.jpg)
13
我的建議是: 1. 要幹嘛要先講 2. 要耗用的資源多少要先講 3. 要達成的目標是啥要先講 還技術債也要看怎麼還,該決定的人去決定,10
問題是, 第一,責任: 你的責任是對整個系統負責嗎? 還是只負責修好BUG ? 從文中,我看到的是後者。哪麼,你去【重構】做什麼?25
看到這篇原原PO在其他篇底下聲稱 「可讀性+100%」 忍不住來回一篇 軟體開發裡面有一件很重要的事情是知識轉移 又稱 knowledge transfer 印度仔會簡稱 KT1
喔 老屁股來說話了 話說把程式重構不是壞事 壞事是....重構的有對嗎? 有對應的回歸測試驗證你重構對嗎? 另外這些時間和風險,上面有人願意扛嗎?5
我隨便舉個最簡單的例子 二段式左轉跟圓環 為什麼大家都在罵, 但是要改掉也一堆人在罵? 因為大家都習慣了,雖然很智障,10
正確性,你是重構別人的code,意思是說,你有測完 【所有】的input 在【所有】的狀態下,的【所有】的output?? 當然要包括Exception。 至於可讀性+100%這種心理自high 的,真的無法講什麼,正如有人回應, 你寫的Code 放手一週後回頭看,相信你又要【重構】了。11
既然有人發文了,那我也來閒聊閒聊 程式碼阿,就不斷地推陳出新 新架構淘汰舊架構,舊架構不重構也遲早因為各種理由被砍掉 前公司很有遠瞻性 他們終於發現.Netframework 4.0 這東西不行了(大約20年)7
我來響應一下,要怎麼說服工程團隊領導重構 拿安全性壓他,資安這東西,大家都懂,但大家也都不專業 舊架構要嘛運行的環境有已知漏洞、要嘛依賴套件有已知漏洞 去 CVEdetails.com 查一下,整理一下已知漏洞高危清單 用魔法對付魔法,「不改的話有問題你要負責嗎?」
91
Re: [討論] 對岸的軟體工程師分享一下現在中國公司工作的狀況好了, 程式碼 build 都沒過,是絕對不能回家的,你會害很多人被扣錢。 首先程式碼 commit到分支前,都要設定好jenkins 使用 git push 程式碼到 repository 的分支時, 會觸發CICD流程,大致會執行以下流程:35
[討論] 重構跟kpi的考量假設以下情境 有個功能A、B都會用到相同邏輯,且有兩份重覆的code (沒有unit test保護,而且年久失修 要加入unit test會需要更多時程) 現在要加入C,也會用到相同邏輯 身為合格的工程師 應該會把ABC重覆的部份提取出來19
Re: [心得] Senior iOS 面試/分享 (FoodPanda/Behaviour準備)那我也來借標題分享一下吧,剛好我這次也有拿到大大前公司的offer XD 憑記憶分享,細節就不用太考究了 主要想分享behavior/culture的準備(大家比較少關注,但我們其實在這裡刷了不少人) 跟熊貓的內部狀況,一些Hunter不知道,但開發者們可能會在意的東西 前情提要:17
Re: [討論] 重構之前要寫測試 不然不要重構這就是TAD, 一般做法是假設以前人做的是對的 拿以前的output當測資 避免以後的output跟預期結果不同 技術面的錯誤→沒有防呆/沒有釋放資源/overflow/沒有check 這應該不在討論範圍內, 也有客觀標準 行為與邏輯的部分才是有爭議的, 要嘛根本沒規格只有口傳15
Re: [請益] 這種情況要怎麼重構我這篇寫的跟原原PO的狀況無關 ※ 引述《tbpfs ( )》之銘言: : 其實我真的不懂為什麼要急著重構 : 有好處嗎? : 一般而言,重構都是發生在農閒的時候13
Re: [討論] 重構跟kpi的考量感覺這個標題就是個假議題,你說不重構A、B因為Unit test來不及寫,那你新寫的C就不 用unit test了? 然後你又說三個code一模一樣,假設你幫C寫完unit test了,那你不就也把AB搞好了嗎? 再退一萬步來講,AB沒有unit test大家用的那麼爽你還硬要去動也只是吃飽太閒,不如 好好寫你C的unit test,寫完大家就用C就好啦6
Re: [討論] 小leader但沒職稱我倒是很好奇為什麼沒權沒名就管不動人? 你們team裡面如果有資深工程師的話 資深跟資淺的說要改哪 難道資淺的會直接不鳥資深? 資深當到這麼沒尊嚴是不是自己也要檢討一下?6
Re: [請益] 系統廠軟體未來出路?或在系統廠耍廢?MCU產業分為三層 原廠: Firmware Team主要負責提供自家MCU的底層驅動,透過R&D提供的Register Map來 設定每一項功能的使用,如 Timer、I2C、I2S、SPI、UART、ADC、DAC、GPIO等。 然後再形成所謂的BSP與Sample Code讓MCU使用者能快速開發。3
Re: [請益] 資策會Java與C#選擇看了這篇很有體悟啊 大家的薪水在進來時就決定了 會影響年終的是績效 至於績效怎麼評是很主觀的 例如產品team在今年做了一個大專案3
Re: [心得]以策略模式重構switch case或if (影片)因為有朋友想要 Python 的版本, 簡單的 legacy code 也可以讓他們玩玩 team build 練練手, 所以我就順手整理了 Python 的版本了。 - GitHub Repo & commit history: - 用 PyCharm 重構的影片,YouTube:![Re: [心得]以策略模式重構switch case或if (影片) Re: [心得]以策略模式重構switch case或if (影片)](https://img.youtube.com/vi/IMV-lL_2jUw/mqdefault.jpg)