Soft_Job 板


LINE

※ 引述《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://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1747295625.A.D41.html
1F:→ keke0421: 简单一句话: 不要过早完美化。技术服务业务,随服务演进 05/15 16:29
2F:推 oherman: PCMAN大神 05/15 16:39
3F:推 kuosos520: 只能推 05/15 16:44
4F:推 Romulus: on demand做 而refactor的时候需要test避免你改错 05/15 16:54
5F:→ Romulus: That's why unit tests are important 05/15 16:55
6F:推 NTUTM04: 确实 05/15 17:03
7F:推 jackflu: 感谢大大分享 05/15 17:30
8F:→ superpandal: 写不写的漂亮与市场反应是两件事情 这与公司经营和高 05/15 17:41
9F:→ superpandal: 层思想才有关系 写的好不代表一定花时间 05/15 17:42
10F:→ superpandal: 但为了不让资本嚣张 我赞同有时可以这麽做 05/15 17:44
11F:→ ybite: 我认为 一个专案的基础架构 开发蓝图 工时 要能准确估算跟 05/15 17:46
12F:→ ybite: 执行真的都需要高度经验 05/15 17:46
13F:→ ybite: 工作而言 重要的事是怎麽在日期限制内交出及格的作品 05/15 17:47
14F:→ ybite: 什麽要取舍 什麽一定要做到 05/15 17:47
15F:→ superpandal: 有时也不一定是资本嚣张 是高层嚣张 05/15 17:47
16F:推 AvatarH: 推这篇,句句是实务 05/15 18:38
17F:推 moon2519: 至少你走过来了,辛苦了 05/15 18:57
18F:推 tomsangotw: 推大神 05/15 19:19
19F:推 blackcan: 上古神兽推推 05/15 20:28
20F:推 genius945: 推,虽然层级有差但鲁蛇做久了感想完全一样 05/15 20:51
21F:推 ko00385331: 感谢分享 看完觉得茅塞顿开 05/15 20:56
22F:推 richardz: 最近也有这种感觉,会开始要求自己做到best practice 05/15 21:09
23F:→ richardz: ,但老实说这是必经之路吧,经历过凡事都要求完美的路 05/15 21:09
24F:→ richardz: ,才会知道哪些可以放弃不用 05/15 21:09
25F:推 Walkers: 大神推推 都是血和泪的教训 05/15 21:55
26F:推 whyhsu: 推 05/15 22:08
27F:推 accessdenied: best 根本就不存在,完全是商业手法的误导,欺骗初 05/15 22:17
28F:→ accessdenied: 学者以为只要看到 best 学就对,自己就会变成 best 05/15 22:17
29F:→ accessdenied: 这个世界只有 suitable practice ,最合适的,没有 05/15 22:18
30F:→ accessdenied: 最好的 05/15 22:18
31F:推 ikachann: 很多都这样 一开始能动最重要,真的有闲稳定下来後才是 05/15 22:20
32F:→ ikachann: 重构的部分 05/15 22:20
33F:推 ikachann: interface真的是说到点了,可能补习班教吧 一堆人都照着 05/15 22:22
34F:→ ikachann: 一个service都做一个interface然後就只有自己实作 05/15 22:22
35F:推 neo5277: 神兽来了快拜一下~~~ 05/15 22:41
36F:→ neo5277: interface 还是看语言跟框架用啊 05/15 22:42
37F:推 a90100: 推这篇,这几年工作下来的经验也是如此,尤其碰到专案需求 05/15 23:20
38F:→ a90100: 变动快速的时候,这篇的经验会更实用 05/15 23:20
39F:推 stepnight: interface 跟 DDD 就是互相成就 05/15 23:56
40F:→ stepnight: 遵从到後来都魔怔了,一堆过度设计的场景 05/15 23:56
41F:推 ghost90331: 先存活下来再想着如何变好 05/16 00:00
42F:→ ghost90331: 但活太久改不动就又是另外一回事了QQ 05/16 00:00
43F:推 viper9709: 推这篇~很有同感+1 05/16 00:48
44F:推 TonyQ: 推 05/16 02:00
45F:推 HmmHmm: 推推 05/16 04:54
46F:推 marra: 认真分享,给推! 05/16 05:38
47F:推 descent: 那些指导的书看一本就好, 程式写多了就有自己的体会 05/16 08:41
48F:→ descent: 再看那些书也有不同的体验 05/16 08:42
49F:推 buffon: 神出没 05/16 08:53
50F:推 yuinami: 谢谢前辈分享 05/16 09:12
51F:推 LINGZ: 神来了,必须盖楼推! 05/16 09:49
52F:推 realbout: trade-off 05/16 09:56
53F:推 rog43: 大神要拜一下 感谢分享 05/16 10:06
54F:推 oiukjyhntgb: 显灵 05/16 10:57
55F:推 hobnob: 只能推了 05/16 10:59
56F:推 chyl13579: 大神出没,推一个! 05/16 11:25
57F:推 devilkool: 推 05/16 11:33
58F:推 v86861062: 推推 05/16 12:08
59F:推 abc21086999: 居然是PCMAN,给推 05/16 12:37
60F:推 slowwalker: 推 05/16 14:23
61F:推 shibin: 推,好奇问,那如果是为了 UT 而弄的 interface 呢? 05/16 14:39
62F:推 Dix123: PCMAN!!!!!!!!!!!!!!!!! 05/16 15:38
63F:推 kyukyu: 05/16 16:08
64F:推 joewang85: 推 05/16 17:38
65F:推 strlen: 其实最主要的问题在於 工程师都很自闭的自己搞东搞西 05/16 17:55
66F:→ strlen: 像这些经历 是不是当初在拼了命分拆小模组前 召集团队所有 05/16 17:56
67F:→ strlen: 人开个会蕉流蕉流 应该就有资深的会跟你说 确定要这样吗 05/16 17:57
68F:→ fgh81113: 资深不代表有决定权 end 05/16 18:01
69F:→ strlen: 设计本来就没有圣杯 大家吵架出来的就是最佳解 至少团队里 05/16 18:01
70F:→ strlen: 的人都方便 这样就行了 不同团队有不同作法 05/16 18:02
71F:→ strlen: 但工程师喔 大多都觉得太麻烦了 太无聊了 没空 别烦我 你 05/16 18:02
72F:→ strlen: 说的我都不同意 我觉得XXXOOO就是最棒的 是尼不懂 哈 05/16 18:02
73F:→ strlen: 不过就算乱写一通其实也没差啦 听说OpenAI里也全都乱写 05/16 18:05
74F:→ strlen: 哪有时间code review吵架 东西先上先赢R 抢快比什麽都重要 05/16 18:05
75F:推 bartd0037308: 推推推 05/16 18:57
76F:推 lchcoding: 可是吵架很累馁 05/16 19:13
77F:→ lchcoding: 我水瓶,我爱好和平 05/16 19:13
78F:→ lchcoding: 有吵架以外的方法吗? 05/16 19:13
79F:→ strlen: 有 那就是长官或资深说怎麽做 你就怎麽做 05/16 19:56
80F:→ lchcoding: 好吧!那看状况吵好了 05/16 20:07
81F:推 Boska: 大神推 05/16 20:40
82F:推 gino0717: 桑原老师说过 架是要两个人才能吵的 05/16 20:52
83F:推 seal0112: 推 05/16 21:29
84F:推 johney719: PCMan推一个 05/16 22:24
85F:推 rtoday: 推大神 05/16 22:48
86F:推 TaiwanUp: Google用内部工具Blaze直接否决高耦合 才能不吵架 05/16 23:09
87F:→ strlen: 那基本上就算是长官或资深说你要怎麽做 你就得怎麽做XD 05/17 00:11
88F:推 qoozxc789: 深有同感 05/17 01:14
89F:推 Suleika: 推神兽 05/17 02:25
90F:推 leon1757tw: 推 05/17 02:56
91F:推 prag222: oop重点写介面做啥?会写的直接上手 05/17 07:12
92F:推 jhjhs33504: 看需求吧 有场景是要把code喂给编译器看那就另当别论 05/17 13:23
93F:推 jay123peter: 推 05/17 16:33
94F:推 shortoneal: 该怎麽切没有个圣杯,但核心就是要为爽跟快 05/17 19:04
95F:→ shortoneal: 爽 = 好维护好追问题,快 = 开发不会相依性一堆绑手脚 05/17 19:04
96F:→ shortoneal: 虾拆但是会往反方向前进的,就是吵 = = 05/17 19:08
97F:推 nfsong: 推 05/17 21:18
98F:推 attacksoil: 有时候写interface是怕把依赖方向搞烂 有建议吗 05/17 22:28
99F:推 gilingking: 大神推推 05/18 01:30
100F:推 imhaha: 推推 05/18 08:27
101F:推 yang5d2008: 好猛 05/18 12:10
102F:推 r8106087: 推 05/18 17:32
103F:推 lchcoding: 谢 strlen,gino0717,TaiwanUp,shortoneal 05/18 20:48
104F:→ lchcoding: 4位大大提供的方向 05/18 20:48
105F:推 h44256: 谢谢大大分享!讲的超清楚 05/19 00:09
106F:推 Samuellu: 朝圣 05/19 10:39
107F:推 wistful96: 推 05/19 12:47
108F:推 Eide: 推 05/19 22:46
109F:推 youcanfindit: 推 05/20 00:55
110F:→ tim96tim: 谢分享 05/20 09:18
111F:推 f0915034335: 推,这些真的是慢慢工作才会理解到的 05/20 17:33
112F:推 iamOsaka: 推 05/20 19:25
113F:推 knme: 推 05/20 19:42
114F:推 cchao28: 感谢分享 05/20 22:41
115F:推 s860134: 按需求服务 还有渐进式的抽出共用 05/21 08:34
116F:推 tsaigi: 但c#要mock的话不是一定要interface吗? 不测试的话的确 05/21 11:00
117F:→ tsaigi: 是不用interface啦 05/21 11:00
118F:推 jennya: 热爱尝试当下流行的新工具新理论的工程师,常常也是团队主 05/22 01:58
119F:→ jennya: 力,很难找到理由阻止他们尝试新事物 05/22 01:58
120F:推 CH1SIR: 推 05/22 12:29
121F:推 Inglenook: 好奇Google 那样要怎麽管理不同套件之间的相依性? 如 05/27 18:01
122F:→ Inglenook: 果都要保持所有test全过的话 几乎不太可能推新功能? 05/27 18:01
123F:推 markbex: 推 这如人月神话所说,软体之中「没有银弹」 05/27 23:12
124F:推 Demonic1013: 专业 05/29 00:00







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP