查看原文
其他

不看这篇,你敢说自己懂CS专业?|微信群讲座经典实录

2016-07-04 棕榈大道本科申请


大家好我是Albert Zheng,毕业于加州大学伯克利的CS专业,现在在谷歌广告组工作。很高兴来到棕榈大道跟大家分享我对CS这个专业的看法、经验以及给大家本科期间学习的建议。


1. CS专业的优势


第一点就是就业前景好,这个无论在中国还是美国现在的状况都是这样。而且据我观察并没有衰退或者扭转的趋势,各个公司在招人方面的力度都是很大的,而且对优秀的人才也是求贤若渴。在美国工作并不算非常辛苦,时间和工作强度的弹性很高,工作时间很自由。在大多数公司,每个工程师可以自行选择工作开始和工作结束的时间,每天大约工作到八小时就可以了。比方说有的人早上想睡懒觉可以十一点多到公司,晚上晚点下班就可以了。再或者说,谷歌公司离勇士队主场比较近,有些人比较喜欢看篮球可以在晚上提前下班然后三四点就开车去球场准备看球。公司在这方面是没有任何限制的。


找工作的情况不能说是百分百可以找到,但是我的同学周围所有学这个专业的全部都找到了工作。我觉得这个专业找工作的难度比其他专业要小很多。现在整个社会大环境就是实体经济相对比较萎缩,互联网以及这方面的虚拟经济正在成为很强的上升趋势。所以在这个行业上对我们软件工程师需求只会越来越大的。如果是想创业的同学,现在互联网行业还有很多未被完全开发的领域。投资人对互联网还是有非常强烈的投资意愿的,所以创业机会是很多的。


2.CS专业劣势


对于CS专业的一些缺点也非常明显。首先是课程难度相对其他专业来讲比较大,不敢说是最难,但是每一个课程都非常的难,需要大家非常努力的上课。平均成绩也不会太高,因为周围都会是一些跟你一样努力对CS有非常执着追求的人。我们学校的CS专业平均分在2.7, 2.8左右,相比其他专业来讲要明显低0.2到0.3个百分点。


第二个劣势是交际圈子。就我观察大多数软件工程师的朋友都是同行,尤其是在学校里面各位交的朋友很多都是自己本专业的,所以想要接触一些其他专业的同学的机会相对比较少。不过这个更看重个人选择,没有人会说不愿意跟软件工程师交朋友。只要大家努力拓展圈子这都不是问题。


最后一点是工作性质。毕竟我们大多数时间是坐在电脑前跟机器交流,跟人交流的时间相对其他一些,比如consulting,这种专业会相对比较少。而且出差、旅游的机会也几乎没有,所以如果对这方面比较看重的同学可能就不是一个非常好的选择。


3. CS不同方向以及学校选择


众所周知CS有很多方向,个人认为对于本科生来说你们不需要特别看中某一个方向。大多数时候,前两年都是基础课,然后再根据自己的兴趣会选择一些课,仅仅是一点点在某个方向非常基础的,涉猎一些浅显的。如果你对某个方向很感兴趣的,基本上要读到博士才可以去专攻,深入研究其中一个方向。


美国好的学校大多数集中在东西海岸,我根据这两个区域为例子来讲一下每个区域的特点。西海岸就代表性的学校就是加州系统的各个学校,包括我的母校UCB,以及斯坦福,西雅图的华大,LA的加州理工等等,这些都是非常好的计算机学校。这些学校的优势在于离湾区计算机行业的中心很近,很多公司有很多的招聘活动,info session,我们有很多机会接触他们公司的人。附近互联网的氛围也很浓,大家讨论的问题,做的项目也和这方面相关,耳濡目染的就会在这方面有所提高。东部名校相对更多一些,常青藤盟校和纽约大学等等,也是非常优秀的选择。东部的学校我的印象是会有更多的机会参与到非互联网行业,或者以互联网为辅助的行业,比如金融,投行等等。这些行业对软件有非常强的需求,软件工程师也会招很多很多人。而且据我所知,一些投行,对冲基金会给CS的人更高的工资,当然进的难度也很大。不过大家不要觉得去了东部的学校就对湾区完全say goodbye了,我有很多同事也是从东部过来的。所以这个没有任何的局限。对于公司招聘来讲,他们对好学校有一点preference,不过这不是主要的考虑因素,而且这仅仅在简历筛选过程。公司更看重个人能力,等你拿到了面试之后,全都看你自己的水平以及面试时候的表现了。


