承接上文的主题。
在大公司工作的感觉是怎样的?(知乎有类似问题、答案,不展开了)
年轻人可能想象的是:西装革履、窗明几净、俊男美女、精神抖擞,每一个project都影响千万人级别的用户……
实际上未必不是,但至少我看到的是:穿着普通的码工,皱巴巴的衣服,还有不少印度风格的拖鞋,好多人打着哈欠双眼无神;工作环境类似网吧,吵吵嚷嚷人声鼎沸,还有不少中国人直接用中文叫喊。以前在某公司,独立办公室,还有人写程序到一半,忽然一看表,毯子一铺,跪在地下冲着某方向就开始磕头,路过的人吓个半死。
某国是个多民族、多人种国家。公司只看能力和产出,不太在意这些不相干的。评价一个员工,也只看是否功力深厚、贡献杰出,不看背景和表面、改行与否、出身如何。这也是某国最有魅力的一点,乱糟糟中自有一种天然的秩序。
在大公司工作的实际内容是怎样的?
这里有一个误解:并不是公司越大越著名,工作难度越高。IT不是Rocket Science(其实Rocket Science的工程师赚得也不多,据说SpaceX很多人不过9万年薪),更多的是每个人只负责很小的一块——所以整体的结构是极其复杂的,但是到每个人头上并不如何困难。原理上文讲过了:封装。大公司的绝大多数产品和架构已经相当成熟,有很多工具(Tools)和文档可供使用和参考。
有人时常说从头做一个东西多么多么困难。这话对,也不对。对在于,从头设计一个产品,相当于创业,的确非常非常困难而且涉及到很多技术细节,更别提一款盈利的成功产品需要程序之外的很多东西——市场、设计、沟通、运营;不对在于,如果只是在大公司工作,是不需要那么多的“从头做起”、“理解全部东西”的,更多地只是对当前系统修修改改然后进化。后工业时代,绝大多数人都是超级流水线上的螺丝钉。
尤其是新人进了公司,大部分从修bug、较为简单的活开始做起,逐步了解一个组的产品。类似之前比喻,假设这个组是做手电筒的,一个人刚进去可能只是给手电筒的按钮涂个别的颜色,慢慢地学会了换电池、拆手电筒、换灯泡。
但这不代表IT是个简单的工作。越是对技术不太懂的,越不尊重IT技术人员,以为谁来做都一样。要知道,我讲的这些只是初级、中级程序员的工作,高级以及架构以及产品等部分,是相当复杂的,人可以说是决定性因素。并且,哪怕初级的程序员,做事效率差上几倍也毫不稀奇。
那么大公司看重的是什么样的人呢?
(1)能写程序的人。这是废话,但是其实这条很关键必须说,是刷题的理论基础。刷题后面会讲,是找工作最重要的一部分。基础再好,人再好,说一千道一万,不会写程序,也就告别了程序员;要知道,IT企业最核心的生产力,就是那些boring的一行行的code,或许还有data,可是data终究来源于code。
(2)聪明的人、善于学习的人。有基础、能写程序,但是还要熟悉产品熟悉业务熟悉code base,所以学习能力很重要,聪明的人更是容易抓住重点。这里要强调,“聪明”不是IQ高,而是“对方认为你聪明”。努力是给聪明加分的,所以智商一般的人能不能当个好码工?我认为也是可以的,用其他技能和时间、方法弥补。
(3)好相处的人、积极的人。大公司做人,小公司做事,这句名言其实在美国也是对的。当然美国人用一些词汇什么Leadership之类的来掩饰。好多年轻人问:为什么我题都做出来了,没拿到offer,这方面没有做好有可能是一个原因。我们中国人在这方面相对弱。
大公司是如何招人的呢?
要知道,大公司面试很像高考之类的标准化考试,但是目的不同:标准化考试的目的是客观,尽可能地在最大范围内达到客观、公平,给出可比较的分数;大公司面试只有一个目的:用最小的代价,挑选他们最想要的人。
因此,不要用“公平”或是“合理”来评价面试内容和方式,那是高考遗毒。面试结果只有True和False两个值,至少新人没找到工作前,可以这么认为。
我个人也曾很抗拒这种面试方式,但是工作几年后,我发现,的确没有更好的办法。不要低估资本家和市场的智商,如果你认为他们傻,很可能是社会经验不足,或是没有统计概念。
具体步骤也简单,无非两步:(1)简历; (2)电话面试+onsite;都过了就offer了。
但却需要人数年的努力。所谓台上3分钟,台下10年功。
第一关:简历。要知道,公司的人是很忙的,简历由HR先审核。很多国内的小朋友不知道,HR在美国只是个中转作用,权力不大,工资不高,人也不懂技术。那么她们一般怎么筛选呢?
(1) 最关键的,看背景。比如这人简历有大公司工作经历,那么面试其他公司就很容易拿到了;没有工作经验的人,则看是否有学历,以及学校牌子如何;
(2)看project和过去的经验;
(3)看关键字,比如Java、C++、Hive这些技术名词,其实她们也未必了解多少;
其实这个过程很随机:想想可以理解,看一份简历感觉挺有趣,看100份就想呕吐,天天看则完全麻木。要从HR的角度去想求职的过程,很多问题不要总想:“这样对我不公平啊”之类的。说不定HR今天感冒了,拿过你的简历就擦了鼻涕,或者说心情不好,今天看到的全拒了。
好在,公司很多,一流大公司就有5-10家,不用说二流、三流甚至不入流了的。
第二关,面试。
面试是最重要的一部分。有人把CS找工作概括为刷题,不见得完全对,但算是颇为有概括性了。面试的种类繁多,难以一言概括,但是无非是要求:
(1)这人的简历是真实的,不是瞎吹牛;
(2)这人有能力、有技能、进来后能干活;
(3)这人的情商和合作能力不太差,进入公司后可以合作;
(4)这人的技术和能力的深度与广度;
这里面大小公司是不太一样的:大公司不在乎面试人的具体技术和技能,因为进去后可以培训或是自己学,所以更在乎面试者的个人素质和基础;小公司则相对更重视技术和技能对口,因为小公司生存是第一位的,没时间培训、最好来了就开始产出。
当然,求职是双向选择,公司也会根据自身的水平和薪资去调整要求。要知道这是个充分竞争的行业,所以公司招到满意的人不难,但是人来不来、来了能待多久,可就是另一个问题了。
为什么我先讲这些?
这些都是老生常谈。随便搜一个帖子或是资料,大概都有以上信息,我为什么要重复一遍?
是因为我想拿这些作为例子,来教改行者如何判断——重要的不是这些信息,而是你判断问题的思路。
比如好多人问,要不要读个master,还是直接刷题?其实这就是简历关的问题:有个CS Master会大大提高简历被选中的概率。但有的人可能有PhD学位,所以Google等大公司也会给面试机会,那么CS Master似乎又不是非常必要的了;比如最近ICC“被迫”招大量绿卡和公民,那么假设有身份先进ICC,以此为跳板再跳,也是一条路。
所以我觉得,分析问题时当牢记简历、面试这两关,很多问题就迎刃而解、无师自通了。
比如有人又问,要不要做些side projects(课后、非正式、自学性质的project)?对于改行者来说,如果有机会,要,因为这为简历增色不少。改行者简历关是很挑战的。
再问:要不要学ML、DL这些,我的想法是不要,难以深入,而且面试时不会考到太多。
再问:要不要毕业后搬到湾区?我的想法是要,因为公司都倾向于面试本地candidate。
所以,我之所以写这些拾人牙慧的东西,是为了说明:一切以简历、面试为纲。
这么做会不会太功利了?我知道肯定有少年这么问我。
没办法,不这样,没法集中起所有的资源。改行者的初始情况就很糟糕,必须弯道超车,这也是我在前几篇文章中一直强调的。
所以,先说说我自己认为的要点:
(1)大多数年轻的改行者,还是需要一个CS Master作为敲门砖和过渡;
(2)自学、选课、projects、tech stack、语言……一切细节都以简历和面试为纲为目标为轴心;
(3)改行者需要抬头看路,规划好,不断根据目标和现状调整自身状态和方法,需要较高的主动性;
(4)除了具体知识,改行者需要把简历、面试当做一门学问来研究,长期关注;
我知道很累,很烦,很无聊。可是,别无选择。