Re: [討論] 重構跟kpi的考量
※ 引述《VScode (VSisBestIDEinTheWorld)》之銘言:
: 假設以下情境
: 有個功能A、B都會用到相同邏輯,且有兩份重覆的code
: (沒有unit test保護,而且年久失修 要加入unit test會需要更多時程)
: 現在要加入C,也會用到相同邏輯
: 身為合格的工程師 應該會把ABC重覆的部份提取出來
: 而不是讓這邏輯重覆三次
: 但以公司營運的角度來看 這次專案就只會測試C的部份
: 不應該動到A、B
: 這時就要冒著A、B壞掉風險重構,或是因為來不及加入unit test
: 就乾脆讓相同邏輯存在三個地方
: 身為專業工程師,我很想選擇重構
: 但過去的經驗告訴我
: 絕對要以kpi為最優先考量
: 於是程式充滿了註解、重覆片段
: 雖然靠著筆記、git log,能還原當時寫code的思路
: 但這些髒code就會永遠留存在程式裡
: 想問大家遇到這情況會怎麼做?
我覺得有個盲點就是 重複程式碼的邏輯
我的經驗是在需求還沒穩定前
一樣的程式碼複製到不同地方才是最佳解
你根本不知道什麼時候 某個地方要用的邏輯不同 一但要改寫的邏輯不通
你就會被共用的程式碼卡住
就如你提到的案例 你只能砍掉重寫
不然你就要很痛苦的把問題解決這時你就會寫出 共用的難以維護的程式碼 ,這反而比重複程式碼還糟糕,看了很痛苦要改還要花大量時間 測試哪邊會壞掉
另一種方式就是 C 不要共用的程式碼 獨立寫一份
之後找時間把 共用程式碼放回AB
你這樣反而會乾淨很多 通常能拆出去的程式碼是無屬性的
不然只是目前剛好有一樣的邏輯 而不是可以共用的程式碼
--
Sent from nPTT on my iPhone SE (2 Gen)
--
這麼說來你們會在所謂的需求穩定後,停下來大規模的重寫重
構改好架構?還是最後根本沒有時間而且又要開發新需求,然
後說需求沒有穩定?永遠沒有做好?
有新需求會被共用的地方卡住這件事聽起來很奇怪,覺得單一
責任原則沒有做好。
不贊成。初期就這樣做,只會遺留一大堆90%相似只有1
0%客製的程式碼,然後未來修改,只敢全文搜索 find
replace
而且,一旦分開管理,我保證沒人有勇氣統整回來
我看法同樓上,沒有先Design好,分割完全,全部搞在一起
後面有的痛苦
初期到處貼你要有把握後期能整理,不然後面維護的人就會
變下一個原原po,很容易惡性循環的
至於被共用卡住的問題,遇到特例難以擴充再另外實作就好
,維護時因為特例而重複比初期就到處貼的副作用小多了
我覺得你會被卡住,就代表一開始方法&功能就沒拆好了
將程式模組化,增添彈性的接口供外部呼叫
如果這樣還不行,那就代表從一開始這兩者就毫無相同之處
本來就要分開寫了
程式碼要增加很容易,要減少太難,那為何一開始不規劃好
本來只要做加法函數,結果做成通用算數函數
不如一開始就設計通用算數函數 改壞了也只是大家一起壞掉
推文完全文不對題... 重點是需求還不穩定這件事吧
可以共用的code怎麼可能會大到需求改變就一堆特例
通常都是srp沒處理好才在怕改A錯B
如果會有發現重複code然後還複製貼上的話就是design
不行
絕對不要這樣做
會被共用程式碼卡住,就代表沒抽乾淨,應該要去釐清邏
輯,而不是跑去貼一堆重複code然後事後才要處理吧,本
末倒置
會覺得要花大量時間測試,就代表一開始你就沒有寫好uni
t test
反了吧應該先寫一起等真的有不同要複製再複製啊
需求不穩定不是重點,一開始到處複製,需求變化過程要改
就已經需要到處翻找了,即使等需求確定後也是要面臨重構
的問題,萬一屆時已經上線更悲劇
這篇是用接案公司的想法出發寫MVP的時候吧?
對系統還不夠了解時,這才是比較實用的+1
樓主沒說錯,這適用於未上線的專案,如果老闆在開發中
要求大改,主管有責任爭取上線後重構時間。甚至需求大
改也不是老闆的責任,尤其市場上沒有其他競品可以參考
時,才會不時在開發中更改需求
但原文的情境應該是上線後營運很久的專案,就不適合這
種作法了
21
如果 A, B 都沒有任何 tests,建議不要動他。 幫 C 實做這個功能的時候,把 unit test 寫好寫滿,確保 C 是對的 行有餘力,針對 A, B 的使用情境也加上 test case,確保未來在 A, B 確實能重用 (這點很重要,否則很容易程式長得很像你以為可以重用,實際上根本不能) 就先做到這樣就好,確保 C 的品質,同時你獲得了高品質的 reusable 模組13
感覺這個標題就是個假議題,你說不重構A、B因為Unit test來不及寫,那你新寫的C就不 用unit test了? 然後你又說三個code一模一樣,假設你幫C寫完unit test了,那你不就也把AB搞好了嗎? 再退一萬步來講,AB沒有unit test大家用的那麼爽你還硬要去動也只是吃飽太閒,不如 好好寫你C的unit test,寫完大家就用C就好啦35
首Po假設以下情境 有個功能A、B都會用到相同邏輯,且有兩份重覆的code (沒有unit test保護,而且年久失修 要加入unit test會需要更多時程) 現在要加入C,也會用到相同邏輯 身為合格的工程師 應該會把ABC重覆的部份提取出來
爆
Re: [問卦] 寫程式只要會用套件就好了吧?寫程式有分等級 Lv1 就像下圖這種一隻猴子敲鍵盤 猴子知道敲鍵盤的意義嗎? 當然不知道,牠知道敲對鍵盤有一根香蕉就每天這樣敲49
[問卦] 寫程式 好上手的編輯軟體推薦?一位40歲的大姐朋友,他兒子上大一,在寫程式c++, 他問我寫程式用哪一種編輯軟體?? 我都亂用,用習慣就好, 但他喜歡好上手、方便好學的。 請問寫程式 好上手的編輯軟體推薦?29
[問卦] 寫程式靠努力能到怎樣的高度?如題 弄得焦頭爛額 結果還是跑不出來 請教前輩 阿就這樣啊27
[問卦] 寫程式只要會用套件就好了吧?現在高階語言都很方便 Python R那些一堆屌套件可以用 分析、資料視覺化、機械學習 真正用到的 只需要幾行套件呼叫就解決 不用像學C Java 一樣在那邊土方煉鋼6
Re: [問卦] 寫程式是不是超過40歲就不行了?寫程式這種東西並不像在端盤子這種機械性質的工作 你比別人多寫了20年不會比較厲害 而且重點是你如果比別人多寫了20年 只是你比別人多寫20年的舊程式、舊技術 人家新來的菜鳥會的東西你反而不會8
[問卦] 程式語言為啥都要用英文寫 掛???????????程式語言很多語法都要用英文寫 阿不懂英文的是要怎麼寫????????? 就像看得懂中文 但也不見的看得懂日文漢字一樣(看起來很像中文但不是) 有人會說也能用中文寫程式10
Re: [問卦] C++可以啟發孩子的程式天份嗎?現在都會從拼圖程式入手 有基本邏輯就有成果 動態語言python寫起來很容易,可是沒有學習寫程式的規範很容易寫出恐怖的內容,也就是 養成壞習慣。 然後我覺得啦,JavaScript也是好選擇。當小朋友因為玩遊戲伺服器需要用到時,自然就會9
Re: [問卦] 寫程式是不是超過40歲就不行了?完全不會有這個問題 工程師寫程式這個工作 本來就是不斷學習與實作的過程 就算四大電資所 畢業的學生 新到公司去~ 也是幾乎重新學習製作公司的產品X
[問卦] 玩Minecraft 的都很會寫程式?如題 不是說一定啦 感覺印象以來看到很多對程式有興趣的人 都是小時候玩Minecraft 玩到開始寫程式 是說未必寫得好