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

公司项目技术老旧,是种什么体验?

  •  4
     
  •   sagaxu · 2018-07-29 16:18:40 +08:00 via Android · 16346 次点击
    这是一个创建于 2338 天前的主题,其中的信息可能已经有所发展或是发生改变。
    2015 年开始的某个项目,骨架是从 2012 年那个项目抠出来的,标配的 Java 6 和 spring 3,界面是 bootstrap2 和 jquery 画的。所有模块都在一起,出来个大大的 war 包。需求不断在加在改,不是简单维护一下了事。

    同行门,你们都是怎么对付这种陈年项目的?
    第 1 条附言  ·  2018-07-29 18:15:26 +08:00
    故事继续,在熟悉了整个系统之后,某一天我萌发了一个想法,何不做点技术栈的小更新?抱着试试看的想法,我先挑了最软的柿子捏,把 Java 6 干到了 Java 8,Tomcat 换到了最新版,非常顺利。在计划下一步行动前,我又把几百个编译警告都修正了,步子不能太大。

    几周后,着手从 spring3 升级到 spring4,并没有做很多改动,稳定运行了一段时间后,顺手把大段 XML 配置替换成了 spring 注解,后来又更新到 spring5。到这个阶段,我感觉已经比大部分公司新了^_^。

    然后我想改善一下打包发布,却发现 maven 太死,用 XML 写逻辑是很要命的,干脆把构建系统换成了 gradle,把构建脚本从大几百行缩短到了一百多行,功能不但没少,还多了。

    我觉得还不够,尝试引入了 Koltin,原本只是想写一两个类感受一下,谁知道一试就出事了,出大事了,整个项目都被逐步逐步的替换成了 Kotlin,半年之后,除了自动生成的代码,没有一行是 Java 写的了。

    这些变更,都是业余时间做的,并没有占用正常版本迭代时间,也没有因此引入 bug,反而整个系统更稳健和高效了。
    第 2 条附言  ·  2018-07-29 18:41:07 +08:00
    之后的一段时间里,脑子里有个人不停的跟我说,重写吧,推倒重来吧。正好公司业务要求有大的调整,里应外合之下,重写已经是箭在弦上,不得不发了。

    然后很自然的做了好多更新,


    前后端完全分离,前端用 element 重写

    拆分成十来个模块,变成独立的内部服务,分而治之,部分模块改用 PHP 了

    零阻塞,完全丢掉 Tomcat 堆多线程那套做法,干脆 servlet 全丢,全面拥抱了 vertx

    DI 和配置等脏活,仍然交给了 spring,直接从 springboot 1.X 最新版起步


    最近我又抽空更新到了 springboot 2.0,计划十一之后再着手把 JRE 迁移到 Java 11,明年估计还有随 Kotlin 1.3 发布的 coroutine,都是值得试试手感的事情。


    虽然这么折腾没带来什么账面收益,我也不图这个,起码我自己后续的开发和维护更加舒适了,很多常规工作,以前要 2 周工期的,后来变成了一周,后来变成了 2-3 天,现在最多半天能搞定,我可以有更多的时间做到更好。
    第 3 条附言  ·  2018-08-02 20:15:27 +08:00
    简单回复一下一些疑问

    Kotlin 和 Spring 怎么合体?
    基本姿势跟 Java 一样,比 Java 多些语法糖红利。

    Springboot 和 Vertx 怎么合体?
    Vertx 官方有 example。

    SpringMVC 能转 Vertx ?
    当然能,但异步改造并不轻松,管理后台和低负载接口,仍然可以继续用 springmvc,或者用 vertx 提供的 blocking 方法线程池。

    楼主不用做需求吗?
    当然要做,初期可能略影响进度,积累一段时间之后,重构后节省的时间大大超过重构本身的时间。渐进式重构,讲究的就是少量多餐,保持克制再克制,一次不要改太多。
    127 条回复    2018-09-27 08:57:44 +08:00
    1  2  
    luob
        1
    luob  
       2018-07-29 16:20:18 +08:00 via iPhone
    重写 || 跑路
    zzzcx
        2
    zzzcx  
       2018-07-29 16:20:51 +08:00
    很多时候,稳定大于天。
    chenlaocong
        3
    chenlaocong  
       2018-07-29 16:22:46 +08:00 via Android
    我们那个项目是用 JSP。B UI 做的。一直在上面改。
    AltairT
        4
    AltairT  
       2018-07-29 16:26:07 +08:00 via iPhone
    我之前东家跟你这个差不多,spring springmvc jdbc bootstrap jq 封装了一套东西,三年的老员工居然以为 maven 和 svn 是一类东西,几百人大多是才毕业的新人,待久了必废,于是出来找工作首先问他们技术栈
    vvvvww
        5
    vvvvww  
       2018-07-29 16:28:19 +08:00
    工作第一家公司要我维护一个历史遗留项目,用的是 jdk1.5+struts1+hibernate3...前端都是 table 写的,用的框架是 Prototype,那时刚好有点闲,边学边改,最后重构成 ssm+eaysui,过程中也算学到不少东西了
    daigouspy
        6
    daigouspy  
       2018-07-29 16:29:07 +08:00 via Android
    呵呵,access 数据库还有在维护的
    mydns
        7
    mydns  
       2018-07-29 16:31:43 +08:00
    稳定
    murmur
        8
    murmur  
       2018-07-29 16:38:32 +08:00   ❤️ 1
    2012 年的项目 2018 年还在跑 比很多倒闭的互联网项目不知道牛逼到哪里去了
    我们公司的 OA 是 09 年还是多少年开始部署的 用的数据库是 domino 后端开发语言是 vb 现在不也照样用
    zhuanzh
        9
    zhuanzh  
       2018-07-29 16:54:05 +08:00 via Android
    我们单位的 oa 是基于 ie6 开发的。
    Immortal
        10
    Immortal  
       2018-07-29 17:00:37 +08:00
    建议看下 阿里那种中台战略 的书
    也是讲淘宝从一整个 war 到解耦的过程
    wobushizhangsan
        11
    wobushizhangsan  
       2018-07-29 17:12:42 +08:00 via Android
    struts2
    wobushizhangsan
        12
    wobushizhangsan  
       2018-07-29 17:17:46 +08:00 via Android
    struts2,hibernate,yui,零几年的做的产品,分为十几个项目,开发人员已经换了 n 波了,去年交接到我手里,一个人十几个古董项目的代码。
    t6attack
        13
    t6attack  
       2018-07-29 17:20:28 +08:00
    还有做 asp 的公司没?我看源码站上有持续更新的程序。
    wdlth
        14
    wdlth  
       2018-07-29 17:22:15 +08:00
    这也叫旧,以前我呆的还有用 PowerBuilder、Delphi 5 写的呢,让他们用 UTF-8 编码搞得跟上天似的……
    l00t
        15
    l00t  
       2018-07-29 17:44:40 +08:00   ❤️ 1
    2012 年的项目怎么能算老…… 我手上的一堆 2002 年的……
    tyrealgray
        16
    tyrealgray  
       2018-07-29 17:50:37 +08:00 via Android
    最近把一个 node0.10 版本的项目重构升级到 8 和 TypeScript 版本下了
    woscaizi
        17
    woscaizi  
       2018-07-29 17:55:46 +08:00 via iPhone
    @Immortal 书名可以告诉一下吗,谢谢
    tomfs
        18
    tomfs  
       2018-07-29 18:12:08 +08:00
    我这还有 10 多年没关机的 BSD 6,还有 windows nt,我能怎么办.
    learnshare
        19
    learnshare  
       2018-07-29 18:25:56 +08:00
    稳定的莫名其妙,Bug 出的也莫名其妙
    想重构别人会坚定地拦住你,坑有多大谁也不知道
    SsuchingYu
        20
    SsuchingYu  
       2018-07-29 19:01:19 +08:00
    woscaizi
        21
    woscaizi  
       2018-07-29 19:16:04 +08:00 via iPhone
    @SsuchingYu 谢谢
    flaty
        22
    flaty  
       2018-07-29 20:12:05 +08:00
    楼主折腾这么多没出严重 bug。稳~!
    CFO
        23
    CFO  
       2018-07-29 20:31:14 +08:00 via Android
    老哥稳啊
    jowuIM
        24
    jowuIM  
       2018-07-29 20:32:57 +08:00 via Android
    小项目吧
    nfroot
        25
    nfroot  
       2018-07-29 20:36:31 +08:00 via Android
    真的不要随便推倒重建,最近想上虚拟化,顺便升级服务器系统,然后 iis 提示配置不对,百度后修改就起不来了。。然后还自主申请免费加班,实际干了 16 小时左右。。。。好累
    mchong
        26
    mchong  
       2018-07-29 20:39:06 +08:00
    @tomfs 必须虚拟化。
    zoffy
        27
    zoffy  
       2018-07-29 21:07:11 +08:00
    公司欠下的技术债务,当然是公司去还,你想帮公司还债还是咋滴
    PP
        28
    PP  
       2018-07-29 21:13:44 +08:00
    及时申请预算和技术立项,对自己对公司都负责。
    watzds
        29
    watzds  
       2018-07-29 21:15:40 +08:00 via Android   ❤️ 1
    竟然改得这么轻松,估计是小项目
    zorui
        30
    zorui  
       2018-07-29 21:39:11 +08:00 via Android
    老哥 稳
    cnTangLang
        31
    cnTangLang  
       2018-07-29 21:48:10 +08:00 via Android   ❤️ 1
    就喜欢这样有主动态度的人!想换个工作,试试更高的调整,可以短信给我:MTMxNDg0NzA4MDc=,坐标深圳,待遇绝对让你满意。
    lhx2008
        32
    lhx2008  
       2018-07-29 21:51:23 +08:00 via iPhone
    一般很多业务都没有测试吧?这样大改真的不会出问题?平时改 bug 都引入一堆新问题。
    lhx2008
        33
    lhx2008  
       2018-07-29 21:54:31 +08:00 via iPhone
    特别是改成 vert.x 等于是重写了,很迷幻
    CasualYours
        34
    CasualYours  
       2018-07-29 21:54:48 +08:00 via Android
    楼主厉害了
    herozhang
        35
    herozhang  
       2018-07-29 21:57:29 +08:00
    还见过用 FoxPro 的
    MajestySolor
        36
    MajestySolor  
       2018-07-29 22:13:26 +08:00
    楼主性格应该和我一样,看到老旧和杂乱的东西就想自己重写,不重写就觉得心里有猫在挠,睡也睡不好
    fx109138
        37
    fx109138  
       2018-07-29 22:18:35 +08:00 via Android
    angular.js 。。。。。。
    252748371
        38
    252748371  
       2018-07-29 22:22:15 +08:00 via Android
    你这么搞,你没有新的需求要做么
    anyele
        39
    anyele  
       2018-07-29 22:26:01 +08:00 via Android
    老哥牛逼
    miao1007
        40
    miao1007  
       2018-07-29 22:31:27 +08:00 via Android
    慢慢改呗,重要是提高软件质量。根据破窗效应,就算你走了后面也会乱七八糟的。
    willakira
        41
    willakira  
       2018-07-29 22:44:36 +08:00
    2012 年就不要叫什么旧项目啦… 我们组的项目比较老,我也不敢像你这么折腾,光是 Jar Hell 我们就得被搞死
    我后来采取的步骤是
    - 把系统拆分成小一些的 service,在小的 service 上面更新技术栈
    - 留在大系统中的一些已有的 features 先把接口部分捋捋,然后逐渐换用比较新的技术栈。contain & engage。
    说实话楼主这么折腾线上没出几个 Class or Field NotFound Exception 的问题也挺是幸运的。
    swim2sun
        42
    swim2sun  
       2018-07-29 23:04:44 +08:00
    我比较好奇 vert.x 和 Spring 是如何共存的
    mandy0119
        43
    mandy0119  
       2018-07-29 23:07:41 +08:00   ❤️ 1
    最近接手了一个游戏后台,一个框架没用,全是自己封的。大量滥用枚举,代码可读性极差
    gjquoiai
        44
    gjquoiai  
       2018-07-29 23:15:58 +08:00
    讲道理楼主公司测试肯定写的比较好吧?没测试我是不敢改的
    RainySeason
        45
    RainySeason  
       2018-07-29 23:19:14 +08:00
    sliverlight + vb.net 了解一下
    ljzxloaf
        46
    ljzxloaf  
       2018-07-29 23:34:36 +08:00 via iPhone
    vertx 方案可以分享下吗?尤其是有没有遇到什么坑
    hundan
        47
    hundan  
       2018-07-29 23:39:09 +08:00 via Android
    看了 append 除了优秀我不知道说啥……
    thinker3
        48
    thinker3  
       2018-07-30 00:43:52 +08:00
    java 是静态语言,还好
    python 的老项目,那时 django 还不出名,他们自己搞了一个 orm,n 个小服务,分散在个各服务器,没有用 git 管理代码,也没有 svn
    20015jjw
        49
    20015jjw  
       2018-07-30 00:55:11 +08:00 via Android
    听说会某 F 开头语言的大佬维护一个几十年前的系统
    年薪是 50w 刀+
    zwy100e72
        50
    zwy100e72  
       2018-07-30 01:19:42 +08:00
    C++ 10 年+ 老项目了解一下......
    260w 行代码,3-5 年前从 C 迁移,2-3 年前与多个相关项目合并,系统测试丰富但是集成测试和单元测试基本没有
    体验就是,业务繁重根本没有时间考虑重构的事情,只能遇到需要用的函数就想办法拆分下,或者新造轮子

    看到楼主 append 貌似结果还不错,楼主很幸运
    Reficul
        51
    Reficul  
       2018-07-30 01:24:00 +08:00
    渐进式重构,看有没有时间吧
    ericgui
        52
    ericgui  
       2018-07-30 01:40:03 +08:00
    哥们你是来炫技的么
    qiukong
        53
    qiukong  
       2018-07-30 04:24:24 +08:00
    知足吧,我上家公司(某上市技术公司),公司财务系统必须用 IE6 以下版本才能登录,底下怨言很多上级就死活不更新。
    yingfengi
        54
    yingfengi  
       2018-07-30 08:19:38 +08:00 via Android
    @nfroot p2v 过去啊
    NotFamous
        55
    NotFamous  
       2018-07-30 08:41:50 +08:00
    用 AngularJS,就连谷歌上都把这文档撤了。。。搜问题只能搜 Stack Overflow
    aice114
        56
    aice114  
       2018-07-30 08:41:55 +08:00   ❤️ 1
    看楼主的 append 感觉像是编故事,像我们公司那个 jdk1.6+strutc2 的老项目,十几万行的代码,代码写在 jsp 里面,如果一个人重构,怕是到公司倒闭都不可能
    hotsymbol
        57
    hotsymbol  
       2018-07-30 08:46:38 +08:00
    这已经很新了。。商业角度是不能什么都最新的。即使现在 Kubernets 已经开源了。我们公司依旧认为所有容器相关的技术是 Google 独有的。基于微软的平台就不应该使用
    rooftop64
        58
    rooftop64  
       2018-07-30 08:47:34 +08:00
    爱干干,不干自有别人干
    ——就是这种体验
    lihongjie0209
        59
    lihongjie0209  
       2018-07-30 08:49:07 +08:00
    这项目要多小才能这么改? 而且项目里面的业务需求你一个人都吃透了?
    yulitian888
        60
    yulitian888  
       2018-07-30 08:54:43 +08:00
    呃,楼主把本世纪的代码叫做老旧,那维护上世纪的 VB 6.0 代码算考古吗?
    另有本世纪初的 vb.net 代码,还广泛运行于客户的机器上。
    weizhen199
        61
    weizhen199  
       2018-07-30 08:57:52 +08:00
    惊了,这也算老项目
    那我怕是历史学家了
    zqguo
        62
    zqguo  
       2018-07-30 09:03:07 +08:00
    楼主你这项目肯定不算大
    owenliang
        63
    owenliang  
       2018-07-30 09:07:33 +08:00 via Android
    楼主不要站在程序员角度看待这个问题,应该想想对老板和团队有什么好处,以及他们对投入产出的评估。
    98jiang
        64
    98jiang  
       2018-07-30 09:10:13 +08:00
    看着感觉楼主好厉害!!
    alamaya
        65
    alamaya  
       2018-07-30 09:13:05 +08:00
    小项目这么搞还行,大多数公司架构部分都不是你自己想改就能改的。
    3a3Mp112
        66
    3a3Mp112  
       2018-07-30 09:16:58 +08:00
    只要老板肯定这个项目的价值,没有什么是不能高薪请大牛进来重写的。。
    不搞,肯定是价值不明朗啊。
    xiandao7997
        67
    xiandao7997  
       2018-07-30 09:21:04 +08:00 via iPhone
    @yulitian888 同 vb6 的路过,修改代码的时候运行在虚拟机里的 xp 上,一堆全局变量,调试累成狗
    ericgui
        68
    ericgui  
       2018-07-30 09:22:00 +08:00
    @zqguo 其实我也这感觉,重构竟然一个人就搞定了。。。。。而且没有得到上面授权的情况下,私自重构,而且无 bug,而且其他人都没发现。。。。
    zjbztianya
        69
    zjbztianya  
       2018-07-30 09:31:36 +08:00
    有人用过微软的 COM 么,之前实习,项目用这个东西。。。
    q397064399
        70
    q397064399  
       2018-07-30 09:45:13 +08:00
    @ericgui #68 可以断定是项目代码量小,船小号掉头,微服务的思想就是如此,
    zhouyou457
        71
    zhouyou457  
       2018-07-30 09:51:24 +08:00
    楼主🐮🍺啊,我手头有几个 10 年左右的项目,现在连需求的理不清,更别说重写了.....
    darkcode
        72
    darkcode  
       2018-07-30 09:52:31 +08:00
    说明楼主技术很强。
    但是,这个项目真的有这么多价值吗
    A555
        73
    A555  
       2018-07-30 09:54:55 +08:00
    我手上有个项目 4 个应用组成,功能接口大大小小 30 多个,前端用 jq,还带 activeX 的。光是改成改掉 struts2 就花了了 1 个多月的时间。
    StephenDev
        74
    StephenDev  
       2018-07-30 09:57:03 +08:00 via Android
    技术栈更新最大的问题不是技术不是项目,而是同事。我写的时候用新东西,同事全给改回去了。或者有些人就不接受新东西。
    sampeng
        75
    sampeng  
       2018-07-30 09:57:18 +08:00 via iPhone
    年轻时我也这样,现在?很多时候,稳定大于天,项目出一次问题就得跑路,不值得。尽量做新项目…
    sweb
        76
    sweb  
       2018-07-30 10:01:35 +08:00
    然后楼主用最新的技术重构了一遍,几年后,又另外一个楼主这样的人发同样的贴子,开发技术总会过时,关键是项目要稳定.楼主去鹅厂也是这样骂.
    mikuazusa
        77
    mikuazusa  
       2018-07-30 10:06:05 +08:00
    什么是旧项目?谁能把 Mainframe Cobol DB2 用 C++或 JAVA 重写,那一定不得了
    yalanaika
        78
    yalanaika  
       2018-07-30 10:06:49 +08:00
    公司的拳头产品是基于 Delphi 的 (sigh...)
    zhzer
        79
    zhzer  
       2018-07-30 10:14:13 +08:00
    记得有个知乎回答,说是写了十年,六百万行代码,无版本管理,zf 项目
    jatesun
        80
    jatesun  
       2018-07-30 10:17:24 +08:00
    目测楼主这项目不是很重要
    minininja
        81
    minininja  
       2018-07-30 10:31:40 +08:00
    06 年的项目还在维护
    wackyjazz1
        82
    wackyjazz1  
       2018-07-30 10:33:26 +08:00
    小弟目前做的項目是 delphi7 ...
    yulitian888
        83
    yulitian888  
       2018-07-30 10:35:15 +08:00
    @yalanaika 现在的新兵都不认识 Delphi 是什么了。曾经有人跟我说“滴普嗨”,琢磨了半天不知道他说的是啥,等到写出来才知道是说 Delphi
    ae86
        84
    ae86  
       2018-07-30 10:37:34 +08:00
    哈哈,还在用 vb 的路过,环境都是在虚拟机里的 xp 系统调试的
    xiaowangge
        85
    xiaowangge  
       2018-07-30 10:56:56 +08:00
    你们写 Delphi 的,啥行业?

    我知道的,有同学用 Delphi 写建筑行业相关软件。
    zhang1215
        86
    zhang1215  
       2018-07-30 10:58:30 +08:00
    说起 Dephi,有没人知道 C++ Builder 的
    glfpes
        87
    glfpes  
       2018-07-30 11:00:13 +08:00
    刚来的时候维护 1 个 osgi 开发的服务。。。看得我真心累,想尽一切办法在 1 个月内摆脱掉了这坨代码。
    paw
        88
    paw  
       2018-07-30 11:01:32 +08:00
    某厂有些核心部门还在用 gcc 3 和 centos 4 ;看着这个环境很是绝望的
    Fenrisu1fr
        89
    Fenrisu1fr  
       2018-07-30 11:13:50 +08:00   ❤️ 1
    秀的我头皮发麻..我觉得楼主该加一句危险动作请勿模仿

    巭孬嫑夯昆啊..
    Fenrisu1fr
        90
    Fenrisu1fr  
       2018-07-30 11:14:17 +08:00
    @20015jjw Fortran ?
    dremy
        91
    dremy  
       2018-07-30 11:17:27 +08:00 via iPhone
    牛逼的故事系列
    Felldeadbird
        92
    Felldeadbird  
       2018-07-30 12:05:01 +08:00
    就是刚开始维护起来吃力,后面随着自己的坚持,小部分使用新的架构去开发新功能。旧功能在特定情况下,看需求进行合理性重构。
    刚开始看到这种技术老旧的玩意,真心不想做。但是想了想,自己靠这行吃饭的,如果连这些都不接受,以后遇到更糟糕的难道只能换公司吗?
    karllynn
        93
    karllynn  
       2018-07-30 12:09:41 +08:00
    楼主你这项目太小了。。。
    sagaxu
        94
    sagaxu  
    OP
       2018-07-30 12:31:12 +08:00   ❤️ 2
    @zzzcx 不稳定因素日积月累下去,很难在迭代的过程中维持稳定性

    @nfroot 有计划的推倒重建,比硬件突然损坏,然后手忙脚乱要好太多了

    @watzds @karllynn 项目确实不大,十万行左右,大项目的重构,大都是跨部门的系统工程,即使老板推都不见得推的动,不可能自下而上的做。

    @lhx2008 @gjquoiai 重要的部分,我都加了单元测试,还有一堆 API 测试脚本。

    @lihongjie0209 公司没人比我更了解这个项目,将近两年的时间里,我只做这一个项目。
    haisua
        95
    haisua  
       2018-07-30 13:31:47 +08:00
    腻害,膜拜~老项目,你直接和老板说要重构,一般是比较困难的,老板都是能用就用着,不想额外出人工去做重构的事情。
    j5shi
        96
    j5shi  
       2018-07-30 13:51:38 +08:00
    在目前的代码库里见过的 1982 年写的 C 代码, 运行稳如狗.
    yulitian888
        97
    yulitian888  
       2018-07-30 13:55:56 +08:00
    @j5shi 千年虫杀掉了没?
    soupice
        98
    soupice  
       2018-07-30 14:04:03 +08:00
    @herozhang 你不会也是上海的吧…… foxpro 坑爹啊
    iblessyou
        99
    iblessyou  
       2018-07-30 14:06:29 +08:00
    6 都埋怨呢?我这还有 5 的项目,那结构百度都搜不出多少资料,JSP JS JAVA 全在 JSP 写,甚至有时纯 JAVA 也不写到 JAVA 文件,弄个 JSP 写着,格式化都没办法。
    感受下
    ARhen
        100
    ARhen  
       2018-07-30 14:12:34 +08:00
    真的厉害~ Emmm 可能这就是大佬吧.jpg
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6001 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:35 · PVG 10:35 · LAX 18:35 · JFK 21:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.