Re: [討論] 前人的code 後人翻寫的機率高嗎?

作者: banqhsia (BEN)   2018-09-25 00:12:28
※ 引述《peanut97 (丁守中)》之銘言:
: 大家中秋節快樂,快收心了。
: 想問一個假設性問題,大家在工作上,如果有一份專案的 code 是某位前人一手寫的
: 後來新人加入,變成前人帶新人,此時繼續維護那份code。
: 但再過一陣子,前人離職了,唯一的創始者走了。
: 新人把舊 code 重構,或是砍掉重鍊的機率高嗎?
先跟主管、老闆提,確認有人支持你,不然你會被當成怪物
「為什麼要改?」
「系統好好的幹麻改?」
「改了有好處嗎?」
「會花多久時間?」
「時間剩不多,要動不動隨便你,不要影響到時程」
: 我的想像是,如果一份code是出自於1個人之手
: 我的想像是,如果一份code是出自於1個人之手
: 那麼code就是他的世界觀、他的切入點
: 那麼code就是他的世界觀、他的切入點
: 後面的人看著他的世界觀,有時候不一定能全部接受
: 而有人的地方就有政治
: 當他還在的時候,當然就不會亂動。
: 而當他走了的時候,後面的人,一看不爽,就可能改寫成自己看得爽的、
: 好改的code。
: 如果是一個團隊,那當然要好好討論為什麼要改
: 哪些因素造成現在不好的情況,以及主管同不同意改等等的。
: 只是我很好奇,1,2人的專案,改的機率高嗎?
: 是不是,code只能是「現在還存在公司的人」能控制的才行。
我們公司的經驗,以前因為很多原因 (十幾年前的 code)
導致系統沒有測試、沒有嚴謹的 coding style、方法註解也很少
copy paste 是基本,沒有遵照 SOLID
錯誤不是丟 null 就是 false (欸! 我的 Exception 呢?
每個 team 成員想怎麼寫就怎麼寫,不管後續的漣漪
反正東西交出來就好 多棒
然後中間當然成員就是來來去去的
我看這之中大概也是 有人進來 -> 看 code -> what the fuck? -> 離職
大概就是這種循環
因為自己痛過,知道 clean code、設計模式 的重要性
進公司沒多久就跟主管說這 code 不能搞,一定要重構
每個工程師一定看不爽前人的 code XD
但是不是說說而已,總是要提出改善的方法
理所當然地,你前面那些問題我都被問過
幸好我的主管與老闆也是支持我這件事情
但是我們討論的結果,現在的 code 也沒辦法全部翻掉,怎麼辦
在那個時候剛好要把原本的系統生出一套 API
原本的系統是 server-side template render,模板與資料、樣式高耦合
這個沒辦法改成 API
我們的作法是,把原本 DAO 抽出來,放進框架裡當成 library
然後加一層 Adaptor 讓新系統相容舊模組
舊的 DAO 邏輯怎樣就不去動他,要改一律在 Adapter 裡面改
(就算 method rename 也是)
在這個新系統,以 SOLID 與設計模式為基楚
controller 與邏輯之間,包裝成 service 呼叫 (一律把該寫的東西放在該去的地方)
service 只准有抽象的敘述,實作的部分寫成介面去依賴,由子類別注入 service
使用 DI Container 自動注入依賴的類別,不准直接 new (方便替換測試)
提交功能分支以前,要一併提交單元測試與 functional test,否則不准進 develop
這些都是規定好寫在專案文件裡面的 (以前沒有的文件,現在開始留下記錄)
接著就是重頭戲的部分
作者: banqhsia (BEN)   2018-09-25 09:14:00
抱歉,用 PTT+ 真的很爛,讓我存檔的時候蓋掉所有人的推文,如果有蓋掉您的推文還請大家再推一次...
作者: ian90911 (xopowo)   2018-09-25 09:16:00
推 不過原po怎麼把留言區色碼都變白的
作者: banqhsia (BEN)   2018-09-25 09:22:00
因為我用編輯文章來回覆推文,但是 PTT+ 很容易回覆失敗,我怕文章不見,就先複製起來 backup,結果真的存檔失敗,全部不見。我就拿 backup 那一份來貼上,就變成空白了...
作者: vegeman (蔬菜哥)   2018-09-25 10:20:00
不過換個角度想 可能產品晚一天上線估計公司少賺100萬 老闆可能也懶得管以後補坑要請多少人 現實跟理想的認知偏誤
作者: tkucuh (tku's cuh)   2018-09-25 10:28:00
在兩個公司待過,coding style一開始都要求,後來為了趕進度也都放棄了...不知道現在有沒有好一點
作者: robber1234 (超痛恨嘴炮)   2018-09-25 11:33:00
理想跟現實就是有一段距離,光是reivew跟unit test就能多花多久時間.經驗上來說並沒有比較快,後來也沒省到時間.很多小功能定太多界面還是寫unit真的很耗時的如果你老闆你主管你CTO願意讓你慢慢搞那當然最好,但..目前只有被一直要求趕上時程,從來沒被要求code clean
作者: bndan (seed)   2018-09-25 13:13:00
推這篇..前半文的做法 其實蠻多舊式的系統都蠻需要的 = =
作者: darkch (chang)   2018-09-26 12:40:00
推!clean code 真的重要
作者: es8603 (緋色之翼)   2018-09-27 15:55:00
講到心坎裡
作者: booloo (布魯)   2018-09-28 00:09:00
我們公司兩個技術主管桌上都放了本Clean Code,一開始專案的架構也都是照著Clean Code的思想在重構,但是三個月後進度嚴重落後,重構後的系統穩定性還更差,上層評估會影響收益......就取消重構專案了。很遺憾,重構所產生的收益沒辦法量化,但是後台的崩潰率可以量化,而且直接跟KPI掛鉤......

Links booklink

Contact Us: admin [ a t ] ucptt.com