几年前,在北美求职的我,访问了上百位前辈,希望从他们的故事里勾画出不同方向和不同职业路径的样子,让自己做出正确的选择。
现在,入行多年的我,也经常听到学弟学妹们的疑问:

“全栈、后端、大数据、AI等方向,
到底应该选哪个?”
的确,在北美求职是一件压力很大的事情。我们需要面临着求职方向的选择,需要应付日渐紧缩的H1b政策,随着毕业的临近,许多同学们也都日渐焦虑。想到当年的自己,我也一直耐心的为大家解答,却也发现了同学们共同的缺失点和误区。
为了更好的帮助更多同学,我根据多年的工作经验和对诸多学弟学妹们的辅导,写出了以下八道自测题目。希望同学们能够平静心态,沉着冷静的走过求职这道坎。
程序员职业发展自测
1. 你的个性是怎样的?
  1. 非常外向,和UX或者PM撕逼都没问题
  2. 稍微外向,可以偶尔和UX或PM瞎叨叨
  3. 稍微内向,可以偶尔面对其他人类
  4. 很内向,只愿意面对电脑和自己
为什么问?
一个工程师的个性对于他/她日后工作职位的选择非常重要,有些工作需要更多的跨功能、跨团队的沟通,有些工作则需要更加专注、深入的技术工作。 深入彻底的了解自己的兴趣和喜好,也是职业规划道路上非常重要的因素。
2. 遇到bug,你会怎么办?
  1. 砸电脑,摔鼠标
  2. 关屏幕,并叹气
  3. Google搜搜
  4. Stack-overflow
  5. 使用调试工具
为什么问?
遇到bug可能是每个程序员工作中不可避免发生的事情。Bug是件小事,却也是一件几乎会每天发生的大事。常常关注自己在工作和学习中的心理反应,是愤怒、是沮丧、还是越挫越勇,都是自我了解的重要线索。很多时候,我们找对了自己喜欢的工作,才会觉得人生更有意义。
3. 你目前的工作经验为___?
  1. 在校,无美国实习经验
  2. 在校,有美国实习经验
  3. 在职,经验 = <3年
  4. 在职,经验值 >3 年
为什么问?
除了经验比较丰富或者对自己兴趣非常明确的同学,许多在校生更需要选择进入SDE的门槛类职业。这样的选择,会给你非常宽泛的就业面,提供更多就业机会。
而有工作经验的程序员,则需要学会总结和反思自己以前的工作。这个阶段的程序员应该对自己的性格、技术长板短板、产品和公司组织结构等因素有着比较多的反思,也知道自己是要选择IC、Manager、或是Tech lead的道路,进而进行更有长期发展意义的职业道路。
4. 以下名词你听过几个?
  1. Netflix Open Source
  2. Mark Zuckerberg
  3. Zoo Keeper
  4. React
  5. Stewart Butterfield
  6. React Native

为什么问?
以上名词有些是技术术语,有些是硅谷人物——这么问的角度是想要知道你在技术、行业上对硅谷、业界的了解有多少,是否对找工作、跳槽或职业转换有着足够的积淀和准备。
5. 你对未来的技术方向选择明确吗?
  1. 不是很明确
  2. 明确,想转换方向,然而不清楚哪个方向
  3. 明确,想转换方向,并且知道哪个方向
  4. 明确,想在这个方向一直发展
为什么问?
如果你方向一直很明确,那么恭喜你!下一步,你应该去了解自己是否有足够的实力,并对该方向做出未来发展的思考和谋划。
如果你的方向还不明确,没关系,现在开始好好搞清楚吧!首先,你需要快速深入的了解不同方向的工作内容、所需技术栈和职业发展前景,再结合对自身性格和爱好的理解,慢慢做出适合自己的选择。
6. 选择你使用得最熟悉的一些编程语言和工具:
  • Java
  • Python
  • C,C++等系列语言
  • HTML
  • AngularJS
  • PHP
  • Ruby
  • MapReduce
  • AWS/Azure/Google Cloud
  • MongoDB
  • Spark/Hive/Pig/Hadoop
  • SQL/MySQL数据库