4. AI/ML


在CS的各个方向里面,我听大家对AI和机械学习,machine learning最感兴趣,而且这个行业现在非常火,所以我给大家简单介绍一些。这个行业和传统的CS方向有一点点不同就是他用到大量的数学和统计的知识,对编程的能力相对要求较少一些。对于普通的软件工程师在公司工作的时候,很多时候使用现有的已经开发完成的工具来使用的。对于我们来讲并不完全需要知道这个工具是怎么做到的,我们只需要知道怎么用就好。就相当于做一个其他的工作完全一样,和AI以及machine learning没有任何特殊的地方。但是会有少部分的人,大多是博士,他们会需要用他们数学和统计的知识来设计运算公式等等,他们来提高算法的效率。这才是真正的我们常说的AI里面的一些尖端的技术的来源。如果对这个感兴趣,同时数学统计很好,你们可以考虑一下这个track。


前面有同学问到说低GPA对就业影响大不大?我个人认为还是有一点大的。如果你是三和四之间的差别这个,其实是很明显的,公司在考虑选人时会明显的倾向于那个绩点高的同学,但是如果仅仅是差0.1这个百分点的话,这个是没有什么区别的。而且这个区别仅仅体现在简历筛选,拿到面试后没有任何影响。我给大家的建议是,课一定要好好上,尽量拿到高的GPA,但不要过分看重GPA而耽误实习或者networking,我认为他们是比一个仅仅高的GPA还要重要的方面。


5. 本科期间学习重点


除了上课的同时,第一个就是networking。一定要尽可能和自己同学校或者比自己大两到三届的人交流,搞好关系,问他们一些问题。有一个非常重要的原因是,很多公司员工可以内推。就是等你找工作的时候他们正好在某公司工作,可以把你内推进来,这个对申请的难度会大大降低。我给大家举个例子,谷歌一年收到的申请在两百万份以上,筛选到你很难,就像大海捞针,但是像谷歌或者其他大公司的话,内部员工推荐你的话,你被拿到面试的机会就会大很多。


本科期间还有一个重要的就是实习。实习不光是假期的时候,其实在学期中如果有好的机会,在不耽误上课的基础上也可以做一下兼职。第一份实习相对都比较难找,因为这时候你没有任何的实习经验,所以可能需要多花点时间去投更多的公司,了解一些除了大公司外有没有一些创业的小团队,或者是学校内部有没有一些学生团体正在做一些什么CS有关的课题。第一份工作都是没有工资的,不过没有关系,我们主要是积累一些经历,之后对写在resume上也有帮助。另外呢就是比如说像微软,谷歌,facebook好像这些公司都有一种特殊的项目,他们会从大一或者大二的学生当中筛选一些人去公司实习。他们不对这些学生有特别强的工作经历的要求,甚至没有任何工作经历都是可以的,但是他们可能需要你有很强的学术能力,之前有过奥赛或将经验,大一大二基础课上的很好等等。名额也是有限的,但是可以尝试一下,有了这种实习经历之后,再申请公司的实习就会难度大大降低。


对于想读博士的同学,实习的重要性会稍微降低一点。你更多的是需要跟教授做一些research,因为大家都知道申博士需要教授的推荐信,和教授搞好关系做些research,如果有可能的话发一些paper,对申请博士、硕士有一定的帮助。我并不是走这个track,不太能给你们很多建议,但是我知道这个比较枯燥,不过有的人如果很感兴趣的话也是可以尝试一下。


