首页
/ Tech Interview Handbook 的 Landscape 篇:软件工程师职业全景——需求、薪酬、公司规模与地理差异

Tech Interview Handbook 的 Landscape 篇:软件工程师职业全景——需求、薪酬、公司规模与地理差异

2026-09-06 13:05:41作者:卓炯娓

本文基于 tech-interview-handbook 仓库中的 Landscape 文档 展开,系统梳理软件工程师职业市场的四大关键维度:行业需求与职业稳定性、实习转正与全职的薪酬对比、初创公司与大公司的差异、以及硅谷与新加坡的地理薪酬差距。文档主体内容以硅谷(Bay Area)为主要参照系,同时结合仓库中 Offers 应用的 Prisma 数据模型与薪资种子脚本,说明这些“职业全景”概念是如何被结构化存储与统计的,读完你可以获得一份可直接用于职业决策的对照框架,以及一份可复用的薪酬数据建模思路。

2016 年美国顶级科技公司实习薪酬对比

软件工程师的职业前景

原文档开宗明义:本文档大部分内容针对 Bay Area,地理差异会在后文单独说明。职业前景部分从四个角度论证了软件工程作为职业的基本盘。

需求旺盛(High demand)

几乎所有领域都在依赖技术,因此软件工程师在几乎每个行业都是刚需。工程师的供需关系是需求大于供给,这直接推高了薪酬水平,而且需求仍在持续增长。

职业稳定(Stable career)

计算机科学正快速普及,工程是备受尊重的专业职业。与创意行业不同,你不需要做到行业前 1% 才能过上体面的生活。文档给出的一个具体数字是:一名大学毕业生进入硅谷公司(无论是大厂还是创业公司),起薪就可以超过 10 万美元,而且此后只会越来越好。

需要终身学习(Requires lifelong learning)

科技行业是变化极快的行业。许多今天常用的技术在十年前还不存在或未流行——例如 2009 年,移动应用开发和区块链几乎无人听闻。工程师必须持续升级技能以保持与市场需求的匹配。对热爱学习的人来说,工程是一个非常好的职业。

灵活度高(Flexible)

软件工程可能是当前存在的最灵活的工作之一,体现在工作时间、地点和环境三方面:

  • 地点:物理位置通常不是问题,许多科技公司完全远程办公;
  • 着装:没有正装要求,穿衬衫打领带去上班反而会被同事奇怪地打量;
  • 工时:工作时间总体弹性。

实习 vs 全职:进入顶级公司的捷径

如果你梦想有朝一日进入顶级科技公司工作,通过实习转正(intern conversion)被雇佣是最容易的路径。原文档给出了三条支撑理由:

  1. 面试轮次少:实习面试通常只有 2 轮,而全职面试通常 4-5 轮;
  2. 低成本试错:实习让你用约 3 个月的短期工作获得对公司文化和工程团队的 firsthand 理解;
  3. 低风险的 return offer:公司倾向于给表现优秀的实习生发放转正 offer,因为他们已经证明了自己胜任工作且能与现有团队磨合,雇佣风险相对更低。

美国:顶级科技公司的实习薪酬(2016 年数据)

顶级科技公司即使对初级候选人的支付也极为慷慨。上图为原文档引用的 2016 年美国顶级科技公司实习薪酬对比(数据来源于 Twitter 上 @rodneyfolz 发布的统计)。

新加坡:2022/2023 年应届与实习薪酬样本

作者团队做了一项调查,了解新加坡知名科技公司 2022/2023 年支付给新人的薪资。以下为结果样本(注意:应届生年度总包为近似值,包含基本工资、股票和目标奖金):

公司 实习(SGD/月) 应届生年度总包(SGD)
Stripe $6000 $150,000
Meta/Facebook $6000 $140,000
Google $5400 $110,000
Shopee $4200 $100,000 - $140,000
ByteDance $4000 $90,000 - $100,000
Grab $2500 无数据
Visa $2200 $110,000

公司规模:三种阶段的差异

