一个被问烂了但依然有人搞混的问题
昨天团队里新来的实习生问我:“哥,我做的后端是web开发,那我到底是端还前端还是后端?”我愣了一下。这问题就像问“吃饭是后端用筷子还是用碗”——取决于你吃的是什么,以及你坐在哪一端。端还
Web 本身不是后端一个岗位,它是端还一个巨大的、分层的后端技术领域。你打开浏览器看到的端还页面、点击按钮后的后端动画、表单提交时的端还校验,这些跑在用户设备上的后端东西,叫前端。端还而服务器上处理登录请求、后端查询数据库、端还生成 JSON 返回给浏览器的那些代码,叫后端。但“web”这个词同时覆盖了这两端。所以严格来说,问“web是前端还是后端”,就像问“互联网是硬件还是软件”一样,答案取决于你站在哪个环节。
我刚开始学编程那会儿,以为写 HTML + CSS 就是 web 的全部。直到第一次用 fetch 调接口,返回一堆看不懂的 JSON,才发现后面还藏着一整个后端世界。后来自己搭 Node.js 服务,写路由、连 MongoDB,才明白:web 开发天然横跨前后端。一个完整的 web 应用,前端负责交互和展示,后端负责逻辑和数据。两者通过 HTTP 协议对话,缺一不可。
但现实里,很多招聘 JD 上写的“web 开发工程师”,其实指的是后端。比如 Java Web、PHP Web、Python Web(Django/Flask),这些岗位默认你写服务器代码。而“web 前端”才是专门切页面、写 React/Vue 的。这种命名习惯造成了混乱。我见过一个学弟,投了“web 开发”岗位,面试时被问数据库索引优化,直接懵了——他以为要考 CSS 布局。
从技术栈来看,前端和后端的边界正在模糊。Next.js、Nuxt 这些框架让前端也能写服务端逻辑。Serverless 和边缘计算又把一部分后端工作推到了 CDN 节点上。你写一个 api/hello.js 文件,它既像前端路由,又像后端接口。这时候再问“这是前端还是后端”,意义不大。重要的是你清楚数据从哪来、到哪去、在哪一层被处理。
我的判断标准很简单:代码运行在谁的机器上。跑在浏览器、手机 WebView、Electron 里的,就是前端。跑在服务器、容器、云函数里的,就是后端。至于“web”,它只是描述这些代码通过 HTTP 协议互相通信。所以下次有人问你做前端还是后端,别回答“web”,直接说“我写浏览器里跑的”或者“我写服务器上跑的”。
当然,全栈工程师两个都写。但全栈不是“web”的同义词。我见过只写后端的人自称 web 开发者,也见过只切图的人说自己是 web 前端。都没错,但沟通时最好把边界说清楚。否则就像我那个实习生,以为 web 是一个岗位,结果发现要学的东西从 CSS 选择器一直排到数据库事务隔离级别。
最后说个真事。上个月帮朋友看一个线上 bug:用户提交表单后页面卡死。查了半天,前端说后端返回太慢,后端说前端没做防抖。最后发现是前端在 onChange 里疯狂发请求,后端每个请求都去查全表。你看,web 开发的问题从来不分前后端,只分谁先甩锅。但解决它,需要你同时理解两端。
所以,web 是前端还是后端?它是两者的合体。你问一个 web 开发者这个问题,他大概率会回你:“看情况。”这不是敷衍,是事实。
```