这几年写东西基本都是一个人... 普遍小公司
回想起来自己第一年写的也挺烂的。
后面参考比较多的是几个 Java 开源的项目(电商项目,博客系统这种), 好了很多。
我觉得差不多的水平就是遵循类似阿里巴巴 Java 规范这种, 不能大片重复 Copy 代码, 合适的面向对象, 结构清晰。
到目前为止接触过 4 家公司的代码, 遇到的情况:
A 司: 代码风骚 是个高手, 不守规矩, 但是质量不能算差。
B 司: 政企项目 有代码审计, 看上去稍微好点, 但是还是大片 Copy 这种大量偷懒行为。
C 司: 外包写的项目, 惨不忍睹, 一个类 7000 行, 一个 Js 文件几千行, 授权和角色管理稀烂
D 司: 整体写的比较随意, 但好歹没大片 Copy, 勉强能接受, 授权和角色管理稀烂。
代码质量能比上个 XX 系统的开源项目的公司有多少呢...
1
litguy 2022-07-14 10:13:06 +08:00 6
还是我们这些 C/C++ 写底层的靠谱,质量不行马上给你脸色,尤其内核模块,直接挂系统
|
2
felixcode 2022-07-14 10:18:21 +08:00 via Android
你是看到代码表面乱,不懂底层。
狗头:) |
3
dwlovelife 2022-07-14 10:18:28 +08:00 26
没有 review ,没有 git 工作流插件管控,没有规范管控,再牛逼的公司都不行,一个团队,每个人的代码水平层次不齐,经验也不一样,有多少人把工作当成热爱,有精力和能力写开源的最起码能证明水平尚可,热爱 coding ,去公司上班感觉不太一样,产品催促,巴不得三天活一天干完。所以代码质量糟糕是根本问题是一个公司技术职责管理问题,做业务的很少有人在乎,只要不要太离谱能跑就行,能马上上线就行,所以你想团队里每个人都能写出好代码就几乎不可能,因为一开始的目的就是为了做功能,快速产出,而好代码是要反复打磨,精心设计的,是要花时间的,这跟大部分公司主流业务都违背。
|
4
potatowish 2022-07-14 10:21:42 +08:00 via iPhone 1
代码质量和写代码的人技术水平、编码习惯、工时有直接关系,语言本身也是一道门槛,上手入门的难度越高,门槛就越高,写出烂代码的可能性就越低,起到了一个过滤的作用。
|
5
nothingistrue 2022-07-14 10:23:06 +08:00 3
跟 Java 无关,国内是常态。这跟办事风格有关,国内压根就不留代码质量改善的时间。代码质量别说提高了,就是维持,也很占开发成本,并且这占得还是团队成本而不是个人成本(意味着 10 个人中即使 9 个人愿意加班维持代码质量,只要有 1 个人不原因那整体质量就没法维持)。
就拿阿里巴巴规范来说,看着很规范是吧,但你要么 007 要么写出来看着遵守规范实际上质量糟糕的代码(并且还得 996 )。可以比较以下阿里巴巴 Java 规范跟 google java 规范,你会看到在规范之外的不同办事风格。 |
6
nothingistrue 2022-07-14 10:26:08 +08:00
开发成本上举一些简单的例子,结对编程或者代码评审,全覆盖单元测试,这些随便上一个就得让开发时间翻倍。而国内盛行的是只看你有没有在规定的时间内完成可运行程序。
|
7
coala OP @nothingistrue 想起我也写过一个烂项目, 当时 1 个月时间, 真的太着急了, 还承诺做完了就可以撇清关系... 维护与我无关, 后 15 天就直接放飞自我了, 只想快点结束这种日子... 后来让又让我维护 .. 改的时候好痛苦
|
8
chendy 2022-07-14 10:31:50 +08:00 2
常态,想把质量拉满成本太高了,请不起那么多高手,花不起那么长时间,外加各种历史遗留问题
至于说国内质量不行的,接触过一些国外大软件厂的代码,一样稀烂 |
9
coala OP @potatowish 这是骗我去改行做 C/C++ 狗头:)
|
10
zxxufo008 2022-07-14 10:59:30 +08:00
写代码和写文章一样,闭门造车不会有进步的
|
11
Oktfolio 2022-07-14 11:03:49 +08:00
昨天我代码写得直接发脾气,百万行的代码,只有 100 多个 toString ,其中至少有 90% 是我写的,你说代码质量怎么样。
|
12
fengpan567 2022-07-14 11:05:59 +08:00
建议参考不可能三角
|
13
IvanLi127 2022-07-14 11:13:34 +08:00
|
14
codingbody 2022-07-14 11:17:56 +08:00
刚入职新公司,代码也是稀烂,字段名、属性名,表名,都是拼音首字母,完全不知道啥意思,大段的 copy paste , 都想跑路了。
|
15
BanGanExpert 2022-07-14 11:21:02 +08:00
@codingbody 这种过分了,当然你可以看看有没有其它项目,万一也有好点的呀,都这样就提桶跑路了呗
|
16
siweipancc 2022-07-14 11:26:32 +08:00 via iPhone
上一个组,功能少有时间单测,一年线上 bug 低于 3 个。
现在这个,线上 bug 都 200 多了,问就是工期紧没时间 |
17
op351 2022-07-14 11:29:35 +08:00
有多少钱干多少事
外包稀烂归稀烂 起码能跑得通 再说了 外包实际到码代码的人手上的钱少得可怜 中高层把钱全吃光了 |
18
lujiaosama 2022-07-14 11:36:20 +08:00 1
烂代码就是克苏鲁屎山, 除了难以维护, 还对人有腐化作用. 一开始兢兢业业, 后面一起加入放飞自我...
|
19
ericmzhu 2022-07-14 11:45:20 +08:00
很多就像小学生写字一样,连基本的空格分隔,对齐都做不到。别谈什么代码质量了。
|
20
yaphets666 2022-07-14 11:55:02 +08:00 1
代码稀烂不一定是代码的问题,需求奇怪,没设计好,时间紧,不稀烂能咋办?
|
21
wtsamuel 2022-07-14 12:17:41 +08:00
有没有可能烂代码才是常态
整洁的代码是多次删除重构后的产物 |
22
muchenlou 2022-07-14 12:24:00 +08:00 via iPhone 1
我是工作不是生活,如果编码是我的生活,我会很乐意让它优雅,别的不说,你让我对接的产品给我多点时间吧。我能写的好一些的。
|
24
yuruizhe 2022-07-14 12:32:19 +08:00
@lujiaosama 打不过就加入
|
25
RedBeanIce 2022-07-14 12:42:26 +08:00 via iPhone
代码质量问题最终都是人和时间的问题
|
26
micean 2022-07-14 12:42:36 +08:00
“代码质量不好怪公司不给时间”和“中国游戏、电影太差怪监管部门”一个道理。
自身水平不足而已 |
28
qdxb 2022-07-14 13:13:33 +08:00 15
记得以前 V2 有个帖子,大概内容是楼主一直很关心项目代码质量,文档也维护的很勤快,后来跳槽走了。然后听说老单位人事向领导邀功,说请了个实习生,工资比原来员工低很多,来了就能直接上手维护老项目了,把楼主气的半死。
|
30
dzdh 2022-07-14 13:18:40 +08:00
代码质量和语言无关
|
31
aguesuka 2022-07-14 13:19:58 +08:00
直接原因是 Java 程序员普遍菜; 根本原因是因为市场太温柔, 养活了一堆制造屎山的公司.
|
32
charlie21 2022-07-14 13:25:38 +08:00
如果不是我遇到过 短时间+高架构质量的项目,我就信你了。说到底还是人行不行,若人不行则啥都不行
|
34
ziwen1943 2022-07-14 14:12:06 +08:00
代码质量和风格和个人的习惯能力是正相关的,如果是从零开始维护一个项目,我见到过有同事,一局游戏的时间写好一份高质量的扫描器,剩下时间我们边聊边写文档的。但是如果是已经堆出来的服务,我们一直的思路是模块化和重构。实际情况公司不会给那么长时间让你优化以前的代码,要么依赖,加入他们,要么走开,重新开始。
|
35
pengtdyd 2022-07-14 14:34:27 +08:00 1
还好我是写 rust 的,写的不对编译都过不了
|
36
dayeye2006199 2022-07-14 14:37:26 +08:00
其实有些时候需要关注的是“方差”,而不是“均值”。
质量不错有时候讲的是均值过得去,方差很小 均值过得去,方差很大,有时候看着也很难受 |
37
falsemask 2022-07-14 14:43:50 +08:00
产品不懂技术,需要逻辑计算的状态字段作为查询条件,无法在 SQL 直接分页。需求经常改,A 类型数据可以执行某种操作,执行完成更新原数据状态,几天后又加需求 B 类型数据也可以执行某种操作,但是执行完不需要更新原数据状态,代码就得加特判。这是我最近遇到的,还有很多类似情况。
|
38
loolac 2022-07-14 14:50:08 +08:00
其实跟统筹有关,看设计时如何分类代码功能;一般情况是分类过的看着比较整齐,没划分的无论标识符命名还是代码逻辑都是垃圾堆。
|
39
NoKey 2022-07-14 14:54:42 +08:00
规范门禁加代码 review ,能把乱的层次限定在一个范围内
|
40
soupu626 2022-07-14 15:42:55 +08:00 2
我司某人,代码风格极其风骚,大量使用函数式编程,但是 JAVA 的函数式懂得都懂,结果就是看他的模块内部实现是一堆 Function<>、Consumer<>、Supplier<>,然后对外接口相对还比较易用,看的出来代码质量很高,但是这个模块估计只有他能维护的动。。。
|
41
cxilife 2022-07-14 15:51:10 +08:00
感觉可以类比房地产的房子建筑质量
|
42
hailiang88 2022-07-14 16:29:02 +08:00
提倡用英文命名而被喷拽英语的路过。
人家统一拼音首字母 更搞笑的是有些小伙伴有地方口音 没注释完全读不懂 |
43
66beta 2022-07-14 16:34:50 +08:00
屎山代码带来了无数的收益;
优雅的代码陪项目胎死腹中。 |
44
yulon 2022-07-14 16:43:56 +08:00
@litguy 前几天接手一个 C++ 项目,一看就是 Javaer 写的,大大小小的都是类,然后一堆 new 在乱飞,把我恶心坏了,修 bug 修到手麻😂
|
45
coala OP |
46
Jekins 2022-07-14 17:21:42 +08:00
那么有优雅代码的开源的项目学习一下吗?
|
47
Qlccks2 2022-07-14 17:27:49 +08:00
和语言没关系,只是 JAVA 应用广泛。大环境下其他语言也一样。
|
48
xingyuc 2022-07-14 17:30:13 +08:00
工期紧任务重,换谁谁这样
|
49
potatowish 2022-07-14 17:32:21 +08:00 via iPhone
@soupu626 这个一点问题都没有,你要是写过公共模块就知道了
|
50
456789 2022-07-14 17:44:35 +08:00
我的公司就是 shi 山,拉屎的人整个换了一批
|
51
coala OP @Jekins 谈不上优雅, 就是学习, 写好代码而已。
// halo 博客的源码 https://github.com/halo-dev/halo // 这个也是很多人知道的微服务 Demo 吧. 文档很全 https://github.com/macrozheng/mall-swarm // pig https://www.yuque.com/pig4cloud/pig/gg3ndm |
53
DefoliationM 2022-07-14 18:29:49 +08:00 via Android
放弃吧,代码写的再好看,早晚也会有人把你写的代码改成屎山,公司不管真的一点用都没有。
自己的开源项目可以好好弄,其他真的没办法。 |
54
justin2018 2022-07-14 18:41:15 +08:00
项目能跑 上线 ok
管代码质量干嘛~~~ 能不加班 做完都不错了~~~ |
55
justin2018 2022-07-14 18:42:10 +08:00
@soupu626 不可被替代编程 😁
|
56
daimubai 2022-07-14 19:35:19 +08:00
还是团队要有规范吧,没有规范的话即使每个人写的都“优雅”,放在一起还是很乱的。
|
57
leeg810312 2022-07-14 20:22:54 +08:00 via Android
@nothingistrue 提高质量为什么 007 ,为什么不延长计划?
|
58
akira 2022-07-14 21:11:32 +08:00 1
活下来的人才有资格说质量
|
59
kingjpa 2022-07-14 21:24:55 +08:00
写多了自然就烂了, 等你遇到下班 6 点加需求,第二天上线,
有 2 个选择,要不立刻跑路 要不赶快敲码, 假如有一个字段叫 税务登记证书号有效期,你是直接用拼音首字母还是先翻译呢? 你又如何保证翻译出来 其他同事可以看懂呢?难道你还要写文档不成? |
60
redford42 2022-07-14 22:03:06 +08:00
因为技术负债还没有开始发挥威力的时候可能公司已经倒闭了
|
61
feather12315 2022-07-14 22:10:12 +08:00 via Android
@litguy #1 也有大量 copy 的,循环嵌套循环,一个函数上百行
|
62
qiaobeier 2022-07-14 22:42:17 +08:00
没有死循环就算好代码
|
63
msg7086 2022-07-15 00:35:25 +08:00
@soupu626 还行吧,那些都是无效代码量,可以脑内屏蔽的。你都当成 var 就行了。
就像没 lambda 的时候大段大段的匿名类,脑内转换成 lambda 就行了…… 只要接口清晰易用,测试覆盖好,我觉得问题不是很大。函数式又不是什么高深的科技。 |
64
lanlanye 2022-07-15 01:13:18 +08:00
好奇有多烂,我感觉比起 Python 来说 Java 这种算“规范”的语言写出来的代码平均质量说不定还高点。
当然,不是说语言不行,而是用的人不行,特别是 Python 火起来之后…… |
65
RiceNoodle 2022-07-15 01:47:58 +08:00 1
我只有在目前的公司,才觉得代码质量做的不错。
1. 强制要求 code review 获得 approval 后才能合并。 2. 并且核心业务开发人员真的很用心也很严格的在做 review ,一个 PR 里面的 comment 没清理完坚决不 approval 的那种。 以前的公司,代码质量的好坏,完全取决于历史和当前开发人员的水平,虽然有的质量还行,但是属于肉眼可见的在腐化,自己在其中,也没办法改变这种现状。 所以或许确实有个不可能三角,高质量,短时间,人力投入适中,三者只能满足两个。 |
66
TWorldIsNButThis 2022-07-15 02:22:51 +08:00 via iPhone
|
67
ca1123 2022-07-15 04:19:23 +08:00
感谢 java, 这样拼凑的东西也能用
|
68
overthemoon 2022-07-15 05:48:51 +08:00
我上一家同事写的烂代码超级多,刚进去经常加班就是因为代码烂,还有 bug 。后面一有时间就重构同事代码,几乎把重要功能的代码全部重构了一遍,清清爽爽,效率又快,注释又多。 直到有一天改不动了,直接摆烂,直接在屎山堆里加代码
|
69
ragnaroks 2022-07-15 08:20:53 +08:00
java 没有代码质量和样式分析器,只能靠个人水平
|
70
Daiwf 2022-07-15 08:23:27 +08:00
很多时候是没有办法,接手的就是屎山。重构没有动力。项目又急。然后就抱着又不是不能用的态度直接改改就上了
|
71
fueen 2022-07-15 08:33:42 +08:00 1
v2 的奋斗逼还真是多啊
|
72
moyuge 2022-07-15 08:37:27 +08:00
这个话题可以匹配 国内任意语言
|
73
hoopan 2022-07-15 08:37:45 +08:00
代码好坏,大多数不是技术问题,而是管理问题。
|
74
darknoll 2022-07-15 08:40:39 +08:00 via Android
又不是不能用
|
77
dqzcwxb 2022-07-15 09:03:56 +08:00 2
|
78
kemistep 2022-07-15 09:05:25 +08:00
copy+c,copy+v.....copy,copy,copy ,程序和人,只要一个能跑就行;
|
79
zhang77555 2022-07-15 09:27:56 +08:00
你得明白在这个烂代码到无法维护的程度之前公司可能都没了
而如果你的公司熬过了烂代码时期,那大概率也有钱可以重做一套了 说句实话,大多数情况下,代码写得漂不漂亮没有太大卵用,纯技术公司除外,纯技术公司能占多少呢 |
80
featureoverload 2022-07-15 09:35:32 +08:00
这个话题下,很多人想的理由水平也可以反映自身代码水平。
如果没有经历过好的代码质量的工作,那么建议找工作的时候多问一些问题,根据主管( CTO )回答就能推测代码质量了。 如果准备不了合适的问题,自然就陷入死循环。 |
81
lmmlwen 2022-07-15 09:40:40 +08:00
是,尤其是快速迭代的
|
82
featureoverload 2022-07-15 09:42:26 +08:00
@featureoverload
从问题来说,代码质量糟糕在当下确实是常态。 我上一家公司代码质量很高,入职新公司加入的项目代码质量差距明显。 但是代码质量高的代价是,程序员周一提交一个 MR ,反复 code review 周五才有机会 Merge (很多时候会往复两周) 当然,根据程序员自身水平,这个时间可长可短;通常在 三天到一周 左右。 被 code review 过的程序员,提交的 code 在三天以下被 Merge 的, 通常已经过了需要被频繁提 comment 的能力阶段了; 这时候的 code review 的时间,通常不是花在代码质量上。 |
83
alen0206 2022-07-15 09:42:40 +08:00
继承的屎山不敢改。 。也没时间改。。
|
84
mosfet 2022-07-15 09:50:03 +08:00
我把一个 shi 山项目重构了,当时也是为了后续自己维护方便
然后就 TM 的测出了两个逻辑 BUG ,就在那 BBBBBBBBB ,搞的我好像罪大恶极,没事找事 这种事情之后我是不会再干了,无脑往上堆吧 |
85
xz410236056 2022-07-15 09:59:10 +08:00
|
86
soupu626 2022-07-15 10:34:15 +08:00
@msg7086 对,他的代码质量是非常好的,我说的是可维护性以及新人上手成本的问题,我之前进去看过,可能调用层级比较深了,突然一个 ruleDealFunc.apply(param) 还要回去找这个 Function 哪传进来的,虽然逻辑上看的很顺,但是要修改,需要追实现细节的时候会比较痛苦
@bthulu 自己写的当然能维护,但是整个工程不可能一直是一个人维护啊,总有要别人顶班的时候 @potatowish 问题这是个业务模块啊,本质上也是个模版方法或者策略模式就能解决的问题 @ragnaroks 可以在发布流水线上设卡点,静态扫描不过关不给发 |
87
libook 2022-07-15 10:34:44 +08:00 1
我实习的时候,负责开发智能电视平台上兼容多个品牌遥控器按键映射的组件,多个键值对应同一个功能的话,可以简单清晰地罗列 case ,然后下面统一操作再 break 。代码写完后交给一个人 review ,他说每个 case 必须有 break ,否则肯定无法编译通过,而且他 10 年工作过程中都是这么认为的……
我比较认同的是,水平烂的人,用啥高大上语言写出来的代码都一样烂。 我想,Java 技术栈在这个问题上比较显眼的原因可能有以下几点: 1. Java 开发者实在太多了,Web 后端开发领域 Java 开发者数量很长时间都是第一,假设大多语言的水平分布都是差不多的,那么 Java 技术栈这种基数大的就比较吃亏,会让人产生经常遇见水平差的人的感觉。 2. Java 生态非常成熟,在语言基础上建立了各种框架、体系、思想的高楼,表层都是非常抽象的东西,(在 SSH 框架的时代)导致学习周期较长,虽然门槛低,但若想达到对生产所使用的技术完全在掌握的程度,可能要比很多技术栈多花很多的时间。导致可能没有那么多精力关注其他事情。当然现在随着一些新的框架和思想的出现,这个问题可能会逐渐改善。 3. 一门语言越灵活和抽象,开发门槛越低,但对开发者要求也就越高;写出能工作的代码很容易,写出来能工作的好代码很难,不如一些本身有很多限制和枷锁的语言。鱼与熊掌不可兼得。 |
88
janus77 2022-07-15 10:45:50 +08:00
最大的原因还是因为 java 太流行了,写的人太多,每种语言中都有菜鸟,而 java 门槛低,所以菜鸟占比就相对多,再加上幸存者偏差,所以你对 java 的感觉不好。js 同理。
比如(相对)小众的语言,go ,rust ,你是不是没有发现什么烂代码?实际上是因为,第一门槛高,第二用的人少,而其中菜鸟占比也少,大佬占比多,很多都是极客,所以你能看到的都是高质量代码。 实际上关键还是在于人。 |
89
XXWHCA 2022-07-15 11:02:28 +08:00
和语言没关系,主要还是要看团队水平和有什么样的领导
A 司应该是比较少的,说明团队整体水平很好,可能是领导不是做技术的 B 司就不说了,懂得都懂,能干活的就那几个人,甚至是外包进来的 C 司项目外包更简单了,能用就行,反正不管后期维护 D 司研发团队应该是不多不少的那种情况,人力刚好满足现在的业务,但又什么都想尝试,可又没有足够的人力来支持 没有代码审计的小团队国企政企应该比较多,研发就几个人也都是干活的,领导可能就不是做技术的,代码野蛮生长,也会出现大量代码的 copy |
91
xianyv 2022-07-15 11:30:37 +08:00
我接手的一个项目更垃圾,接口返回信息直接 json.put("xx",111),然后连个注释都没有,全靠英文单词猜
|
92
BrightLiao 2022-07-15 13:27:53 +08:00 1
要说代码质量,首先要搞清楚什么样的代码是高质量的代码。
咱们经常提的 SOLID 原则是衡量 OO 范式的代码质量的一种。 不过 SOLID 的局限性比较大。Thoughtworks 最近在技术雷达上推荐 CUPID 是另一个可参考的好代码的特质组合。 CUPID 是指: - C: Composable ,可组合的代码 - U: Unix philosophy ,符合 Unix 哲学 - P: Predictable ,可预测的 - I: Idiomatic ,符合惯例的 - D: Domain based ,基于领域的 我前段时间结合 CUPID 原文及自己的理解,写了一篇文章分享,给大家参考下: https://brightliao.com/2022/05/24/5-properties-of-good-code-cupid/ 有了什么是高质量代码的基本理解,再去看代码质量好不好,我们会发现新大陆。 |
93
lonenol 2022-07-15 13:38:53 +08:00 1
与其说 Java 烂,不如说是业务系统代码烂。。
每个业务系统都会有各种奇奇怪怪的业务需求,各种修修补补 ,各种 if else ,演进个半年一年的,啥语言写都是烂。。 开源出来的东西最多能算业务系统第一个版本。。当然可以写的很漂亮。。你让把你们公司的特殊业务逻辑加里面再看看 |
94
RainCats 2022-07-15 16:32:13 +08:00
本来周三要上线的,结果都延期三次了,今天产品都还在提了一堆修改,你说呢,这跟语言有关系吗,跟个人能力有关系,但也跟团队有关系,重大关系,压根不给你足够的时间去回头梳理,我只能是一边做新需求一边看看哪些需要重构的顺手重构一下,再跟测试说一下
|
95
urnoob 2022-07-15 17:31:50 +08:00
我只说 java 的哈
请面向金钱编程! 只要满足客户需求,产生价值,所谓的代码质量,UT 覆盖率都是虚的,除了耗费你的时间别无用处。 |
96
urnoob 2022-07-15 17:37:22 +08:00 2
补充一点。以前讲瀑布,现在推敏捷,养活了多少人,以前说 TDD ,现在又推 DDD ,又浪费了多少码农时间。重构!千万别去碰!要么继续堆,要么新项目重开!切记!
|
97
LeegoYih 2022-07-15 18:06:07 +08:00
大部分公司都是业务第一、产品第二、技术第三。
想赚钱就得快速迭代,持续交付,跟语言毛关系没有,用其他语言照样一堆屎山,甚至比 Java 更屎(尤其动态语言),屎到维护不了,有的内存泄漏满天飞,还有存在 this != null 这种逆天操作。 |
98
11232as 2022-07-15 18:10:16 +08:00
业务本身就没逻辑可言,代码也就只能 if-else 。如果业务迭代得快的话,代码写出来的时候指不定就已经过时了。
|
99
WOLFRAZOR 2022-07-15 18:53:17 +08:00
|
100
WispZhan 2022-07-15 19:19:17 +08:00
先不说代码质量,有几个正经写 Unit Test 的? 出来走一个让我看看
理由无非是老三样: 没时间、能跑就行、质量高了工资高吗? --- 都说项目质量差、加班加的多,我也没见几个人(还是有不少,起码认识不少有态度的),愿意倒推流程、质量、进度、需求的。 一个团队,一环差,环环差,木桶原理。 |