关于草台班子与屎山代码
聊一聊我前面上班的故事
我其实很想从其他地方吐槽,但最后我发现还是博客比较舒适一些。
我去实习其实很简单的 —— 在秋招的时候我拿到了一家公司的 offer,是做 Flutter 开发的。于是我想着毕业之前锻炼一下自己,学习点新知识,然后就来到了这家公司 —— 在西安,给的钱也算多。
这里必须要先讲一下为什么我不去我校招公司,而是去这家公司:因为学校。大四是这样的,看似清闲实则还是有任务的 —— 我们专业有毕业实习(三月)和大家都有的毕业论文。这两项要求着我必须在西安而不能在一座离西安 1000 多公里的城市 —— 我必须保证我能用最快速度和最低成本去学校。
然后我就去了。
上班的日子
我大概是在 3 月开始上班,一开始其实还是干的 Flutter ,负责把一个新但是需求没那么多的项目开发完,且大头其实在 Web 那边。是的,这个项目是 Flutter + H5(Vue 3)。
所以我其实只需要管 H5 桥接、WebSocker 通信和写系统原生函数就行。这个活还是很爽的。
然后就到了牛的地方了:公司没有 macOS 的电脑,但又必须得发布 iOS 端。要想用公司的只能通过 ToDesk 连接深圳那边的电脑。
啧......
那个连接速度让我感到十分抽象,我只好拿我自己的 mac mini 去上班。不过也挺好 —— 用自己的电脑其实很爽的,不需要配环境。
说实话我是第一次搞 App Store 上架,虽然我感觉让一个实习生去搞 App Store 上架这种有点敏感的事情,其实有点小抽象了。但其实也无所谓 —— 不算太难。
然后三月底,我就转成安卓开发了
安卓开发真的屎
安卓开发,我愿称其为最屎的东西。糟糕的设计,糟糕的开发体验,糟糕的环境搭配。尤其是当我接手一个十分古老的项目时,我足足花了四天时间(其实准确算是两天,因为我每天还得花半天时间去开发另外一个项目,这个项目我后面会讲到)才搞定环境和依赖的安装。中间经历了加 Android SDK,试各种各样的 JVM 以满足所有依赖和 SDK 的要求。重点是完成这个需求的人是一个完全不会的人 —— 仅仅学了半天的我。
然后当我已经配置好内容之后,活已经干完一半了,来了个新来的同事。然后就让我把活交给他。
说实话我还是挺想夸一下我自己的 —— 因为新来的那个同事是专职搞安卓开发的,他在我的讲解下(包括环境、依赖这些)搞了三天才搞定。
然后就要讲到另外一个项目了。这个项目其实算是我第一个参与开发的第一个安卓项目。
差不多 4 月初吧,有个新的需求是让我们把项目中的其他独立子 App 给合并到主 App 中。
看起来很简单吧,实则一大堆坑。
首先因为独立出去太久了,合起来一堆冲突;然后这些产品之前都是有独立的序列号的,现在加到主应用之后,因为他们独立序列号都是写死的,所以又出现了一堆问题 —— 重点在于每个都不一样且不知道哪个加哪里是对的。然后因为安卓项目之间由依赖关系,资源也会共享,然后就造成了颜色资源冲突等一系列问题...给我修麻了。
然后就是另外一个同版本的需求,我 Leader 写的。我怎么说呢...从某种意义上讲加重了我的负担 —— 因为她写的代码也造成了资源共享和冲突,导致我需要合并的服务也出现了问题。因为她是直接提交的主分支,深圳那边的同事拉下来代码修改的时候发现了这个问题,于是那边人也傻了 —— 资源根本找不着。他们也是找了好久才发现的这个问题。当然这件事也会引出下一个章节的事情,但是先不讲。
最后当我在 Debug 包中终于把这些问题都解决好了之后,打个测试服的 Release 包,发给测试。测试那边测试了一下又发现了一堆 bug... 我说实话我人都懵了。然后我研究了半天才发现,原因是那些子项目有些没开 R8 混淆,但是 Release 包默认会用 R8 混淆,导致进行网络请求的时候 Json 解析有问题...
我这里真的麻了,但是后面还有。当我完不成 ddl 的时候(因为一直在修这些 Bug,我还很菜来回修了一两周),可能是我 Leader 着急了,或者是她正好要维护一下,就去看了一下这几个项目,惊奇的发现原来这几个子项目有一个还没搞完。我一直以为是因为我测试的序列号有问题,结果发现根本不是,就是因为他们还没写完。
哎...
之后我应该是被老板降本增效,给裁了;也有可能是因为我 Leader 看我太菜了,就给我裁了。这个我就不知道了。
但我为什么会说是草台班子呢?也接着引用上面的那个 “直接提交的主分支” 来继续聊。
草台班子味有点浓了
当一个项目的人数超过 2 且项目比较重要,活比较多时,这个时候应该要怎么办呢?答案是每个人开分支或 Fork 项目,自己写自己那部分并测试好了之后再进行 PR。这样能保证项目的 master 或 main 分支是受保护分支,不会被人轻易破坏。
但是他们不是这样的,他们就是一个 master 用到底。这个项目大概是在 24 年差不多上马的,但到现在为止,整个项目开的分支最多的是我。我每个大需求都会开一个分支,例如我前面讲到的那个项目。以及我经手的Flutter项目,当需要把 GetX 换成 Riverpod 时,我也是开的子分支。这样不会破坏主分支且其他人和我进行协作时,也不会因为我的代码而让他们苦恼。
然后就是 Lib 部分,在那个老项目中,我发现有好几个 Lib,但其实有些干着一样的事情,有些一个文件在这个 Lib,另外的在另外的 Lib 中,但其实这俩根本没有分的必要 —— 按照他们的项目规定也是这样的。
接下来就该喷 UI 设计了。作为一个公司的支柱项目,我难以想象为什么他们不支持手机竖屏,而是只支持平板横屏情况。但就算这样吧也 ok,关键是 UI 实在是丑,丑飞了。我是真心认为如果是我用这个软件,我是真不喜欢这种 UI ,我也绝不会充 VIP —— 太丑了。
当然关于这个软件的核心卖点,说实话我一点都不感冒,我也觉得如果我是用户我也不会去买这个软件。此为后话
接下来就是提交 bug 的平台了。这个平台确实不错,但是我一般就不看 —— 谁闲着没事看,真闲的也不会看这个给自己找活干。我也不知道有没有出 bug。有很多时候是第二天谁跟我讲了我才知道原来提交 bug 给我了 —— 一点提醒都没有是这样的。
最后
我吐槽的其实有点狠了,但我确实见识到了一些操作,且我真诚感受到整个团队就很不技术 —— 技术讨论,技术进步也一点没有。目前为止除了有几个比我大一点点的人会用 AI 以外,其余人都不会。当然如果会的话我就更要问了 —— 这代码写的比 AI 还烂的,要是会用 AI 的话我倒是要避坑了。