公司处于不同阶段时,工作重点和具体工作性质可能差异巨大。在产品市场契合(product-market fit)未找到前的早期,公司会快速迭代产品和功能;而已经找到正确产品的大公司则聚焦于扩展基础设施和增长用户。此外,由于股权尚无价值,早期公司的现金薪酬普遍更低——但如果公司 IPO 或被收购,也有机会赚取更多回报。

原文档用一张五维对照表总结了早期创业公司、中后期创业公司与大型公司的区别,这是本文档信息密度最高的部分之一,完整保留如下:

维度 早期创业公司 中后期创业公司 大公司
公司规模 <100 人 100-1000 人 >1000 人
薪酬 基本工资略高于大公司。股权数量更多,但由于公司估值不明、股票尚无价值,其价值难以判断。高风险、高回报。 基本工资略高于大公司。公司估值更清晰,股票更有可能是有价值的。 取决于公司知名度。薪酬通常达到市场标准或更好。若公司已上市,股票是有价值的。
工作类型 以产品开发为主。工程师需要身兼多职——前端、后端、DevOps、设计等。 产品开发加部分基础设施。 角色多样且专业化;每个角色有专人负责。基础设施和生产力工具类工作更常见。内部转岗机会更多,有时甚至跨全球。
职业阶梯 非结构化。没有(或非常模糊的)职级体系。正式的导师制和培训很少。 半结构化。 非常结构化。职级体系定义清晰。
迭代速度 极快。还在挣扎寻找产品市场契合。 中等。已找到产品市场契合,试图扩大用户基础。 产品稳定,用户基数广。渐进式推出变更并做大量实验。

原文档特别注明:以上只是普遍趋势,例外情况同样存在。

一个值得注意的细节是,表中“中后期创业公司基本工资略高于大公司”的说法,与 Understanding Compensation 文档 中“创业公司为弥补股权缺乏流动性,通常给应届生提供 USD 120,000-130,000 的基本工资(高于大厂的 100,000-150,000 区间下沿)”的描述相互印证——创业公司用更高的 base salary 对冲股权不流通的风险。

地理位置:美国 vs 新加坡

同一份 offer 在不同地区的价格和生态完全不同。原文档用下表对比了美国(硅谷/纽约)与新加坡:

美国(Silicon Valley/NY) 新加坡
起薪 USD 100,000 月薪 $6000(中位数),$6900(75 分位)
人才来源 全球人才,多元国籍和背景 通常是区域性人才,以亚洲为主
公司类型 大公司总部(Facebook、Amazon、Apple、Google、Microsoft 等)、创业公司 大公司的分支机构、创业公司
工程工作类型 取决于办公室/公司规模 产品与基础设施兼备(构建新的编程语言、框架和工具)

新加坡的薪资数据引自 NUS GES 2021 报告(NUS Graduate Employment Survey)。

源码级延伸:仓库如何用数据模型落地这套“Landscape”

上面三张表格(实习/全职薪酬、公司阶段、地理位置)所描述的现实,在仓库中并不是静态文字,而是被 Offers 应用(位于 apps/portal/)建模成一套可提交、可检索、可统计的结构化数据。这一部分帮助理解 Landscape 中“公司规模、地理位置、实习 vs 全职”等维度在工程上的对应关系。

Offers 数据模型:实习与全职的分形结构

Prisma Schema 中,每一份 Offer 的存储方式恰好对应本文档的分类框架:

  • OffersOffer(约 L360-L386)是核心实体,它关联公司(Company)、地点(City)、接收月份(monthYearReceived)、面试轮次策略(negotiationStrategy)等字段,并通过 jobTypeINTERN / FULLTIME 枚举,L326-L329)区分子表;
  • OffersIntern(L388-L398)只记录实习相关字段:职位 title、实习周期 internshipCycle、开始年份和月薪 monthlySalary——这与 Landscape 中新加坡表格“Internship (monthly in SGD)”的计量方式完全一致;
  • OffersFullTime(L400-L414)则记录全职的 totalCompensationbaseSalarybonusstocks 四个货币字段——正是 Understanding Compensation 文档 中“Base salary + Bonus + Equity + Signing”四分法的数据库投影;
  • 所有金额统一由 OffersCurrency 模型(L301-L324)承载,同时保存原始 currency/value 和换算后的 baseCurrency/baseValue(默认 USD),这正是“地理差异”能被跨地区比较的前提:新加坡的 SGD 月薪可以被归一化到基准货币后参与统计。

