个人思考 2026-10-11

为什么我现在开始做全栈

禾

禾安

独立开发者 · 专注移动端iOS开发

做移动端的人为什么要补全栈?这一篇讲我从「只写客户端」到「把一整个站自己搭起来」的原因、实际补上的是哪几块能力,以及踩到的几个思维差异。

我以前基本只做客户端:界面、逻辑、上架,边界很清楚。开始做全栈不是因为「全栈更酷」,而是因为我遇到了几件「不问后端就没法解决」的事。

起因:几个撞到墙上的瞬间

  • 想给自己的内容做一个「能被我完全控制」的展示站,结果发现这属于后端 + 运维;

  • 想做一点自己的小工具,卡在「怎么让它在网上能被别人用到」这一步;

  • 排查问题时,只会看客户端现象,看不出数据与接口那一侧发生了什么。

真正推我一把的是第三点:只想在边界内做事,遇到跨边界的问题就会一直停在「我这边没问题」。而问题恰恰常在边界上。

补上的第一块:后端 —— 从「调用接口」到「设计接口」

这两件事的差别比我想象的大:

  • 调用方关心的是「我要的数据有没有拿到」;

  • 设计方关心的是「这个接口会不会被误用、数据形状怎么定、错误怎么表达」。

我最大的收获是想清楚了一个词:**边界**。接口就是一条边界,边界上要处理的是校验、鉴权、失败情况和兼容性,而不是业务逻辑本身。

补上的第二块:数据 —— 从「存本地」到「长期可维护」

客户端存数据往往只要能读出来就行;服务端的数据要考虑的是:

  • 数据会长期增长,结构改动的代价很高;

  • 要能备份、能迁移、能在出问题时人工查;

  • 要能承受「并发写」和「写到一半失败」。

所以我最明显的一个转变是:不再把「结构设计」当成可以后补的事。它几乎是所有东西里最难改的一块。

补上的第三块:运维 —— 这部分最难,也最容易被低估

如果让我给想转全栈的人排一个难度顺序,运维一定在第一位。因为它不是「写代码」,而是「让代码长期活着」:

  • 域名、证书、反向代理、开机自启,这些第一次配都要查很久;

  • 出问题时没有编译器提示你,只有日志和状态码;

  • 最容易忽略的一点:部署流程本身也是要设计的(备份、回滚、验证)。

我的体会是:运维里最重要的能力不是「会修」,而是「让问题发生前就能发现」。健康检查、关键路径自检、发布后验证,这三样比任何技巧都实用。

踩到的几个思维差异

这几个差异是我从客户端思维切过去时最不适应的:

  • 客户端出错可以「提示一下让用户重试」;服务端出错必须先保证数据不出问题,再谈体验;

  • 客户端可以要求用户升级;服务端必须同时兼容新旧版本;

  • 客户端一次只服务一个人;服务端要假设「很多人同时来」。

全栈这件事的边界在哪

我不想把它说成「什么都能做」。真实情况是:

全栈的核心价值不是「一个人做完所有事」,而是「没人替你兜住的那部分,你自己能兜住」。

这带来两个很实际的好处:一是遇到跨层问题能自己定位,不会被卡住;二是判断「这件事值不值得做、大概要花多久」会准得多。

我现在的分工方式

实际做项目时,我并不是追求每一层都精通,而是把每层做到「够用 + 知道深浅」:

  1. 重点投入:数据结构与接口边界(错了最难改);

  2. 够用就行:前端界面、运维配置(有成熟方案就直接用);

  3. 交给工具:能自动化的全部自动化,尤其是发布与备份。

给同样想补全栈的人三点建议

  1. 不要为了「学全栈」而学,找一个你自己真要用的东西做出来;

  2. 优先补「边界上的能力」:数据、接口、发布,而不是再学一个框架;

  3. 先把「让它在线上稳定跑一个月」当成目标,那比多写几个功能收获大得多。

这个站就是这套想法下的产物:它不大,但每一层我自己走过一遍,这就是我做全栈的全部理由。