1
hellowmykami 2019-03-15 16:46:27 +08:00
打扰了告辞
|
2
mokain 2019-03-15 17:18:51 +08:00
花一个月跟头儿说重构代码吧!
|
4
ifxo 2019-03-15 17:24:45 +08:00
只要结果,不管过程
|
5
yoke123 2019-03-15 17:25:02 +08:00
爽啊
|
6
javaWeber 2019-03-15 17:25:49 +08:00
我刚进某公司,唉。。
变量名有拼音,拼音首字母缩写。 方法名有的大写,甚至还有下划线。 有的函数居然长达 400 行。 虽然代码很不规范,但是我没有其他更好的公司选择。 我之前接触的都是小项目。现在做的项目大了点,有十多个服务模块。 有点担心需求没法及时完成 。 |
7
learnshare 2019-03-15 17:27:14 +08:00
正常的,而且领导通常不让你优化
|
8
archxm 2019-03-15 17:27:30 +08:00
你行的
|
9
finab 2019-03-15 17:28:09 +08:00 1
不知道为什么,感觉你说的这些问题还不算太 shi ,我完全扛得住
|
10
cookbook 2019-03-15 17:29:54 +08:00
处理这种代码是我的强项,梳理的过程很爽
|
11
TingHaiJamiE 2019-03-15 17:32:46 +08:00 5
“能跑的线上代码不要动”
|
12
Kirscheis 2019-03-15 17:41:38 +08:00 via Android
小问题。。去年刚参与了某行业一个著名软件的开发,里面上千行的函数随处可见,还有各种早期 C,Fortran 代码的残留。。照样可以硬着头皮写下去。。。
|
13
ily433664 2019-03-15 17:42:10 +08:00
应该是很多人接手过
|
14
983081882 2019-03-15 17:42:15 +08:00
我也差不多 把老代码 Java 和 C++都有 翻译成 Java 还不能随心所欲 老代码日志随便打 111 222 333 随处可见 魔法值没注释 简直头大 最可气的看着老代码有的的地有逻辑问题 这是翻译还是不翻译 好挣扎
|
15
uTOmOuk3L6sb4MSI 2019-03-15 17:42:27 +08:00 via iPhone
@zycpp #3 妙哉妙哉
|
16
tcdh 2019-03-15 17:44:45 +08:00 via Android 2
曾经接受过一个内核模块,两千多个全局变量,一个函数最长 3000 行。花了 6 个月才改完。
|
17
across 2019-03-15 17:56:20 +08:00
不是封装太差我就扛得住,上面几个大部分都是风格问题。
算法或者 MagicNumber,如果没有点注释说明倒是读起来比较累···· |
18
jmc891205 2019-03-15 18:18:40 +08:00
是 c++的项目的话可以理解
应该有一段不短的历史了 说不定还是由一段古老的纯 c 代码发展而来 |
19
Leigg 2019-03-15 18:32:21 +08:00 via iPhone
别乱动,出问题了跑不脱
|
20
dinjufen 2019-03-15 18:50:36 +08:00
可能是很多人接手过的,都不想改罢了
|
21
l00t 2019-03-15 18:53:40 +08:00
能用就行。接手这种状态的代码也是正常情况,用不着惊讶。
|
22
Justin13 2019-03-15 18:57:13 +08:00 via Android
见过 1500 行的类,也见过 1800 行函数(数据引擎)
|
23
iceheart 2019-03-15 19:08:18 +08:00 via Android
这都小问题,到处是全局变量静态变量的才是真的有问题,头文件里静态变量声明才是问题
|
24
w01230 2019-03-15 19:32:43 +08:00
换个角度想想,有不少公司代码规范也是不同情况下命名规则不同。
|
25
anyele 2019-03-15 19:37:12 +08:00 via Android
这种代码不是正常操作?
|
26
guokeke 2019-03-15 19:41:19 +08:00 via Android
如果向老大吐槽,只会让老大觉得你不够专业。要么硬着头皮搞,要么走。
|
27
zmxnv123 2019-03-15 20:06:50 +08:00 via Android
有本书叫程序员的呐喊,提到当接手一个复杂的 c++项目时的解决方法..
看到 c++想都不用想,赶紧跑路就对了。 |
28
lepig 2019-03-15 20:26:18 +08:00
稍微截点图给兄弟们开开眼呐
|
29
AngryMagikarp 2019-03-15 21:16:17 +08:00
这个应该是好多代程序员的结果。
|
30
chinese_zmm 2019-03-15 21:19:10 +08:00 via iPhone
是维护还是添加新功能继续二次开发?维护建议不要改,针对 issue 解决就是
|
31
noe132 2019-03-15 21:30:51 +08:00
我见过 200 多行的 if 套 if,各种重叠 if,里面各种 magic number
溜了溜了 |
32
timetolo 2019-03-15 22:55:45 +08:00 via Android
感觉像是我刚写完的代码
|
34
jim1002 2019-03-15 22:57:13 +08:00
理解烂代码也是一门技术
|
35
lhr_lovehoney 2019-03-15 23:01:03 +08:00
祖传代码 hhhh
|
36
xiaottt 2019-03-15 23:56:45 +08:00
传家包,不要乱动
if it works, don't fix it! |
37
fvckDaybyte2 2019-03-15 23:57:03 +08:00 via iPhone
5000 行的 h 头文件路过……
|
38
harde 2019-03-15 23:59:14 +08:00 1
说点恶心的,我们去公共厕所,厕所里很多屎,气味也很臭,但是我们并不是来吃屎的,我们只要解决自己的,为屎山再贡献一点高度就可以了。。。
靠。。。我都写不下去了。。。 |
39
Lighfer 2019-03-16 00:02:07 +08:00
和我去年入职情况一样,画了一个月理清逻辑后像头儿申请重构了,可以看看这个片段:
https://www.zhihu.com/question/20402322/answer/389075475 |
41
zwy100e72 2019-03-16 01:07:39 +08:00
有耐心留下来重构,没想法换地方也行
我这边有个 4k 行的 if 了解一下 |
42
DesertCamel 2019-03-16 01:33:16 +08:00 via Android
楼主,我跟你的情况一模一样。刚进公司,java 后端,发现接手的代码太烂,而且有一部分烂的就是上级写的。代码随便拷贝,混乱的耦合。第一想法是溜之大吉,但目前福利给到位了,外面也很冷,还在观望,并一步步整理重构
|
43
lvxiang119 2019-03-16 09:13:11 +08:00
以前接受一个项目,入口文件 3000+行,优化到 500 行。最后发现无法运行,于是移除了该模块。求夸。
|
44
Moming 2019-03-16 09:27:09 +08:00 via Android
我也遇到了,第一次强忍着改了点交差了,第二次还给我这种任务我就直接不干了,看着脑壳疼。。。
|
45
uyhyygyug1234 2019-03-16 10:31:45 +08:00
那你是没看过丰田的
软件设计的基本要求是模块尽量简单化,因为这样可以一来更易于阅读二来更易于维护。但丰田的工程师显然没有遵循这原则。Barr 使用一种工具自动根据代码的可能分支数量评估函数的复杂度,结果是丰田的软件中至少有 67 条函数复杂度超过 50,意味着运行这个函数可能出现超过 50 种不同的执行结果,属于“非可测”级别。因为为了测试这 50 个不同的结果,必须准备至少 50 条不同的测试用例以及相应的文档,在生产环境中一般是不现实的。作为比较,Barr 表示他自己的公司严格执行的其中一条规定就是任何代码复杂度不能超过 30,否则不合格。而在这 67 条函数中还有 12 条复杂度超过 100,达到“非可维护”级别,意味着一旦发现缺陷( Bug )也无法修复,因为实在太复杂,修复缺陷的过程中会产生新的缺陷。其中最复杂的一条函数有超过 1300 行代码,146 个可能执行路径——正好用于根据各传感器数值计算节气门开关角度 还有一些别的匪夷所思的发现。比如丰田的软件包含了超过一万一千个全局变量。如果你不知道什么是全局变量,那么只需要知道软件设计的一般原则是要尽量少使用全局变量,因为有可能带来无法预测的结果。这里的“少”的意思是“尽量接近零”,绝对不会是一万一千个。 |
46
suzic 2019-03-16 10:52:07 +08:00 via Android
0,1,2,5 我接手的项目也存在…
|
47
srt180 2019-03-16 11:03:15 +08:00
没有代码审查环节吧……做个代码审查,慢慢改起来……
|
48
heber2211 2019-03-16 11:09:10 +08:00
你大概没有见过把入参反复从 map 里取出来放到 list
|
49
ymj123 2019-03-16 11:32:58 +08:00 via Android
你列的这些还好吧。主要是业务逻辑清不清晰,我以前接手的项目,你说的这些全有,并且还是 shell+Java+Python+groovy 的。业务也复杂。出差去客户那里搞了一个月勉强吃透。
|
50
loryyang 2019-03-16 11:39:10 +08:00
最好的处理办法就是:新需求就膏药贴起来,然后代码质量可以成为各种线上问题、开发效率的无赖挡箭牌
然后长远就是:开辟新战场,把垃圾交给后来人 |
51
dearxe2v 2019-03-16 13:56:12 +08:00
根本原因,钱到位了,si 也是香的
|
52
turi 2019-03-16 14:17:29 +08:00
溜了 才是正道,吃屎是人吃的吗
|
53
GeruzoniAnsasu 2019-03-16 14:52:26 +08:00
其实太正常了,会有这样的代码仅仅是因为维护周期太长了而已,并没有什么真的很屎的地方
风格不统一大不了全 refactor->rename 成顺眼的,别改了一半算了够了不改了就行——上一个人可能就这么想的 C/C++混用 也太正常了,项目开始之初一半都会想着“啊 C++运行库太臃肿了我们 pure C 吧”然后几个版本之后“啊 C 写起来太慢了移植到 C++吧反正性能不会掉多少”,然后前面那些 C style 的代码还工作得好好的没必要改就留着了 单函数长有些是没办法,特别是 IO 操作,各种移位拆结构拼指令读写协议字段,或者涉及复杂状态转移而当初又没好好设计状态机模型的,都会变得又长又看不懂,其实个人觉得箭头形 for if for if 都算很好看的了,起码逻辑还是很清晰的,嵌套得再深也说不上复杂,模式是很单一的。那种 reinterpret<uint8_t>(data << 3 | data2>>5&0x3)+(cmd<<16)什么的才比较令人崩溃 编码混用完全不是问题,甚至源码仓库进去出来就能统一的事,觉得这个是问题倒是暴露了整体水平 个人觉得就可读性程度来说最难入手的就是上面说的迷之协议的 IO bug 可维护程度来说最难的是各种原始无高级封装的多线程代码,那个调起来,最高目标很可能是“两个小时之内不会崩” |
54
SyncWorld 2019-03-16 15:20:12 +08:00
不要说代码 shi 有可能你们的老板和我老板一样 早上定需求 中午出 UI 晚上功能上线呢~~~ 同行理解下
|
55
wd 2019-03-16 16:36:39 +08:00 via iPhone
先别急骂人 自己想想为什么会进这样的公司 是不是自己也不行
|
57
Fisonglin 2019-03-16 17:10:48 +08:00
随手看了一眼,函数就有 3000 行,二十多年的老项目没办法啊
|
60
TingHaiJamiE 2019-03-18 08:39:26 +08:00
@harde 话糙的有点厉害...
|