美国大学的计算机专业(Computer Science,下文简称CS)在近几年中已经成为了在中国留学生中最热门的专业之一。

为了帮助大家深度了解计算机专业的求学、实习和就业的种种细节,TD特地邀请到了本科毕业于加州大学伯克利分校CS专业的一名湾区“程序员”,来为同学们详细解读高中申请CS时该如何准备、大学期间应该如何学习以及毕业后怎样才能拿到大厂/理想的offer?希望可以为喜欢CS专业的你带来价值!

大学之前的我对于CS零基础、零经验,在整个学习CS的过程当中,虽然也有歪打正着的时候,但多多少少自然是走了一些弯路的。好在最后还是比较顺利的把这块硬骨头给啃了下来。所以这篇文章主要希望能给像我一样高中CS功底不强却对它抱有好奇心,或者以后想要投入industry找工作的同学们一点启发和帮助。

如果你本来就对CS充满热爱,对自己的coding能力怀抱自信,甚至以后想要走CS相关research这条路,那么请把此文当作一个单纯的reference,然后Keep Calm and Study CS就好啦~

高中期间的准备与学习

关键词:数学/逻辑 > coding

在我CS学习诸多坎坷和弯路当中,最歪打正着的点,就是高中时期的我热爱数学,却从来没有学过任何的coding。因为高中时期的我一直希望在本科期间学习物理专业,从未想过我会踏进CS的大门。

首先,从功利角度来说,侧重数学而非coding是不会太多影响申请结果的。CS这个专业,只有少部分的大学,如Carnegie Mellon,会设立专门的CS college,并要求申请生直接apply相关学院。在大部分的学校中,包括诸多如UC Berkeley这种CS很强的大学,都是以undecided/undeclared方式进入学院,并且在修完了所有的pre-requisite课程之后进行declare的。所以在申请的时候,不向大学展示高中时期的CS相关经历,大部分情况是不会影响到申请结果的。


其次,从真正的学习角度上来说,大学的coding ability一般都只会占到所有CS学习的30%甚至更少。剩下的,全都是数学、逻辑、实践以及team work的能力。并不是说coding ability不重要,相反,coding ability很重要,只是不论你基础如何,在大学的学习生活当中,你会被所有的assignment和projects自然而然的培养成一个coding master。哪怕你在高中期间连一行python代码都没看过(比如我),大学上的第一个CS课的第一个月,就会让你的python用的信手拈来。

第一节课的一整个学期过去,你就会变成一个python master。而这个master的level,是你在高中时期,不论上再多课外补习班,看再多B站教程,都难以企及的。相反,如果在高中时期没有培养好扎实的数学和逻辑功底,大学后期的CS理论课才会很容易让人感到吃力。所以建议高中的时候侧重培养数学逻辑相关的基本功。


编程和编程语言,after all,只不过是一个工具。从没见过电钻的人,在宜家工作一阵子,自然电钻和螺丝用的也就比谁都顺溜了。

大学学习体验

关键词:向人学习 > 向课程学习

和第一点一样,并不是说课程的学习不重要。课程的学习是基本功,但也只能用作基本功。

很多人刚刚进入大学学习CS的时候可能会和我一样,觉得课程的难度突然骤增,和高中完全不一样,加上身边无数学习能力极强的GPA 4.0大神,这样多重的压力让你觉得一定要放空一切,认真学习,先把成绩搞上去再说。

的确,成绩搞上去确实重要,但是在搞好成绩的过程当中,千万不要逐渐忘记了去多做一些side project和其他校外的活动,比如volunteer(CS相关的)、research 或者实习。在这个过程当中,你会和许多非常优秀的人一起工作、一起学习。和他们在一起,你会自然而然的获得更多的知识,但是更重要的,是你会获得更上一层楼的学习和工作能力,以及无限的inspiration。这些额外的知识和能力,回过头来,自然而然会把你课内的成绩搞上去。

所以课内知识,不在多,啃的够用就行。基本功打够了,多凑些“人和”。剩下的,“天时地利”自然水到渠成。

找工作

关键词:经历 > GPA

如果你的大学GPA能稳定在A range,那么毕业之后找工作,相信一定不会是很难得事情。

但如果你的GPA不占优势,真的不要紧。因为我的身边有很多GPA 3.9 + 还只能去小公司的同学,也有无数GPA 3.0 + 却在大二暑假就去了Facebook, Apple等大公司实习的人。

所有拿到大公司,或者其他理想offer的人,都有一个共同特点,就是在拿到offer之前,都有一定的实践/工作经历


在湾区的大学学过CS,我自然也认识不少在大公司中工作的程序员们。抱着好奇心询问一圈下来,总结一下:

Me: 在大公司中工作的typical的一天是什么样的呢?

答: Copy / Paste 吧。

像这些成熟的科技公司,你作为一个software engineer进去,不论你是要维护现有的产品,还是要开发全新的产品,一定有许多fully developed的现有资源给你用。用业内的话说,API, SDK之类的自然是应有尽有。所以很多时候,作为一个大公司的程序员,最重要的工作,是知道怎样把你陌生,但是却现有的工具和资源put together。所以最重要的,是对工作流程的熟悉程度,以及对system的了解。能在面试时候展现出来你明白这一切,大公司自然会看上你的。


不过,也不是说GPA能掉到太低哦,不然不到面试,简历就直接被扔进垃圾桶的概率太大了还是不好的~

Yes it’s cliché but:
hard work是克服一切困难的重中之重

真正进入大学之后,才真正体会到Elon Musk说的:work every waking hour。

比起经验的分享,这一点更像是一剂预防针。每个人进入大学之后一定都有属于自己的烦恼和困难。我不认为大家的烦恼能有什么绝对的共通点,所以也不认为能有什么万能的解决方案。只是所有的解决方案都基于一个绝对的基础上,就是你的外婆和奶奶从小就在你耳旁叨叨的:努力啊。


希望这一剂预防针可以让你进入大学之后提前做好心理准备:不论你是一个高中从不听课还能考试A+的天才,还是做过许多课外活动,CS相关知识渊博无比的大佬,到了大学,如果有连续一个月,平均每天都只能睡5个小时,拿到的成绩和结果还是不尽人意的情况,请不要抱怨,继续努力就好。毕竟,这就是美国大学的CS。

当然,你最终取得的成绩,一定会是一份让你满意的答卷!

推荐阅读

👉成功申请威斯康星麦迪逊大学的CS专业,我教你如何在SAT/托福备考上“避坑”-UW-Madison标化备考经验分享

👉生物+经济/心理学/Financial Mathematics Statistics/电子工程专业分别学什么?发展前景怎么样?-美国大学专业解读

👉丘成桐中学生计算机科学竞赛介绍:获奖难度/含金量/报名途径/对申请的帮助-参加奖金15万元的比赛是什么体验

👉USACO比赛时间/报名方式/参赛要求/级别难度/竞赛规则都是怎样的?美国计算机奥林匹克竞赛介绍

👉加拿大计算机竞赛(CCC)介绍:CCC是什么?怎么报名?参赛门槛高吗?比赛时间/规则是怎样的?