V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
clecho
V2EX  ›  程序员

诸位公司项目的代码质量高吗?

  •  
  •   clecho · 2019-10-29 08:23:06 +08:00 via Android · 21142 次点击
    这是一个创建于 1851 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我之前待过的都是些小公司,代码质量都不高。不过基本都是做的 to b 端的系统,所以感觉 bug 也不多,性能因为用户少也没什么感觉。

    这次的公司做 to c 的应用,我就开始感觉 bug 贼多,系统性能也不好。代码质量一言难尽。感觉线上系统全是 bug,就等着用户来发现。

    这种情况不是某一个人造成的,是产品,开发,测试一起造成的。

    产品考虑需求不全面,想着开发写的时候会发现问题。

    开发写代码的时候也没有多考虑,主流程能跑通就 ok,以前的历史代码是这么写的,新功能我也这么写。

    测试也对系统不够了解,主流程差不多就可以了。剩下的 bug 随缘发现。

    总结一下就是,所有人都不了解系统。公司迭代又快,没时间去仔细思考。(以前一周一迭代,最近开始两三天就迭代一次)

    造成的后果就是功能逻辑混乱,一但要加新的需求就会丢三落四,总有些地方没有兼顾到。线上全是 bug。

    搞的我都有点怀疑自己的开发能力了,因为 bug 真的太多了。

    以前网上总流传一个说法,大部分公司的代码不开源的原因不是业务有多机密,只是因为代码质量太差,开源了怕丢人。

    所以今天想问下在座的诸位,你们公司的代码质量高吗?线上 bug 多吗?
    195 条回复    2021-04-19 17:04:14 +08:00
    1  2  
    winterbells
        101
    winterbells  
       2019-10-29 13:59:40 +08:00 via Android
    @hanxiaodi #66 差不多,我 dev 分支打的包还提示我要升级。。。
    galikeoy
        102
    galikeoy  
       2019-10-29 14:05:01 +08:00
    看到你们都这样,我就放心了
    iyu90
        103
    iyu90  
       2019-10-29 14:06:41 +08:00   ❤️ 2
    任何高质量的项目,都能让一个新手 /菜鸟给破坏殆尽
    loudefa
        104
    loudefa  
       2019-10-29 14:09:44 +08:00
    看到大家这么回复我就放心了
    userdhf
        105
    userdhf  
       2019-10-29 14:16:44 +08:00
    被人喷过代码写得像 shit
    谁来给我讲讲不像 shit 的代码长什么样
    尤其是那种 1 周干仨月的项目
    llllboy
        106
    llllboy  
       2019-10-29 14:17:56 +08:00
    看到大家这么回复我就放心了
    shanlan
        107
    shanlan  
       2019-10-29 14:20:43 +08:00
    注释都没有
    niucility
        108
    niucility  
       2019-10-29 14:22:31 +08:00
    业务导向 + 需求频繁改动
    yazhouli01
        109
    yazhouli01  
       2019-10-29 14:31:53 +08:00
    你说的是对的,别谈开源了 ,我自己都看不下去呢
    daguaochengtang
        110
    daguaochengtang  
       2019-10-29 14:44:43 +08:00
    你听说过 shit mountain 吗?
    blackccc
        111
    blackccc  
       2019-10-29 14:52:35 +08:00
    能用就行
    Justin13
        112
    Justin13  
       2019-10-29 14:59:05 +08:00 via Android   ❤️ 3
    我们组底下有一句话:“小车不倒只管推”
    murmur
        113
    murmur  
       2019-10-29 15:01:34 +08:00
    @hantsy 这就是现实,尤其是 APP,如果你半年不能上线,拿不到投资或者不被收购,要么结局是你的产品太垃圾,脱离市场,直接倒闭,要么是大厂拿着你的创意,迅速用更高的技术、更优秀的设计收割你的市场,尤其是腾讯,导入微信 QQ 用户,这推广简直恐怖
    bailao
        114
    bailao  
       2019-10-29 15:08:02 +08:00
    让我想起某普通话成绩查询官网的源码
    iYoloyolo
        115
    iYoloyolo  
       2019-10-29 15:12:07 +08:00
    @Justin13 老哥,你这句话我收了,说的太好了 哈哈哈
    toyuanx
        116
    toyuanx  
       2019-10-29 15:12:19 +08:00
    我们公司大家写代码的风格都不一样,一个离职的同事代码注释基本没有,交接的同事看代码得看半天才理清楚;有一个同事用 vim 写,不太注意缩进;有一个同事写代码很冗余;有一个同事代码风格很好就是交流困难( PM 太烂了我觉得他是故意这么交流的);为什么我知道这么清楚呢----------因为我在组里资历最小,我会去总结他们的代码风格,取其精华去其糟粕。
    random0O
        117
    random0O  
       2019-10-29 15:25:09 +08:00 via Android
    在国外大厂的新组,感觉我们的代码单个模块拿出来质量都不错,差就差在模块设计上面。用的框架和服务都是公司内部的,外界积累的经验用不上,组内没有资历特别老的员工带,现在在讨论重构。
    kayv
        118
    kayv  
       2019-10-29 15:25:33 +08:00   ❤️ 3
    高,每个 commit 都有 code review,都有对应的连接,能找到修 bug 还是 feature。几乎每个逻辑都有单测,覆盖率要求 80%,服务之间有集成测试,全部流程都是自动化,没有 QA 和 OP。Code review 基本能来回讨论几次,增进感情和知识分享。
    ackfin01
        119
    ackfin01  
       2019-10-29 15:26:58 +08:00
    刚开始挺高的,后来就不高了。
    hmxxmh
        120
    hmxxmh  
       2019-10-29 15:28:08 +08:00
    和你差不多,上一家和现在得都是做的 to B 系统,用户少,基本逻辑走得通就行,基本不考虑性能优化,所以很肯定的是代码质量不佳,想做 to C 的。
    yufeng0681
        121
    yufeng0681  
       2019-10-29 15:30:33 +08:00
    逻辑 /业务复杂的功能 /特性, 就要先写文档再开发; 重性能的就要关注数据结构的设计;
    简单的增删改查类的功能就放低要求,在上线过程中纠正,也不会很痛苦。
    这样重要模块增加的设计成本(文档,数据结构),就不那么多。
    hantsy
        122
    hantsy  
       2019-10-29 15:38:52 +08:00
    @toyuanx Code review 那一步哪里去了?没有评审他们的代码是怎么提交上去的?
    learnshare
        123
    learnshare  
       2019-10-29 15:40:26 +08:00
    多数项目都是面向上线编程(能用就行)
    + 文档资料缺失,后续更新维护很难
    + 没有测试代码,甚至没有完善的测试方案
    + 代码没法看,有 lint 不敢开
    + 领导甚至其他成员还不让你优化重构

    代码和应用质量通常跟公司业务好坏关系不大,所以领导们不想在这方面多花时间和精力
    hantsy
        124
    hantsy  
       2019-10-29 15:40:57 +08:00
    @random0O 国外公司很多有自身的考虑,而不是说他们不愿意用成熟的框架。我之前遇到一个项目也是这样,他们不用 Spring 这些流行的框架,每个第三 LIB 引用全部要审核它的协议,保证使用没有法律风险。
    fengjianxinghun
        125
    fengjianxinghun  
       2019-10-29 15:43:32 +08:00
    @hantsy 从来没听说过有什么 code review。
    specita
        126
    specita  
       2019-10-29 15:46:35 +08:00
    一言难尽,毕业后在大厂,发现同事写的代码好厉害,简单明了,模块化
    后来回家乡的其它厂,一言难尽,反正他们的标准就是能运行起来就行了,其它无所谓
    hantsy
        127
    hantsy  
       2019-10-29 15:52:35 +08:00
    @murmur 没错,国内很多创业公司上线都是在 3-6 个月左右。我之前参与过两个公司,都不到一年灰飞烟灭。只能说我没法适合国内的创业模式,各种套路招人,想各种方法(股权啊,什么发一部分以后融资了再补一部分工资)降低工资,加班加点,最后市场不接受,大家一起 88。以我的观点,那些没有两年以上规划的创业公司,基本上浪费人的青春。
    gabezhao
        128
    gabezhao  
       2019-10-29 16:08:04 +08:00
    原来都这样呀,哎
    duanxianze
        129
    duanxianze  
       2019-10-29 17:13:21 +08:00
    大家都一样啊。。。
    zr8657
        130
    zr8657  
       2019-10-29 17:18:16 +08:00
    说真的,对绝大部分公司来说,能上线就不错了,剩下的过后再说,然后就没然后了
    tt67wq
        131
    tt67wq  
       2019-10-29 17:19:47 +08:00
    垃圾到爆炸
    random0O
        132
    random0O  
       2019-10-29 17:58:34 +08:00 via Android
    @hantsy 内部的东西倒是都挺成熟,但就是设计得和市面上常见的框架们不一样。数据库不支持外键,函数中一旦创建一个事务对象,所有被它调用的子函数只能使用这个事务,想再建都不行。Java 代码里每一步异步操作必须单独写个函数还不让调用,想在其他函数用它的结果必须将其返回值列为一个参数,框架会去找哪个函数的返回值匹配这个类型然后调用它。内部的其他服务,都因为历史原因各有一系列大坑。
    hantsy
        133
    hantsy  
       2019-10-29 18:33:27 +08:00
    @kayv
    1. Code Review 大部分在 PR 上进行(创建 PR 之前的 Commits 可能是 Partial work,属于 Work in Progress 状态),反复讨论修改,Commit,直到所有没有什么意见,测试全部通过为止,合并代码。
    2. 到了一定规模的应用程序,可能不会每次合并就部署到生产环境前,加入有一个缓冲阶段,依然需要 UAT 环境部署,QA 测试,正式部署到 Production 之前进一步优化用户体验。
    3. DevOps 工程师有时还是不缺少的,虽然 Infrastructure as Code 可行,有时脚本也要人维护,而一些特殊的生产环境可能与开发环境完全脱离,部署人员也可能有专职的维护那些环境。还有有的公司出于安全考虑,开发人员可能接触不到部署环境的一些配置参数。
    ZSeptember
        134
    ZSeptember  
       2019-10-29 18:40:17 +08:00
    哈哈哈,大家都一样。
    youyeku
        135
    youyeku  
       2019-10-29 19:11:08 +08:00
    不高和你情况差不多。迭代又快新手害人。我自己都看不下去那写的代码,而且有些还是历史遗留问题,写的连重构的欲望都没有。
    hslx111
        136
    hslx111  
       2019-10-29 19:33:27 +08:00
    代码越多坑越多,哪里都一样
    52coder
        137
    52coder  
       2019-10-29 19:51:20 +08:00
    我怀疑我们在同一个公司。
    BenjaminReed
        138
    BenjaminReed  
       2019-10-29 19:59:37 +08:00
    嘶 早上九点到十二点是解决线上问题时间 你说惨不惨 日哦~这种情况已经延续一年多了。
    donyee
        139
    donyee  
       2019-10-29 20:32:16 +08:00
    java 项目代码不分层...一个类实现所有功能...
    有个公共类是小写的...
    akira
        140
    akira  
       2019-10-29 20:34:55 +08:00
    所以 ,高质量的代码 的存在 只是一个传说?
    UserANullPointer
        141
    UserANullPointer  
       2019-10-29 21:01:52 +08:00
    每次产品升级时都告诉产品这块代码问题太多,要求延长时间。如果准了,就重构。
    locoz
        142
    locoz  
       2019-10-29 21:19:03 +08:00 via Android
    人少的就高…人多的就屎…
    ARhen
        143
    ARhen  
       2019-10-29 21:42:41 +08:00
    我觉得我写的代码像是翔~ ;(
    sumarker
        144
    sumarker  
       2019-10-29 21:43:44 +08:00   ❤️ 2
    举个🌰
    ···
    return count > 0 ?true :false;
    ···
    Dkngit
        145
    Dkngit  
       2019-10-29 22:35:34 +08:00
    同一个世界,同一个屎码
    catinsides
        146
    catinsides  
       2019-10-29 23:09:04 +08:00
    害,主业务能跑通就行了
    loveuqian
        147
    loveuqian  
       2019-10-29 23:16:04 +08:00 via iPhone
    第一版的代码挺漂亮
    后面慢慢改着改着就。。。
    前几天刚被自己 1 年半前写的代码恶心到了
    gbin
        148
    gbin  
       2019-10-29 23:23:30 +08:00 via Android
    你们的网站有完整的测试代码吗?包括单元测试,集成测试,e2e 测试这些。
    我司做的软件( UI 是个网站,但不是互联网产品)就有完整的测试链路,测试代码差不多是业务代码的 2-3 倍。代码逻辑不一定是最优的,但是代码质量真的还不错,总的来说,参与这样的项目我觉得挺荣幸的。
    gbin
        149
    gbin  
       2019-10-29 23:28:01 +08:00 via Android
    @akira 个人认为不是传说,可能国内互联网大部分是业务驱动,但大部分软件公司的产品代码质量还是可以保证的。
    wangyzj
        150
    wangyzj  
       2019-10-29 23:49:14 +08:00
    研发作为底层
    又能怎么样呢
    laike9m
        151
    laike9m  
       2019-10-30 00:32:40 +08:00 via Android
    @hoyixi 正解。国内感觉路走歪了
    kuangwinnie
        152
    kuangwinnie  
       2019-10-30 01:10:45 +08:00
    @random0O 从字里行间看到了这个公司的技术沉淀之深
    一般这种限制都是之前有人踩过的坑 总结出来的
    applehater
        153
    applehater  
       2019-10-30 01:23:29 +08:00
    @loveuqian 我写的几年的都是这个鬼样,十行功能三十行 BUG。
    cydian
        154
    cydian  
       2019-10-30 02:22:36 +08:00 via Android
    @kayv 啥公司?
    MrGba2z
        155
    MrGba2z  
       2019-10-30 02:38:04 +08:00
    看人 也看 review 的人

    之前写代码翻到过 guido 写的一部分底层核心代码 几千行的代码读起来真特么爽

    自己写过两次 Java 一次被(一个很严格的 senior ) review 了很久 翻来覆去改 基本被(一个很话痨逗比的 senior )直接 approve
    MrGba2z
        156
    MrGba2z  
       2019-10-30 02:39:19 +08:00
    @MrGba2z
    后半句漏了句话:
    翻来覆去改 //... 第二次基本被(一个很话痨逗比的 senior )直接 approve
    charlie21
        157
    charlie21  
       2019-10-30 06:53:23 +08:00
    @kayv 单元测试谁写阿
    timle1029
        158
    timle1029  
       2019-10-30 07:10:33 +08:00
    @charlie21 难道不是谁写代码,谁就些 unit test/integ test/canary 么
    pecopeco
        159
    pecopeco  
       2019-10-30 07:47:23 +08:00 via Android
    默默重构
    Kontinue
        160
    Kontinue  
       2019-10-30 08:37:09 +08:00
    有注释都谢天谢地了。。。
    zhanglihow
        161
    zhanglihow  
       2019-10-30 08:46:29 +08:00
    接手公司老的项目,那个框架,那个写法,渍渍,真心懒得改,也改不动。
    Varobjs
        162
    Varobjs  
       2019-10-30 08:48:21 +08:00 via Android
    @sumarker 这样的不要太多
    昨天还看到同事的
    flag = a == b ? true:false
    什么各种奇怪命名比如 bday
    要看到至少一百行之后,才能猜到这个 变量是什么意思
    lei2j
        163
    lei2j  
       2019-10-30 09:01:25 +08:00 via Android
    我怀疑你偷看了我们公司代码
    sunmoon1983
        164
    sunmoon1983  
       2019-10-30 09:19:24 +08:00
    @loveuqian 同感,往往是第一次出需求以后的程序代码看着还不错,后来越加需求代码就余越烂!现在再看看以前的代码,感觉恶心!
    kahoyip
        165
    kahoyip  
       2019-10-30 09:21:11 +08:00
    我朋友:“已发布到测试环境”
    他领导:“上线”
    我朋友:“不先测试?”
    他领导:“先上线”
    ------上线后------
    他领导:“这里不对,不是 A,应该是 B,那里有问题”
    caviar
        166
    caviar  
       2019-10-30 09:32:33 +08:00 via Android
    实习呆过微软中国( azure ),开的第一个大 pr 一共改了 16 个 iterations,尽管我已经按照自己的最高标准要求自己了 233 感觉在那边每天主要的任务不是写代码,而是讨论 design.....不过后来我翻了翻 repo 里的代码,其实很多并没有那么高的质量(小声
    qsbaq
        167
    qsbaq  
       2019-10-30 09:38:12 +08:00
    公司自己弄的框架,4 个 function 文件,每个 3 万+行。还在持续增加中。
    已不想吐槽。。。
    strongcoder
        168
    strongcoder  
       2019-10-30 09:41:49 +08:00 via iPhone
    垃圾,太垃圾了,构建个包要 20 分钟,构建包的时候电脑不能动
    pimpl
        169
    pimpl  
       2019-10-30 09:56:02 +08:00 via iPhone
    看到你们都这样,我就放心了。
    Danielhu229
        170
    Danielhu229  
       2019-10-30 11:16:24 +08:00
    本来不高,被我强制搞了一波 Feature Branch 和单元测试,就高了
    CoverL
        171
    CoverL  
       2019-10-30 11:18:26 +08:00
    看到你们都这样,我就放心了。
    sudanlan
        172
    sudanlan  
       2019-10-30 12:26:46 +08:00 via iPhone
    七拼八凑,一个 jQuery 有五六个版本,乱引用+随意增删,不同框架之间强行移植。。。公司国企,做的政府项目,前后端混合 😊
    sumarker
        173
    sumarker  
       2019-10-30 13:47:37 +08:00
    所有的代码都 让步给了排期 ,
    结果..
    本来并不宽裕的排期 还要考虑兼容 /重构原来的功能
    时间更不够了...
    zzzzzzzzyp
        174
    zzzzzzzzyp  
       2019-10-30 14:07:29 +08:00
    低的亚批
    crazytudou
        175
    crazytudou  
       2019-10-30 14:13:03 +08:00
    改别人的 Bug,维护开发的系统,每次看代码脑子都是脏话。而且为了节省时间加快进度,还得学着一样写垃圾。
    ofblyt
        176
    ofblyt  
       2019-10-30 15:15:42 +08:00
    现在越来越觉得代码维护就是击鼓传花,谁倒霉就在谁手里炸了
    ken0328
        177
    ken0328  
       2019-10-30 15:21:26 +08:00
    看到大家这么回复我就放心了
    doublechenpaul
        178
    doublechenpaul  
       2019-10-30 15:30:43 +08:00
    像看完 21 天学通 Java 就来找工作的那种水平,培训班都不如
    v2hh
        179
    v2hh  
       2019-10-30 15:33:03 +08:00
    我之前公司的系统没有 bug,就老板一个人用。。。
    linZ
        180
    linZ  
       2019-10-30 16:54:10 +08:00
    @crazytudou 刚刚写了好多*代码,感觉后面的人没法接了
    clearbug
        181
    clearbug  
       2019-10-30 17:09:31 +08:00
    @gbin #148 老哥说的什么公司?
    dosmlp
        182
    dosmlp  
       2019-10-30 17:28:41 +08:00
    真的是"能跑起来能用就行"毫不夸张
    charlie21
        183
    charlie21  
       2019-10-30 19:13:00 +08:00
    @timle1029 这是一项单独的工作,要考虑成本的,所以 如果没专人去做测试 ( 而是让 dev 开发 ) 那么结果就是 测试覆盖率很低很低,等于没有,等于自欺欺人
    LunaSentinel
        184
    LunaSentinel  
       2019-10-30 19:49:32 +08:00
    看到项目的时候很惊讶它竟然能跑起来,后来改造了 gradle 来优化项目结构和依赖,迁移了 k8s,增加了 ELK 支持,换了 zipkin, pinpoint, skywalking 链路追踪...但是独木难支,现在项目太急了,没空闲搞这些东西了,遇事不决就申请机器,拉个新项目,写的公共项目一引用,再也不想重构同事的代码了,管好自己就行,jenkins 编译的时候顺便就出 sonar 报告了,勤快看看就好了,严格律己宽容待人。
    levelworm
        185
    levelworm  
       2019-10-31 07:22:31 +08:00
    @toyuanx 取其精华会不会最后就是注释基本没有 + 半天才理清楚 + 不注意缩进 + 冗余 + 没法交流。。。
    xiaotianhu
        186
    xiaotianhu  
       2019-10-31 08:52:49 +08:00
    @kayv 啥公司?
    random0O
        187
    random0O  
       2019-10-31 15:12:30 +08:00 via Android
    @kuangwinnie 也许设计成这样真的避免了很多 bug,但是几年十几年修修改改下来还是一团糟。今天我们依赖的众多存储服务之一出了一个 bug,导致我们核心功能整体挂掉。具体 bug 还没被找到,但是我去看了一下出事的那个文件,一万两千多行一个 Java 类,有九个方法,名字是 stageOne 到 stageNine。。。这个存储服务的体量是按 EB 计算的。
    kuangwinnie
        188
    kuangwinnie  
       2019-10-31 22:17:18 +08:00
    @random0O 哈哈哈哈哈哈哈好惨啊哈哈哈哈哈
    能不能打断点看看是哪边出了问题?
    jourdon
        189
    jourdon  
       2019-11-01 11:24:32 +08:00
    进公司看到代码就后悔了,就是一坨屎。
    想着算了,跟老板说重构吧,想着说不同意就走人了,结果同意了(尴尬不).
    重构的过程是真痛苦,基础功能没写完就要求上线,老板说了,让用户去测试就好了,所以是一边写 BUG,一边等用户发现 BUG,然后改 bug,同时改需求,一个功能不管写没写完,一个字,改,又急着上线,结果出 BUG,再改,根本不知道要做个什么东西,一切随缘。
    hp66722667
        190
    hp66722667  
       2019-11-01 12:01:09 +08:00
    哈哈哈哈哈哈
    dashixionglihai
        191
    dashixionglihai  
       2019-11-01 13:34:09 +08:00
    甲方:我想要一个小汽车,能在告诉上跑的那种。
    乙方:容易,两个月开发完毕。
    一个月后
    甲方:能不能加个翅膀,我现在想让他可以飞。
    乙方:可以,加钱吧。
    半个月后
    甲方:能不能再加个炮桶?我想谁挡我路我就炸飞它。
    乙方:。。。
    十天后
    甲方:能不能加个车斗,有些货我想可以拉一些。
    乙方:出门左拐。
    new2500
        192
    new2500  
       2019-11-03 18:53:45 +08:00
    @kayv 啥公司+1.
    kayv
        193
    kayv  
       2019-11-04 16:33:34 +08:00
    血汗工厂亚马逊
    toyuanx
        194
    toyuanx  
       2019-11-04 17:00:27 +08:00
    @levelworm 您太幽默了
    monkeydream
        195
    monkeydream  
       2021-04-19 17:04:14 +08:00
    技术不断更迭,需求不断变化,质量再好的代码也会面临重构;所以只要基础架构 OK,前期还是要求快,等业务稳定了再来抓质量。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5873 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 02:05 · PVG 10:05 · LAX 18:05 · JFK 21:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.