还有就是多交朋友在大一大二期间,不要光光是和自己的专业的朋友打交道。大一大二的基础课很多是跟其他专业的人上课的,或者是参加一些活动,这个时候就可以结交更多的朋友。不然的话等到你到了大三大四之后你会发现你的朋友几乎全部都是同专业的,这个是我前面说的弊端,不能把自己的交际圈子变得太局限狭窄。


对于毕业之后的选择可以进入一些比较知名的科技公司工作,进入这些公司的好处就是福利比较好,待遇相对比较高,工作呢,很多时候也比较稳定,不太又担心什么公司会倒闭的风险,而且基本这些公司都不太愿意赶你走除非很差。公司的福利我觉得可能大家在网上都看过,首先就谷歌给大家一个简单的介绍吧。一日三餐我们都不需要再担心了,都是免费的,平时也有一些水果零食,牛奶饮料等等。甚至可以毫不夸张的说基本上周一到周五,除了睡觉以外都可以留在公司,解决任何问题,比如健身,洗衣服等等。还有一些娱乐设施也可以供大家选择,比如我们新公司有保龄球馆。然后每个楼层或者每一栋楼都会有一个地方有一个游戏机室给大家有XBOX, PSP让大家玩。比如周四那天是葡萄牙队波兰的欧洲杯,我是一个葡萄牙球迷,然后那是美国时间白天比赛,虽然是上班时间我们也可以去看球,然后我就坐在那里看了整场比赛。


第二个选择就是近一些小一点的公司,或者创业型公司,正在上升期间的。这些公司的好处是,你会觉得自己做的事情更有影响,因为这个时候你们公司做的事情还不是很成型,你做的事情的价值就会有很好的体现。


毕业之后还有一个选择是读硕士或者博士。我认为读硕士基本上跟读本科没有什么特别大的区别,仅仅是相当于多上了技能课,学位高了一点。公司在招人方面会有一点考虑但是影响不是很大,但是读博士就是一个质的改变了。读博士的话你的工作就不太完全是一个软件工程师,你会有更多的选择,比如说你可以去做一些很深的研究啊,这些都是博士学位的人做的事。


最后一点就是自己创业,本科毕业之后直接开始创业的同学比较少。但是有些创业的同学在本科期间就已经开始做一些自己的项目。在这边有很多这种机会,学校也会提供你一些帮助比如说会提供场所等等。你周围会认识同行业的一些优秀的人才可以和他们一起合作,这些都是有很多很好的机会的。


6. 工作所需技能


工作之后其实除了编程能力以外一些soft skill重要性也很大。比如说你一定要搞懂这个任务的具体要求是什么,跟组员一起要有很多交流啊,问他们一些任务上的一些细节。因为无论怎么样,一个人在布置任务的时候一定不可能面面俱到的,这个时候你需要在开始工作之前发现任务中有什么不懂的地方,有什么你感觉可能做不到的地方,这都是需要时间培养的,而不仅仅是课上上课所能交给你的。


而且在公司写代码,因为你的代码可能会被很多很多人读,可能会在那里呆很久,可能在你离开公司之后还需要用到。大家在读书的时候可能还没有很强的体会,因为都是自己写代码自己看,但是工作之后会有很强的这方面的要求。你做的任何代码都需要有别人来审核,必须要达到一定的标准才可以上交。所以我建议大家在可以做project的时候,尽可能的把代码写得简单易懂,这对你以后的工作也会有帮助。然后随着你的级别的提高,你所需要的写代码的时间会越来越少,一些做设计就是整个程序架构方面的设计,以及任务的细化分配方面的时间也会越来越多,所以有的同学可能想说我不想做一辈子的程序员我应该怎么做。


其实在工作了一段时间之后,你可能自然而然的发现,我怎么现在写代码的时间越来越少?我需要开很多的会,我需要去做很多的设计,虽然他们也是跟tech,跟这个互联网,跟码农相关,但是不是真正坐在电脑前去敲代码。或者可以做一些技术组长或者程序架构师等,这个就跟软件工程师的工作略有不同但是比较像,也需要花大段时间坐在电脑前敲代码。这两个track没有优劣之分,都可以上升到很高的级别,还是看个人兴趣和工作的机会。


