楼主本科生,这周接手了校宣传部一个比赛网站的开发任务,代码是好几年前祖传下来的 PHP Yii 框架开发,之后每年这个比赛都会加一些新需求,然后每年学生都得修修补补
今年新加了几个分项,发现整个库表结构都得改,加上架构逻辑看起来很分散(不知道是框架的范式还是设计的问题),某个功能变了五六个文件得连带着改,还有不知道为什么某些表单结构和路由也放在数据库....。
部署到服务器后上传图片的接口崩了,半天也没定位到 Bug,易班认证的 OAuth2 接口也崩了,(说因为要推广易班所以需要先易班认证才能在本站注册),发现整个代码很多补丁的痕迹...头大 orz
老师本来告诉我有个功能前面几届都没给她实现,我当时没看项目代码,想着不是多复杂的功能,拍胸脯我今年肯定给她搞定...现在我明白为什么前几年没有实现了
1
mamahaha 2019-03-31 11:36:07 +08:00 21
而且以后别人接手这个代码时,你也会被接手者划分到垃圾代码产生者来看待。
|
2
CEBBCAT 2019-03-31 11:38:18 +08:00 via Android
先上 git 私有库,再上重构大法?
|
3
lovedebug 2019-03-31 11:40:02 +08:00 via Android
重写可能更快。这类校内网站功能又不是很多很复杂。
|
4
reus 2019-03-31 11:40:20 +08:00 1
重写吧
|
5
whoami9894 OP |
6
CEBBCAT 2019-03-31 12:03:36 +08:00 via Android
@whoami9894 快跑!!!
|
7
blackmirror 2019-03-31 12:10:01 +08:00 11
每个接手都想重写,到最后都是修修补补
|
8
mscststs 2019-03-31 12:12:37 +08:00 via Android
@whoami9894 老师不懂开发,那么老师的意见很重要吗??不懂你们的逻辑
|
9
emmettwoo 2019-03-31 12:14:53 +08:00 via Android
@blackmirror 太真实了
|
10
whoami9894 OP @mscststs
这种项目大家其实都不愿意做,老师又催得紧,所以按自己的意思重写的话最后还得担责任,没有必要 |
11
whoami9894 OP @blackmirror
刚开始那几年修修补补应该是能用的,之后每年比赛要求都变更,今年变化大新加了几个分项...唉 |
12
Mac 2019-03-31 12:41:01 +08:00 via Android
重构呗
|
13
2589595915 2019-03-31 12:48:26 +08:00 via iPhone
老师算什么东西。你觉得该弄就弄。
|
14
mscststs 2019-03-31 13:02:32 +08:00 via Android
@whoami9894 允悲,学校里面做苦力其实还蛮难受的
|
16
scukmh 2019-03-31 13:11:00 +08:00
又没有钱,没事干嘛给他打工。
|
17
notreami 2019-03-31 13:48:54 +08:00 1
钱给够,时间给够。否则按需求改改完事,短板优化原则。
每维护个"屎山"都重写,浪费时间和精力,最关键 ROI 太低,怎么证明你的能力? |
18
reus 2019-03-31 13:55:28 +08:00
@whoami9894 你先做出来,然后拿给老师看,如果做得好,自然就用你的了。学生时期,有这么一个机会,就要抓住。就算最终你的东西达不到要求,不用你的,你还是得到了宝贵的经验啊。
|
19
okjb 2019-03-31 13:59:12 +08:00
三年三年又三年,缝缝补补又三年,能用就行
|
20
reus 2019-03-31 14:09:26 +08:00 1
如果你处理不了,那你就会成为老师口里的“前几届”其中之一
|
21
qinkangdeid 2019-03-31 14:27:17 +08:00 via Android
就像楼上一位兄台说的
每一位接收者在看代码之后 心里都想着重构 重构了几个方法后 放弃的概率越来越大 重构好了 表面上看和以前一样 老板(老师)又不看代码 觉得有什么区别 你说以前的版本在这个地方有个 bug 老板说你不能修复这个 bug 吗 怎么要重做 还要那么多时间 你说我这次重构为了以后应对新需求上有更多的灵活性 老板可能心里还没有任何需求 ....... 总之 领导不挑头的事情 很难重做 团队团结还好 不团结 重构导致新问题了 锅就是你的了 大家都说:以前的又不是不能用 的时候就非常尴尬了 题主倒是可以提一提 看看老师的支持程度 学习实践的话 题主可以自己私下有时间自己重构 一部分模块 别动老版本就行 |
22
qinkangdeid 2019-03-31 14:34:07 +08:00
@blackmirror 太真实了 真实得不行 每个接手者刚看到代码都会指点一遍前任 这个地方怎么这么写?这里怎么不抽出来 这里多此一举啊 要是我我就不这么做 这代码不能看 垃圾 我来改 改完几个方法后 最后 大都默默的 Ctrl+z......
|
23
xiaomingVTEX 2019-03-31 14:47:37 +08:00
@qinkangdeid 太真实了
|
24
kindjeff 2019-03-31 14:56:29 +08:00 2
|
25
vcluopeng 2019-03-31 15:01:36 +08:00
如果你的代码可读性高,并能留下详细的开发注释和文档.那么就整个项目重构吧.
当然也要有信心在老师规定的时间内完成. 不然就继续舔砖加瓦,毕竟有句古话:没有金刚钻,不揽瓷器活. 还有记住 霍夫斯塔特定律 |
26
cz5424 2019-03-31 15:25:20 +08:00 via iPhone
新开个项目写新功能,旧的他被慢慢的抛弃
|
27
deepkolos 2019-03-31 15:34:37 +08:00
我比较幸运,上来就重写
|
28
farseeraliens 2019-03-31 15:48:30 +08:00 via iPhone
@CEBBCAT 不明白重构跟 git 什么关系?
|
29
yuhr123 2019-03-31 15:50:04 +08:00 via iPhone
把需求梳理一遍,用 python 重写。
|
30
e2c 2019-03-31 16:03:49 +08:00
新三年,旧三年,缝缝补补又三年
看你的了啦 |
31
CEBBCAT 2019-03-31 16:25:11 +08:00 via Android
@farseeraliens 一来可以快速回到原来的状态,二来正式开发也需要 git 不是
|
32
encro 2019-03-31 19:14:27 +08:00
最厉害的程序员就是能将一堆垃圾代码理出条例来。
我以十多年的经验告诉你。 |
33
encro 2019-03-31 19:20:46 +08:00 2
我的经验还告诉我,要舍得删除代码,看不懂的都删,直到程序跑不通了再去看(前提是有版本控制),可能你就能看明白以前的代码了。
明显感觉你是开发功力还不够,需求不了解,不敢去问 boss,不愿意深入思考最有效的解决问题的办法,潜意识找理由放弃。 如果你把这个任务当做是你毕业前最好的一个练手机会,那么相信你能成为导师最看重的学生,也能在毕业时超过大部分同学。 |
34
x7395759 2019-03-31 19:29:37 +08:00
就一个建议,重写!!!
|
35
Hyperion 2019-03-31 19:33:23 +08:00 1
当然是偷梁换柱釜底抽薪,写一套寄生代码附加在原来的代码上(在前端还是后端动手脚都可以),然后另外开一个目录跑新写的程序,来提供新的接口啦。
你说要在页面上新加两行分数?原始模板上直接对着结构写 Vue 的结构和标记,对着主体容器直接一个 new Vue,然后该怎么请求新结构就怎么请求。 重构这种事情,说说当然是容易的,但上学阶段根本不可能嘛,一没动力二没精力,最后还是吃力不讨好。这种东西刚开始很有热情,但你社团活动不搞了嘛?四六级单词不要背嘛?什么晨跑锻炼不要搞了嘛? |
36
Alpha486 2019-03-31 19:45:35 +08:00 via iPhone
这不接手则已,一接手就明白为啥前人连简单的功能都做不好!😂
|
37
sazima 2019-03-31 20:39:42 +08:00
给工资吗
|
38
whoami9894 OP @scukmh 没酬劳,团队的任务哈哈
|
39
whoami9894 OP @notreami
按需求修修补补感觉头大,比重写还累 |
40
whoami9894 OP @reus
感谢您的建议,决定重写了 |
41
whoami9894 OP @qinkangdeid 重构就不了,本来就不太喜欢 PHP,打算直接重写了。明天先探探老师口风
|
42
whoami9894 OP @vcluopeng
能不能来得及我心里也没底,我自己不会前端,感觉工作量挺大的 |
43
whoami9894 OP |
44
ifxo 2019-03-31 21:22:14 +08:00
不用管了,拉泡屎走人
|
45
whoami9894 OP @x7395759
重写重写走起 |
46
whoami9894 OP @Hyperion
让我改原来的可能更花时间,而且还痛苦,不如重写了 |
47
whoami9894 OP |
48
encro 2019-03-31 21:43:10 +08:00
@whoami9894
连开发都不会,还会安全了? |
49
encro 2019-03-31 21:53:27 +08:00 2
整天说重构的,有几种人:
1,代码没看懂,反正要重构,潜意识已经做好走人准备; 2,代码看懂了,借重构争取更多时间; 3,代码看懂了,而且知道重构对自己来说是小 case,时间也能自己搞定和争取到,确信能写出以后更容易维护的代码来。 切莫忘记很多时候你是无法重构的,比如你面对整个淘宝的代码,你只能一点一点平滑升级,这时才是考验你的架构和能力。 就如人生不能重来,打好手上现有的牌才是最佳途径。 |
50
ytmsdy 2019-03-31 22:33:01 +08:00
如果就维护几个月,那就忍忍吧。
如果要维护几年,那就长痛不如短痛直接重构吧 |
52
xuanyuanaosheng 2019-03-31 22:43:05 +08:00 via Android
重写吧,正好练手
|
53
siriussilen 2019-03-31 22:48:19 +08:00 via iPhone
如果是团委学生会之类的老师 我的教训就是千万别干. 他们拿你当苦力还不给钱 变了方法的给你提需求 一旦完不成 他们还会质疑你的能力……
|
54
notreami 2019-03-31 22:51:45 +08:00
@whoami9894 完全不需要考虑成本。。。年轻,真好~~~
|
55
learningman 2019-03-31 22:55:32 +08:00
@Hyperion 记得原来我在一个 C 项目里边藏了一个 Go 的二进制文件,至今还能用 qwq
|
56
metabot 2019-03-31 23:00:43 +08:00 via Android
易班。。这玩意儿。。令人怀念的大学生活
|
57
whoami9894 OP @encro
您这样的逻辑就有问题了,安全和开发确实联系紧密比如一些业务逻辑漏洞,但毕竟侧重点相差很远,并没有一个先行后继关系。开发要的工程能力,架构,优化等等安全是不需要涉及的,而安全我举个 bypass 的例子: `"".__class__.__mro__[-1].__subclasses__()[60].__init__.__globals__['__builtins__']['eval']('__import__("os").system("ls")')` 再有您这句"连...都不会,还会...了?"让人听起来很不是滋味 |
58
whoami9894 OP @ytmsdy
维护确实只有几个月,然后就丢给下一届做了,可是据去年的说这老师经常加需求 |
59
whoami9894 OP @siriussilen
您猜对了,党委宣传部老师,据说往届的说这老师"屁事"很多,三天两头加需求,确实像个苦力,不过也就当积累经验了 |
60
whoami9894 OP @learningman
popen 调用二进制吗,为何不编译成动态库呢 |
61
whoami9894 OP @metabot
和超星学习通一样,处处被诟病,几乎没人用,都是上级一厢情愿的推广 |
62
0TSH60F7J2rVkg8t 2019-03-31 23:36:08 +08:00 via iPhone
如果这项目给钱,而且钱够多,值得你花时间做的话,那就重写一遍;反之随便改改就完了
|
63
zjsxwc 2019-04-01 07:09:23 +08:00 via Android
我的建议是请把代码写的更烂一点,最好来个全局混淆,让后来者无法维护
|
64
loading 2019-04-01 07:27:02 +08:00 via Android
在现有数据库结构魔改,用特殊技巧使用数据库字段,似的能支持新需求,我觉得这个比重写更有挑战性。
重写其实是另一种逃避方式。 |
65
ytmsdy 2019-04-01 08:57:08 +08:00 via iPhone
又不给钱!重写什么啊!!
|
66
spotfg 2019-04-01 09:17:55 +08:00
我今年运气不错,换了家新公司,上来上班第一天上司就说老板要求重构代码,这个月搞定。。。现在 4 月了,搞得差不多了……所以就加班一个月
|
67
learningman 2019-04-01 09:19:01 +08:00
@whoami9894 在本地再开一个端口,用 socks 通信
是社团的项目,基本没有架构。我刚刚扫了一眼发现还有可疑的 pyc 文件 |
68
annielong 2019-04-01 09:23:11 +08:00
有时候只能魔改,新建表,把特殊配置全写进去
|
69
guoyuchuan 2019-04-01 09:28:21 +08:00
重构大法
|
70
Seney 2019-04-01 09:39:14 +08:00
@whoami9894 那你就直接说开发 1.3/1.4/1.5/。。。 学校这种一般都是编程很粗浅的同学写的,当时可能不知道什么叫工程
|
71
encro 2019-04-01 09:39:27 +08:00
@whoami9894
这个算是浅层次安全吧,语法上的,未来很多都要交给机器, 未来这样的安全岗位应该有限(人数和发展前景), 高级点的应该是架构级别的。 架构级别别说不懂开发。 解决安全问题更多是架构级别的解决。 比如架构级别防止注入,网络通信安全,防止爬虫。都需要开发基础。 |
73
mogutouer 2019-04-01 09:59:52 +08:00
所以你以为 重构 这个词是怎么来的
|
74
liuzuo 2019-04-01 10:00:05 +08:00
如果原代码能做到解藕,就按照要改的功能重写,微服务化。
如果做不到,就在原有基础上魔改吧。 |
75
cwx391497 2019-04-01 10:02:14 +08:00
代码是屎山已经不恐怖了, 恐怖的是, 测试和文档也都是屎山
|
76
gscoder 2019-04-01 10:05:35 +08:00
没必要重构,重构会发现有很多细小的功能点,到时候他们会说,之前可以这样这样现在怎么不行了,又不是要长期维护的项目,随便改改就行了
|
77
alexmy 2019-04-01 10:35:24 +08:00
我这也是 5.6, yii1,性能部分重构下,就一个人,才没有精力去重写,现在毕竟稳定,老板其实只要能用就好,并不喜欢重头开发一遍,万一开发出来的又像之前 si 一样怎么办。
|
78
no1xsyzy 2019-04-01 10:36:34 +08:00 1
@whoami9894 #5
简单地说:这不是 1.1,这是 1.1.0.0.α.zebra.Ⅳ.㎏.勹.г.\frac{ω5}{在吗?} 要改成 1.2 需要在不改动功能的情况下把那些东西都去掉,也就是需要做很多次换心手术。 ——每一次重构都是一个未知生物的换心手术:确定边界,取代边界(写测试),替换部件,确认新部件状态良好,还原边界。 |
79
hellowmykami 2019-04-01 11:00:46 +08:00
魔改
|
80
zarte 2019-04-01 11:30:35 +08:00
有追求就重构
求稳就在现有基础上打补丁留给下一任。 |
81
jackmod 2019-04-01 11:36:01 +08:00
之前用 jekyll 重构一个大点的静态网站搞了好几天。这活不太好做。
|
82
leekafai 2019-04-01 11:37:18 +08:00
每个人都抱着重写的愿望去维护,所以最后四不像,各有各的风格
|
83
jimrok 2019-04-01 11:38:28 +08:00
注释里不要忘了加"// fuck xxx, FU"
|
84
JimiJimi 2019-04-01 16:56:41 +08:00 1
最讨厌学校分配不懂技术还喜欢瞎命令的老师来管理技术部
所以当年我解散了技术部 是真的闹心 |
85
whoami9894 OP @loading 嗯确实我有点逃避的意味在里面,还是经验能力不足吧....魔改的话对我来说感觉要花更多的精力
|
86
whoami9894 OP @zjsxwc 所以干脆在我手上重写一遍,但随着未来加新的需求修修补补,肯定又会变成现在的屎山
|
87
whoami9894 OP @Seney 我看他的代码风格架构等等可能算是学生中不错的了,但跟工作多年的前辈们比肯定有很大差距。变成现在这样还是因为每年修修补补加上维护者水平不一
|
88
whoami9894 OP @encro 您可能不太了解,说的只是安全的一个片面,pentesting 工程师、reverse 工程师等等,很多安全问题没有办法从大的架构层面解决。而且您关注一下 defcon 等等安全会议,安全研究员们研究的大多就是我说的语言框架层面的新式漏洞,比如 PHP 的 phar 协议
我们做过 ML 的 WAF 的玩具项目,也了解过市面上想关产品,被 AI 取代完全取代还是很遥远的(真有这一天那么应该 90%职业已经被取代了) > 架构级别防止注入,网络通信安全,防止爬虫 架构级别怎么防止注入我还真不知道,愿闻其详。而举例 SQLi,即使有参数化查询能完全防止,但依然能在各大 SRC 平台看见 SQLi 漏洞,所以基础安全人员不会衰减的。后两样是基础,不太明白您说的不会是什么意思 而且您说了这么半天依然没论证您“开发和安全的先行关系”的逻辑 |
89
whoami9894 OP @liuzuo 代码整体感觉确实是分成不同组件层面,但是某些逻辑分散纠结在一起,感觉很难改单个功能
|
90
whoami9894 OP @alexmy 唉我对 PHP 仅仅停留在语法层面,日常也没有拿它开发过项目,所以看着那套范式还是很头疼的
|
91
whoami9894 OP @no1xsyzy 不重构了,感觉我也没能力去重构的比现在好,还是换个熟悉的语言重写吧
|
92
whoami9894 OP @jimrok 哈哈哈不太好不太好
|
93
sannyzeng 2019-04-01 19:37:18 +08:00
写代码最重要的还是第一代,不然后面都会给带偏。。。
|
94
encro 2019-04-02 09:14:45 +08:00
@whoami9894 “代码都看不懂能做安全?”
|
95
alexmy 2019-04-02 10:10:26 +08:00
@whoami9894 我接手的时候,还看了半天语法,我本身是做游戏开发的。
|
96
whoami9894 OP @encro
你觉得我看不懂就看不懂吧,你这逻辑能力我也是服了,回复全程不讲逻辑无脑杠,block |
97
whoami9894 OP @alexmy 老师催着这周四前要上线,再慢慢踩坑怕是肯定来不及了
|