其实这部份本来想连着part2一起写的,
但因为我觉得跟你念哪间学校比较无关,而且我的看法不尽然正确,
反正就提出来讲一讲,如果有其他前辈或者板友愿意帮忙补充那更好喽。
承接上文,在美国念CS要找工作,除了前面提到的,学校的名声和地点以外,
另外还有一个也很重要的事情,就是你的skill set。
不过这个对有过几年工作经验的人来说会比较有影响。
(完全没经验的人基本上就是看你的学校的名声还有地点)
像我在台湾待得是系统厂/网通厂,所以我有很大一部份的工作都是在写C,
然后玩得不是bootloader要不就是device driver。
这种skill set在台湾很ok,因为台湾最有"钱"途的就是IC设计公司(aka 猪屎屋XD)。
但是在美国这边...拜托这种dirty work早就不是这边的就业主流了好吗XD
你没看现在海量(还是巨量)数据多夯,
夯到一堆学校不是开Data Science要不就是Business Analysis相关的学位或学程XD
要想学Machine Learning直接上网找Coursera就有一堆质量超高的公开课可以看,
类似的主题一堆学校拼命开,感觉好像开不用钱的一样,
但就是没有学校愿意开课讲一下在linux/freebsd上,
他们的network stack还是memory management怎么设计的(怒)
所以...慎选你的skill set,
不是说美国这边对low-level system software的工程师没有需求,
但这种职缺通常都要你够资深(至少七八年以上,要求十年也不少)你的面试机会才会多。
而也因为这样,所以其实我能够投的职缺说真的就少了很多。
顺带一题,这些有来找我面试过的公司,基本上都属于Entry Level的职缺。
在美国这边的职缺大致上可以分成三种,
也就是所谓的new grad,entry level,experienced。
当然这并不是非常严谨的分法,只是就我投过/看过的职缺来说大致上是如此。
尤其在某些比较大的公司,
负责new grad招募的HR Team有可能会和entry level/experienced是不同的。
所谓的new grad,一般而言指的是没有相关工作或者工作经验在一年以下的新人,
也就是所谓的菜逼八XD
然后entry level的话,多半都会要求你有2~4年不等的工作经验,
这种通常就是所谓没那么菜的菜逼八(好像有点绕口)XD
最后的experienced的职缺就很多样化了,
但基本上在职称前面都会挂senior/principal,甚至到Manager/Director都有可能。
在工作经验的要求上,基本上都会要求至少五年,
很多更是七八年以上甚至十年以上都不少见。
从这里大家应该也可以理解为什么我说我的skill set在这里不吃香,
问题不在于没有这种需求,而是这种需求有很大一部份都是experienced等级的。
所以,如果在美国这边要就业,到底该走什么样的skill set比较好呢?
坦白说这个题目的范围太大,毕竟美国的软件业实在比台湾发达太多,
以我个人浅薄的工作经验以及少的可怜的面试经验实在很难给得出完整的答案,
所以我只能从一些相当敷浅的(像是该学什么程式语言之类的)部份稍微讲一下而已。
首先,因为美国的纯软件产业真的很发达,尤其这几年浏览器相关的技术突飞猛进,
所以目前web相关的职缺,
不管你是走Front-End(前端)还是Back-End(后端),数量都相当的多。
夸张一点讲,我相信有接近一半的职缺在广义上来说都可以跟Web扯得上关系。
前端的话我只知道最基本的,像是html/css/javascript这些东西。
其中Javascript技术上的发展这几年真的很夸张,基本上甚至拿来写后端都不是问题。
当然走前端的话你可能还要熟悉一些相关的framwork,譬如AngularJS/React等等。
后端的话,因为用的很多语言其实也都很适合拿来开发一般的系统,所以跟后面一起讲。
一般而言,美国这边的软件工程师在征才的时候,要求的程式语言大概会有以下几种:
一定要会一种OOP(Object-Oriented Programming)的程式语言,
最常见的大概就是C++/Java/C#三选一。
一定要会一种script language,像是Python/Ruby/Perl/,甚至Shell Script都算。
就script language来说,如果还没有特别的偏好(也就是不会任何一种XD),
我个人会强烈建议学Python,因为这个语言真的超级好学,
即便对于不会写程式想转科系的人也一样。
虽然说Python这种script language是动态语言,
在效能上没办法跟上面那些C/C++/Java/C#这些静态语言相比,
但好学好上手用来做快速的prototyping则是相当适合,
即便在Cisco这种网通厂也很有用,因为常常会拿来写auto test。
更不用说拿来刷leetcode的时候或者对付coding interivew的利器XD
总之是个投资报酬率超高的程式语言,强烈推荐给大家XD
(当然如果确定要走Web开发,那有RoR的Ruby也是很好的选择)
至于那种general purpose的程式语言,就看你原本擅长什么就继续保持吧。
如果是从其他科系转过来CS的,对于写程式这件事情不是很熟练的话,
那我强烈建议学JVM-based的语言,或者说有GC(Garbage Collection)的语言。
不要去学什么C/C++了,虽然说C++有smart pointer啦,
不过这两个语言不管学起来还是写起来都非常的苦逼,
你的重点是要找工作不是要找麻烦XD
我之所以会推荐Java,是因为除了写起来很囉唆以外,写习惯之后搭配强大的IDE,
那种爽度真的不是写C(我对C++很不熟)可以比的XD
重点是,你完全不用去接触pointer/memory leak这种会让你夜里哭哭(疑?)的东西XD
另外目前看到的趋势,如果你原本就是Java Programmer,
那或许下一个语言挑Scala来学会是个不错的投资,
尤其很多Big Data生态系的大型专案,有慢慢从Java往Scala移动的倾向。
如果原本是写C/C++的,或者原本在开发system program的人,
我想Go也会是个不错的选择,近来也有愈来愈多大型分布式系统的专案是用Go来写的。
当然重点不是那些专案,而是职缺上要求懂Scala/Go的数量有愈来愈多的趋势,
所以在行有余力之时根据自己的背景多学一些新东西总是好事,
尤其对于跟我一样在台湾已经有过几年工作经验的人来说更是如此。
这一篇我想应该有比较简短了,关于技能树该怎么点这个问题,
我想还是要有在其他不同行业/领域的人来讲或许会比我说的更有说服力吧XD