7. 你适合学CS吗?


我认为没有人不适合,只要你感兴趣你一定可以做的好。想要学CS学得好,有几个重要的能力。第一个是学习能力要强。这个行业的技术更新很快,你需要不停学习新的东西。比如我们组现在用的技术是两年前刚出来的,即使是比较年长的工程师也是不知道这个东西,他们也是和我们一起学习,一起研究这个技术。这也是为什么大家经常说程序员是一个吃青春饭的工作,因为你不可能说因为之前的经验,所以到了四五十岁的时候可以坐吃老本什么都不学了,只要你工作,你就需要不停的学习。但我觉得这是一个非常好的点,可以让我们不停的学习新的技术,是一个非常有意思的事情。


理科好的同学对学计算机学习有一定的帮助,因为毕竟是有逻辑上的东西,一些思维的能力等等。


女生学CS没有任何劣势,虽然女程序员比较少,但我并不认为女生在学的方面有天生的劣势。甚至我认为还有一定的优势,因为大公司很注重公司内部的男女比例,如果面试人各种水平差不多,公司会倾向于女性的,甚至即使是女生能力差一点,也会倾向于女性的。而且据我观察,现在学CS的女生以及新来的软件工程师女生的比例实在逐年上升的,而且他们做得很好,没有任何问题不会比男生差。


对于高中经历,有突出的固然好。尤其是一些同学已经提前有过奥赛的训练,那么就非常有帮助。但是没有高中经验这个也是没有任何问题,如果你是刚刚开始学CS,都是没有问题,都是可以现在学到的。


有从不同专业比如化学工程,或者是数学,或者是文科课比如文学,历史等等转到CS的人大有人在,什么时候转的都有,甚至本科毕业之后重新申请也有。


公司在招人的时候对你的专业其实并不是很看重。我有一个朋友和我一起去了谷歌,他是化学工程专业,但是他上了很多CS的课,他的CS水平和面试表现都很好,所以重要的还是你自己本身的水平而不仅仅是你的专业知识一些其他的背景。


8. 问答环节


问:CS和CE的区别以及和EECS的区别?

答:其实我认为更多就是学校开设的不同系列项目的名字,真正看中的还是你具体上了那些课,公司也不会在意这些名字,关键是你上了什么课。相对来讲CS是纯软件,CE多了硬件的东西,EECS硬件的东西更多。


问:读CS和cognitive science双专业,在课程安排上有什么建议吗?

答:CS和Cog Sci双专业我知道有人上,这两个专业也有重合。对于选课建议,反正大意就是选基础课,这两个基础可几乎是一样的。然后再学一些两个专业的入门课程。但是不用担心,会有很多时间去让你了解自己想上什么课。


问:想搞AI的话是否建议在大学选点cognitive science/ psychology?

答:搞AI不需要选心理,还是选一些数学和统计的课比较好。可能大家对AI有误区,其实AI和游戏里面的AI关系不大。现在说的AI是通过数学的运算来做一些machine learning,图片处理等等工作。


问:我马上上高中,在初中有参加编程培训,主要是C++,高中应该怎么准备。

答:高中准备还是跟着老师做一些奥赛的训练,一些算法的训练。这些尤其是对日后的面试有帮助,面试基本是算法题。


问:寻找实习工作机会的全过程是什么?

答:第一轮递简历或者找人内推,内推的成功率大很多。之后就会联系你面试,面试一定要多刷题做好准备工作,你基本会把自己前两三个面试搞砸,没关系,每个人都会的,所以不要先面自己最喜欢的公司。然后练完几手之后就会觉得哇自己对面试有更深的了解,也不那么紧张了,可以发挥的更好的。然后面试过后一般会有两轮实习,可能最多两轮,面试之后就是offer。


-The End-


|微信群讲座实录推荐|

(点击图片进入)




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存