V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
george404
V2EX  ›  程序员

看着项目的代码,感觉要黄,准备跑路了

  •  1
     
  •   george404 · 2020-07-07 12:11:42 +08:00 · 13799 次点击
    这是一个创建于 1634 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟在一个创业型小公司 10 个人搞 golang 项目。最近模块连调的时候发现一个 bug 追到另一个人写的代码里去了,直接崩溃了。

    1.那个人一共撸 4 万行代码(包括注释换行),其中 3 万行在一个文件夹下,一个文件夹下直接 30 个.go 源文件。。。。没有任何逻辑和层次,甚至分类。

    2.很多函数复制粘贴多次,后面修改代码,得跟着所有函数改一遍。

    3.几乎没有封装,要用另外一个 package 的函数,直接大写,导成全局函数。

    4.当看到 package 里一个 go 文件全局变量是这么定义的( types 为另外一个包)

    var(
    a=types.Function1
    b=types.Function2
    ......
    ......
    n=types.Functionn
    )
    

    一共定义了 100 多个全局变量。。。。。。

    这个人自称 10 年开发经验,我怀疑他是故意这么写代码的。我当时就觉得项目上线 1 个星期内肯定黄,这种代码如何维护更新,我看我要准备跑路了。。。。。 当你想好好做事的时候,碰到这种货,,,哎。。。。。。。。重头再来了。

    68 条回复    2020-07-09 10:56:49 +08:00
    awolfly9
        1
    awolfly9  
       2020-07-07 12:15:57 +08:00   ❤️ 68
    项目黄不黄其实和代码没有一点关系
    Muninn
        2
    Muninn  
       2020-07-07 12:19:28 +08:00
    如果是别的语言还好……

    如果是 golang,你没法说啥,因为最开始官方就是推荐这么写的。

    铺 100 个文件的著名项目都多得是。

    所以 1 不是问题。 2,算是半个问题,社区有很多过度封装的讨论,有些情况复制是更好的。

    3,是 1 和 2 衍生的问题,也不是问题。

    4,确实有点问题


    总的说来 创业公司刚开始主要是跑通业务 很多公司刚开始用 php 或者啥别的 cms 改改后面再重来。
    u823tg
        3
    u823tg  
       2020-07-07 12:19:37 +08:00   ❤️ 2
    10 年这样肯定是故意这么写的,不用怀疑。
    zhuangzhuang1988
        4
    zhuangzhuang1988  
       2020-07-07 12:24:32 +08:00
    还好是 go
    要是 js, 或者 python, ruby
    那才是要黄
    luoqeng
        5
    luoqeng  
       2020-07-07 12:30:58 +08:00   ❤️ 8
    Golang 就是当代的 PHP
    liujialongstar
        6
    liujialongstar  
       2020-07-07 12:33:44 +08:00
    之前疯传过一篇如何写出无法维护的代码的文章, 这位深得其中真意, 或许这样, 这位就变得无可替代了
    xiangyuecn
        7
    xiangyuecn  
       2020-07-07 12:41:31 +08:00   ❤️ 8
    一言不合就重构😆 又可以多混半年工钱
    george404
        8
    george404  
    OP
       2020-07-07 13:56:21 +08:00
    @Muninn
    1. 要是著名项目就算了,这种 low b 项目根本没到那档次。再说好的项目至少不同版本不会全部塞一个文件夹下吧?整个项目基本上就 2-3 个 package 。


    不是过度封装,是几乎没有封装,一个文件夹下 aa_handler.go, bb_handerler.go,cc_handler.go ,然后 aa_handler_v2.go, bb_handler_v2.go 全是这种东西,恶心不?公共函数和逻辑都不提出来。直接 copy-past,大概看一眼,全是每个源文件里面的函数名都基本上相似。

    好像我在哪看到,go 中尽量避免使用全局可变的变量,容易被误修改。我是比较认同这种说法
    george404
        9
    george404  
    OP
       2020-07-07 13:57:25 +08:00
    @u823tg 嗯,我也是觉得,这样做快,不用考虑接口,老板看功能好的快,开心,同时,自己又不可替代了,呵呵。。。。。没有人会接那烂摊子。
    george404
        10
    george404  
    OP
       2020-07-07 13:58:38 +08:00
    @liujialongstar 同意!🤝
    luojian666
        11
    luojian666  
       2020-07-07 14:15:07 +08:00 via Android
    跑路跑路
    xuanbg
        12
    xuanbg  
       2020-07-07 14:27:23 +08:00
    还好吧,才 4 万行代码,里面有效代码估计不足 1 万行。实在不行重写一遍也费不了多少时间。总之,这个正在向不可替代发展的先干下去再说,不然还真的要变成不可替代的了。
    qinfensky
        13
    qinfensky  
       2020-07-07 14:33:20 +08:00 via iPhone
    大道至简
    DJQTDJ
        14
    DJQTDJ  
       2020-07-07 14:36:04 +08:00   ❤️ 5
    这么说吧,公司可以没有你,但是不能没有他。
    他的代码只有他知道怎么改。
    你一改你就得懵圈
    lepig
        15
    lepig  
       2020-07-07 14:39:24 +08:00
    @DJQTDJ 所以说楼主还是太年轻啊。
    fy1993
        16
    fy1993  
       2020-07-07 14:41:27 +08:00
    不可或缺的人
    murmur
        17
    murmur  
       2020-07-07 14:41:57 +08:00
    我记得 lua 年代就有把库里的函数再定义出来一次加快运行速度的例子
    比如 local cosine = Math.cosine
    roundgis
        18
    roundgis  
       2020-07-07 14:41:59 +08:00 via Android
    系統能用嗎?
    iwh718
        19
    iwh718  
       2020-07-07 14:46:12 +08:00 via Android
    第一版的话,能跑通就可以了。
    DelayNoMay
        20
    DelayNoMay  
       2020-07-07 14:52:35 +08:00
    改需求的话,自己也得累死啊
    fiypig
        21
    fiypig  
       2020-07-07 14:54:33 +08:00 via iPhone
    你们没有个主程吗
    cnbattle
        22
    cnbattle  
       2020-07-07 14:57:00 +08:00
    跟他聊下代码思路 大概是按怎么样的逻辑 结构写的, 可能聊完 再看就没那么乱了
    reus
        23
    reus  
       2020-07-07 15:03:48 +08:00   ❤️ 1
    第一点问题不大,官方的 net 包,180 几个文件也是同一个目录: https://github.com/golang/go/tree/master/src/net 。用前缀大致区分即可。

    第二点有问题,但可以重构

    第三点问题也不算大,命名和原来的一样就行

    单看你这个描述,其实也说明不了质量,只是你一时适应不了不同的方式而已。
    robotdiy
        24
    robotdiy  
       2020-07-07 15:07:40 +08:00
    如果是别人写的,你提交下你查到的 bug,让他修改不就得了。
    chenqh
        25
    chenqh  
       2020-07-07 15:18:32 +08:00
    @luoqeng 比 php 差远了,php 的创始人如果想 golang 那批人那么有钱,php 肯定要比 golang 好
    Jooooooooo
        26
    Jooooooooo  
       2020-07-07 15:25:14 +08:00   ❤️ 2
    项目黄不黄完全看业务

    再烂的代码能跑起来就行
    la2la
        27
    la2la  
       2020-07-07 15:31:19 +08:00
    如果是业务驱动型项目,项目黄不黄跟代码质量毛关系都没有;
    以我司为例 ssm 这一套接口,还没有管理工具,一个 java 文件 7000+是常有的事情,据说是出现过源码文件太大的错误,但是丝毫不影响公司赚钱
    szdubinbin
        28
    szdubinbin  
       2020-07-07 15:48:07 +08:00   ❤️ 11
    Kilerd
        29
    Kilerd  
       2020-07-07 15:56:52 +08:00
    诶,go 不就是这么写的吗? 我见很多开源项目都这么写还有很多 start 呢
    Kilerd
        30
    Kilerd  
       2020-07-07 15:58:11 +08:00
    @murmur #17 好像现在 Python 这么做也能都丝丝性能提升(
    heiheidewo
        31
    heiheidewo  
       2020-07-07 16:17:34 +08:00
    这不是标准写法么
    ydpro
        32
    ydpro  
       2020-07-07 16:24:19 +08:00   ❤️ 1
    真·十年经验(深知不可替代性
    FreeEx
        33
    FreeEx  
       2020-07-07 16:35:31 +08:00   ❤️ 3
    幸亏是 Go 语言,如果是 Java 的话,众人皆云:Java 是真的像老太婆的裹脚布一样啰嗦,我 xx 语言 yy 行就能搞定。
    crella
        34
    crella  
       2020-07-07 17:35:55 +08:00
    google 的开源项目就没******
    yoke123
        35
    yoke123  
       2020-07-07 18:00:53 +08:00   ❤️ 1
    他——不可替代,你确实可以替代。
    Mohanson
        36
    Mohanson  
       2020-07-07 18:12:26 +08:00 via Android   ❤️ 29
    菜鸟看到屎山会想办法重构然后被屎淹没,高手看到屎山会维持不倒塌的情况下再把自己的屎拉上去。
    yousabuk
        37
    yousabuk  
       2020-07-07 18:55:49 +08:00 via iPhone
    不要提出问题,谁提出问题谁解决问题。
    scriptB0y
        38
    scriptB0y  
       2020-07-07 19:02:48 +08:00
    @Mohanson 我是一坨屎,在屎上拉屎。
    itabas016
        39
    itabas016  
       2020-07-07 19:31:58 +08:00 via Android
    @DJQTDJ #14 小公司太多这类的”大牛“了,真不知道出了问题修 bug 的时候,他自己是不是也恶心。
    zhuangzhuang1988
        40
    zhuangzhuang1988  
       2020-07-07 19:59:00 +08:00
    xjq
        41
    xjq  
       2020-07-07 20:00:50 +08:00 via Android   ❤️ 1
    我之前做了个项目也是写的很烂了,感觉要黄,但是老大把坑填完了,只要有负责的有能力的人在,再坑也不至于黄
    nasmatic
        42
    nasmatic  
       2020-07-07 20:15:44 +08:00
    太年轻,有经验了你会在屎山上巧妙的避开然后再优雅的拉一坨屎上去
    liangch
        43
    liangch  
       2020-07-07 20:37:01 +08:00
    代码烂的多了去了。但好多应用还是跑得好好的。
    想想为什么。
    justin2018
        44
    justin2018  
       2020-07-07 20:48:51 +08:00
    sleep(100000) 大法好~
    jin7
        45
    jin7  
       2020-07-08 06:50:31 +08:00
    感觉没啥问题
    george404
        46
    george404  
    OP
       2020-07-08 07:13:49 +08:00
    @roundgis 没上线,没有异常测试,不清楚,肯定后面维护只能他自己,一 B 糟
    george404
        47
    george404  
    OP
       2020-07-08 07:19:34 +08:00
    @reus 官方 net 下面都是网络相关的,至少整个项目不止是 2 个 package,不会一个类似功能的函数 copy-past 吧?是,什么都可以重构,这么说,都不是问题了。
    george404
        48
    george404  
    OP
       2020-07-08 07:22:43 +08:00
    @zhuangzhuang1988 不错!
    LokiSharp
        49
    LokiSharp  
       2020-07-08 07:46:15 +08:00 via iPhone
    Golang 不就是这样写的么?
    Narcissu5
        50
    Narcissu5  
       2020-07-08 08:41:02 +08:00
    @Jooooooooo
    @awolfly9
    表面看起来项目黄都不是因为技术,因为技术而黄掉的项目根本不会进入大众的视线(我知道的就很多很多
    2379920898
        51
    2379920898  
       2020-07-08 09:08:18 +08:00
    小伙子太年轻了,这么多问题,明天你就要领盒饭了
    zh5e
        52
    zh5e  
       2020-07-08 09:32:01 +08:00
    golang 这种包管理方式就是个坑,访问控制用大小写来区别也是个残废。golang 开发项目稳定性没啥问题,重构比脚本语言方便多了,基本满足需求
    mimi888
        53
    mimi888  
       2020-07-08 09:38:39 +08:00 via Android
    4 万行 10 个人一周就能重构好
    leapV3
        54
    leapV3  
       2020-07-08 10:02:27 +08:00
    上面就有些人不明白越分工越细,越被容易替代;和流水线工人有啥区别
    Telegram
        55
    Telegram  
       2020-07-08 10:29:46 +08:00
    @liangch #41 用邓小平的一句话就是:黑猫白猫,抓到老鼠的就是好猫

    你代码写的再烂,只要业务能正常跑起来就没问题。客户又不看你代码优不优美
    exploreXin
        56
    exploreXin  
       2020-07-08 10:36:04 +08:00
    技术层面确实让人大跌眼镜,但在资本市场的世界里面,这不算啥,什么设计什么整洁,都是次要的,在老板看来什么是好项目?能赚钱就是好项目。我还见过手动备份 sql 的,就是下班前手动用可视化工具把整个项目库数据导出来存到硬盘里带回家,第二天如果发现 bug 导致数据问题,再整个导进去慢慢恢复数据,我在任职第二年就离职了,但项目运营了五六年 。。。。。。
    LennieChoi
        57
    LennieChoi  
       2020-07-08 10:40:25 +08:00
    你见过一个文件铺 2w+行代码的吗,js 就能做到,我特么刚来公司直接崩溃了,webstorm 打开文件超慢,打开 2w 行的那个文件时候,编辑器右边栏的 warning 提醒显示跟读进度条一样,从那时起 我被逼的入了 vscode 真香大法。代码毫无规范,毫无设计模式,简直代码怎么臭怎么写,刚进公司的时候我以为是先人留下的代码一顿吐槽,后来安了 vscode 的 gitlens 插件后 能看到每一行代码的提交作者,才发现原来是现员工写的,然后我就明白这公司的技术上限了
    LennieChoi
        58
    LennieChoi  
       2020-07-08 10:46:45 +08:00
    @LennieChoi 有时候怀疑,写代码 10 多年了 还写这样的代码,是真的编程能力有问题 还是故意这么写确保自己在公司的地位不可替代性。但是入职这公司,接受这烂代码之后,悟到了没有什么是不能被替代的,这么写代码恶心自己,还恶心下一波人。靠写混淆烂代码确保不可替代性 有这想法的人,本身就是能力欠缺的表现,我们新生代 coder 不可追从
    lewinlan
        59
    lewinlan  
       2020-07-08 12:57:12 +08:00 via Android
    10 年经验算啥?我相信有不少 10 年经验的所谓大牛真的就是比初学者还菜。
    话说回来,业务赚不赚钱跟技术好不好并没有必然关系……
    Cookieeeeee
        60
    Cookieeeeee  
       2020-07-08 17:09:33 +08:00
    @nasmatic 好比喻
    fanyingmao
        61
    fanyingmao  
       2020-07-08 17:45:08 +08:00
    要逼自己写难以维护的代码也挺难的,多少都会有代码洁癖。
    overthemoon
        62
    overthemoon  
       2020-07-08 17:59:19 +08:00
    我目前就是这种情况。 代码两个人写
    qwefdrt
        63
    qwefdrt  
       2020-07-08 18:02:58 +08:00
    为什么要故意这么写呢?
    george404
        64
    george404  
    OP
       2020-07-08 20:29:06 +08:00
    @qwefdrt 这样弄快啊。 如果家里装潢想在卧室新增加一个插座,肯定是直接从外面拉一根线进来比重新在墙上装插座,布线快。
    george404
        65
    george404  
    OP
       2020-07-08 20:31:42 +08:00
    @exploreXin 牛逼!
    george404
        66
    george404  
    OP
       2020-07-08 20:34:44 +08:00
    @LennieChoi 我觉得老板给你这份钱,你就得对得起这份钱。人家给你 10 万块钱盖房子,那你用纸板随便盖,人家给你 100 万盖房子,你再随便盖,毫无层次,良心何在?
    OHyn
        67
    OHyn  
       2020-07-09 10:21:53 +08:00
    @LennieChoi 淡定。我初学 js 的时候也是这样写的,他们可能。。。圈地自萌
    adoontheway
        68
    adoontheway  
       2020-07-09 10:56:49 +08:00
    项目黄不黄 跟代码质量其实是没有关系的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   911 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 21:51 · PVG 05:51 · LAX 13:51 · JFK 16:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.