从写Hello World到带十人团队,我踩过的坑比你喝的水都多

代码与远方
2026-01-06 06:10
阅读 1625

上周五晚上十点半,我盯着屏幕上一个诡异的白屏 bug 发了整整四十分钟呆。咖啡已经凉透,隔壁工位的实习生早就溜了,而我这个“老” Android 转 Flutter 的跨平台选手,还在为一个 JavaScript 后端接口字段类型不一致的问题抓狂。那一刻我突然意识到:三年前那个连 Git 分支都搞不清的菜鸟,怎么就成了现在这个要给新人做 Code Review、和后端吵需求、还要安抚产品经理情绪的“Leader”?

说来惭愧,我并不是什么天才程序员。大学学的是电子信息,毕业进了家外包公司,每天复制粘贴 XML 布局,写 onClick 事件,活脱脱一个“安卓民工”。那时候觉得能跑就行,哪管什么架构、性能、可维护性?直到有一次线上崩溃率飙升到 15%,老板在晨会上点名:“小张,你这 App 是拿脚写的吗?”——我当场社死。

但也是那次事故,让我下定决心转型。恰逢公司要搞跨平台,我主动请缨学 Flutter。白天干活,晚上刷 LeetCode(毕竟最近在准备跳槽,简历不能太寒碜),早上八点雷打不动坐在工位上啃文档。半年下来,不仅把项目从原生 Android 迁到了 Flutter,还顺手用 Dart 封装了一套通用组件库。最离谱的是,因为后端 API 文档写得跟天书一样,我居然被逼着去学 JavaScript,就为了自己 mock 数据跑起来。


工具链?那是我的第二条命

很多人以为 Leader 就是开会画饼、分配任务。错!真正的技术 Leader,得是团队里最懂工具的人。因为你省下的每一分钟,都是团队的战斗力。

刚接手第一个小组时,我们还在手动打包、手动传测试包、手动回滚。每次发版都像打仗,群里消息刷得飞起:“iOS 包呢?”“Android 崩了!”“后端接口又改了没通知!”——我一度想原地辞职。

后来我干了三件事:

  1. 搭 CI/CD 流水线:用 GitHub Actions + Fastlane,提交代码自动跑单元测试、构建 APK/IPA、上传到蒲公英。再也不用求运维大哥。
  2. 统一开发环境:写了个 setup.sh 脚本,一键安装 Flutter SDK、Dart、Node.js、模拟器镜像。新人入职第一天就能跑起项目。
  3. 自研调试面板:在 Flutter 里嵌了个 debug drawer,实时切换 API 环境、查看日志、模拟弱网。产品经理再也不用问“为什么我这边看不到数据”。
# 新人入职三件套
./setup.sh && flutter pub get && npm install

别小看这些“脏活”,它们让团队每天省下至少两小时扯皮时间。而且,当后端同学看到我们前端居然能自己 mock 接口、还能测边界 case,态度立马从“你们前端懂什么”变成“兄弟,这周能联调吗?”


和后端相爱相杀的日子

说到后端,真是又爱又恨。爱的是他们扛住了高并发、事务、安全这些硬骨头;恨的是他们总在周五下午五点发一封邮件:“接口有调整,详见 Confluence(链接打不开)”。

有一次双 11 大促前夜,后端临时把商品价格字段从 string 改成 number,理由是“更规范”。结果我们 App 全面解析失败,首页直接白屏。我当时真想冲进后端办公室把他们的键盘泡面里。

