重構的幾個迷思
覺得最近很多文章都有些不求甚解的問題,來寫點論述。
1. 重構不是什麼了不起的事情
2. 變更程式碼,重寫舊的程式碼成自己爽的樣子,不一定是重構。
3. 重構是一種相對安全的工具型開發方法論,
但仍然有不少風險跟誘惑。
4. 如果你不應該或沒權力改的程式碼,
不要以為自稱是重構就能取得變更的權力。
5. 測試(單元或整合),是一種快速驗證,
程式是否符合自己預期的工具,但並不是不會犯錯的保證。
因為,自己的預期可能就是錯的,也可能測試相依過深,
一時半刻沒有足夠好的介面,測不到真正的主要情境。
6. 不論重寫或重構,所有的程式碼變更都有一個本質,
要把時間花在刀口上,對重要的程式碼優先處理,
不重要的程式碼延後處理,程式碼都有優先權問題。
所謂的程式碼沒壞就不要修他,
本質上是「如果他的現況不影響別的事情,暫時不用管他」。
但如果他已經卡到別的功能的擴充或維護,
造成 DEBUG 困難,常出問題等,修改他就有了價值。
那個狀態就又是另一回事。
======
另外,有些話我覺得講的不夠白,做點翻譯:
1. 東西沒壞就不要改他:
你最近改壞的東西太多了/
你最近正常改好的東西太少了/
這段扣不關你的事情你沒有權限可以碰。
2. 開發應該要先做測試:
你最近改壞的東西太多了/
你最近正常改好的東西太少了
3. 要重構之前應該要先做測試:
你現在的 CODE 搞不好都已經在亂寫了,
再大規模改 CODE 會不會死的更難看。
4. 這 CODE 寫的很爛:
我想把 CODE 改成我看起來爽的樣子
=====
坦白說,你寫程式品質高的話,要怎麼炫技都可以,
凡人登山要確保,很多高手可以無確保登山,
但這些人每隔幾年也就會有一兩個摔死上新聞。
嗯,反正說到底改程式碼的權限是個政治問題。
打著重構或效能調整的名義變更是沒關係,
但有沒有做好,是一翻兩瞪眼的事情。
個人 Credit 喪失事小,
把使用這個工具的人給搞成白癡事大,
還麻煩大家,量力而為。
自己爛,不會開發,不要牽拖工具方法論。
要重構先還是要測試先,會問這種問題的,
還不如先練習看看什麼是重構,什麼是測試。
-----
Sent from JPTT on my Google Pixel 3 XL.
--
網頁上拉近距離的幫手 實現 GMail豐富應用的功臣
數也數不清的友善使用者體驗 這就是javascript
歡迎同好到 AJAX 板一同討論。
--
推推
推前半,做事真的要看帶來的價值
推
推
台肯
除了半瓶水以外,真的有人喜歡沒事就重購嗎?
比起有沒有事(應該沒多少人是真的沒事的), 更重要的問題是很多人會看 code 看不順眼. (不過這個行為本身不見得是壞事) 看到一個問題就想要去挑戰更好的作法, 不論是求表現也好, 或是想找事情殺時間, 這是人之常情.
※ 編輯: TonyQ (210.61.209.201 臺灣), 07/07/2020 10:49:27是不是少了[心得]?
加功能就容易伴隨著重構 不然經常會變得疊床架屋
中肯
推
中肯
你的標題先重構一下吧
中肯推
E
加功能伴隨重構 那應該會想打寫架構的人
改扣之前先問問自己,這段程式這麼爛大家都有看到,為什麼
沒有前人去改它,凡事必有因果。
我自己改過很多次, 通常原因都是前人能力不足/膽量不足. 所以要問問的應該是自己有沒有比前人厲害.
不過真的就是權限問題 權限夠想把所有功能改掉 不用說
物件化 擬人化都可以 每個功能幫它取個名子
中肯
哪來的萬用架構都不用動就可以加功能 不需要dirty wo
rk 請務必讓我見識怎麼設計出來的
就是有阿 看過才會讚嘆公司花大錢請 senior 不是沒有原因
能搞出萬用架構應該也不是senior, 是神了
不然就是一堆overdesign的garbage code自以為很神
我覺得要refactor要有理由 醜不算
架構總要保留可以擴充跟相容的空間吧 加一個功能就要
這就是有問題的
重構
年輕人應該多鼓勵重構當練功, 但是請私下做
不要影響到大家工作的環境, 重構下去你才會發現很多問題
包含自己缺少的, 還有舊架構的涵義等等
如果該專案幾乎沒有後續需求的話 只是醜我可以
但是常常有後續一堆需求 加上前人刻意不照公司寫程
式規範走 留下很多坑 東西又在線上 不得不選這條路
站在管理者的立場就是沒壞不要改,因為錯了要擔責任
但站在開發者的角度,這東西不改我會很難維護跟除錯
我是管理者而且我會改,反正我扛責任沒人會說什麼。 這篇真正的立場叫做掂掂自己斤兩。
這篇的立場只是偏前者
推能跑沒問題再爛也不要動code,很難改不知道是否有地雷,可
3會付出代價
如果公司沒有自己的規範呢? 呵呵…
推唷
推一個
說真的我到現在還沒遇到真的懂重構的 2倒是一堆XD
很多人只是看不慣別人寫得而已
這篇整理得很清楚, 但多數人還是只會擷取自己想聽的
premature optimization is the root of all evil
重構跟講英文很像,你會看到一堆英文很爛的人很有自信開口
講,也會看到英文很好卻不敢開口的人。你會看到一堆該重構
的人找理由不去重構,也會看到不該重構的人OCD發作改些沒意
義的東西
推
> 凡人登山要確保 超中肯!Testing 先起來再說重構!
抱持code沒壞就不要改的,是爛主管。通常就是他自己cod
ing能力差,不勤練,不好好寫test。還因為他是這種人,
整個團隊也慢慢變這種風格。
35
[討論] 重構跟kpi的考量假設以下情境 有個功能A、B都會用到相同邏輯,且有兩份重覆的code (沒有unit test保護,而且年久失修 要加入unit test會需要更多時程) 現在要加入C,也會用到相同邏輯 身為合格的工程師 應該會把ABC重覆的部份提取出來26
[討論] 重構之前要寫測試 不然不要重構想想這應該算是一種迷思吧 理論上是這樣沒錯 但事實上之前都沒寫測試了 你怎麼證明他之前是對的呢? 所以我大多都直接給他改下去29
Re: [心得] 好的註解是解釋為何需要這段 code上週在重構某段程式碼時,其中一位同事在 code review 中建議把某個註解刪掉,另一 個同事看到這個評論時,在下面留了言說他認為不應該刪掉,於是我們就拉了一個小討論 ,聊在程式碼中寫註解這件事。 因為這個經驗,我回去重翻史丹佛電腦科學教授 John Ousterhout 寫的《A Philosophy of Software Design》一書,並整理了筆記。該教授的觀點是認為程式碼寫註解有很多好3
[情報] 『1800 神魔特別報告』神魔工程師阿力山情報來源網址: 大家好我是『神魔改革行動部』的神魔工程師阿力山大。歡迎大家觀看『1800 神魔特別 報告』。26
[請益] 這種情況要怎麼重構我現在遇到一個情況 同時跟其他人開發很相似的功能 舉例來說 我跟B同時開發兩個電商網站 一個叫博客來,一個叫蝦皮好了 B已經建好博客來商品列表頁面 我也要建立蝦皮的商品列表 想把B建的博客來頁面拿來用18
[心得]以策略模式重構switch case或if (影片)最近在客戶那邊一起 pair 重構 legacy code, 碰到了一大段 if/else statement,用來判斷什麼時候該使用哪一種cache, 並依照不同 cache 的邏輯來決定回傳的內容。 發現還是有蠻多風氣比較封閉的公司對這類型的基本功跟處理不是很熟悉, 可能是對 code smell 不熟,對重構不熟,對 design pattern 不熟,對工具不熟。17
Re: [討論] 重構之前要寫測試 不然不要重構這就是TAD, 一般做法是假設以前人做的是對的 拿以前的output當測資 避免以後的output跟預期結果不同 技術面的錯誤→沒有防呆/沒有釋放資源/overflow/沒有check 這應該不在討論範圍內, 也有客觀標準 行為與邏輯的部分才是有爭議的, 要嘛根本沒規格只有口傳15
Re: [請益] 這種情況要怎麼重構我這篇寫的跟原原PO的狀況無關 ※ 引述《tbpfs ( )》之銘言: : 其實我真的不懂為什麼要急著重構 : 有好處嗎? : 一般而言,重構都是發生在農閒的時候4
Re: [討論] 重構跟kpi的考量我覺得有個盲點就是 重複程式碼的邏輯 我的經驗是在需求還沒穩定前 一樣的程式碼複製到不同地方才是最佳解 你根本不知道什麼時候 某個地方要用的邏輯不同 一但要改寫的邏輯不通 你就會被共用的程式碼卡住2
Re: [請益] coding style差太多怎辦?重構取決於你對自己的程度有多自信 假設已經發現問題 也覺得自己有能力修改 試著跟主管溝通看看 說「在自己任務時程不耽誤的前提下 有路過看到程式碼就稍微整理一下」 若有得到主管或同事許可就下去改 沒把握自己可以改好的話 量力而為 先從小區塊開始改起