Photo by Radowan Nakif Rehan on Unsplash
这篇的软体界指的范围大概就是PTT上会发在Soft_Job的,职称可归类为Software Engineer的,台湾人熟悉的台gg、联发科等裡面什麽IC设计工程师之类的不在范围内,当然这些公司裡面也是有软体工程师,但不是主要业务
直接先讲一个大家在意的结论,除非你有自信自己是世界顶尖的人才,不然在台湾想快速高薪存钱还是IC厂的工程师最快,当然我指的是一线的公司,台积大小M之类的,毕竟这就是目前台湾最强的,不久前台积电市值都超过三星了,软体界则是还在发展,薪资虽然有在上升,但跟猪屎屋比空间还很大
台湾软体业职位介绍
首先先简单分类并介绍一下Software Engineer可以分成哪些
第一个是发展可说最活跃的Web相关,其中至少又可切成Frontend、Backend,比较健全的公司会有SRE(Site Reliability Engineer),或称DevOps,小公司可能会让Backend兼做SRE的工作
Frontend的工作就是做所有你们网页看到的页面,按设计给的稿做出来,用到的技术最基本就是HTML CSS JavaScript,通常要加上其延伸出来的许多东西,如React、Vue、Angular等
Backend的话则是你们看不到的部分,例如在按下嘘之后,必须在资料库存下一笔嘘的纪录,这种逻辑就是backend负责写的,用到的技术太多种了,看公司,语言的部分太杂了后面讲,但基本就是至少一种后端常用的语言 + 至少一种资料库
SRE是负责维运的,确保server、资料库都正常运作,所以跟backend合作紧密,通常需要on call,就是出事要马上应对,所以我觉得最血汗,虽然都会有on call加给,但是值班时不能安心睡觉,可能连拉个屎都要带着笔电进去以防万一,举例来说就是像前阵子FB挂掉,这种就是SRE等着满头烧
除此之外通常也要负责让公司裡其他工程师可以顺畅地deploy新版本到server上,用到的技术也很广,linux绝对是熟到跟自家厕所一样,加上AWS、GCP等各大cloud,还有docker、kubernetes、jenkins等,也必须有coding能力,因为不可能什麽都手动来,我认识的SRE个个都像超人一样
可能有人问有没有专门的DBA,老实说我真没见过,资料库通常就backend跟SRE来弄就够了,正常人没事应该不会特地请个DBA
有时会有涵盖两种以上的职缺,例如Frontend + Backend,会有人称这叫Fullstack,但基本比较有水准的公司不会特地开这种职缺出来,实在没意义,做fullstack的人薪水也不会比较高,而且通常自称fullstack的人都很废
除了web相关,当然还有特定平台类的 也就是Android、iOS和Desktop,当然其实不只 例如做家机游戏的(但台湾不知有没有)、或做IoT的可能就是Raspberry Pi 这几个的技术就比较单纯,看各自平台而定
Android就是Java跟Kotlin iOS是Objective-C跟Swift 另外还有比较特别的,就是如React Native、Flutter之类的东西 目前我是不推荐,你绝对可以学,但是不需要全心全意的想专精 一个专精React Native的人定位很尴尬,Flutter则是远远不够成熟和普及
Desktop就很多种了,基本上什麽语言都有可能 比较常见的大概就C、C++、C#、Java甚至VB都还活着 但我个人认为单纯做桌面软体可以称作是软体界中的夕阳产业了 职缺基本上都是在老公司在维护老程式为主
但语言的技能不变,如果你是写C/C++这种通用性很高的就不用担心 写VB的还是算了吧,至于C#太局限了我个人不喜欢也不推荐 除非你特爱微软,不然用了微软系列就是要吃他们的全家桶 而且用微软系列的公司,听到的薪水通常都很悲惨 唯一知道的例外是钛坦科技,号称可以开到300万
除了以上几个大平台,其他还有很多可能也可算在软体工程师的 最多的应该就是C/C++的各种应用,写什麽嵌入式系统、韧体、IoT、工业控制 这个太多太杂了,而且已经比较偏离软体业了就不多谈
回到Android/iOS,你会发现我分别写了两个语言 如果你问个自要学哪个语言好,我会说当然是学新的那一个 首先iOS肯定学Swift,新专案不会再用Objective-C,需要的都是维护旧专案 相比Swift普及率已经满高,Android用Kotlin的就我所知还没那麽多 但其实不用担心,因为Kotlin就是主打跟Java完全相容,基本概念都一样 你就把他当成改良的Java就行,一个上手后改写另一个肯定非常快
另外可能有人会对做Android/iOS有疑虑,觉得未来会不会没落、被Web取代掉 就我来看是不太可能,至少五年十年内都不可能 至于十年后这世界什麽样子我都不知道了当然不好说 但总之现况是Android/iOS缺人缺很凶,反而Web相关的人还比较好找 可能是这几年大家都一窝蜂的去学前端后端的关係 如果你对特定平台有兴趣,那放心学肯定没问题
实力至上
接着来讲大家最在意的薪资、公司,这裡只以台北为主,工作机会台北跟台北以外的地方差太多了
首先先跟大家讲一个概念,以软体工程师的世界裡 基本上谁强谁屌就大,实力至上 没在跟你看年资、年龄、学历、辈份的,年纪小的带年纪大的比比皆是 甚至有公司面试会直接问「你可以接受年纪比你小的人当你主管吗」 面试人时,虽然希望尽量公平公正,但老实说遇到年龄大的会在心裡默默扣分 因为有年纪的人通常比较难搞,年资再深也一样,甚至年资太深也能扣分
举例来讲 面试完两个人,觉得实力都差不多60分,假设一个60分一个65分好了 60的年资一年,65的年资五年,两个要录取一个的话 我肯定是选年资一年的那个,因为潜力明显比五年的好 你做了五年还是这种程度你也差不多就这种水准而已了
总结就是,年资和学经历完全无法证明任何东西 学经历华丽到不行、履历写得多猛多猛,面试时本人却废到不行的并不少见 我不会因为你是台大硕还是待过知名公司就破格录用你 只有面试的时候拿出来的实力才是真的 但也必须承认HR跟其他非技术人员会看经历学历
即使技术人员来看也会多少影响第一印象 因为老实说,一个台大学硕的人头脑通常不会差到哪去 对于能否拿到面试机会「可能」会有影响,这要视公司徵人的运作方式而定 通常较有水准的公司会有更合理的方式来做第一步筛选 例如最常见的就是前测,或是直接让工程主管看履历决定 另外当然学历对第一份工作可能还是会有明显的影响 不过通常都是比较传统的大公司才会这麽看,就是类似鸿海阿、华硕之类(乱举的不保证)
公司类型及薪资介绍
前言讲多了,再来介绍我个人对公司的分类,按平均的薪资粗略排的话大概是
- 顶级或准顶级真外商
- 顶级知名新创、优质新创
- 知名大型软体公司、已本土化的假外商、还行的新创
- 传统大公司
- 做不太起来的新创、假新创、很小的新创
- 其他小资型小公司
这份名单排序不是绝对,有非常多特例,稍后会举一些,另外薪水通常只看年薪,因为很多公司都有保证年终,月薪很不准
1. 顶级或准顶级真外商
第一个顶级或准顶级真外商,顶不顶级就纯看个人感觉吧 台湾的话第一个想到当然就是Google 事实台湾软体业真心让人觉得真正顶级的大概只有Google了吧 有个疑似顶级的是Microsoft,但就我了解的其实薪水没有很顶 而且台湾微软一大部分都是约聘的职位,正职的话百万以上当然是没问题 还有一个曾经有的是Mozilla,可惜台湾全部裁光现在已经没了
准顶级大概就像LINE,毕竟不是美国公司,但工程师给到200万都是有可能的 还有提过的新加坡商钛坦科技,虽然不有名,但因为薪水敢给我就放这裡了 本业非软体的外商还有Intel、HP、Dell等,在台湾也都有工程师 上述公司不少我都有认识的工程师在裡面,就我知道年薪百万都只是最基本
在这几间实力者要拿200万以上通常也都是没问题,各自具体上限在哪我就不知道了 这类公司基本上英文能力都是必要的,你很可能会需要跨国合作、跨国开会 所以最低限度你要有conversational的英文程度(可能只除了钛坦华语能通)
2. 顶级知名新创、优质新创
第二个顶级知名新创跟优质新创,我指的知名不是你听过就叫知名 而是在新创圈知名,几亿几亿不断募到大量资金的那种 新创公司的特色通常就是敢砸钱,所以都会开很高的薪水来抢人 且福利通常也都很好。真正敢给的新创,薪资并不会输给楼上的顶级外商 对于怎样才叫新创其实没有明确定义,通常就是指成立几年内还在发展初期的公司 也因此这类公司通常不太收菜鸟,只收精英、最看重真实实力 因为都还在烧钱阶段,公司都还没稳才没那个闲工夫去培养新人
当然也是有例外,有的公司会收Junior engineer,但通常也是有即战力的人 近期新公司感觉有比较趋缓,所以其实这分类裡很多公司都已经不新了 由于通常只收高手的关係,这类公司年新百万通常也都只是基本
举例第一个想到的就是Appier,工程师至少100万、号称可开到300万 (事实上Appier都已经成立7年了,还该说新吗) 这个分类裡一般的区间大约就是都落在100万~200万左右(单纯工程师)
其他想到的还有Omlet、17直播、阿福管家、ShopBack等,大约都是在这个范围 还有些最近才听到的像Avance Venture Lab,可以给到200万以上 和另一个满新的叫Botrista最高也是可以开到200万左右
此外之前讲到的实力至上、年轻人领导老人也最常发生于这个分类 想打破年资这个概念就是来这类公司就对了 24、25岁当工程主管的我都见过,老话一句这裡谁强谁屌就大
3. 知名大型软体公司、已本土化的假外商、还行的新创
第三个知名大型软体公司、已本土化的假外商、还行的新创 所谓已本土化的假外商和还行的新创,就是粗略薪水落在70万~150万我就归在这
知名大型软体公司我觉得可以跟假外商合在一起看,就是大家都听过的
举例KKBOX、Yahoo、趋势科技、IBM 这几间就我知道的薪资都是差不多水平 除了KKBOX其他都是号称外商、薪水却很本土化的公司 虽然这类公司薪水通常都称不上顶级,但在台湾也算是不错了
另外这类公司比较可能会看学经历和年资,因为HR核薪的规则通常比较死 但其中有个我觉得是算是知名大型软体公司的特例,就是群晖Synology 虽然本业称不上做软体,但是有收大量的软体工程师所以也常被放在SoftJob 以极硬的面试而出名,在PTT一直被视为大魔王,年薪至少百万、号称可达250万
而所谓还行的新创的话简单说就是比起上一类,薪水比较次一些的 比如大家熟知的Dcard,薪水落在80万~130万 另外像是Positive Grid、PicCollage,都是80万~130、140万左右 也有像财报狗、Branch8等开出100~150万区间的
这个区间的小型新创还满多的,这一大类就是个骑驴找马、赚经验升等的好地方 像KKBOX和趋势科技都被我们笑称是工程师工厂 因为到处都能遇到这两间出来的,很多人都只是进去练一练,洗个经历后找地方跳 顺带一提,KKBOX有高雄办公室,对不想来台北的高雄人不失为个好选择
4. 传统大公司
第四个传统大公司 这类其实我想到的都不是软体公司,很多是PTT口中的系统厂 比如说什麽华硕、中华电信、京元电子、仁宝电脑、广达、纬创等
原本我是把这类排在第五的,但因为这类公司通常有比较多的奖金、分红等 所以又临时上移一名。这类公司最重学经历和年资,毕竟都叫传统大公司了
在这种公司的好处可能就是过年时被长辈亲戚问到感觉很厉害 因为是老一辈的人都熟知的公司,但其实薪水通常都很鸟 新人可能只有三万多,硕士了不起四万多 靠着一年通常可以拿到16 17 18个月的薪水所以还过得去 (事实上40K*18个月才72万)
另外这类公司通常都会有校园徵才、实习 所以大概可以算最愿意收新人的,你再废可能都有公司收 但能否提升实力我不敢讲,因为就我知道的这些公司裡的人多数程度都不怎麽样 就算有人带你,带你的人本身水准不高的话我不觉得你可以提升多少
5. 做不太起来的新创、假新创、很小的新创
第五个做不太起来的新创、假新创、很小的新创 嗯…没什麽好讲的,就是自称新创,但是薪水又更低的 跟上面那类的总年薪可能差不多 这类公司也很多,通常大家都没听过,我也懒得找了
6. 其他小资型小公司
第六个其他小资型小公司 就是公司可能只有十个人之类的小公司 软体界最常见的就是接案公司 我个人是觉得接案很无聊所以完全不考虑 另外要小心接案公司面试的时候都会跟你说他们有要开发自己的产品 未来要做什麽要做什麽,多有趣多厉害,讲得天花乱坠,想骗你进来 但八成都是豪小的,通常就是每天继续无止尽地接案接案接案 这种就小本生意,薪水就是那样,你想讨薪水人家都还不一定付得起
结论
以上只是我的个人简单的分类 很多公司是很难说一定是在哪一类裡 其中还有一种特例,叫作Remote Job 就是没有办公室(或有办公室但不要求去) 如果是外商的Remote Job,你有机会拿国外水准的薪资住在台湾工作 这种可能是在台湾拿到最高薪的办法 当然我也知道有remote工作的外商核薪是依当地水准来核的
薪水等级比较
这裡我再按薪水粗略地来分个感觉级数
40万~59万
大概就是写code能力普普甚至偏低的学士新鲜人 会拿这薪水的通常就是大学在班上不会被认为是很会写code的那种
60万~79万
有天份、在班上会被公认很会写code的那种新鲜人 或写程式不算特别有天份,但已有一到三年经验的人
80万~99万
通常这裡开始比较难有新鲜人,但还是有 大概四大本科学霸型新鲜人就可以一毕业就落在这 学生时代就是写code魔人的也可能从这开始 或者那些比较有天份的人工作一到三年左右也大概会在这裡
100万~129万
恭喜成为百万聚乐部的一员,但这裡只是个开始 前面那些通通都是热身,工程师的路在年薪百万后才刚要启程 基本上除了外商,这裡开始的职称应该都已经是资深工程师 上面的本科学霸型和写code魔人有机会一两年内就到这裡 或者天份普通偏上的人工作个三到五年就很可能在这 又或者你是天选之人,一毕业就进顶级外商,那你就有可能直接从这甚至下一级开始 但就我所知那些外商比较少收新鲜人(倒是微软有实习机会)
130万~149万
初入百万世界的人跳槽一次两次后大约就会到这 或者有幸加入肯加薪的公司(新创很多很敢加) 从百万初开始加个几次薪就能到这个数字 通常要到这裡都有一点年资了,有些公司这裡的职称已经是Staff Engineer 大约这裡开始会有不少人转换成管理职 很多时候职称还是工程师,但其实已经要做一些管理职的工作 可能会先从当一个小Team Lead做起 此时很多职缺也会开始要求要有带Team的经验
150万~179万
这裡的公司已经不多,薪水不再像以前一样随便一跳都能涨 想要跳槽的话你会跳得更谨慎一点 要到这薪水除了实力也要有点运气 要刚好有适合的职缺、公司跟你的频率要对得上 因为此时公司对人会更加挑剔,不只实力,也会更看重你的个性等 作为软体工程师应该许多人会有已经到达天花板的感觉 甚至该说多数人永远都到不了这裡 跟上一层一样,应该都是很多人转换成管理职的分界点
180万~200万
几乎就是在台湾做为软体工程师的极限 能给这种薪水的公司其实就是那几间而已 同样除了实力之外你也需要更多的机运 想再突破的人都是以转管理职为主 除了管理职,可能还有各种五花八门的职称出现 比如工程师直接上去就是Principal Engineer(首席工程师) 或着Architect(架构师)等(当然也有很多挂这种职称薪水却很低的人 总之一个「Software Engineer」在这裡真的就很紧绷了
200万以上
同上,单纯写code的人很难突破过来,或着应该说 正常给你这个薪水肯定已经不是期待你只负责写写code,才没这麽好康的 能给超过这薪水的公司手指头都数得出来 如果你想冲薪水,那建议你还是转管理职最快 转成管理职之后,大概就是会有一种通关后解锁二周目挑战的感觉 已经压在你头上的天花板会被再次拉上天 许多公司是愿意砸大钱请一个厉害的Manager来的
结论
同样,这只是我个人的分类和感受 另外要注意的是,以上对薪水的形容是指你积极争取后的结果 软体界跳槽是家常便饭,而跳槽就是加薪最快的方式 CP值最低的就是毕业后在一间公司直接待个五年十年 那你很有可能待五年才7 80万,要是早点跳槽你可能早就破百了 此外其实很多公司是愿意加薪留人的,因为人很难找,到处都在缺人 特别是新创公司,如果你收到其他公司更高的offer后提离职 很有机会公司是愿意给你加薪加到该offer的条件的(甚至更高 至少我见过不少,出去拿个offer回来提离职,马上被HR找去谈加薪慰留 所以不要笨笨的一直在一间公司没有动作,公司最爱这种盘子 你的忠诚度不能当饭吃,也不要捨不得公司,这世界只有钱才是真的
确认自己薪资范围
顺便在这补充,上一篇文裡有人问到一个非常好的问题 「要怎麽确认自己的价码是多少?」 答案就是去面试 面试不一定是要找工作,你完全可以单纯为了确认自己实力去面试 而且有时候所谓运气、机会就是这样来的
面试要你开薪水的时候肯定是开一个比你现在还高的薪水 你甚至可以直接喊一个你无法拒绝的价码 比如你现在70万,你觉得自己或许值到100万,你面试可以直接喊120万 上了对你来说直接就是赚到,也证明了对公司来说你有这个价值 很多时候你敢开就是你的,只要不是太夸张,通常不用担心喊太高
通常公司如果很想要你但又觉得太高的话自然会跟你杀价 但如果都没上可能就要考虑目标降低一点,找比较二线的公司、喊比较二线的薪水 这样透过面试你完全就能抓到自己在市场上值多少钱 最要不得的就是一天到晚觉得「我应该不值这个价码吧」 明明其实100万大家会抢着要,结果你跟人家开个70 这不是盘子什麽才叫盘子??
职称
讲完薪水跟公司这裡再来补个职称表,但说真的职称不代表任何东西,钱才是真的 我以比较标准常见、制度完整的职称来举,当然不是每间都一样 比如上面说的小资型小公司可能什麽鬼职称都没有
除了职称以外,公司主要会用的是职级代号 首先通常会有两大类,IC Track及M Track IC指的是Individual Contributor,软体工程师就是属于IC M指的就是Manager,主管就是算在M Track
一个职称可能对应到两三个职级,例如可能IC 1、IC 2都叫Software Engineer 有的公司则是直接加数字,例如Software Engineer I、Software Engineer II
IC 职称表
IC粗略职称表通常如下:
- Software Engineer
- Sr. Software Engineer
- Staff Software Engineer
- Sr. Staff Software Engineer
- Principal Software Engineer
- Sr. Principal Software Engineer
外国有的公司还设有Distinguished Software Engineer 但这有点太魔幻了,台湾我没见过
M track 职称表
M track的话则是通常如下:
- Engineering Manager
- Sr. Engineering Manager
- Director
- Sr. Director
- VP (Vice President)
- Sr. VP
很多公司会把两个track摆在一起做对应 比如Staff Software Engineer大约 = Engineering Manager Sr. Staff Software Engineer = Sr. Engineering Manager 之类的,我是觉得没什麽意义啦,大概就是在你转换轨道时做为参考
结论
每间公司多少都有点不一样,有公司可能粗略到只分Software Engineer / Sr. Software Engineer两种,有的公司可能还多开了助理工程师(比SWE更低),或台湾一些公司很爱用的高级工程师之类的(SWE和Sr. SWE之间),也有的公司会有比较跳脱的存在,比如Architect、Developer Advocate等等
学生怎麽往软体工程师前进
讲完这些,因为场外应该很多在学学生,所以再继续讲学生的部分,首先最重要的就是把握大学四年,大学通常不如高中有那麽重的课业压力,你会有很多自由的时间,记得我提过的写code魔人吗?现在开始你完全来得及走上这条路,趁大学期间多写程式、多做不同的专案,尤其毕业专题非常重要,是你一展长才的好机会,如果你没有读硕士的打算,这些东西将直接、关键性地影响你的第一份工作,有好好把握大学四年的话,第一份工作你马上就能跟那些废四年的人拉开距离
除了基本可能会有的演算法测验之外(面试流程晚点再提),第一份工作面试时通常就是拿你大学做的东西出来展示,因为这也是你唯一可以拿出来说嘴的东西,你用了什麽技术、架构怎样、哪些东西是你负责实作的,通通都会是和面试官讨论的内容
基本上让你进到面试,公司就是有意收新鲜人,此时更会注重热忱、潜力等,学生期间如果有很多作品可以拿出来,就能够证明你对程式的热情,大学四年你可以做非常非常多的事情,对自己的未来有想法的请别浪费,练习演算法、写写觉得有趣的专案、提升英文能力、甚至接案等,每天抽一点时间出来、持续四年的话,简单想想就知道你可以提升多少实力
另外不要指望你在学校上课学的东西就够了,很多人很爱战科系,比如资工写程式一定最强、什麽系就是烂之类的,其实科系的影响没有你想像的那麽大,最重要的是在个人,因为大学教程式一定都是从头教起,教完一个再换个语言又开一堂新的课,只靠学校教的东西、这种步伐远远不够,而且一大堆教授都是早已跟业界脱节的老人,你指望他们教多厉害的东西给你?,所以请认清,不是进了资工系你就会变超强,你看到那些超强的人很多都是私下花自己时间一点一点累积出来的,很多人都是要毕业了才发觉怎麽明明同一班他这麽强我这麽废
如果你还在高中那更好,你可以更早做准备,但首先成绩要顾好,上个好大学对未来帮助绝对大,我指的不是学历而已,顶大生通常出路都比较好,毕业后很多人会进入不错的公司,这些都会是你的人脉,未来换工作大家都是可以互相内推、互相介绍的,如果你进个野鸡大学,你的同学直销的直销、卖保险的卖保险,你去哪找人推荐你进好公司?
至于要不要读硕士,这是永远争论不完的话题,每次PTT上也都是吵不完,我也没法给一个肯定的答案,每个人状况实在不同,要读的话请要先确定你念硕士的目的是什麽、期望得到什麽
只看「我纯个人的意见」的话,首先如果你的目标是特定领域,明显需要硕士的话当然就读,比如Machine Learning,没硕士以上要找ML工作应该是有点困难,第二就是我认为如果没台清交成政、顶多四中,都没有读的价值,除非你的目标是进比较传统的大公司,大学学历又太糟,除此之外我都是倾向不需要硕士的,算起来不划算
因为就如我所说,软体界就是实力为主,举一个例子就是之前Soft_Job的板主TonyQ,在业界算是个名人,学历是元智大学资管系肄业,很早就投入业界做得吓吓叫,但再次强调每个人状况不同,我的答案绝对不是肯定的,当然如果读了,论文就好好做,不要只是多浪费了两年时间
技术 Roadmap 选择
再来讲讲路线的选择,这裡我简单分成Frontend、Backend、Android、iOS、其他,选哪个最好?我会说随便、你爽就好,缺不缺人都是浮动的,只看现况不一定准,不管哪个年薪要破百保证都没问题,看你对哪个部分特别有兴趣就学吧,而且也不代表你只能学一个
你可以多摸多学,有的人天生就是跟某领域最合得来,但这裡我也必须说,一定境界之后backend比较吃香,不管你是写什麽的,等你提升到一定程度后多少都要懂backend的东西
例如只懂frontend的人基本不可能当上architect,更重要的是,有些知名外商没有在分种类的,以上一律叫Software Engineer,面试都是同一套标准,才不管你原本是做什麽,其中很大可能会有一项叫作System Design,所谓System Design就是在考架构设计,题目可以很广,比如说,要你设计出一个每秒可容下1000个requests电商交易平台系统,这些东西在正常分工下只有backend会接触到,只会frontend只会android只会iOS就等着死在这裡
除了System Design也有很多会直接问Database的,同样是只有backend比较常会接触到的东西,所以总之,起步没差,但一定程度后你早晚要补上一些backend的知识
程式语言 Roadmap 选择
再来讲讲程式语言的部分,这裡我很快的带过就好,因为程式语言的部分板上已经有人发过文了,基本上够参考,唯一需要特别讲的应该只有backend,因为backend可以使用的语言太多了,主流有PHP、Python、Ruby、Go、Node、Java、C#
我「个人」不推荐PHP、Ruby、C#,勉强不放进来的大概就Java,PHP职缺非常多,但低端烂职缺的比例也特高,这时代新公司新专案很少人会用PHP,八成都是要维护老旧专案、要不就是接案公司才会用
Ruby则是因为近期严重衰退,虽然曾经红极一时,但不少当年选用Ruby的新创早都已经倒了,新公司新专案我没见过有人还在用Ruby
C#就是上面讲过的,我不推微软套餐,Java的话新创应该没人在用,但不少知名大公司大量使用Java,如果你的梦想企业用Java的话就上吧,除此之外我就不特别推荐了,剩下的我觉得都是不错的选择,一样看你个人喜好吧
除了backend主流语言,当然也别忘了C/C++,出路当然也很广,例如台湾Google的缺几乎通通都是写C/C++的
面试流程
再简单讲一下常见面试流程
越初级的职缺当然通常越简陋,因为每间差异太大我就不讲了,一定程度的职缺会开始有比较标准的流程,在你投完履历后,第一个很常见的是有前测,可能是线上的演算法测验、可能是专案型作业,因为应徵者很多,公司不可能一个一个花时间面试,所以这是用来最大量刷人的一关,基本上阿猫阿狗全都会在这就出局
最常见的就是线上测验,例如Codility这种平台,就是给你一小时或两小时之类的时间,几道题目要你解出来,准备方法就是刷LeetCode,解题很多都是类似的套路,事前多练习绝对有帮助,测验时更重要的是细心,题目不会给你完整测资,正不正确你要自己测,先以解出来为第一步,接着再分析複杂度,想想能不能优化
还有测验前准备好纸笔,找个不会被打扰的空间、稳定的网路等等细节不要漏,专案型的作业压力就没那麽大,例如应徵iOS,题目就会是给你规格直接叫你做个App出来,这种的就是看重程式码品质、架构等,不要功能做完就交差了事
如果你过了前测,面试通常可以分成几种,Technical Interview、Behavior Interview & Culture Fit,可能一天内完成也可能分成多次,第一个Technical Interview就是测你的技术能力
前测只是最低门槛,这关才是要了解你的实力到什麽程度,这部分通常是由工程师负责面试,面试内容可能是白板题、live coding、纸笔测验、或纯问答,可能只有一关也可能多达三四关,这关通常最好也要准备演算法练习,白板最好也要练习,网路上有非常多解白板题的教学,有兴趣再自己看,虽然很多人反对考白板,但我是觉得白板是有其意义所在的,就是在最极限的情况下你能发挥多少、你的思考流程是怎麽样的
过了之后通常还有Behavior Interview & Culture Fit Interview,通常是由Engineering Manager负责,不大的公司甚至直接由CEO来面,主要是看你的个人特质、个性、同时常常也会掺杂技术问题进来,这部分可以说是最简单、最轻松、但也可以说是最难的,因为几乎无从准备起,面起来就像纯聊天,但你可能聊完就被刷掉了,你也不知道为什麽
举例常见的问题:
- 为什麽想换工作?
- 为什麽要选我们公司?
- 你在你前公司裡扮演什麽样的角色?
- 你的职涯规划?
- 你最近有学习什麽东西吗?
- 你觉得自己有什麽优缺点?
- 你遇过最困难的问题是什麽?怎麽解决?
虽然难以准备,但也不是完全没办法准备,就是常见问题都先想好回答,有时候不要太诚实,但也不要说谎,更不要表现的就像个王八蛋,你要站在公司的角度想,公司想要什麽样特质的人?这个问题的背后是想问出什麽?
另外很多大公司会有所谓的信条、文化、企业精神,通常都会写在官网的职涯页上,虽然大部分都是屁话,但记得面试前去看看,像Google甚至有个词就叫Googleyness,就是所谓的Google精神
以上是个比较标准的流程,一样每间公司都不同,甚至同一间公司每个部门都会不同,更甚同个部门不同人负责面都会不同,有些可以一天面完全部,有些可以拖一两个月,像我都是比较仁慈,只重视实作,电脑跟题目给你,写不出来就滚写出来就ok
总结
差不多写完了,最后补一些不知道放哪的
英文能力
首先再讲一次英文很重要,做软体工程师英文读是100%肯定要,听、说、写也强烈建议要尽可能提升,软体工程师最强、最大的好处是无国界,你做行销、做公关,每个国家风气、文化不同,换了国家几乎就是从0开始,但程式语言全世界都一样,经验完全可以跨国累积,我认识很多想出国就出国、想换国家就换国家、以工作的名义一边环游世界的人
而且台湾人的能力其实很强,远比什麽印度人日本人韩国人强多了,硅谷一堆印度阿三,不是他们比较强,他们只是脸皮够厚,敢试敢冲敢讲英文,韩国人日本人则是打骨子裡害怕英文,而且又有口音问题,台湾人实力强,又因语言关係,完全没有口音问题,天生就有很大的优势,但很可惜的是很多人都被语言能力给限制住了,英文不行就像不会卍解一样,掌握英文才能解放软体工程师的所有力量
再来常见的问题是要不要出国工作,如果你的目标是存钱,那麽不一定,尤其如果你是台北人,台湾的物价极低(房价除外),税率也不算特别高,以工程师的薪水在台湾存钱可以非常快,很多欧洲国家其实薪水没高台湾多少,但物价吓死人,邻近国家日本新加坡其实也都差不多状况,美国如果你有机会的话倒是可以去闯闯看
大公司还是小公司好?
另一个常见的问题是,常常有人问的大公司还是小公司好?
一样只能说各有优缺特色,大公司步调慢,可以学制度、流程、有人带等,但可能比较官寮、制度死、薪水死、气氛沉闷
小公司不好说,我改讲新创比较合适,新创公司通常比较操比较精实,步调快、东西学得快、使用最新技术,但是可以说倒就倒,例如不久前的Honestbee不知有没有人还记得,欠店家几百万都付不出来,从此销声匿迹,即使曾经是顶级新创之一,薪水可给到200万左右,依然说收就收,这种情况在新创圈并不少见。
不过同时也看看另一个Mozilla,就算是世界顶级的一流外商(其实不是公司),台湾办公室也是说解散就解散,软体界大家就是这麽来来去去、这麽潇洒,这也是个迷人的地方,有机会的话你可以大小公司都待待看,反正工程师做一两年就跳槽很常见,如上所说过,一直蹲在一间公司才是最亏的,没事就出去多看看吧
未来一定要转管理职吗?
还有一个是,到后来一定要转管理职吗?
一样看个人,我也认识工程师做到很老的,我个人其实也不喜欢转管理,做工程师就是逍遥自在,写写code就好,当manager就是要背负责任,我曾亲眼见证过一个每天容光焕发的工程师,接下manager职位之后,不出半年面容憔悴、印堂发黑、双眼焕散,宛如行尸走肉的
但不得不说,如果你想往上冲这是最快的路,而且更多时候你想转都不见得有机会,这裡大家就自己脑补那张摔角手吵架的图,我要应徵管理职 你要先有管理的经验,我需要做管理职来获得管理的经验 那就去做管理职阿,所以我才来应徵管理职阿 那你要先有经验阿,我他妈的要怎麽在没有做管理职的情况下获得管理经验 去做管理职阿,所以有遇到的话,可以试着把握住机会
薪水
最后也提醒大家,不要自贬身价,市场的价格是由供需决定的,大家薪水都开低的话,市场平均的薪资也会跟着拉低,提升自己能力的同时也要不断检视自己薪水相不相称,公司不加薪该跳槽就跳槽,不要轻易被摸头妥协,这部分是劳方要团结的部分
补充①
补一个重要的,上面其实隐约提过但讲不够清楚,就是自学能力很重要,不要整天想要依赖着有人来带、想要去这裡上课那裡上课,当然不是不行,有人带确实可以少走冤枉路,但前提是带你的人真的有足够水准,如果你能遇到良师,那真的恭喜你
除此之外,要做软体工程师务必要有大部分东西只能靠自己学的绝悟,在behavior interview中会有很大一部分就是要问出你的自学能力
相关的问题如:
- 你最近学了什麽?为什麽学这个?
- 你都是从什麽管道接收新资讯的?
- 你都是怎麽学习新技术的?
- 你研究过xxx怎麽运作的吗?
甚至到一定水准比如面年薪百万的职缺,你要是说你最近去上资策会的课来学习那面试可能差不多可以收尾了,上课可以,但是基本上外面的课程通通都是入门程度,在一个这麽需要主动自学的领域你要是只会被动的等别人来教,那你八成也走不远
另一个是很多人问的,已经回答过但整理上来,就是关于学生时期怎麽多做专案,基本上就是你想到什麽就做什麽,脑中出现什麽界想天开的点子就动手写
手机裡哪个app你觉得难用、哪个网站你觉得烂,那你就写一个,通常你写出来的东西只会更烂,但是没差,你就写就对了,不断从生活中找可以写成程式的东西,又例如你宿舍可能网路有限制流量,那你就写一个流量监控器出来,流量快超标就跳警告,诸如此类,想到就动手,有时一写才发现比想像中困难许多也没关係,这些时间永远都不是白白浪费掉的,在这过程你觉得缺什麽技术就买书学或上网查
讲到买书又是一个主题,到底该如何自学好?
没有一定答案,如果是非常入门,那我会推荐买书,书都是循序渐近、有系统有步调的教,会比你在那到处胡乱找来得快,完成一整个入门书的程度后就可以把重心转移成从网路学
这时英文能力的重要性又会开始出来,初期可能不明显,因为越简单的东西越多人会抢着写教学,一开始中文资源可能不少,到后面基本都是查英文为主,甚至查不到你就必须自己用英文发问,但不得不说,对岸的文章跟教学也不少,常常还是可以翻到中文的解答就是了