PTT評價

Re: [討論] 寫程式的追求?

看板Soft_Job標題Re: [討論] 寫程式的追求?作者
del680202
(HANA)
時間推噓39 推:39 噓:0 →:90

※ 引述《neo5277 (I am an agent of chaos)》之銘言:
: 純粹對工作上來說
: 好抽換,好接手(易閱讀),好維護(包含升級,測試

好接手,易閱讀…

我想到一個故事

幾年前有個同事,號稱國中時期就開始接案寫代碼
clean code,DDD滾瓜爛熟,對coding極度潔癖
印象比較深的是入職時說了句:我看到不規範的代碼會非常生氣

上工第一案子,設計一個工具網站,拆了七個GitHub repo
Micro services, grpc當年流行的工具全套了一輪

說是將低耦合,高內聚做到極致
其中一個repo 甚至只放了一個utils

後來來了另一個人接手
改個功能要先看懂七個repo之間關聯,跟找大秘寶似的
在review code階段,還埋個彩蛋,發現了隱藏的第八個repo

新來的同事說改不動了,就算加個menu都很麻煩
心一橫,提案該網站功能也不複雜,全部打掉重做
就自己埋頭花了兩週重做了那個網站加遷移


工程師追求的很簡單,(自己)好閱讀,(自己)好維護就行了






-----
Sent from JPTT on my iPhone

--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.179.86 (臺灣)
PTT 網址

marra05/07 07:23推"尋寶遊戲"!XD

nh60211as05/07 07:27確實,設計得亂七八糟但是連文件都不寫

lianpig556605/07 08:11尋寶XDD

gname05/07 08:35哇... 高內聚低耦合已經不知道多少年沒聽到了...

Ekmund05/07 09:30那依然是個很好的概念 只是要知道 過猶不及R

Lordaeron05/07 09:43[自己] 是對的。

kurtsgm05/07 09:50這種就Overengineering 我之前遇過一個同事也這樣

kurtsgm05/07 09:51要維護這種code有夠痛苦 跟義大利麵code半斤八兩

VScode05/07 10:32我最後trace code是用全域搜尋 懶得找定義了 根本找不到

ypps605505/07 11:21這種設計以我的認知,根本不算好閱讀好維護,有些人曲

ypps605505/07 11:21解這個意思了

ypps605505/07 11:24過度拆分本身就導致維護管理困難,要跨一堆專案來看更

ypps605505/07 11:24稱不上好閱讀,有的人會因為書上或個人的強迫症導致變

ypps605505/07 11:24成這樣然後認為自己的東西很簡潔乾淨

accessdenied05/07 11:44現在一堆人跟風什麼都 DI,全部都是 interface 找

accessdenied05/07 11:44不到實作,找到後也會發現99%根本只有一個 class

accessdenied05/07 11:44 實作,浪費後人多少生命時間。

accessdenied05/07 11:44而且 DI 的存在不就是為了單元測試隔離相依?結果這

accessdenied05/07 11:4599%寫 DI 的專案裡根本完全沒有單元測試的專案!媽

accessdenied05/07 11:45的寫心酸的喔?

TPAsavelove05/07 12:21老實說我是覺得開發時程吃緊根本不用做什麼interface

TPAsavelove05/07 12:21功能穩定跟拆多少沒太多關係...

lonelytea05/07 12:39這篇真的有寫實

zyxx05/07 12:40沒文件的專案都是大便 文件很爛的專案跟大便沒兩樣

ck23705/07 12:45推 尋寶遊戲

stepnight05/07 12:51太真實

Lhmstu05/07 13:04尋寶遊戲,笑死

Lipraxde05/07 13:07over design 了

k7ji91ab5m05/07 14:09確實是過油不及啦 還是要抓平衡

kuosos52005/07 14:13我最怕遇到接手一大堆搞自動化Gen code的神人專案

kuosos52005/07 14:13,每次要改都不知道從哪裡改,結論就是一路擺爛到

kuosos52005/07 14:13重構

tofuflower05/07 14:42如果改一個功能七個 repo 都要動,那叫做高耦合。高

tofuflower05/07 14:42內聚低耦合不是這樣搞的

ssccg05/07 14:42DI並不需要拆interface,最基本的用途應該是讓物件生命週期

ssccg05/07 14:42能跟著某個context又不用自己new,倒不完全是為了測試

ssccg05/07 14:43interface都是等有第二種實作再重構抽的

SHANGOYANYI05/07 14:48他可能以前是寫ejb的…

kattte05/07 15:50我也遇過一個,做了三個月,產出0,整天跟人吵架

devilkool05/07 17:38.NET的Mock Library幾乎都只能Mock interface跟

devilkool05/07 17:39virtual method,不然我也不想弄這麼多interface

strlen05/07 17:55改個東西要了解七大密寶叫什麼低耦合?這完全是人的問題

strlen05/07 17:56低耦合的標準 其實就看程式語言本身的功能就懂啦

strlen05/07 17:59每天都在用一堆內建函式 完全不需要理解函式怎麼運作的吧

strlen05/07 17:59只要知道用它會發生啥事就好 每個模組就應該設計成這樣

strlen05/07 18:00沒辦法達成這種效果 低耦合都馬自己講

strlen05/07 18:00所以之前才說 要搞敏捷 搞agile 搞clean code 搞設計模式

strlen05/07 18:01不是你說了算 你說clean就clean?是要大家來吵架決定的

strlen05/07 18:02真正好維護的code 就是團隊緊密溝通(吵架)才弄得出來的

strlen05/07 18:02但是齁 基本上工程師都馬文人相輕啦 看不起別人 都覺得別

strlen05/07 18:02人寫得都垃圾 又自以為最聰明 其它人都低能 大頭症工程師

strlen05/07 18:03滿街都是 這樣態度要合作?要吵架?有得吵了 呵呵

strlen05/07 18:03吵到最後還有EQ不好的開始砍人勒 怕爆

qwe7897105/07 18:56兩週的工作量 可以弄到8個 也是人才

luke7205/07 20:05這個設計是為了以後團隊成長到幾萬人在開發這個專案

internetms5205/07 20:07很同意前幾樓說的,DI本來可以方便測試,結果一個

internetms5205/07 20:07測試也沒見到,XD

luke7205/07 20:088個repo算少了,我接手過一個single page app快100 repo

luke7205/07 20:10大量的DI,說要重複使用,各種抽換

luke7205/07 20:11結果連angular升版都做不到,整個砍掉重做

luke7205/07 20:11(原作者做不到)

abccbaandy05/07 21:50拆越多通常問題也越多,比那種幾千行的還難維護

brianwu120105/07 22:12尋寶遊戲,笑死

superpandal05/07 22:54功能本來就要做成顯示調用 隱藏實作細節的沒有不是垃

shooter55505/07 22:56等到規模夠大才有差

superpandal05/07 22:56圾的 難以追蹤也學不到東西 很可惜很多語言的DI是隱

superpandal05/07 22:58式的 好的程式就是minimal外加不寫死保留點彈性

superpandal05/07 23:02簡單來講就是可愛 但不利不被取代 主要是做成lib而非

superpandal05/07 23:04弄微服務 這東西多數人用不到 全用http也很驚悚

viper970905/08 00:20這種就標準過度設計,殺雞用牛刀...

umidaisuki05/08 00:22這篇很寫實XD

yuidzeon05/08 00:23我超討厭微服務的 服務夠大就會拆部門了啊 等到那時候再

yuidzeon05/08 00:23拆就好了 除非是業務需求需要切出去 (例如某個服務預期

yuidzeon05/08 00:23會有大量流量要擴展) 現在一堆為拆而拆的 真的找 log 都

yuidzeon05/08 00:23跟在找大秘寶一樣...

saladim05/08 02:52會寫function+struct就很神了 真的 不止寫code 還有一堆

saladim05/08 02:54流程之神 加個三層檢查才能進code, 解個bug開新branch 搞

saladim05/08 02:55很多毛 有兩層做的有效的話就很好了

leftless05/08 03:04cleancode前幾頁就說寫程式是社交活動 然後他只會生氣

leftless05/08 03:05叫他會去重看

marra05/08 04:17"是要大家來吵架決定的" XD

strlen05/08 10:28我自己是覺得不要眼高手低啦 能讓你慢慢吵架寫一個超讚程

strlen05/08 10:29式的環境幾乎不存在 大家平常忙死了誰要管你啊 如果你是香

strlen05/08 10:29香妹子工程師那還願意花點時間跟你交流交流 但平常遇到都

strlen05/08 10:30馬肥宅佔九成 說個話都能聞到口臭 誰想蕉流

strlen05/08 10:30所以還是照著團隊的寫法跟著寫 絕不會錯

strlen05/08 10:31大家怎麼寫 你就模仿大家怎麼寫 不要在那邊亂 標新立異

strlen05/08 10:31要搞東搞西你的理想國自己side project愛怎玩就怎玩

gino071705/08 11:55桑原老師說過 架是要兩個人才能吵的

Suleika05/08 12:36這就是標準的over design看過書不可能做出這種東西

transforman05/08 14:38大祕寶XD

as663320805/08 17:46這個叫架構魔怔,設計時都會說擴充多方便,實際上擴充

as663320805/08 17:46次數不到兩次,然後要加個新功能極為麻煩

as663320805/08 17:49重劍無鋒,大巧不工,越是符合原生的應用,邏輯越簡單

as663320805/08 17:49又能達到目標越好,抽象注入太多一堆魔怔,最後都是只

as663320805/08 17:49有原設計者看得懂,後人接到改個幾次覺得很怪就重新打

as663320805/08 17:49掉了,真正可以留下來後人會維護的code,反而都是沒什

as663320805/08 17:49麼抽象的架構的code

tsaigi05/08 18:11over design 真的不行

awenracious05/08 18:14就跟正規化一樣 你過度正規化只會找自己麻煩而已且

awenracious05/08 18:14沒必要

alan310005/08 23:46這只是你單純沒接手dependency management跟IDE吧

alan310005/08 23:462個禮拜能做出來的東西 如何over design到看不懂

viper970905/09 00:36推跟過度正規化一樣+1

jen112105/09 00:47這叫the show

Lordaeron05/09 07:25spring framework:.....我教的...

Csongs05/09 09:03確實

Lordaeron05/09 09:58凡事都加個interface,就spring 起的頭,然後蔓延出去.

b8504031205/09 17:24一個 repo 只放一個 utils 是三小!

abccbaandy05/09 23:25關spring啥事? 他實作通常不只一個好嗎...

acgotaku05/09 23:58其實選對 IDE 這些都不算是問題拉 認真的

acgotaku05/09 23:59大型專案,掛個十來個 dependancy 是家常便飯

acgotaku05/10 00:04不要搞不清楚概念亂設計,那種對 clean 一隻半解的才恐怖

acgotaku05/10 00:06遇過那種一個 lib 做抽象,然後實踐實作在各種 lib 中

acgotaku05/10 00:07的垃圾,開新 method 沒重複名稱功能全憑運氣

notimenofree05/10 05:49太多這種案例了 頭很痛

superpandal05/10 08:10spring寫的通常實作確實一個居多 沒什麼多實作的應用

superpandal05/10 08:12情境的

superpandal05/10 08:17ide多專案切換就是個麻煩了 編譯執行debug都是麻煩

superpandal05/10 08:21跨專案字串補全 搜檔案都是

superpandal05/10 08:27界面開新method然後物件已經有該method?

superpandal05/10 08:36沒聽懂你講什麼 這種東西應該是會報錯的

superpandal05/10 08:46而且實作為何要獨立一包lib?

ssccg05/10 15:16spring自己是很多interface,但用spring寫東西根本用不到

ssccg05/10 15:18interface吧,spring的一個惡名不就是動態改你的class生成

ssccg05/10 15:18proxy,實際在跑的bytecode跟你寫的東西不同嗎?

ssccg05/10 15:22連直接呼叫的method都能被偷改了,幹麻用inteface?

superpandal05/10 20:53最多是替換實現 執行時改原來的類需要一些java底層知

superpandal05/10 20:54識 通常就只是外面套一層用反射去hack