先说下自己的背景。。

我是在加拿大读的地质master,毕业之后一直在加拿大全力找地质相关职位,参加了各种找工作培训,各种networking,找了同行的mentor指导自己,大量投简历,Google相关公司列表,只要是和地质相关的职位,我都申请了,还发了很多cold email给相关公司主动询问职位,持续找了1年多,绝大部分申请都是石沉大海,好多申请我可是花了力气写cover letter的……拿到4个公司的面试,onsite 2次,video 2次,最后只有一个4个月的entry level contract工作。矿业和石油的不景气加剧了竞争,但同时自己的专业需求量少也是主要原因。

在这过程中,通过和身边同学交流和网上相关信息搜索,发现CS专业好找工作,就萌生了自学计算机直接找工作的想法,于是full time呆在家里开始了自己的计划,整个过程大概持续了1年时间,期间得到了老婆的大力支持,最后拿到了3个offer,从了一家大公司的offer,工资的话就是软件行业junior的平均水平,到现在工作一年多了。

废话了这么多,步入正题。。

加拿大不是美国,没有那么多tech jobs,想转专业读CS学位也比美国难,比如这边CS课程型master申请竞争大,不是CS相关背景(比如说地质)可以申请的学校极少。如果想转CS先拿个学位,可以读college的diploma或者读个本科二学位。这两个选择都需要很大的时间和金钱成本。

但是呢,加拿大这边CS职位的需求量相对于其他专业来说还是很大的,自学计算机直接找工作不是没有可能,关键看自己的兴趣以及期待值。

自学一开始选择方向很重要,计算机行业的各个方向千差万别,自学的战线越长越难坚持,不可能想本科生那样花费2年以上的时间打基础,所以要选择一个具体的方向。我建议选择入职门槛低的方向,把自学失败的风险放到最低,比如说前端开发(Front End Develop)和测试(Software QA),这两个方向的entry level职位很多,不少机会来自小公司,很难招到CS科班的人,这就给了转CS的人机会。像现在热门的data scientist门槛就高,如果非CS,不少都是需要phd背景或者相关工作经验,如果自学这个就给自己未来增加了太多风险。

基于以上分析,自学可以有两条路线,Java和JavaScript,我在indeed上做过统计,这两个语言在加拿大的职位最多,Python,C++等其他语言就少很多。Java应用面很广,但很多职位只是需要你有Java基础,因为公司开发的大框架已经有了,你的角色就是其中的小螺丝钉,JavaScript主要是网页开发方向,这里我先讨论如何自学Java。

首先是打好Java基础,推荐Head First Java这本书,适合初学者,通俗易懂,内容精彩,看起来不枯燥,覆盖了面试要求的重要概念,我觉得UI部分可以跳过不看。接着可以上九章算法的Java基础班,这是个网上培训班,教一些面试必备的数据结构和算法基础。之后自己就可以每天在LeetCode上刷一些难度简单的题,巩固自己的Java语言和算法知识。

这个时候其实你已经具备面试的初步能力了,如果想立马找工作,可以学下udemy上selenium的课程,selenium主要应用在网页测试,现在这方面需要很多,同时也容易拿到面试。如果想找竞争力更大的工作,就需要再学习一些专业课程(我当时的关注点是图形学),做一些有意思的项目放在GitHub上(这不是本文讨论的范围,我做过一些简陋的full stack web app)。

在自学3个月后,可以开始准备resume,因为申请工作是个很长的周期,很多职位从申请到面试时间拉的很长,要是自学结束后再准备就晚了,在自学的过程中可以广泛投简历,通过面试来调整自己的学习计划,我在刚开始投了很多小公司,陆陆续续拿到一些面试,很多表现不好,因为自己还在自学基础没有认真准备,但知道了需要牢记一些重要的概念以及要对自己做过的项目非常熟悉。

在刚开始制定自学计划以及过程当中,都要明确自己所做的一切是为了找到工作,拿到offer取决于两点:resume吸引人,面试表现好。resume如何吸引人?转CS肯定在教育背景和工作经验上没有优势,只能想办法做些练手的项目充实resume。如何面试表现好?加拿大不想美国那么重视算法题,大部分entry level都是问一些基础概念和简单的编程题,可以在网上搜下相关的面经。总而言之,所有学的内容都是为了这两点。这样就不会盲目自学了。

题外话:工作一年多,认识了不少CS科班出身的人,和他们交流让我感受到现在还是IT行业优于大部分行业,至少我们公司招人还是很困难的,毕竟学CS的人没有其他理工科人多。有时间还会写些找工作遇到的坑以及工作的感想……