看板 Soft_Job
※ 引述《del680202 (HANA)》之銘言: : ※ 引述《neo5277 (I am an agent of chaos)》之銘言: : : 純粹對工作上來說 : : 好抽換,好接手(易閱讀),好維護(包含升級,測試 : 好接手,易閱讀… : 我想到一個故事 看到你的故事,讓我想起好多當年犯過的錯誤 : 幾年前有個同事,號稱國中時期就開始接案寫代碼 : clean code,DDD滾瓜爛熟,對coding極度潔癖 : 印象比較深的是入職時說了句:我看到不規範的代碼會非常生氣 我年輕的時候也這樣,但做久了慢慢可以理解凡事都是 trade-off 寫得很漂亮,卻沒商業價值的 code,根本沒人在用, 對比寫得很亂,卻實際有大量使用者的 code,很難說哪個是比較好的。 剛進業界第一份工作,很認真的幫每個 function 寫滿註解跟 API doc, 努力遵循各種 best practice,幾個月後專案取消了,這 code 從來沒上 production 對比那些可怕的 legacy code,每天都好好的運行著賺錢的服務。 後來開始懂得要考量 business 的需求,有時候犧牲一點品質,搶占先機是必要之惡 : 上工第一案子,設計一個工具網站,拆了七個GitHub repo 這我當年剛學 git/github 也做過,把個巨大專案拆了十幾個 repo, 原先要解決的問題是,希望每個元件可以降低耦合,容易獨立使用,分開 deploy。 隨著時間,逐漸發現各個元件需要共用的東西越來越多,互相 dependency 逐漸變多 這時候各個元件之間需要正確的版本,才能互相搭配,管理起來卻成了噩夢 有些直接 include 就能用的東西,拆在兩個 repo 掛 submodule 變得很難維護 build rules / makefile 也因此複雜了起來,最後有點後悔一開始把他們拆開。 體驗過就能理解為何很多大公司最後走向 monorepo 架構,全公司專案都在一個 repo 其中一個經典案例就是 google,幾乎全公司所有 code 在一個巨無霸 repo 內。 不同程式互相引用,就少有版本管理問題,開發的複雜度降低很多。 : Micro services, grpc當年流行的工具全套了一輪 : 說是將低耦合,高內聚做到極致 剛進業界的時候,我也是剛學了 microservice,很開心地把手上系統全拆了 拆分得很乾淨,每個服務都可以分開擴展,一開始還覺得這是 best practice 後來學到血淚教訓。因為業務的改變,需求大幅度改變了。原先的拆分並不合適 反而讓開發、測試、跟部署變得複雜,印證了 "monolith first" 的建議! 在早期需求還不明朗的時候,全部塞在一起,其實不是壞事,延遲到真正出現擴展需求 再來拆分,會比過早拆分要好。這跟不要 premature optimization 感覺很像。 就跟一開始學 OOP 都狂寫 interface,後來才發現根本沒有其他 implementation 白白多了一堆無謂的繼承,最後又發現需要不同的行為,於是換了 interface 本來定義的抽象化不但沒用到,還因為要保持相容,造成日後擴充的阻礙。 後來就學到 "concrete first",不要起手式就急著開 abstract interface, 可以延後到真的有需要再來做,有時候反而會更合適。 做久了慢慢對這些東西有不同的感受,best practice 通常要放在特定情境下才是 best 如果很清楚自己做了什麼 trade-off,違反它們不見得是錯誤的。 : 其中一個repo 甚至只放了一個utils : 後來來了另一個人接手 : 改個功能要先看懂七個repo之間關聯,跟找大秘寶似的 : 在review code階段,還埋個彩蛋,發現了隱藏的第八個repo : 新來的同事說改不動了,就算加個menu都很麻煩 : 心一橫,提案該網站功能也不複雜,全部打掉重做 : 就自己埋頭花了兩週重做了那個網站加遷移 兩個禮拜是不是沒算到寫 test 跟重作 QA 的時間 XD 寫 code 相對快,大部分開發時間本就都花在其他地方 這種大霹靂式的重寫,通常是很危險的 XD : 工程師追求的很簡單,(自己)好閱讀,(自己)好維護就行了 : ----- : Sent from JPTT on my iPhone -- Sent from PCMan on PCMan's PC -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 73.70.25.48 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1747295625.A.D41.html
keke0421: 簡單一句話: 不要過早完美化。技術服務業務,隨服務演進 05/15 16:29
oherman: PCMAN大神 05/15 16:39
kuosos520: 只能推 05/15 16:44
Romulus: on demand做 而refactor的時候需要test避免你改錯 05/15 16:54
Romulus: That's why unit tests are important 05/15 16:55
Kroner: 關節痛就老人病 05/15 16:55
NTUTM04: 確實 05/15 17:03
jackflu: 感謝大大分享 05/15 17:30
superpandal: 寫不寫的漂亮與市場反應是兩件事情 這與公司經營和高 05/15 17:41
superpandal: 層思想才有關係 寫的好不代表一定花時間 05/15 17:42
Kroner: 我有在用UC2,感覺效果還不錯欸! 05/15 17:42
superpandal: 但為了不讓資本囂張 我讚同有時可以這麼做 05/15 17:44
ybite: 我認為 一個專案的基礎架構 開發藍圖 工時 要能準確估算跟 05/15 17:46
ybite: 執行真的都需要高度經驗 05/15 17:46
ybite: 工作而言 重要的事是怎麼在日期限制內交出及格的作品 05/15 17:47
Chricey: 有人知道UC2和其他關節保健品的差異嗎? 05/15 17:47
ybite: 什麼要取捨 什麼一定要做到 05/15 17:47
superpandal: 有時也不一定是資本囂張 是高層囂張 05/15 17:47
AvatarH: 推這篇,句句是實務 05/15 18:38
moon2519: 至少你走過來了,辛苦了 05/15 18:57
Kroner: 搞笑吧!關節痛,你能嚴重點嗎?我要讓你知道什麼叫真正的痛! 05/15 18:57
tomsangotw: 推大神 05/15 19:19
blackcan: 上古神獸推推 05/15 20:28
genius945: 推,雖然層級有差但魯蛇做久了感想完全一樣 05/15 20:51
ko00385331: 感謝分享 看完覺得茅塞頓開 05/15 20:56
Kroner: 關節痛按摩有效嗎? 05/15 20:56
richardz: 最近也有這種感覺,會開始要求自己做到best practice 05/15 21:09
richardz: ,但老實說這是必經之路吧,經歷過凡事都要求完美的路 05/15 21:09
richardz: ,才會知道哪些可以放棄不用 05/15 21:09
Walkers: 大神推推 都是血和淚的教訓 05/15 21:55
Kroner: 想問一下有沒有關節痛的運動禁忌?怕動得更嚴重… 05/15 21:55
whyhsu: 推 05/15 22:08
accessdenied: best 根本就不存在,完全是商業手法的誤導,欺騙初 05/15 22:17
accessdenied: 學者以為只要看到 best 學就對,自己就會變成 best 05/15 22:17
accessdenied: 這個世界只有 suitable practice ,最合適的,沒有 05/15 22:18
Chricey: 想問一下有沒有關節痛的運動禁忌?怕動得更嚴重… 05/15 22:18
accessdenied: 最好的 05/15 22:18
ikachann: 很多都這樣 一開始能動最重要,真的有閒穩定下來後才是 05/15 22:20
ikachann: 重構的部分 05/15 22:20
ikachann: interface真的是說到點了,可能補習班教吧 一堆人都照著 05/15 22:22
Chricey: 哇勒,UC2 這個東西真的是太讚了 05/15 22:22
ikachann: 一個service都做一個interface然後就只有自己實作 05/15 22:22
neo5277: 神獸來了快拜一下~~~ 05/15 22:41
neo5277: interface 還是看語言跟框架用啊 05/15 22:42
a90100: 推這篇,這幾年工作下來的經驗也是如此,尤其碰到專案需求 05/15 23:20
Kroner: 5樓關節跟X一樣 05/15 23:20
a90100: 變動快速的時候,這篇的經驗會更實用 05/15 23:20
stepnight: interface 跟 DDD 就是互相成就 05/15 23:56
stepnight: 遵從到後來都魔怔了,一堆過度設計的場景 05/15 23:56
ghost90331: 先存活下來再想著如何變好 05/16 00:00
Kroner: 我有在用UC2,感覺效果還不錯欸! 05/16 00:00
ghost90331: 但活太久改不動就又是另外一回事了QQ 05/16 00:00
viper9709: 推這篇~很有同感+1 05/16 00:48
TonyQ: 推 05/16 02:00
HmmHmm: 推推 05/16 04:54
Chricey: 吃過關節保健品,都沒什麼效果,有推薦的牌子嗎? 05/16 04:54
marra: 認真分享,給推! 05/16 05:38
descent: 那些指導的書看一本就好, 程式寫多了就有自己的體會 05/16 08:41
descent: 再看那些書也有不同的體驗 05/16 08:42
buffon: 神出沒 05/16 08:53
Chricey: 求推薦靠譜的復健診所,小弟關節治好再來跪謝! 05/16 08:53
yuinami: 謝謝前輩分享 05/16 09:12
LINGZ: 神來了,必須蓋樓推! 05/16 09:49
realbout: trade-off 05/16 09:56
rog43: 大神要拜一下 感謝分享 05/16 10:06
Kroner: 我也有過關節痛的經驗,真的超痛苦的啦!推薦去看醫生,早點處理比較不會拖延變嚴重。 05/16 10:06
oiukjyhntgb: 顯靈 05/16 10:57
hobnob: 只能推了 05/16 10:59
chyl13579: 大神出沒,推一個! 05/16 11:25
devilkool: 推 05/16 11:33
Kroner: 求推薦UC2,樓下請提供三家 05/16 11:33
v86861062: 推推 05/16 12:08
abc21086999: 居然是PCMAN,給推 05/16 12:37
slowwalker: 推 05/16 14:23
shibin: 推,好奇問,那如果是為了 UT 而弄的 interface 呢? 05/16 14:39
Chricey: 求推薦UC2,樓下請提供三家 05/16 14:39
Dix123: PCMAN!!!!!!!!!!!!!!!!! 05/16 15:38
kyukyu: 05/16 16:08
joewang85: 推 05/16 17:38
strlen: 其實最主要的問題在於 工程師都很自閉的自己搞東搞西 05/16 17:55
Chricey: 本魯關節痛始祖,葡萄糖胺保證沒用,乖乖吃UC2 05/16 17:55
strlen: 像這些經歷 是不是當初在拼了命分拆小模組前 召集團隊所有 05/16 17:56
strlen: 人開個會蕉流蕉流 應該就有資深的會跟你說 確定要這樣嗎 05/16 17:57
fgh81113: 資深不代表有決定權 end 05/16 18:01
strlen: 設計本來就沒有聖杯 大家吵架出來的就是最佳解 至少團隊裡 05/16 18:01
Kroner: 吃過關節保健品,都沒什麼效果,有推薦的牌子嗎? 05/16 18:01
strlen: 的人都方便 這樣就行了 不同團隊有不同作法 05/16 18:02
strlen: 但工程師喔 大多都覺得太麻煩了 太無聊了 沒空 別煩我 你 05/16 18:02
strlen: 說的我都不同意 我覺得XXXOOO就是最棒的 是尼不懂 哈 05/16 18:02
strlen: 不過就算亂寫一通其實也沒差啦 聽說OpenAI裡也全都亂寫 05/16 18:05
Kroner: 不動對關節最好,拎北都躺著 05/16 18:05
strlen: 哪有時間code review吵架 東西先上先贏R 搶快比什麼都重要 05/16 18:05
bartd0037308: 推推推 05/16 18:57
lchcoding: 可是吵架很累餒 05/16 19:13
lchcoding: 我水瓶,我愛好和平 05/16 19:13
Chricey: 我也有過關節痛的經驗,真的超痛苦的啦!推薦去看醫生,早點處理比較不會拖延變嚴重。 05/16 19:13
lchcoding: 有吵架以外的方法嗎? 05/16 19:13
strlen: 有 那就是長官或資深說怎麼做 你就怎麼做 05/16 19:56
lchcoding: 好吧!那看狀況吵好了 05/16 20:07
Boska: 大神推 05/16 20:40
Kroner: 5樓關節跟X一樣 05/16 20:40
gino0717: 桑原老師說過 架是要兩個人才能吵的 05/16 20:52
seal0112: 推 05/16 21:29
johney719: PCMan推一個 05/16 22:24
rtoday: 推大神 05/16 22:48
Kroner: 我有在用UC2,感覺效果還不錯欸! 05/16 22:48
TaiwanUp: Google用內部工具Blaze直接否決高耦合 才能不吵架 05/16 23:09
strlen: 那基本上就算是長官或資深說你要怎麼做 你就得怎麼做XD 05/17 00:11
qoozxc789: 深有同感 05/17 01:14
Suleika: 推神獸 05/17 02:25
Kroner: 關節痛按摩有效嗎? 05/17 02:25
leon1757tw: 推 05/17 02:56
prag222: oop重點寫介面做啥?會寫的直接上手 05/17 07:12
jhjhs33504: 看需求吧 有場景是要把code喂給編譯器看那就另當別論 05/17 13:23
jay123peter: 推 05/17 16:33
Chricey: 搞笑吧!關節痛,你能嚴重點嗎?我要讓你知道什麼叫真正的痛! 05/17 16:33
shortoneal: 該怎麼切沒有個聖杯,但核心就是要為爽跟快 05/17 19:04
shortoneal: 爽 = 好維護好追問題,快 = 開發不會相依性一堆綁手腳 05/17 19:04
shortoneal: 蝦拆但是會往反方向前進的,就是吵 = = 05/17 19:08
nfsong: 推 05/17 21:18
Chricey: 最近天氣變化大,關節痛好像更嚴重了。 05/17 21:18
attacksoil: 有時候寫interface是怕把依賴方向搞爛 有建議嗎 05/17 22:28
gilingking: 大神推推 05/18 01:30
imhaha: 推推 05/18 08:27
yang5d2008: 好猛 05/18 12:10
Chricey: 樓上UC2當糖吃,天天走拿飛 05/18 12:10
r8106087: 推 05/18 17:32
lchcoding: 謝 strlen,gino0717,TaiwanUp,shortoneal 05/18 20:48
lchcoding: 4位大大提供的方向 05/18 20:48
h44256: 謝謝大大分享!講的超清楚 05/19 00:09
Chricey: 有人知道如何處理關節痛嗎?求分享! 05/19 00:09
Samuellu: 朝聖 05/19 10:39
wistful96: 推 05/19 12:47
Eide: 推 05/19 22:46
youcanfindit: 推 05/20 00:55
Chricey: 我阿嬤說吃豬腳補關節,豬腳吃起來 05/20 00:55
tim96tim: 謝分享 05/20 09:18
f0915034335: 推,這些真的是慢慢工作才會理解到的 05/20 17:33
iamOsaka: 推 05/20 19:25
knme: 推 05/20 19:42
Kroner: 吃過關節保健品,都沒什麼效果,有推薦的牌子嗎? 05/20 19:42
cchao28: 感謝分享 05/20 22:41
s860134: 按需求服務 還有漸進式的抽出共用 05/21 08:34
tsaigi: 但c#要mock的話不是一定要interface嗎? 不測試的話的確 05/21 11:00
tsaigi: 是不用interface啦 05/21 11:00
Chricey: UC2神招啊,吃下去就對了 05/21 11:00
jennya: 熱愛嘗試當下流行的新工具新理論的工程師,常常也是團隊主 05/22 01:58
jennya: 力,很難找到理由阻止他們嘗試新事物 05/22 01:58
CH1SIR: 推 05/22 12:29
Inglenook: 好奇Google 那樣要怎麼管理不同套件之間的相依性? 如 05/27 18:01
Chricey: 想問一下有沒有關節痛的運動禁忌?怕動得更嚴重… 05/27 18:01
Inglenook: 果都要保持所有test全過的話 幾乎不太可能推新功能? 05/27 18:01
markbex: 推 這如人月神話所說,軟體之中「沒有銀彈」 05/27 23:12
Demonic1013: 專業 05/29 00:00