但骂解决不了问题。后来我拉着后端开了个会,定了三条规矩:

  • 所有接口变更必须走 OpenAPI 3.0 规范,生成 TypeScript 类型定义
  • 字段变更必须兼容旧版(比如同时返回 price_strprice
  • 每次发版前,前后端一起跑契约测试(Contract Test)

我们甚至用 JavaScript 写了个轻量级 mock server,基于 Swagger 自动生成假数据。前端不用等后端联调,自己就能跑通全流程。后端反而觉得我们“太卷”,但他们嘴上抱怨,心里其实挺服气——毕竟谁不想早点下班呢?

对比项 以前 现在
接口联调耗时 3-5 天 0.5 天
因类型错误导致的 Crash 每月 10+ 次 0 次
后端对接态度 “你自己看文档” “我帮你改”

从写代码到带人:心态比技术更重要

技术可以学,但带团队,真的靠悟性。

我带的第一个实习生,写的代码缩进全是空格混制表符,Git 提交信息是“fix”、“update”、“ok”。我差点当场心梗。但转念一想:我当年不也这样?于是没骂他,而是给他看了我三年前的 commit 记录——“修复 bug v2 final really final”。

带人不是教语法,而是传递工程思维。我常跟新人说:

“你写的不是功能,是未来三个月要维护的债。今天偷的懒,明天都会变成线上告警。”

我也开始注重“软技能”:

  • 每周 1v1:不聊技术,聊职业规划、困惑、甚至周末去哪玩
  • 鼓励犯错:只要不是生产事故,大胆试。我甚至设了个“最佳踩坑奖”
  • 保护团队:挡掉无意义的需求变更,争取合理的排期

最让我骄傲的不是项目上线,而是上个月,那个实习生主动重构了一个核心模块,还写了详细的文档。他在周报里写:“感谢 Leader 当年没把我开除。”


开发心得:稳定大于炫技

虽然我喜欢折腾新技术——Rust 写 CLI、Zig 编译器、甚至用 WebAssembly 跑图像处理——但在工作中,我永远选择最稳的方案。

为什么?因为我是 Leader,不是个人开发者。我的目标不是炫技,而是让产品稳定交付、让团队少加班、让老板少发火。

所以我们的技术栈很“无聊”:

  • Flutter:稳定版本(目前 3.19),不追 beta
  • 状态管理:Provider + Riverpod,不用 BloC(学习成本高)
  • 后端通信:dio + retrofit 风格封装,拒绝裸写 fetch
  • 错误监控:Sentry + 自定义埋点,Crash 率控制在 0.1% 以下

有人问我:“你不觉得无聊吗?”
我说:“当你的代码支撑着百万用户下单,你就不会觉得无聊了——你会觉得责任重大。”


给想成长的你几点真心话

如果你也在从执行者向 Leader 转型,送你几句掏心窝子的话:

  1. 别怕暴露无知:我第一次主持技术评审时,被问到 WebSocket 断线重连策略,当场卡壳。但我坦白说“我不确定,会后查清楚”,反而赢得尊重。
  2. 学会说“不”:产品经理说“这个需求很简单,加个按钮就行”——你要敢说“影响范围大,排期至少两周”。
  3. 保持编码手感:再忙,每周至少写 100 行代码。Leader 不编码,迟早脱离一线。
  4. 工作生活要平衡:我现在基本不加班。早上八点开工,效率拉满,六点准时走人。身体垮了,升职也没用。

最后,别信什么“35 岁危机”。只要你持续创造价值,年龄只是数字。我现在一边准备跳槽面试(刷题刷到头秃),一边带团队攻坚新项目,日子充实得不行。


凌晨一点,那个 JavaScript 接口问题终于解决了——后端把 price 字段从 string 改成 float,却忘了 JSON 序列化会丢失精度。我加了个 toFixed(2),搞定。

关电脑前,我给后端发了条消息:“下次改字段,提前喊我,我请你喝瑞幸。”
他秒回:“成交,顺便帮我看看这个新框架?”

你看,技术人的江湖,终究是靠互相“救火”维系的。而从菜鸟到 Leader,不过是从“等别人救我”变成了“我去救人”。

共勉。

评论 0

最热最新
暂无评论
代码与远方Lv.1
0
影响力
0
文章
0
粉丝