其他,请填写:_______
为什么问?
这道题即是测试,也是反思。技术栈、工具、平台等是SDE长年积累的武器和战利品,然而单点积累技术栈已经不够,需要的是整体性积累技术组合(skill set)。从技术组合来看待自己的竞争力和软肋,可以为下一步规划做准备。
然而在充实自己技能的过程中,也不能盲目对所谓流行语言“一拥而上”,而是在明确努力目标之后,“对症下药”学习这一方向上自我武装的技术栈。
7. 你喜欢怎样的开发思路?
  1. 从前端UI/UX等网页开发到后端的整体、均质的布局
  2. 有逻辑式、架构式的体系化开发
  3. 跨功能、横向发展的开发
  4. 深入、专精、纵向深入的开发
  5. 搭建infrastructure等基础性的开发
  6. 连接平台、数据、工具等的开发
  7. 还不明确
为什么问?
SDE说到底是技术活,开发的思路和偏好可能是最根本性的职业规划需要遵循的原则。
8. 你的最终职业规划是成为_____?
  1. 还不明确
  2. 想做产品,比如产品经理
  3. 做用户体验和设计,往前端或之前的方向走
  4. 一直做技术,比如系统架构师
  5. 想更多和数据打交道,比如API,数据库,数据开源
  6. 想做技术方面的管理,比如engineering manager, tech lead
为什么问?
许多学弟学妹来向我“取经”时,连所有“潜在”的机会、现有技术方向和职业发展路径都并未了解清楚。毕竟生活是做“选择题”,需要你有“选择题”,而不是干瞪着一片空白,焦虑的求一个结果。
这种情况下,你需要找在不同公司、不同职位任职的前辈交流,了解他们的技术要求、团队精神、职业发展,才能慢慢在脑中勾画出自己成为系统构架师、大数据工程师或Tech Lead的样子,树立正确的目标,往“对”的方向努力。
北美程序员火热方向解析
很多人认为,在北美,程序员基本上都叫Software Developer Engineer(俗称SDE),虽然有层级的差别,但只从职位称呼并不能清晰感受到方向的异同。在招聘过程中,在Job Description里面会详细描述对于相应的SDE有哪些要求,在这些JD中,能清晰的看出各个方向的差别。
这里为大家介绍一下火热的SDE方向:大数据工程师、全栈工程师、后端工程师。
*以下所有技能以常用为主,并非全部。
大数据工程师
数据工程师是大量信息或大数据基础设施的设计者,创建者和管理者。数据工程师按照公司或组织的需求开发架构来分析处理数据,并确保这些系统平稳运行。
常用技能
Hadoop、Spark、Kafka、Cassandra、Docker、AWS、NodeJS等,数据采集、数据传输、数据分析、数据展示每个步骤,以及搭建完整的Data Pipeline。
市场竞争力
不只IT公司大量需要大数据工程师人才,在很多金融、医药行业都对大数据工程师有大量的需求。大数据工程师的薪资在各类SDE中也是居于高位的。
全栈工程师
全栈工程师,是指掌握多种技能,并能利用多种技能全面完成产品的人。全栈软件工程师的日常工作因公司因组而异,以下以Google Adwords为例,主要包含:网页用户交互,内部及外部API,数据库,数据查询系统,机器学习。
常用技能
现在全栈领域最火的是Javascript语言下的MEAN stack,包含MongoDB、Express.js、AngularJS、Node.js。全栈的发展非常迅速,前端技术栈的更新换代非常快,掌握趋势,熟练运用火热技术栈是非常重要的。
市场竞争力
全栈不再是初创公司的偏好,很多一线大公司对全栈工程师的需求越来越多,例如Google Adwords组里,很多工程师做的都是全栈方向的工作。
后端工程师
后端工程师,主要工作是使服务器、应用程序和数据库相互联通。后端工程师其实也叫做服务器端工程师。在后端工程师的发展过程当中,也要求对前端有一定程度的了解。
常用技能
语言Java、C++、Python任一,OOD & Design Pattern、MySQL、MongoDB、Redis、Cassandra,需要熟悉多个Frameworks、Network Programming、性能调优、DevOps及分布式系统。
市场竞争力
需求量最大的工程师种类,包含IT、金融、医药、制造业等等行业,全美平均薪资能达到$117k,非常有竞争力。职业晋升方向有架构师、技术经理、CTO等等。
更多职场发展建议
然而我需要澄清的是,任何一个方向或职位,都不能一概而论。由于不同公司的技术侧重不同,同样的Title却不意味着同样的工作内容。比如说,有些公司的Big Data Engineer却和Data Scientist有着非常大的重合,从工作职位上来说很难划清界限。这就要求同学们多问、多了解,才能更好的定位自己的情况,把握更多就业机会。
继续阅读
阅读原文