谈谈我理解的互联网技术岗校招以及职业选择
每年秋招季和入学季,都会有不少人来询问我有关技术的学习路径、校招的节奏和互联网职业选择。前几年我都会直接一遍一遍给每一个人单独解释,今年因为和星哥哥一起做了【采访贺兰3:对于职业的看法,客户端已死?】视频,所以每次有人问我就直接丢视频了;不过因为有的人还是觉得视频不太清晰,因此决定把视频中的一些核心观点整理出来做成博客,方便大家查看。
本篇文章主要讲的是互联网职业选择的相关内容,对于学习路径和校招节奏的内容,其实我之前已经写了一篇博客:【我是一名大一新生,我应该如何确认自己的学习方向?】,大家直接参考即可。
当然,下述内容大多数出自于本人的个人经验,也可能不太准确,烦请大家包容。
什么样的岗位最适合我
过去参加校招面试的时候很经常听见面试官说的话之一就是:「你们校招生其实履历就是白纸......」,即使其言刚开始听起来挺让人火大:我付出了这么多努力,简历满满当当,你竟然说我是白纸?但其实冷静下来从另一个角度来看,校招生履历确实是一张白纸 —— 无论你过去的履历如何,你都有一定的机会转向其他的方向,而不像社招一样强卡匹配度(但并不是说校招就不卡匹配度了,毕竟现在越来越卷,一个更匹配的候选人肯定优于一个匹配度一般的候选人)。
但正因为如此,校招生在选择自己具体方向的时候便显得十分迷茫,大部分人可能「自动的」选择了后端,甚至更细一些,Java 后端,有的人可能根本不知道,也不喜欢这个方向,甚至他们不知道有什么其他的方向可以选,以为 Java 后端就是唯一的就业方向,这导致这些人在最终的招聘中难以展现出竞争力,最后可能无法取得非常好的结果。
而于我个人看法来讲,选择岗位或者方向一定要尽早,这就要求校招生尽早的(也许是大一)对行业的全局动向有一个大致的了解;同时,在自己的喜好和行业的招聘需求中找到一个平衡点,优先选择自己喜欢的方向,但也千万注意不要选择了那些强卡学历/强卡本硕/没有招聘需求的方向。
岗位之间的区别和选择
互联网技术岗的岗位真的非常非常多,这里就捡几个比较有代表性的简单讲讲各自的工作内容、优缺点以及是否是一个好的选择,请各位务必注意,以上的这些信息都有极强的时效性,可能过了几年(甚至几个月)就不再有效了,仅供参考,最重要的是大家一定要养成搜索和整理信息的习惯,这比阅读二手「旧闻」要有用的多。
后端开发
无论到哪里,后端这个岗位都是一个绕不开的话题,作为互联网应用,后端是其最重要的组成部分,没有之一;后端负责解析、处理、计算和存储用户提交的数据,并将这些数据返回给用户,由 Web 或客户端程序进行渲染,展现给用户;正因为在互联网业务中后端技术本身与业务的强相关性和复杂性造就的不可替代性,也使得其招聘需求始终旺盛,经久不衰。
请注意,我们这里指的「后端」一词是互联网狭义层面的「Web 后端」岗位,例如 Java 后端或 Go 后端;对于处理网络游戏玩家在线数据的服务端岗位,请见「游戏服务端」;对于以 C++ 或 Rust 为首的,以音视频、存储、嵌入式等方向为工作内容的服务端岗位,请见「C++ 后端」。
后端的优点显而易见,岗位需求量大,技术深度高,可替代性弱,跳槽容易,因此无论是校招还是社招,后端永远是最抢手的岗位。但正因为其无限大的优点,这也引出了其最大的缺点:就业难。后端的岗位需求量很高,但供给量更高,这也导致后端岗位在校招从过去的「不卡学历」变成近两年的「部分公司不卡学历」,直至今年开始显现「普遍卡学历」的倾向。在所有后端岗位中,Java 后端是其中供求量最高的岗位之一,其岗位投递比甚至可以达到夸张的 1/2000,也就是 2000 个人竞争一份职位(这还只是中小厂的数据);反观 Go 后端,虽然需求量整体没有 Java 后端多(但也在提升,这两年越来越多大厂开始转向 Go),但供给量就少的多了,有时候 Go 岗位甚至要从 Java 岗中捞人来面,进来了再转 Go。
前端开发
既然有后端,那就必然会有前端,后端只会向我们返回一批用户看不懂的序列化数据,而前端负责将它们用美观的方式展现出来。前端运用 HTML/CSS/JS 以及相关的技术和框架,为用户在浏览器(或是浏览器套壳 App)中展示炫酷的特效或是严肃的表单。如果说后端技术是深度大,那么前端技术则是广度大,近些年来,前端的技术框架产生了井喷式的发展,各种以高性能或是易用性强为卖点的前端框架或是工具链不断出现,这令前端的学习也逐渐变得复杂了起来。除此之外,随着以 Node 为首的 JS 服务端技术的发展,一种名为“大前端”的全栈开发岗位也变得流行了起来(当然近些年大家逐渐发现,这些大前端的岗位本质上还是前端为主,后端开发的内容十分少)。
请注意,我们这里指的「前端」是以基于 Web 和 JS 的技术的图形界面开发为主要内容的岗位,对于使用原生或非 Web 跨平台技术,面向桌面端或移动端的图形页面开发的岗位,请见「客户端」。
前端岗位近两年来在校招中展现出了极其夸张的需求缺口,这使得学前端进大厂比学后端进大厂容易得多,这是前端最大的优点之一;但这种优点背后,位于冰山下的真相是:这说明前端的可替代性强,裁员率高,这就造就了前端岗位校招和社招截然不同的冰火两重天 —— 校招易如反掌,跳槽难如登天。对于校招同学来讲,是否要选前端取决于你是追求短期的利益还是长期的发展。
C++ 后端开发(或基架开发)
和 Web 后端不同,C++ 后端其实是一种泛称,而不是一种单一的岗位。C++ 后端岗位较为典型的有音视频、存储、操作系统、高性能计算等,这些岗位方向每一个都依赖 C++,但 C++ 却是其整个庞大知识体系中最不重要的部分。有时,这些岗位也被称为 infra(基架)岗,因为这些岗位维护和开发的系统在互联网服务分层中均属于基础架构的范畴。
请注意,我们这里指的「C++ 后端」是互联网 infra 层面的服务端开发岗位,对于以 Unreal 虚幻引擎脚本开发为工作内容的服务端岗位,请见「游戏客户端」。
由于基础架构系统本身的特殊性,这种岗位一般仅在中大厂存在,小厂可能很少有专门的基架岗位或基架需求,因此,其需求量整体偏少,但竞争度仍旧不低;而且基架岗位在大趋势上需求量会逐渐变小,因为随着基架系统的逐渐完善,新需求减少也同时会带来岗位的减少,甚至造成现有岗位的裁撤;但此类岗位由于通用性极强,比起更看重垂直经历的 Web 后端岗位,这类岗位在跳槽过程中会更容易些。选择此类岗位的同学最好有比较突出的项目/技术/学术优势,以避免出现「高不成低不就」的问题。
AI Agent / 大模型应用开发
作为后端开发岗位最近的一个最火热的分支,借助大模型技术发展的春风,大模型应用开发岗位的相关岗位需求也逐渐变得多了起来。与大多数人想象的可能有些出入,此类岗位(大概率)并不涉及大模型推理和训练,更多则是面向已有模型的微调和接口调用。此类岗位比起偏向 OLTP(在线事务处理)业务的传统业务后端岗位,对大模型应用层面(而不是底层算法层面)的相关概念,例如 RAG、MCP 等的了解要求较高。
由于此类岗位尚属前沿,因此岗位需求暂时比较充足,但也不排除后续可能会逐渐回归正常水平的情况。
客户端开发
除了以 Web 技术为主的前端外,还存在使用原生技术或非 Web 的跨平台技术进行开发的传统页面,对这些程序的开发岗位我们一般称作客户端开发。客户端开发同样是一个统称,其实际的方向可能有 C++ Qt、C# WPF、Android、Flutter 等,同理,这些不同单一方向的语言和技术栈都完全不同,无法相提并论,也很难从一个方向切换到另一个方向。
随着 Web 跨端技术(Electron、React Native、Lynx 等)的日趋成熟,传统的客户端开发岗位呈现逐步减少的趋势,但由于传统企业,尤其是非互联网企业依然保持着一些存量需求,这导致客户端开发岗位在校招依然存在一些需求,且由于供给量较低,也比较容易找到不错的工作;但同理,其也存在着和前端开发一样的问题:可替代性强,裁员率高。选择此方向的同学也需仔细考虑。
游戏客户端开发
游戏客户端开发主要是指基于成熟的游戏引擎,例如 Unreal(虚幻引擎)、Unity、Cocos、Godot 等,进行游戏主程序的开发。除了程序语言的使用外,游戏客户端开发的候选人还需要了解游戏引擎编辑器的使用,甚至是部分游戏引擎的底层技术,并配合其他岗位(例如建模、音效)实现预期的游戏内容。
游戏客户端岗位由于偏艺术向而不是技术向,因此和其他艺术向岗位类似,可能提供需要作品集;与互联网服务之于后端完全不同,虽然游戏客户端在游戏程序开发中比游戏服务端重要得多,但在整个游戏工业中,却并不是主要的内容,建模、音效、策划等职能可能远比程序本身重要得多。
游戏客户端开发整体来说并不卡学历,但门槛并不低,且需要注意不同公司可能会倾向于使用不同的游戏引擎(例如手游和独立游戏开发公司更偏向于使用 Unity、PC/主机游戏开发公司可能更偏向于使用 Unreal 等),影响你的职业规划。
游戏服务端开发
游戏服务端主要是指以处理网络游戏玩家属于为目的的服务端,这些服务端可能要求比传统 Web 服务更低的响应时间,可能以全双工通信为主而不是 Web 服务主流的(近似)半双工通信。此类岗位使用的程序语言一般以 Java、Go、C++、Lua 为主。
游戏服务端开发岗位一般仅在网络游戏公司存在(因为单机游戏不需要服务端),且岗位需求很小(一款网络游戏可能只需要 1-2 个服务端开发即可),由于其本身重要性不高,整体受重视的程度也并不高。
测试 & 测试开发
其实测试和测试开发其实是两个完全不同的岗位,前者指的是以质量保障工作为主的业务测试岗位,后者(正常情况下)指的是对测试系统(如质量中台、自动化测试框架)进行维护的开发岗位。但由于很多公司经常挂「测开」头卖「测试」肉,因此在此处合并在一起讲解。
首先讲测试岗,测试岗主要的工作内容其实并非写代码,而是对程序是否可以正常运行进行验证(俗称点点点),对于喜欢写代码的朋友来说,测试岗并不是一个很好的岗位;而对于测开岗,则更像是边缘版的内部效能工具开发岗位,本质来说也属于非核心的岗位,可替代性强,被裁员的可能性很大。近些年来,校招测试/测开岗位的需求同样不小,和前端与客户端一样,也属于校招好进社招难跳的岗位。
测试/测开很容易作为后端的下位替代,因为业务测试大部分情况下其实还是在面向后端进行测试,而测试开发本质上也就是青春版的后端开发。有时,由于业务测试岗位可能拥有对某种业务的深入理解,这些岗位的人员也有一定机会活水/跳槽到相同业务的后端岗位中。
嵌入式
嵌入式岗位一般广泛存在于非互联网公司(尤其是制造业公司)中,主要是对专门的嵌入式芯片(例如冰箱里的微电脑、小型机器人等)进行软硬件开发的岗位,这些岗位使用的程序语言以 C 语言为主。
由于嵌入式一般属于非互联网公司的岗位,因此其员工待遇和薪资水平可能也会相对较差(不排除部分外企例如西门子可能提供更高的待遇),且此类岗位一般为存量需求,或增量需求不大。
算法
算法岗一般指与应用算法设计和训练有关的岗位,包括但不限于搜推(搜索 & 推荐工程)/大模型/人工智能/机器学习/CV(计算机视觉)/自动驾驶/NLP 等。
此类岗位相比传统研发岗可以开出更高的工资,且岗位需求量很大(依然,供给量也很大),但基本是硕士起步。
大数据/数仓开发
大数据/数仓开发一般是指对 OLAP(在线分析处理)系统进行二次开发和维护的岗位。
此类岗位也基本是硕士起步,且薪资一般。
运维
运维岗位的工作主要是对公司 CI/CD 平台或是容器服务等基础设施进行维护和调试。
这类岗位经常需要 24 小时 oncall(待命),由于其工作内容偏窄,且岗位需求不大,因此无论是校招还是社招都较难。
后记
最后其实我想说,任何一个岗位只要做你的足够好,能力足够顶尖,都不可能找不到好的工作,无论市场环境如何,你都无法改变,能改变的只有我们自己,因此,放下焦虑,努力提升自我才是硬道理。最后,祝看了本文章的大家都能找到自己心仪的工作~