为什么公司的人写代码都无视 IDE 的警告提示?

2022-08-18 17:43:54 +08:00
 magese

现在 IDE 的代码提示已经很完善了,为啥大家都不关注警告的?

前前后后也待过好几家大大小小的公司了,没见过一个人写的代码是 0 Warning 0 Error的。

打开一个类全是黄黄的不难受的吗?

强迫症已经要死了……

16471 次点击
所在节点    程序员
147 条回复
issakchill
2022-08-18 21:02:29 +08:00
确实....我们公司也是
一些明显的单词拼错,后端错了,前端也不指出,就一直错
admirez
2022-08-18 21:14:46 +08:00
我就是 0Warning 0Error 0Typo
silentsky
2022-08-18 21:28:42 +08:00
我有强迫症 看到的话就改掉
Bingchunmoli
2022-08-18 21:45:33 +08:00
比如我们公司的 所有 @Autowired 全是 Warning 甚至几十 error 但是如果去掉,反而可能因为循环依赖导致起不起来,haha
FrankHB
2022-08-18 21:47:47 +08:00
@zjp 实际上 VS 和 JB 之类比较成熟的 IDE 当然都支持配置诊断提示,但这里真正的问题是,不管实现质量问题,开发者有必要认识到,这种 IDE 提供的诊断先天就是低人一等的。
而分配资源优先级解决不同的问题是工程人员的基本素质。

这里,最上等的诊断消息是语言实现给出的错误和警告,无视这些问题原则上(不排除编译器和语言自身 bug 之类的极端情形的例外)会导致得到的程序根本就不是想要的东西,不中断构建基本就是写 bug 浪费时间(编译错误的话编译器自己就终止了)。这种诊断当然是最优先考虑的(要想无视编译错误就别编译了)。
次一等的是 lint 类工具,历史上就是为了缩减编译器实现的难度和编译性能开销而从编译器分离出去的次要的诊断,这是来自语言设计者的判断。现代语言实现的性能宽松得多,如果检查发现的问题足够重要到对语义有普遍影响,把 lint 的分析加回编译器变成警告也是很正常的。如果仍然保留在 lint ,在一定程度上说明这本来就没那么重要,这个区别一直是 by design 。(当然,对一些都未必有编译器的动态语言来说,核心语言实现和 lint 诊断的差距可能相对不那么大。)
而 IDE 自己提供的补充诊断,是重要程度相对最低的。并且,假阴性(漏报)完全没有 spec 参照而无上限,假阳性(误报)的情形也极度宽松。还有很多时候和代码风格约定强相关。追溯这些诊断来源的性价比远远不如上面的,以至于把这些和上面的来源相提并论差不多就是碰瓷。

次要的问题是,因为 IDE 的实现标准比较宽松,所以就算是最有必要给出诊断的提示(甚至就是编译器警告),比单独运行的编译器之类核心工具的分析准确性普遍差很多,特别是 C++这样分析难度离谱的语言。像 VS 用的 EDG frontend 那个红线经常是只能整个关掉的程度,眼不见为净(主要是复杂性离谱,而不一定是实现水平烂,EDG 曾经是唯一实现过 C++03 export 的厂商)。即便没红线 IntelliSense 崩溃至今仍然是家常便饭,我天天遇到。其它 IDE 用 clangd 之类能基本解决比编译器死得离谱的问题,但是想万无一失还差得远了(这年头没遇到过常见编译器 ICE 的都不太好自认为熟练用户了……)。

再者,光是编译器能给出的问题其实已经非常多了。像 VC++的 cl 默认开全警告会因为假阳性(指用户有意的,不算 bug )太多烦死,所以正常警告都不可能调最高(已经排除了就是 note 的部分)。( g++这种诊断没编号的反而策略现实很多,加几个选项会警告的基本全是需要改的问题。)这样的问题,正常开发者(包括写编译器的)都不可能完全摸得清楚,基本是遇到坑了去长记性。本来已经够不太平了,还要照顾 IDE 的一堆莫须有问题是不是工作量不饱和?

其它语言经常没那么极端所以 IDE 体验较好,但没什么 IDE 厂商保证这里不存在差距,踩坑了就是自讨没趣了。

所以实际情况是,不分析很具体的问题,笼统相信 IDE 并多启用功能是很外行和幼稚的想法。作为专业人员,不要试图和有限的资源过不去,这类想法一开始就不要有。
WhateverYouLike
2022-08-18 21:59:30 +08:00
IDE 语法检测支持的不太好,误报 warning
proxychains
2022-08-18 22:23:00 +08:00
warning != error
levelworm
2022-08-18 22:29:47 +08:00
绝大部分人能把代码跑起来事情做完就不错了。这些警告不搞还好,真搞了弄不好还弄出点红红的出来,咋办?
pengtdyd
2022-08-18 22:39:09 +08:00
我就说一点:你就说能不能跑吧!能跑就别 BB!
Rache1
2022-08-18 22:41:44 +08:00
😂 你去找个旧一点儿的 PHP 项目或者微擎这些之类的插件,IDE 一打开,满屏 errors ,但是他就是能跑
kenvix
2022-08-18 22:46:43 +08:00
有强迫症可以直接加 @SuppressWarnings()
FutureIsHere
2022-08-18 22:50:55 +08:00
@akring Kotlin 写的 Android ,看样子发生在某个 callback 里
dcsuibian
2022-08-18 22:54:26 +08:00
同感,很多人都不在乎这个。

强迫症倒是次要的,最主要是看一下能避免一些低级错误:一些无效的分支,一些明显的 typo 等
Slurp
2022-08-18 22:57:15 +08:00
😛 有的人只知道 C++,不知道其他语言 IDE 的平均水平。说白了就一句话,「说得对就应该改」。不知道扯那么多干啥?

抱着一副「你 IDE 就是垃圾」的嘴脸,却连提示你 http not secure 这种都要喷几句。

你不是天天标准标准,怎么一到 0 warning 0 error 0 typo 这种要求就知道是工作不饱和了?就知道有限资源了?

有的人就是喜欢 -Wall -Werror 然后一条一条把假阳性标称白名单。轮得到你指责吗?

叶公好标准,不过如此……
placeholder
2022-08-18 22:59:11 +08:00
你写,别人不写,你就是义务扫黄员,

久而久之你也懒得搞了,反正能跑就行,

最怕就是改了黄叹号然后跑不起来了。
securityCoding
2022-08-18 23:00:37 +08:00
mr 的时候强制 lint 检查啊
zjp
2022-08-18 23:27:25 +08:00
@FrankHB
看截图楼主应该是写 Java ,javac 给的警告实在太少了...即使启用所有建议的警告,我有印象的还是只有使用已标记过时 /JDK 内部的方法。所以会更加依赖 IDE 的静态检查,在运行前会过一遍警告。
公司内还引入了 p3c 和 sonarQube ,规则太多,有些纯粹属于风格问题。就只是每周建构看看,挑着改。
panlatent
2022-08-18 23:27:32 +08:00
我有强迫症 必须全绿
zjp
2022-08-18 23:31:59 +08:00
不管处不处理警告,能达到团队的交付标准就行。
其实让我难以理解的是很多人既然不处理为什么不索性关了...曾经看见全屏黄色的,字我都快认不清
Bijiabo
2022-08-18 23:33:29 +08:00
才 32 个警告...少于 1000 个我都不看的...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/873803

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX