Tech Interview Handbook 的 Landscape 篇:软件工程师职业全景——需求、薪酬、公司规模与地理差异
本文基于 tech-interview-handbook 仓库中的 Landscape 文档 展开,系统梳理软件工程师职业市场的四大关键维度:行业需求与职业稳定性、实习转正与全职的薪酬对比、初创公司与大公司的差异、以及硅谷与新加坡的地理薪酬差距。文档主体内容以硅谷(Bay Area)为主要参照系,同时结合仓库中 Offers 应用的 Prisma 数据模型与薪资种子脚本,说明这些“职业全景”概念是如何被结构化存储与统计的,读完你可以获得一份可直接用于职业决策的对照框架,以及一份可复用的薪酬数据建模思路。
软件工程师的职业前景
原文档开宗明义:本文档大部分内容针对 Bay Area,地理差异会在后文单独说明。职业前景部分从四个角度论证了软件工程作为职业的基本盘。
需求旺盛(High demand)
几乎所有领域都在依赖技术,因此软件工程师在几乎每个行业都是刚需。工程师的供需关系是需求大于供给,这直接推高了薪酬水平,而且需求仍在持续增长。
职业稳定(Stable career)
计算机科学正快速普及,工程是备受尊重的专业职业。与创意行业不同,你不需要做到行业前 1% 才能过上体面的生活。文档给出的一个具体数字是:一名大学毕业生进入硅谷公司(无论是大厂还是创业公司),起薪就可以超过 10 万美元,而且此后只会越来越好。
需要终身学习(Requires lifelong learning)
科技行业是变化极快的行业。许多今天常用的技术在十年前还不存在或未流行——例如 2009 年,移动应用开发和区块链几乎无人听闻。工程师必须持续升级技能以保持与市场需求的匹配。对热爱学习的人来说,工程是一个非常好的职业。
灵活度高(Flexible)
软件工程可能是当前存在的最灵活的工作之一,体现在工作时间、地点和环境三方面:
- 地点:物理位置通常不是问题,许多科技公司完全远程办公;
- 着装:没有正装要求,穿衬衫打领带去上班反而会被同事奇怪地打量;
- 工时:工作时间总体弹性。
实习 vs 全职:进入顶级公司的捷径
如果你梦想有朝一日进入顶级科技公司工作,通过实习转正(intern conversion)被雇佣是最容易的路径。原文档给出了三条支撑理由:
- 面试轮次少:实习面试通常只有 2 轮,而全职面试通常 4-5 轮;
- 低成本试错:实习让你用约 3 个月的短期工作获得对公司文化和工程团队的 firsthand 理解;
- 低风险的 return offer:公司倾向于给表现优秀的实习生发放转正 offer,因为他们已经证明了自己胜任工作且能与现有团队磨合,雇佣风险相对更低。
美国:顶级科技公司的实习薪酬(2016 年数据)
顶级科技公司即使对初级候选人的支付也极为慷慨。上图为原文档引用的 2016 年美国顶级科技公司实习薪酬对比(数据来源于 Twitter 上 @rodneyfolz 发布的统计)。
新加坡:2022/2023 年应届与实习薪酬样本
作者团队做了一项调查,了解新加坡知名科技公司 2022/2023 年支付给新人的薪资。以下为结果样本(注意:应届生年度总包为近似值,包含基本工资、股票和目标奖金):
| 公司 | 实习(SGD/月) | 应届生年度总包(SGD) |
|---|---|---|
| Stripe | $6000 | $150,000 |
| Meta/Facebook | $6000 | $140,000 |
| $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)等字段,并通过jobType(INTERN/FULLTIME枚举,L326-L329)区分子表;OffersIntern(L388-L398)只记录实习相关字段:职位 title、实习周期internshipCycle、开始年份和月薪monthlySalary——这与 Landscape 中新加坡表格“Internship (monthly in SGD)”的计量方式完全一致;OffersFullTime(L400-L414)则记录全职的totalCompensation、baseSalary、bonus、stocks四个货币字段——正是 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 脚本:
- 用
xlsx读取prisma/salaries.xlsx(L15-L39),每行包含 Timestamp、Type(如 FRESH GRAD/MID/SENIOR/INTERNSHIP)、Company、Role、Income、Stocks、Bonus、TC 等列; - 从
Role文本推断标准化职位(getJobTitle,L45-L72:ML Engineer、Backend、Data、DevOps、Security 等,默认 software-engineer); - 从
Type推断经验年限区间getYoe(L74-L89:应届 0-2 年、中级 3-5 年、资深 6-10 年、实习 0 年)和职级getLevel(Junior/Mid/Senior); - 按
INTERNSHIP分支创建OffersIntern(月薪,默认假设 SGD),否则创建OffersFullTime(base/bonus/stocks/TC 四元组),并通过convert工具将 SGD 折算到基准货币(L150-L331); - 地点默认关联新加坡(L118-L125,通过城市名查
City),这解释了为什么 Landscape 中新加坡表格的数据量相对最完整。
公司维度的存在性由 companies.csv 经 seed-companies.ts 导入,公司模型(L96-L111)带有 slug、logoUrl、website 和用于搜索排序的 ranking 字段——对应 Landscape 表中“大公司总部 vs 分支机构”的公司维度。
地理位置数据的来源
Landscape 地理对比表中的地区维度,在数据层由 seed.ts 初始化:脚本从 countries.json、states.json、cities.json 三层级联灌入国家-州-城市表,之后每份 Offer 的 location 字段(City 关联)即可以此为基础做地域聚合统计。也就是说,本文档中“美国起薪 vs 新加坡中位月薪”这类对比,在工程上的实现路径就是:按 OffersOffer.location 分组 + 按 jobType 拆分 + 用 OffersCurrency.baseValue 做跨货币归一化。
小结与延伸阅读
Landscape 文档的价值在于把“软件工程师市场”这一宏观话题收敛为四个可操作的决策维度:
- 要不要入行/长期投入:需求旺盛、起薪高、职业稳定,但要求终身学习;
- 应届生怎么进大厂:优先实习转正(2 轮面试 + 低风险 return offer),并理解实习与全职在薪酬结构上的差异(月薪 vs base+bonus+stocks);
- 选什么规模的公司:用“规模/薪酬/工作类型/职业阶梯/迭代速度”五维表做权衡,注意早期公司的股权不确定性;
- 选什么地区:用起薪水平、人才池、公司总部密度、工作性质四要素对比硅谷与新加坡。
如需进一步深入,可继续阅读仓库中的 Understanding Compensation(薪酬四组件的详细拆解与奖金计算示例)、Negotiation 与 Choosing between companies(拿到多个 offer 后的决策因素)。
最后需要说明数据时效性:本文档中的美元数字(如 10 万美元起薪)与 2016 年美国实习薪酬图均为原文档写作时的快照,新加坡表格覆盖 2022/2023 年;实际决策时请以其作为量级参考,而非精确报价。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
