全栈工程师干了4年,我劝你别再追求“全栈”了(附真实项目踩坑数据)
先交代背景。我不是什么大厂全栈,就是接外包加自己做小产品的野路子。2021年到现在,正经接过的项目7个,最大的一个CRM报价8万,最后到手5万2,耗时4个月零11天。算下来时薪85块,还不如我楼下送外卖的小哥——他跑众包,晚上6点到10点,一个月也能搞6000多。你可能会说,那是你不会报价。对,我承认。但我想说的不是报价,而是“全栈”这个标签给我的幻觉:我以为一个人能顶一个团队,结果只是把三个人的活压到一个人身上,钱却没多拿。
这个CRM项目的技术栈:前端 React 18.2 + Vite 4.3 + TypeScript 5.0 + Ant Design 5.2;后端 NestJS 9.4 + Prisma 4.16 + PostgreSQL 14.5 + Redis 6.2;部署 Docker 20.10 + Nginx 1.21 + 阿里云 ECS 2核4G t6,带宽5M。用户量不大,日活300左右,但老板要求“能扛住1000并发”。结果上线第一天,QPS到120就卡死。我查了半天,Prisma默认连接池是 num_cpus * 2 + 1,2核就是5个连接。PostgreSQL默认 max_connections=100,但ECS上还有Redis、Nginx、Node进程,实际可用连接不到80。我把Prisma的 connection_limit 改成20,PostgreSQL的 max_connections 改成200,shared_buffers 从128MB调到512MB(2核4G的机器,不敢再高),QPS到了450。但CPU直接100%,响应时间从80ms涨到1.2s。最后升级到4核8G,带宽10M,才稳住800 QPS,P99在230ms。这一通折腾,花了3天,没多收一分钱。
所以我要说一个可能得罪人的观点:全栈工程师最大的坑,不是学不完,而是“你觉得自己能省一个人的工资,结果把自己搭进去了”。我见过太多人,前端写一半去调Nginx配置,后端写一半去改CSS,最后两边都一知半解。真正赚钱的全栈,不是什么都自己写,而是知道什么不该自己写。举个例子:支付。我一开始想接微信支付,自己写签名、回调、对账。看了文档,光证书就有3种,API v2和v3还不一样。后来换了Stripe,虽然国内用不了,但给海外客户做项目,Stripe Checkout从注册到收款,2小时跑通。Stripe费率2.9% + $0.30,Payout到香港银行账户,2天到账。如果自己接微信支付,没有3天搞不定,而且对账逻辑能写到你怀疑人生。再比如认证,自己写JWT + refresh token + 密码重置 + 邮箱验证,至少3天。用Clerk,免费版10000 MAU,超过$25/月,10分钟接入。Supabase Auth免费版50000 MAU,但如果你用Prisma + PostgreSQL,Supabase的RLS能把你绕晕。
我面过12个自称全栈的人(朋友公司帮忙面),问三个问题:1. 你怎么优化一个慢查询?2. Docker镜像怎么从1.2G减到200M?3. 前端首屏LCP从4.2s到1.8s你做了什么?结果:8个人只会写CRUD,ORM用不明白,慢查询只会说“加索引”;3个人能写Dockerfile,但不知道多阶段构建;只有1个人能说出EXPLAIN ANALYZE看Seq Scan,然后用覆盖索引把2.3s的查询降到45ms。这个人要价35K,朋友给了32K,来了。其他11个,要价18K-25K,朋友一个没要。这就是现实:全栈的标签不值钱,解决问题的能力才值钱。你可以在简历上写“全栈工程师”,但面试官只想知道你上次遇到OOM是怎么定位的。
我有一段时间特别焦虑。2022年,Vue 3还没学完,React Server Components出来了,SolidJS、SvelteKit、Astro、Qwik一个接一个。我每天晚上学到1点,第二天上班困得要死。后来我干脆不追了。我现在的策略是:前端只深耕React + Next.js,后端只深耕Node.js + PostgreSQL,部署只深耕Docker + 一台云服务器。其他的,知道概念,能搜到文档,能跑通demo就行。你猜怎么着?接单反而多了。因为客户不关心你会不会Svelte,他们只关心“这个按钮点了能不能付款”。上个月我接了一个小单,用Next.js 14 + Server Actions + Prisma + PostgreSQL,3天做完,收了4500。客户还介绍了一个朋友给我。
如果你真的想做一个能赚钱的全栈,别去刷什么“全栈学习路线图”。按我说的做,3个月,比你看100小时视频有用。第一步:用Next.js 14 App Router + Server Actions写一个最简单的SaaS,就一个功能:用户登录,然后输入一段文字,生成一个短链接。数据库用PostgreSQL,ORM用Prisma。部署到Vercel,免费版够用。记录每个环节的耗时:从create-next-app到部署成功,我花了4小时20分钟,其中2小时卡在Prisma的DATABASE_URL环境变量和Vercel的构建缓存。这一步的目的是让你知道“全栈”到底有多少个环节。第二步:把这个短链接服务从Vercel搬到你的云服务器。买一台2核4G的阿里云ECS,按量付费,1小时0.3元。用Docker Compose写三个服务:app、postgres、redis。Dockerfile用多阶段构建,node:18-alpine作为基础镜像,先npm ci --only=production,再COPY构建产物。镜像从1.1G减到186M。然后Nginx反向代理,配置gzip和cache。用k6压测:50并发,持续30秒,看P95。我第一次跑,P95是1.8s,数据库CPU 100%。优化后:Prisma加connection_limit=10,PostgreSQL加max_connections=100,shared_buffers=1GB,work_mem=16MB,P95降到320ms。这些参数你搜不到标准答案,因为跟你的机器配置、数据量、查询复杂度都有关。第三步:接一个真实的小单。去猪八戒、程序员客栈、或者你朋友圈,找一个5000-10000块的小程序或网站。别管赚多少,目的是走完“需求沟通 -> 报价 -> 开发 -> 部署 -> 收款 -> 售后”全流程。我第一个单子3000块,做了一个企业官网,用了WordPress,被客户骂了3次,因为手机端导航栏错位。但那个单子让我学会了怎么跟客户说“这个功能要加钱”。
最后总结一下。全栈工程师不是“什么都会”,而是“什么都能搞定,但知道什么该自己搞,什么该花钱”。我现在的工具箱:前端 Next.js 14 + Tailwind CSS 3.4 + shadcn/ui;后端 Node.js 20 + Fastify 4 + Prisma 5 + PostgreSQL 16;部署 Docker 24 + Nginx 1.25 + 阿里云 ECS。其他的,Stripe管支付,Clerk管认证,Resend管邮件,Cloudflare管CDN和DNS。每个月固定支出:ECS 60块,域名8块,Clerk 0块(还没超10000 MAU),Resend 0块(每天100封免费),Cloudflare 0块。加起来不到70块。接一个5000的单子,够付6年。这才是全栈的正确打开方式。别追求“全栈”这个标签,追求“用最低成本解决问题”的能力。