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

奇文共赏: 12 年没有版本控制的 PHP 代码,产生两千万美元年收入

  •  3
     
  •   kamal ·
    PlayerYK · 75 天前 · 8325 次点击
    这是一个创建于 75 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Ask HN: 继承了我见过的最差的代码和技术团队,怎么办?

    529 点赞 | 660 评论

    我必须找到一个策略来解决这个开发团队的问题,不是直接管理团队。现状如下。

    • 这个代码每年产生超过 2000 万美元的收入
    • 运行在 PHP 上
    • 已经在生产环境直接开发了 12 年,没有源代码控制(都是这种 index-new_2021-test-john_v2.php )。
    • 没有使用 composer 或任何依赖管理。都是 require_once 。
    • 不使用任何框架
    • 路由管理完全是在 NGInX 中重写的( NGInX 的配置大约是 10,000 行)。
    • 这些年只往上堆代码,没有任何代码被删除。我想这是因为直接在生产环境开发,删东西太冒险了。
    • 数据库结构也是一团糟,没有迁移,等等。当添加一个列时,由于数据量大,他们会建一个新的表,然后用 join 。
    • JS 和 CSS 也是如此。多个版本的 jQuery 互相打架,取决于你在哪个页面,甚至在同一个页面也存在。
    • 当然没有 MVC 模式,或者什么模式。没有模板库。这是 PHP2003 的风格。
    • 在很多地方,我看到像是 Controller 一样的文件,向它自己的 rest API 发出 curl 请求(通过域名,而不是 localhost )做 oauth 授权,等等。只是为了获得菜单项或产品列表...
    • 没有缓存(但有 memcached ,但只用于 Session...)
    • 团队有 3 个人,很年轻。一个后端,一个前端,一个 iOS/android 。对变化有很强的抵触。
    • 生产力很差,这是可以理解的。乱七八糟的东西实在是太多了,根本没办法做新东西。

    业务部门有相当积极的规划,因为管理层和总部没有真正了解这些代码上的障碍。而且在 COVID 之后,预算真的很紧张。

    我知道应该全面重写,但如何抉择呢?

    原文地址: https://news.ycombinator.com/item?id=32883596

    第 1 条附言  ·  75 天前

    勘误:

    team is 3 people, quite junior. One backend, one front, one iOS/android. Resistance to change is huge.

    团队有3个人,都是初级开发。一个后台、一个前台、一个iOS/android。改革阻力巨大。

    56 条回复    2022-09-21 18:23:28 +08:00
    liuzhedash
        1
    liuzhedash  
       75 天前   ❤️ 11
    倒是可以完美解答这个问题:
    https://www.v2ex.com/t/881426
    wonderfulcxm
        2
    wonderfulcxm  
       75 天前 via iPhone
    我们公司就有这种的,没有版本控制,明文存储密码,逻辑写在存储过程,都是 2008 年的时候的代码了。
    Light3
        3
    Light3  
       75 天前   ❤️ 1
    代码能跑不还行?天哦
    rocksolid
        4
    rocksolid  
       75 天前   ❤️ 12
    聪明人只会润或者继续堆屎
    自作聪明的或者绝世天才才会重写
    learningman
        5
    learningman  
       75 天前
    感觉有点喘不过气了
    tzigone
        6
    tzigone  
       75 天前
    这 3 人可不光是 phper , 他们肯定也是业务专家和细分流程的集大成者。

    只要这 3 人不重构,估计要花很多钱才能构建出一样的。
    LeegoYih
        7
    LeegoYih  
       75 天前   ❤️ 2
    完美诠释了能赚钱的项目都是屎山
    Daniel17
        8
    Daniel17  
       75 天前   ❤️ 1
    所以赚不赚钱和代码质量没有啥关系?
    HunterPan
        9
    HunterPan  
       75 天前
    没人敢辞退了 不好么
    MAGA2022
        10
    MAGA2022  
       75 天前
    提升空间巨大,我甚至有点手痒
    watzds
        11
    watzds  
       75 天前   ❤️ 2
    @tzigone #6 原文是 3 个初级开发,楼主翻译成很年轻,到你这儿直接业务专家了
    frankies
        12
    frankies  
       75 天前 via Android   ❤️ 6
    一句话:好的商业模式比业务代码重要得多得多!

    再多问一句,他们如此落后的开发影响他们商业利润提升了嘛?如果没有,那么继续;如果有,才需要考虑技术问题。

    其实就是奥卡姆剃刀原则。

    开发人员理应考虑技术问题,一旦你试图考虑商业、盈利、管理,那么你就要跳出技术思维,因为这可能会带来负面作用。
    zzlatan
        13
    zzlatan  
       75 天前
    我觉得挺好~
    lucifer9
        14
    lucifer9  
       75 天前
    这仨哥们儿万一哪个人哪天脑子一抽删库跑路...
    xiangyuecn
        15
    xiangyuecn  
       75 天前
    看到没有,代码什么的根本不重要,只要是能赚钱,屎山都是香喷喷的😂🐶

    所以,能跑起来的代码,千万不要动🐶 除非重金重构 大捞一笔😁
    lucybenz
        16
    lucybenz  
       75 天前
    @lucifer9 仓库报废电脑的硬盘里 还有几百个历史版本的备份
    abersheeran
        17
    abersheeran  
       75 天前
    这三个人可以靠这一个项目养活下半辈子了,没人能接手……
    nonduality
        18
    nonduality  
       75 天前
    很好奇啥业务,这么赚大钱。
    moult
        19
    moult  
       75 天前
    这让我想起了某个 PHPWind 搭建的网站。
    zhangkunkyle
        20
    zhangkunkyle  
       75 天前
    重要的是业务,用什么工具都行,业务能做成就行
    ladypxy
        21
    ladypxy  
       75 天前
    如果是自己搭建的屎山,自己知道问题在哪里,知道怎么修。。别人都搞不定

    突然感觉这是越乱越安全啊。。。
    likunyan
        22
    likunyan  
       75 天前
    牵一发而动全身
    zddwj
        23
    zddwj  
       75 天前 via Android
    哈哈哈哈,我曾经接手过一个 php 商城项目跟这个描述超级像,各种年份的代码混在一起,没有依赖管理,没有版本控制,一个方法 2800 行,整个项目几乎没有什么注释,循环里面写 sql ,源文件目录下随机分布着 qwe.txt,666.txt 之类的缓存文件,用 curl 下载自己服务器上的图片文件进行二维码生成等等一系列骚操作
    swsh007
        24
    swsh007  
       75 天前 via Android
    业务逻辑靠谱就是
    花里胡哨太多也没啥意思
    会配防火墙会备份会倒回能挣钱不赔钱
    还要啥子呢
    x86
        25
    x86  
       75 天前
    能赚钱就是牛,给你上 laravel 和 vue 赚不到钱也是白搭
    datou
        26
    datou  
       75 天前
    @moult s1 ?
    levelworm
        27
    levelworm  
       75 天前 via Android
    这个除非乱到没法加新特性,或者出错到没人能搞定,否则业务上的人应该是不会同意重构的。这时候就看技术领导的软技能了。
    threebr
        28
    threebr  
       75 天前
    重构出岔子耽误别人挣 2000 万怎么办?
    EscYezi
        29
    EscYezi  
       75 天前 via Android
    这个样子居然还能继续迭代,太恐怖了
    akira
        30
    akira  
       75 天前   ❤️ 3
    一套 能产生年收入 2000w 美元收入的系统,只需要 3 个初级程序员维护。。

    感觉这公司能有这么高的收入,并不依赖于这套系统。
    julyclyde
        31
    julyclyde  
       75 天前
    口气似乎很骄傲
    而且业务变革不许组织变革,那怎么可能成呢
    visper
        32
    visper  
       75 天前
    代码不漂亮,但是业务功能好用啊
    sciel
        33
    sciel  
       75 天前 via iPhone
    能探出是什么行业,具体什么服务吗?
    echoZero
        34
    echoZero  
       75 天前
    又一次证明,业务赚不赚钱也开发的编码能力没有啥关系
    mknightoy
        35
    mknightoy  
       75 天前
    完美诠释了技术跟盈利没什么关系
    不过维护的那几个弄不下去了可以连夜转行业务人员 [doge]
    Leonard
        36
    Leonard  
       75 天前
    非技术驱动的项目,就是技术能用就行
    proxytoworld
        37
    proxytoworld  
       75 天前
    能用就行
    pytth
        38
    pytth  
       75 天前
    你就说这个代码还能不能跑吧!能赚 2000 万美元,拿点钱出来用现有的最新技术标准去用 go 或者 java 重构不也挺好的吗!
    littlewing
        39
    littlewing  
       75 天前
    你就说你重构后能不能一年赚 2 亿美元,如果不能,重构他干啥
    eason1874
        40
    eason1874  
       75 天前
    @pytth #38 为了追求新技术而重构,不会带来收益,只会带来风险

    我以前总是第一时间用新技术重构项目,有一次重构隐藏 bug 几个月后才知道,亏损 10 多万。如果不重构而是加机器来提高性能的话,花不了几千块

    其实省的机器钱都不够发工资😅,不如直接用重构和修 bug 的工资来加机器,那样还不用担心出 bug
    pusheax
        41
    pusheax  
       75 天前
    粗略看了一下,可能存在一些安全问题:
    1 、老版本中间件的安全漏洞,如 PHP5 的%00 截断、Nginx 的一些 DOS 漏洞。
    2 、敏感文件泄露,看起来网站目录下可能存在 SQL.txt 、www.zip 之类的文件。会被目录扫描扫出来。
    3 、账户认证或者 XSS 、CSRF 一类的问题。
    至今没给黑产暴打,然后脱裤,也是难能可贵(也可能是被脱了没发现
    也许某一天被黑产盯上了,就不得不重构了。
    pindleskin
        42
    pindleskin  
       75 天前
    很显然继续堆屎山,一直到堆不了为止。这种历史悠久的项目,有很多细节逻辑都在代码里,没有人能知道所有的细节,重构不知道会引入多少 bug 。引入版本控制是必须的,这也很容易。
    个人认为,在项目的早期可以重构,项目真正上线运行一段时间,除非有重大问题,重构都是风险远大于收益。所以项目一开始就要做好。
    avenger
        43
    avenger  
       75 天前
    光看描述都快不能呼吸了……
    winglight2016
        44
    winglight2016  
       75 天前
    nginx 配置居然能写一万行,谁还知道最终是什么规则在起作用?与其重构,不如重写
    ngloom
        45
    ngloom  
       75 天前
    关键的不是代码,而是啥时间解决了啥问题
    leeggco
        46
    leeggco  
       75 天前
    能赚钱为什么要改?
    BenbenXiong
        47
    BenbenXiong  
       75 天前
    能跑吗
    Reficul
        48
    Reficul  
       75 天前
    三个人就,但是 2000 万美元收入。所以这三个人工资怎么样?钱多的话这口屎我也可以。
    acthtml
        49
    acthtml  
       75 天前
    这种程序员才是大智慧。

    他们三,没法替代。
    Joker520
        50
    Joker520  
       74 天前
    能跑,能赚钱就行了
    ztxcccc
        51
    ztxcccc  
       74 天前
    你笑那三哥们 junior ,别人笑你 naive
    yaphets666
        52
    yaphets666  
       74 天前
    @watzds 请问这样的代码,如果不是业务专家,你敢添加一行代码吗?年轻和业务专业并不冲突。
    neutrinos
        53
    neutrinos  
       74 天前 via iPhone
    老板看到得连夜裁员,笑哭
    watzds
        54
    watzds  
       74 天前
    @yaphets666 #52 这项目估计是简单重复,只是时间旧了代码多,不是本身复杂。
    要是真复杂,他们怎么敢直接在生产环境开发的

    这文字说的是项目烂但是挣钱,不是这项目有多厉害
    yaphets666
        55
    yaphets666  
       74 天前
    @watzds 复杂是复杂,你的意思是有可能没什么技术难度或者难点,这个我是认同的,但是这种屎山我深有体会,不懂业务真的动不了。
    wowawesome
        56
    wowawesome  
       74 天前
    能挣钱,不寒碜
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4882 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 08:26 · PVG 16:26 · LAX 00:26 · JFK 03:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.