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