在这家公司已经快两年了,从项目的开始就一直在。
进来很多同事也有很多同事离职,代码腐烂的气息越来越重。
期间提出很多建议,如写单元测试、重构代码、整理文档、统一代码风格。
但是基本上只是纸上谈兵,领导每次都给予团队人员不熟悉、每个人的代码风格都不一样等说法。
那我究竟是走还是留呢?每天过来上班看着任务列表就不想工作,实在是不想在这个项目上面写任何代码了。
1
msg7086 2015-05-18 14:52:31 +08:00
我就问一句,钱给的多么。
|
2
em70 2015-05-18 15:01:43 +08:00 via Android
没兴趣就走,青春不等人
|
3
qinkun1234 2015-05-18 15:02:27 +08:00
风格不一样是大问题!
|
4
buf1024 2015-05-18 15:06:05 +08:00
其实,绝大部分公司都这样。除非公司非常牛,才注重代码质量。
|
5
wdlth 2015-05-18 15:06:15 +08:00
每个人的代码风格都不一样……强行找理由
|
6
lynulzy 2015-05-18 15:10:15 +08:00
重构的成本太大了,做好自己该做的不就行了
|
7
kamal 2015-05-18 15:15:56 +08:00
什么是重构,什么不是重构
http://hp.dewen.io/?p=396 |
8
ChoateYao OP |
9
ChoateYao OP @kamal 嗯,我读过类似的文章,我也知道不能大规模重构,我现在就是想一个模块一个模块把重复的功能、复杂的代码都重构,重构当然不是一时半会的事情。但是领导不支持我也木有办法。
|
10
kamal 2015-05-18 15:22:30 +08:00 1
|
11
lancelot 2015-05-18 15:33:00 +08:00
想起这个《程序员的呐喊》
|
12
qinkun1234 2015-05-18 15:40:05 +08:00
@buf1024 非常正确
|
13
tencoldays 2015-05-18 15:40:31 +08:00 3
单元测试、重构代码、整理文档、统一代码风格...典型的程序员式的无意义的折腾。只要项目还work,产品市场规模,生命周期没有很大变化的情况下,重构什么都是浪费公司的钱。一个已经推向市场的成熟商用的产品,代码所占的贡献比例太小了。
|
14
FifiLyu 2015-05-18 15:40:33 +08:00
如果不走,又受不了烂代码。
下次新增功能时,按照功能或者模块,一步步自己重写替换呗! 不要动老代码,不要动老代码! |
15
laotaitai 2015-05-18 15:48:01 +08:00 3
以我在各大大小小的公司和创业团队呆过的经验来看, 不管你走到哪里去, 都是这样的:
work(99%) -> clean(0.9%) -> performance(0.1%). 大部分都一直停落在work上, 那怕是赚钱了, 赚了很多钱, 也还是停在work阶段上. 知道聚美优品吧? 够大吧? 之前够赚钱吧? 根据我前同事说, 一样烂七八糟的, 重构都不敢谈, 为什么不谈? 重构风险太大, 只能一丢丢来, 但是一丢丢来, 跟不上新添加的烂代码. 小团队一开始的目标就是以最快的速度上线, 所以代码不可能写得很好. 如果一开始做项目, 都是反着来(performance -> clean -> work), 在没上线前, 都死了. 如果团队大部分都是 work -> clean -> performance, 你却倒着来, 你只有滚蛋的份儿了. 结果: 如果钱到位, 就这么搞下去吧, 有点空闲时间, 就自己一点点重构模块就是了, 用不着请示领导, 锻炼自己的技术即可, 翅膀硬了, 可以跳到更牛叉的公司去. 如果钱不到位, 并且确定下一份工作薪资更高, 跳槽吧. |
16
msg7086 2015-05-18 15:58:18 +08:00
所以就还是我说的→_→ 钱决定腚
话说我以前参与过比较靠谱的开发环境,是全程要求测试覆盖的,如果要重构,必须老测试全过才能算过。(或者测试写错的情况下,改掉测试,总之要保证测试覆盖和通过) |
17
ChoateYao OP @tencoldays 成熟的产品,代码所占的比例小,这是事实。但每天维护代码的人却是自己,自己每天都混在垃圾堆难道不觉得难受?
@laotaitai 你说的对,但重构的时候对于整个团队来说是需知道且以后提交的代码风格都需要统一,这样子才能把整个项目重构完成并持续良好的运行下去。 |
18
arens 2015-05-18 16:02:51 +08:00
楼主还是挺有理想的,随心而定吧,如果你真的希望得到更好的工作状态,就应该去追寻
|
20
fgwww 2015-05-18 17:27:34 +08:00
团队人员不熟悉、每个人的代码风格都不一样
这些都可以讨论,代码风格统一是必须的,这个完全可以所有人达成共识。不熟悉?不熟悉还不抓紧时间熟悉代码和规范干嘛呢? |
21
jun4rui 2015-05-18 17:43:33 +08:00
我觉得不重构,还是有很多考量的。例如我这里现在一个项目也是稀烂的,超级烂啊,罄竹难书。
但是也没办法,上面首先根本不给你时间重构,而来原来很多地方开发的人早跳槽走了,没文档、代码一团糟、连缩进都爱写不写的看之前我都要先用编辑器重新格式化一遍才能开始看。公司头头又是业务出身根本不懂这些,你要是花大把大把的时间去重构,毫无经济效益,肯定不会同意的。 |
22
myc0210 2015-05-18 18:04:09 +08:00
能跑的马就是好马。重构的钱你出 你就可以重构了。有这功夫能多写几百个所谓的(腐烂模块)。老板绝逼愿意写几百个所谓的腐烂模块。
|
23
lifechan 2015-05-18 18:07:27 +08:00
这年头生存不宜,恐怕老板是想先搞出些花头有了新资本进入再考虑吧
|
24
anoymoux 2015-05-18 18:07:30 +08:00
没必要。。
|
25
ianva 2015-05-18 18:10:29 +08:00
lz 这个问题其实也是个人能力问题,
不只是领导支持不支持的问题,是你开始做起来了么? 有没有能力带领同事一起做这件事? 有没有能力,让其他人一起,在未来的代码中开始写测试,统一风格,而且不需要重构一个项目的情况下? 所有的小公司都会存在类似的问题,这东西不是有没有授权领导,而是你自己有没有这方面的能力,威望,并在一个项目上做好,还能推广 |
26
ianva 2015-05-18 18:13:35 +08:00
重构本身就不一定是一件好事,特别是在有很长历史而且需求就没有被持续整理和更新的情况下,再烂的代码也比你重构出来的项目靠谱。
|
27
loading 2015-05-18 18:29:28 +08:00 via Android
你重构就能写得比现在的好?
|
28
fds 2015-05-18 18:30:06 +08:00
我去的第一家公司的指标是在做新任务的时候有40%的时间可以用来重构旧代码。不过还是得先保证测试覆盖率达到一定程度再说,不然有些边边角角的问题会在上线后突然冒出来。
|
29
vietor 2015-05-18 18:37:48 +08:00
逐步重构,每次只重构非常小的部分,这样才能保证你的目的性。重起炉灶时非常不讨好的。
|
30
michaelye1988 2015-05-18 18:40:29 +08:00 1
我现在遇到和你一样的问题,在旧代码上面加新功能实在太痛苦了,因为项目太复杂,太庞大,我也没有重构一定能比旧代码好的把握,所以我打算自己重写一遍,上面也有人说了,按模块划分。我现在也是这样打算,不过这几天改老代码也有些好处,就是更熟悉项目了。
|
31
Neveroldmilk 2015-05-18 19:11:06 +08:00
跟着混吧,自己潜心研究新技术,碰上待遇更好的公司就跑路。
|
32
Felldeadbird 2015-05-18 19:23:42 +08:00 via iPhone
重构不是你想象那么简单。我现在作为管理,也不能一步到位。楼主自己好好想吧。
|
33
Daizong 2015-05-18 19:24:05 +08:00
对于已经上线工作的项目,不要因为看着不爽就重构。
|
34
DiveIntoEyes 2015-05-18 19:30:57 +08:00
BAT也只这样子的
|
35
alexapollo 2015-05-18 19:33:56 +08:00
BAT也都这样。。
|
36
dryyun 2015-05-18 19:37:55 +08:00
重构根本没有那么简单,除非迫不得已。
|
37
fxxkgw 2015-05-18 19:42:12 +08:00
真的没想象中那么容易啊 楼主!
我在的公司基本都是10年以上的,行业甚至放在国际都是前一二的,但是代码真的要多烂有多烂,一个函数几千行都很正常,但不可否认的是修修补补这么多年,还是挺稳定的。 大企业重构的风险太大,小企业根本不在乎这些,关键不在于公司代码多烂多好,而是你自己能从中学到的。 |
38
tencoldays 2015-05-18 20:14:43 +08:00
其实...代码重构、设计模式、测试驱动这些鸟事,都是做咨询的人或公司搞出来混口饭吃的,比如Martin Fowler和ThoughtWorks... 你什么时候听过Linus要重构linux代码了?
以前写Java的时候,把Martin Fowler当神一样。大家谈架构设计时候,如果不来几个设计模式,都不要意思说话,回头看看太傻逼了,哈哈。 |
39
ruandao 2015-05-18 20:27:38 +08:00
你自己的代码你控制不了吗?
每天分一点时间进行修炼 |
40
fanpenghua 2015-05-18 20:27:51 +08:00
危机=机遇。 每当大叫干的时候,谁都没干。你觉得什么问题?
|
41
yxzblue 2015-05-18 21:03:26 +08:00
从项目的开始就一直在
楼主看来你的实力还不够,居然连点主导力都没有。 既然你都受不了了,又改变不了,那还不一走了之? |
42
mahone3297 2015-05-18 21:08:57 +08:00
lz加油,你可以用自己的时间,从自己那一块,先慢慢试起来。。。
|
43
vjnjc 2015-05-18 21:41:09 +08:00
其实老项目都是这么玩的吧,还有重构起来真的就没有坑?
|
44
jakehu 2015-05-18 22:21:30 +08:00
我也遇到了楼主同样的问题 +1
|
45
yangqi 2015-05-18 22:29:50 +08:00
公司又不是靠代码挣钱,你代码重构的再完美,能给公司带来更多的收入么?
|
46
citysheep 2015-05-18 22:59:29 +08:00
如果高管完全不重视技术,而楼主又想在技术上有所学习和长进,建议楼主换个地方。
确实有些公司由于业务性质和领导的意识,对技术相当不重视,这种地方也许可以赚到钱,但是说实话,自己也会变得越来越没有竞争力。 如果楼主想转管理或者做其他业务,那到无所谓。 |
47
chendao 2015-05-18 23:07:00 +08:00
呵呵 辞职了自己开家公司 然后把原来的公司收购了
|
48
Niphor 2015-05-18 23:22:36 +08:00
之前也像楼主一样有理想,提出需要优化和重构,上面叫我先来个文档,文档交上去一个多月,会上我又提了一次,上面对我说:文档还没看,你再说说看。
之后我就不再提了,不注重代码质量的公司你提它没用,你重构也不会多给你钱。只要能跑,对公司来说就是OK的。 其实这东西主要看领导,领导搓了,那真的没办法,所以,钱多的,混日子吧。 自己捣鼓自己的东西,觉得自己可以了,有战斗力了,跳槽就是了。 |
49
est 2015-05-18 23:28:29 +08:00 1
重构,你要准备付出3倍的精力:
1. 一比一实现原有功能 2. 兼容老功能 3. 把老功能的数据迁移过来,并且平滑升级无缝切换。 没这个精力就不要重构了。 |
50
rockagen 2015-05-19 00:19:05 +08:00
重构阿,构到一半,突然一惊,“ 我艹 ”,从此以后不敢随便说重构二字.
|
51
wanglie 2015-05-19 00:39:02 +08:00
记住:你只是个打工的,不是来改变公司的。
|
52
prestohuan 2015-05-19 00:53:14 +08:00
重构阿,构到一半,突然一惊,“ 我艹 ,改个代码以前要1天,现在需要10分钟,那我不就下岗了吗”,从此以后不敢随便说重构二字.
|
53
LINAICAI 2015-05-19 01:30:09 +08:00
这是洁癖~
看到什么项目都是想重构 的啦 |
54
ibolee 2015-05-19 04:38:10 +08:00
如果是自己的非盈利项目重构是可以的。练手嘛。
如果不是上述情况,还是别重构的好。原因见楼上各位大拿所述。 |
55
xfspace 2015-05-19 08:09:12 +08:00
既然你都问了就在意了.走.........
|
56
simaben 2015-05-19 08:15:17 +08:00
只要老代码是稳定的就绝对不要动,不建议重构老代码。新功能可以按照新的方式写,尽量避免跟老代码有太多的耦合。
|
57
nellace 2015-05-19 08:28:50 +08:00
有些人的价值,是在他离开之后体现出了的
|
58
wwek 2015-05-19 08:38:15 +08:00
不要为了重构而重构.
我觉得重构起码的是 万不得已的情况下. 重构带来的利益比维护现有羡慕的利益更大才会去做重构 |
59
simo 2015-05-19 09:01:08 +08:00
从你领导的一方面可能最主要的问题是:在他眼里不信任你的能力。或者你确实没有这个能力。
这几年我个人经历这种事情有几次,项目确实有问题,提出重构的人也确实自负满满。 希望你的例子不是这种情况。 如果可以,你自己做一份**渐进的**重构计划,**方案定好**,把**时间点**都定好,给领导看看。 |
60
chinawrj 2015-05-19 09:02:09 +08:00
同意楼上的,不要为了重构而重构。重构的时机还未到。重构是要resource的,可能会影响到产品的进度吧,得从全局考虑
|
61
ren2881971 2015-05-19 09:05:04 +08:00
习惯了就好了。。 我前同事还有直接把生产环境的数据库ip 直接写到代码里的呢。。
|
62
RaymondYip 2015-05-19 09:36:01 +08:00
新的模块自己负责的 写好就行啦, TAT 我是被 公司的开发环境了 发布系统搞到蛋疼
|
63
dododada 2015-05-19 10:09:37 +08:00
以前公司的产品,重构过,顶峰60个人,干了靠近两年,当做新品发布的
|
64
stupil 2015-05-19 10:10:16 +08:00
|
65
VienDave 2015-05-19 10:14:07 +08:00
不要动老代码,不要动老代码!
|
66
popbones 2015-05-19 10:28:12 +08:00
项目重构是需要钱的,项目是有预算的,需要重构没预算的时候怎么办?技术人员会觉得领导傻逼,你既然想做就应该做好,就要舍得花钱。但是老板其实心里清楚,不掏钱只有两个原因:1)没钱;2)这个项目不那么重要,不需要那么好。
|
67
wanliang1221 2015-05-19 10:37:48 +08:00
新公司还是先赚钱,代码质量等上市弄了资金再找人搞吧
|
68
birdgu 2015-05-19 10:45:53 +08:00
我觉得楼主需要考虑的是其他同事离职的原因是什么,代码散发出腐烂的气息是否是公司在走下坡路的征兆。
|
69
birdgu 2015-05-19 10:58:45 +08:00
|
71
ivenvd 2015-05-19 11:05:47 +08:00
我只想说,「纸上谈兵」不是这么用的……
|
72
qihboy 2015-05-19 11:15:57 +08:00 1
真的要重构的话,必须有一个能hold住全场的人物,如果只是你有个重构的点子,然后要求大家去参与重构,这基本上是不可行的。你得知道系统的所有部分,哪部分如何重构,并且还得把关,不只是说要重构就行的,很多人其实不知道为什么要重构或是如何重构的。
曾经在前公司重构过一个工具类软件,说是重构其实相当于我一个人把4个人的代码重新整合,统一风格,然后大部分代码重写了,意思就是说一个人把这个软件重新再写了一遍(你造我有多痛苦吗?看着别人的烂代码一边骂还不得不含着泪 写下去,自己接的炮,含着泪也要打下去呀。。。) |
74
ZnZt 2015-05-19 12:14:23 +08:00
你见过javascript代码全是全局变量,各种直接写在html 标签里的onEvent事件,内联style到处有甚至body内还有style标签的代码么
|
75
nuc093 2015-05-19 12:15:10 +08:00
@tencoldays !
|
77
song0071000 2015-05-19 19:23:13 +08:00
的确是重构需要太多精力了。重构好了 boss不会表扬你,但是搞出bug来 就是你的不对了。。
换句话说,就是有点吃力不讨好 |
78
bitweaver 2015-05-19 21:42:54 +08:00
建议楼主暗中写不稳定bug,搞垮搞懒这个项目。
|
79
wizardoz 2015-05-19 22:18:21 +08:00
程序员大多看不起别人写的代码。
统一风格更是扯淡,简单的项目还好说,如果比较大的项目或者用了多个开源库,每个库的风格都不一样,我想问如何统一? 我原来一个新来同事想提议公司全部代码使用匈牙利命名法,但是我们公司主要是做linux的,他不了解在Linux下各种C库根本没有使用这种命名法的。 不要在同一个文件里面写不同的风格就OK了,我觉得程序员包容很重要。 |
80
JoeShu 2015-05-19 22:32:32 +08:00
程序员要学会克制重写代码,重构的冲动
|
81
JamesRuan 2015-05-20 02:36:28 +08:00
@laotaitai 为啥我觉得应该是clean>work>performance?代码不管对不对,首先是思想的体现,代码dirty等同与思想dirty,改来改去改成能work了,谈何维护?
|
82
Navee 2015-05-20 09:57:58 +08:00
对已上线的稳定项目进行重构风险十分大!
除非你们有完善的测试 , 否则不建议这么做 . 你倒是可以在项目中的新功能,按照新的方案实现 |
83
huijiewei 2015-05-21 10:23:34 +08:00
private function dMyQA($request, $response, $app)
{ $pageno = $request['pageNo'] ? $request['pageNo'] : 1; //$request['uid']='18000000000';$request['date']=0; if (!isset($request['uid']) || empty($request['uid'])) { return (array('code' => '-1', 'message' => '缺少uid')); } $jxs = $this->quanxian($request['uid'], '0'); if ($jxs['jxs_brand']) { $jxs['jxs_brand'] = str_replace('[', '', $jxs['jxs_brand']); $jxs['jxs_brand'] = str_replace(']', '', $jxs['jxs_brand']); $jxs['jxs_brand'] = str_replace('"', '', $jxs['jxs_brand']); $brand = $this->db->create_mapper('product_lib_brand')->select('id')->where('pid in (' . $jxs['jxs_brand'] . ')')->find_all_by(); $brandlist = ''; foreach ($brand as $brand1) { if ($brandlist) { $brandlist .= ',' . $brand1['id']; } else { $brandlist = $brand1['id']; } } $where = " and (car_name in (" . $brandlist . ") or car_name is null or car_name='')"; } else { $where = ''; } //print_r($brandlist);exit; //$obj=$this->db->create_mapper('qa') //->where(array('ans_user_id'=>$request['uid'])); if ($request['type'] == '1') { $sqlcount = 'SELECT count(*) as count from qa as a left join qa as b on b.id=a.ask_id where a.ask_id<>0 and b.is_active=1 and a.ans_user_id=' . $request['uid']. ' and a.ans_from_id='.$request['jxs_id'].' GROUP BY a.ask_id'; $count = $this->db->getOne($sqlcount); $page = $this->page($count, $pageno); $sql = $sql = 'SELECT b.id as qid,b.title,b.cat,a.ans_user_name as qname,a.content as acontent,a.create_time,a.reply_num,c.name as class FROM qa as a left join qa as b on b.id=a.ask_id left join qa_cat as c on c.id=b.cat where a.ask_id<>0 and b.is_active=1 and a.ans_user_id=' . $request['uid'] . ' and a.ans_from_id='. $request['jxs_id'] .' GROUP BY a.ask_id order by a.create_time desc limit ' . $page['start'] . ',' . $page['pagesize'] ; $row = $this->db->get_all($sql); //print_r($sql);exit; //$obj->where('ask_id<>0 and is_active=1'); } else { $sqlcount = 'SELECT count(*) as count from qa left join qa_cat on qa_cat.id=qa.cat where qa.ask_id=0 and qa.is_active=1 and qa.id not in (select distinct ask_id from qa where ans_user_id=' . $request['uid'] . ') and dep_role=' . $jxs['depart_id'] . $where;////qa as b ON b.id=a.ask_id'; //where a.id=145 or a.id=139'; //$count=$this->db->getOne($sqlcount); //echo $sqlcount;exit; $page = $this->page($count, $pageno); $sql = 'SELECT a.id as qid,a.car_name,a.title,a.cat,a.ans_user_name as qname,a.content as acontent,a.create_time,a.reply_num,c.name as class FROM qa as a left join qa_cat as c on c.id=a.cat where ask_id=0 and is_active=1 and a.id not in (select distinct ask_id from qa where ans_user_id=' . $request['uid'] . ') and c.dep_role=' . $jxs['depart_id'] . $where . ' order by a.create_time desc limit ' . $page['start'] . ',' . $page['pagesize']; $row = $this->db->get_all($sql); //print_r($sql);exit; //$row=$this->db->query($sql); //$obj->where('ask_id=0 and is_active=1'); } //$count=$obj->count_by(); //$row=$obj->limit($page['pagesize'],$page['start'])->select('a.id as qid,a.title,a.cat,a.ans_user_name as qname,a.content as acontent,a.create_time,a.reply_num') //->left_join('qa_cat as c','c.id=a.cat','c.name as class') //->find_all_by(); foreach ($row as $key => $val) { $row[$key]['qname'] = $this->hidtel($val['qname']); $row[$key]['date'] = date('Y-m-d H:i:s', $val['create_time']); //$row[$key]['url']=$this->h5url.'ywbd/do_index&id='.$val['qid']; if ($request['type'] == '1') { unset($row[$key]['reply_num']); } } $row = $this->clearNull($row); return (array('code' => '1', 'pageNo' => $page['pageno'], 'pageTotal' => $page['pagetotal'], 'pageSize' => $page['pagesize'], 'message' => 'success ', data => $row)); } 这种代码怎么维护,求老司机带 系统里面全是这种代码 |
84
nxbtch 2015-05-21 11:34:27 +08:00
走吧
|
85
xinxin2025 2016-09-02 10:44:33 +08:00
@kamal 嗯,我读过类似的文章,我也知道不能大规模重构,我现在就是想一个模块一个模块把重复的功能、复杂的代码都重构,重构当然不是一时半会的事情。但是领导不支持我也木有办法。
其实我现在也是类似的情况。 其实我也没想过一下子就大规模重构,但是,身边的同事,经常连 抽取函数(比如复杂的判断条件,一个几百行上千行的函数中到处出现可以各自为政的部分,至于重复代码我就不说了,那个,多得是~~) 更有甚者,他们连 代码缩进都懒得捋一下...... 这些天刚结的一个项目,我是固件的主导,但因为我一下子有点冒进的重构,最后惹出了点麻烦,时间赶得很紧。 也因此,破坏了一些原有功能(我知道,这是我的错,但这不代表重构是错的) 你也说过,代码日益腐烂,我相信你一定能理解我的心情。 结果,现在,原来还挺开明的领导越来越,,,甚至直接放弃我改动过的项目,宁可重新回到原框架上,让另一个同事重新理。 所谓理就是,不改动原有代码,对,就是连缩进都不动那种! 然后加进新功能而已。 还留下一句评论:做项目开发(应用)打击创新,还说华为要求任何项目使用原有成熟代码一定要超过 70%,只允许 30%创新。 可是,重构也叫创新?我承认我对重构做得不够谨慎和小心。但是,这样......诶 我几乎要崩溃了!也想过离开。 可是,我有更多的时候想过离开,有更多比这个更加充分的理由,但都没有离开。 何况,从我以往的工作经验来看,这家公司在这方面并不是唯一的固执者,更不是最固执的,即使换,恐怕也是一样。 于是我就只能在 强迫自己 和 不甘 之间苦苦挣扎。 |
86
xinxin2025 2016-09-02 10:47:05 +08:00
但是,现在,关于重构,我认为,确实有很多东西值得商榷!
一件事情,应该知道好处也要知道坏处。 知道什么时候做,也该知道什么时候不该做。 具体,还在整理思路中。 比如 MF 就没考虑到一件事情,做这件事情的 心理困境。(大家的心理困境) |
87
kamal 2016-09-18 09:44:41 +08:00
|
88
songsong 2017-05-04 18:00:43 +08:00
辞职吧 , 跑路吧
|