实习周期的取值(Spring/Summer/Fall/Winter/Half year/Full year/Others)定义在 InternshipCycles.ts 中,写入表单选项时会被转成连字符小写值(如 full-year)。

薪资种子脚本:从 Excel 到 Offer 档案

seed-salaries.ts 展示了“Landscape 数据”的入库流程,对应 package.json 中的 seed-salaries 脚本:

  1. xlsx 读取 prisma/salaries.xlsx(L15-L39),每行包含 Timestamp、Type(如 FRESH GRAD/MID/SENIOR/INTERNSHIP)、Company、Role、Income、Stocks、Bonus、TC 等列;
  2. Role 文本推断标准化职位(getJobTitle,L45-L72:ML Engineer、Backend、Data、DevOps、Security 等,默认 software-engineer);
  3. Type 推断经验年限区间 getYoe(L74-L89:应届 0-2 年、中级 3-5 年、资深 6-10 年、实习 0 年)和职级 getLevel(Junior/Mid/Senior);
  4. INTERNSHIP 分支创建 OffersIntern(月薪,默认假设 SGD),否则创建 OffersFullTime(base/bonus/stocks/TC 四元组),并通过 convert 工具将 SGD 折算到基准货币(L150-L331);
  5. 地点默认关联新加坡(L118-L125,通过城市名查 City),这解释了为什么 Landscape 中新加坡表格的数据量相对最完整。

公司维度的存在性由 companies.csvseed-companies.ts 导入,公司模型(L96-L111)带有 sluglogoUrlwebsite 和用于搜索排序的 ranking 字段——对应 Landscape 表中“大公司总部 vs 分支机构”的公司维度。

地理位置数据的来源

Landscape 地理对比表中的地区维度,在数据层由 seed.ts 初始化:脚本从 countries.jsonstates.jsoncities.json 三层级联灌入国家-州-城市表,之后每份 Offer 的 location 字段(City 关联)即可以此为基础做地域聚合统计。也就是说,本文档中“美国起薪 vs 新加坡中位月薪”这类对比,在工程上的实现路径就是:按 OffersOffer.location 分组 + 按 jobType 拆分 + 用 OffersCurrency.baseValue 做跨货币归一化。

小结与延伸阅读

Landscape 文档的价值在于把“软件工程师市场”这一宏观话题收敛为四个可操作的决策维度:

  • 要不要入行/长期投入:需求旺盛、起薪高、职业稳定,但要求终身学习;
  • 应届生怎么进大厂:优先实习转正(2 轮面试 + 低风险 return offer),并理解实习与全职在薪酬结构上的差异(月薪 vs base+bonus+stocks);
  • 选什么规模的公司:用“规模/薪酬/工作类型/职业阶梯/迭代速度”五维表做权衡,注意早期公司的股权不确定性;
  • 选什么地区:用起薪水平、人才池、公司总部密度、工作性质四要素对比硅谷与新加坡。

如需进一步深入,可继续阅读仓库中的 Understanding Compensation(薪酬四组件的详细拆解与奖金计算示例)、NegotiationChoosing between companies(拿到多个 offer 后的决策因素)。

最后需要说明数据时效性:本文档中的美元数字(如 10 万美元起薪)与 2016 年美国实习薪酬图均为原文档写作时的快照,新加坡表格覆盖 2022/2023 年;实际决策时请以其作为量级参考,而非精确报价。

登录后查看全文
热门项目推荐
相关项目推荐