查看原文
其他

CS这个坑,你真的准备好踏进来了吗?| 留美预备课程CS讲座实录

2017-07-06 棕榈大道 棕榈大道本科申请

「预备课程之CS专业」讲座实录

听CS学长为你答疑解惑

HELLO 我是谁

 

大家好,我是吴承钢

【毕业院校】

本科毕业于布朗大学CS系

现就读加州大学伯克利分校CS PhD


 「CS专业学什么」


首先给大家介绍一下CS专业是学什么的?许多多同学家长会觉得计算机科学主要就是学习编程,但这个认识是不够准确的。编程在我看来是一门技能,我们不需要花四年的时间来学习,大部分人只要通过短时间的培训就都能够学会基础的编程。


美国有一个7370计划,在美国加州监狱中,给服刑的囚犯进行短期编程培训。


统计结果显示,接受培训的犯人没有一个重返监狱,甚至一部分人成功找到与编程相关的工作。所以编程这门技能是大部分人都能够掌握的。

「计算机科学」


我们回过头来说计算机科学。作为一门科学,它覆盖的知识面其实非常广,主要可以划分为四大领域,分别是理论、智能、系统和程序语言。编程在其中扮演的角色更像是辅助我们学习的领域的一个工具。


理论方向主要是学习算法以及对这个算法正确性的证明与核对时间空间复杂度的分析。理论部分对数学要求很高,涉及到离散数学、概率论、图论等方向。大家可能都听说过一些比较有名的算法,比如说最优化装载里边的背包问题,还有图论里所说最短路径问题,有些同学可能在小学的奥数里边都遇到过。


据我所知有一些专攻计算机理论的博士生在博士生涯中其实也没怎么写过代码。他们的毕业论文全是一些数学公式的证明和推导。有一个离大家比较近的理论分支是密码学。比如说咱们的iPhone手机加密保护系统,还有百度网盘的密码保护背后都有加密解密算法在支撑着他们。


智能方向智能当然包括机器学习。机器学习无非就是让机器对以往的数据进行学习,从而对未来的事件做出一些合理的反应。


智能还包括机器人学、自然语言处理、计算机视觉以及图形学等等。智能的理论部分也同样是由算法支撑的,自然也需要大量的数学背景。和理论的区别是一个智能方面的算法非常偏重于概率学和统计学。而证明会相对少一些。另一个区别是,虽然理论这个领域对我们而言可能比较抽象、比较遥远,但是智能其实每天都在陪伴着我们。比如说现在新闻和电视比较火的Alphago——谷歌的智能棋手,已经多次击败世界冠军。


除此之外,我举几个例子,比如说咱们打开浏览器,发现广告好像跟我们之前的搜索记录是有所关连的,其实这不是一个巧合。他们其实背后有一个与机器学习的算法,汲取我们输入的数据去学习,然后预测我们会对什么样的广告感兴趣,从而把这些相关的广告来推送给我们。


那么编程对智能而言,我认为是个实现算法一个工具,其实智能本身对编程的要求也不是很高。


系统方向系统主要包括操作系统、数据库系统、网络和系统安全等。对编程的要求很高。大家最熟悉的应该是操作系统,常见的有Windows、苹果MacOS以及手机上的Android和iOS,他们都属于操作系统。


操作系统可以说是硬件运算的驱动器。CPU、显卡以及GPU这些硬件,有运算能力,但是他们需要操作系统来驱动。


操作系统同时还是应用程序的管家。我们可能在电脑上同时打开多个应用程序,但是如果我们只有一个处理器,一个CPU的情况下,操作系统会合理分配CPU的资源来避免我们的电脑卡住甚至死机。


编程语言主要目的是研究这个程序语言本身,当然对编程的要求是最高的,不光需要会编程还要去理解编程。


比如在写好一个程序后,你的程序也是根据你编写的编程语言被电脑理解的。电脑为什么会根据你写的程序为指导去执行这个程序?因为大家一般写的程序还是比较接近人类的语言,但我们的硬件只懂代码。所以这其中的翻译工作是需要编译器来实现的。编程语言会研究编译器是如何从Java翻译成代码,这是一道工序。


另外同一个程序可以用不同的语言来编写。比如会有面向对象编程的Java语言,有函数式编程Scala,甚至有逻辑编程语言Prolog。这些语言的优点和利弊也是编程领域需要研究的。


「CS大学四年专业规划」


首先,CS的核心并不是编程,但是编程对于完成CS专业是不可避免的。美国大学前两年会让CS专业的学生上基础编程课和基本的数据结构和算法,还有一门离散数学课和入门的系统课。所以前两年的课程并不会涉及之前提到的四大领域。


后两年学校一般会要求从这个四大领域中选七到九门课来进行学习。学生可以选择每个领域都学一点,也可以选择一到两个领域深入学习。具体的毕业要求每个学校会不太一样,但是需要修的课程数是差不多的。


大家好像会发现前两年只有四到五门必修课,原因是什么呢?因为美国的很多大学前两年是不定专业的,所以学生在这两年内能有比较大的空间去探索多个学科,找到自己的兴趣,到大三的上学期正式确定专业。


面对美国大学这种灵活的政策,不同的同学他会有不同的选择。有的同学会选择拼尽全力上很多很多的CS课。可能他非常清楚自己的专业性,就对CS专业感兴趣。优点是大量CS专业课会让专业水平得到很大的提高,甚至可能因为知识背景很扎实,在大一的暑假就会得到一些比如谷歌、微软、亚马逊、Facebook这样的大公司实习机会。而且提前修完专业课,你有可能可以三年内从本科毕业。这样可以省一大笔学费和生活费。但是这么做也是有一定的代价,选过多的CS课就必然导致会减少对其他专业的探索机会。


有人会问我,CS专业的同学为什么要去学其它专业的课?原因有二。


第一点:我觉得人的兴趣是要去发掘的,只有尝试过不同的事情才有比较,有所比较才会找到自己真正的兴趣。有很多同学他觉得自己对CS感兴趣,其实是因为他只上过CS的课,没有上过其他专业的课。这样可能会让他和真正感兴趣的专业失之交臂。


第二点:即使他真正对CS专业感兴趣,选一些其他专业的课来拓宽知识面是有必要的。美国的文科和社会科学教育也是世界顶级的,所以抽出时间上一些这方面的课可以帮助大家提升一下综合实力。


另外对创业感兴趣的同学可以用CS上面学到的知识,去运用到其他领域上。大部分美国大学还是很鼓励本科生创业。据我所知,布朗大学去年开设了一门CS的创业课。把CS的同学与其他专业的同学聚在一起,来想一些点子,然后学期末做一个创业项目。比较好的创业项目还会有机会被一些风投看重。


而且现在其他专业比如说金融、经济、物理、文学、生物都需要进行大数据的处理和分析,和CS都是有很精密的联系的,这也是为什么好多同学双修CS和其他专业。以计量的角度来研究传统的非理工科专业,比如说金融、经济,甚至一些音乐都还挺有意思的。


以我的经历来说,我前两年学了不同专业的入门课,包括理科的物理、化学,商学院的金融、社会科学、荆棘,小说演讲等我都上过一些。前两年我的CS专业课就上了四门,美国大学一般是要上四到五门课,所以一个学期上四门CS课的量还是相对小的。 我个人感觉这段经历让我这个本科生活过的比较完整,比较全面的提升了一点知识水平,感觉还是过得挺充实。因此大学四年中如何去合理的配额CS课的比重和和其他专业课的比重大家可以根据自身的情况来权衡一下利弊。


 「CS专业的暑期生活」


我接下来说一下这个CS专业的学生暑假都有哪些事情可以做,我觉得大概可以做的事情有三类,上课、实习、科研。


首先我来说一下上课。美国大部分学校他暑假时会开设一些CS的课程,暑期课程和平常学习的课程本质上是一样的,只不过上课的时间日程上会被浓缩一下,但是总课时保持不变。上暑期课程除了可以提升这个专业水平之外还可以通过这个快速拿学分从而缩短这个毕业时间。


下面是关于实习的部分。本科生的实习主要是以硬软件工程师为主,具体主要内容就是编程序,编一些比较基础的程序。实习我个人认为有三个优点:


1. 第一个优点是可以帮助大家开阔一下视眼,看看人家大公司里究竟是怎么样。同时提高一下自己的技术水平。


2. 第二个优点就是CS专业的实习工资会比其他专业高很多。大公司的月薪现在可以给到税前7000美元左右,税后也有4500美元,相当于一个月三万人民币左右。这个甚至比一些其他专业全职的月薪还要高一些。


3. 然后最后一个优点就是如果能在公司表现得比较优秀实习期间表现得很出色的话可能会得到一个叫internal offer的东西。意思是说你毕业之后你在你实习的公司里可以不用面试,直接录用。所以实习经历对于这个将来毕业找工作是个非常大的帮助。


暑假最后一个可以干的事儿是科研。科研主要是留在学校和教授做一些这个学术研究。如果进展比较顺利的话是有机会可以在学术会议上发表论文。科研期间如果表现了很好的话还可以得到教授的推荐信。科研经历、论文和学校的教授推荐信都是对以后申请CS的硕士博士帮助非常大。


「关注CS毕业后发展」


那么CS本科毕业后主要都可以干什么呢。其实最普遍的就是本科毕业后就业,当软件工程师。就业有如下的优点。


第一点就业比较容易,容易体现在两个方面。


一方面岗位比较多,几乎这个所有的技术公司都需要工程师。而且由于这个电脑互联网现在已经成为人们生活中不可或缺的一部分,现在很多这个非技术公司其实也需要软件工程师来建模或者做一个系统的维护工作。所以这个岗位是很多的。


第二个就业容易层面是面试的准备工作比较容易,可以在短时间内迅速提高你被公司录用的可能性。这是为什么呢?因为软件公司对于应届毕业本科生的面试它主要是以算法题为主的。而这个算法题其实大家可以在网上找到很多资源可以参考。所以在短时间内做题可以迅速提升被大公司录用的概率。而且他除了算法题之外公司还问比较基础的系统方向的知识还有智能方面的知识,然而这些知识在本科四年的前两年都已经把这百分之八十到九十都学到了。所以这个面试问的这个问题的难度其实比咱们美国本科四年尤其第三年第四年教的知识的难度要低很多。


就业的第二个优点就是薪资比较高。大家都知道现在比较大的公司比如说谷歌亚马逊微软facebook,他们平均的低薪税前和奖金加起来可以达到14~15万美元。税后也可以到差不多到你8.5万美元左右,是一个很高的薪资。在二十二岁能有这样一个收入还是非常不错。


就业的第三个优点就是美国软件公司和科技公司他们工作其实比较随意,工作强度其实没有那么高。比如说你今天觉得可能你的活在家也能干完,你就可以发邮件今天就在家干活这也是可以的,所以上班形式也是非常自由,而且很少会加班。


工程师的升值空间也是有的,尤其是一些大公司还有比较明确的这个职称级的划分。比如说你在一个公司干,每年会有一到二次的评定。如果你表现好,得到评价比较高的话你一般在两到三年后会得到一个晋升的机会。一般是每升一级可能职称会听起来炫一点,然后年薪涨两到三万美元左右。然后升职到一定的地位之后可以有机会转向管理层,所以CS这个升职空间还是有的。


缺点呢,尤其是本科毕业这个以编程为主的工作内容。软件工程师可能刚开始干的时候觉得还好,但是干的时间越长你会发现你做的事儿比较无聊,没有什么挑战性。尤其是大公司,相当于一个齿轮般的存在,比较难看到一些大局的,比较难学到整个系统,设计方面的理念也是比较难学到的。


还有就是从事计算机行业每天就是需要坐在电脑前面,所以有些人久坐后健康状况会受到一些影响。大家要注意这方面,毕竟身体是第一。


另外软件工程师天天跟电脑打交道,与这个人的交流比较少。所以很多人就是不怎么和人说话,渐渐的忘记怎么和人相处了。所以情商这方面大家还是需要补一下。


除了就业还可以继续读书深造。其实硕士毕业的出路和本科毕业出路是差不多的。而博士主要不是以读书为主而是以研发自己的project为主。博士毕业后可以在学术界当教授,也可以到大公司的研发部做科学家。


就业和读博,对人能力的要求是不太一样的。如果当软件工程师,编程编的好是基本要求,但是要读PhD的话还是要具备多方面的能力:首先要善于发现问题,善于去创新想到一个idea,然后你要通过一个idea去设计自己的算法或者系统等等。


「CS除了正能量,你还需要知道什么」

说到这儿为止我感觉给大家的正能量还是挺多的。这个CS学科知识面很广同时又很深,所以肯定能学到不少的东西,而且就业前景又很好,看起来没有什么缺点。但是在我看来CS对大家的脑力、体力与心理素质的考验是比较大的。


压力的来源有两个。


第一个是CS学科本身四大领域其实都很难。理论和智能的难点主要在大家对大家思维上的挑战,系统和程序语言的难点在于它的繁琐,很多美国大学CS专业工作量是文学社科专业工作两到三倍,工作量差别还是非常大的。


高级类的算法课或者系统课需要每周末大家课下平均耗时十五个小时左右,所以如果选四门这样的话每周都需要花六十个小时的课余时间来完成作业。美国计算机系的这个机房通常也念到一、两点也几乎座无虚席。我知道布朗和伯克利计算机系都设有洗澡间,有些同学特别忙的时候会选择睡在计算机楼里。


第二个是同学间的竞争。随着选择CS专业的人越来越多,同学间彼此给予对方压力也逐渐增大。比如说伯克利现在大一大二CS基础专业课人数可以高达1500人,在这种情况下,很难做到出类拔萃得到教授赏识。如果得不到教授赏识的话就很难找他拿到推荐信,形成一系列连锁反应。找工作面试也是同理,很多公司的招生官会来学校进行校园免试招收一定量的同学做实习和全职。在这个过程中他肯定会将同学们进行横向比较然后选出最佳的人才,如果没被选中的话同学心理压力会比较大。


CS是一个很有挑战的专业,所以在高中阶段我们需要去做点预备工作,我们在想给大家推一个CS预备课。因为CS属于知识面很广,而每个知识点又可以拓得很深的学科,所以我们在讨论授课内容的时候也在想,对于高中生来讲到底什么样的课程会最有帮助?


最后我们决定把课程的主要内容是用在对学习CS课程四大领域最大的一些核心思维方法和算法上,以及这个CS的一些应用前景。这样做的好处我们认为有如下几点:


第一,这些内容并不需要任何CS基础,大家都有机会来进行体验。


第二,是因为核心思想和算法更偏重于理解而非记忆。所以课后大家不容易忘。如果我讲一个对知识背景要求很高的话题,相信大家过不了几天对这些细节也就忘的的差不多了。


第三,这些核心方法会提高我们今后学习CS课程的一个效率,也许其他人需要四个小时完成的编程项目,因为我们掌握这些核心的方法,我们可能比较高效,两个小时就能够完成。


希望大家能够通过我们的CS体验课,发现自己对CS的兴趣和潜力,为自己今后进入到美国大学中的学习生活做好准备。


Q&A


学CS对孩子有什么要求?

第一,要有兴趣,兴趣是最重要的。

第二,有比较强的逻辑思维能力,代码都是一行一行的,逻辑应该是非常缜密的。

第三,要有耐心,有的课编程量比较大,要上千行代码,所以要做好准备可能一编就要编四五个小时,有的人编一个小时就坐不住了。


怎么培养对CS的兴趣?

可以参加一些自发组织的workshop,编程实现一些小程序,还是非常好玩的。我本科的时候也参加过,第一次做了一个食品推荐的小软件,第二次我们做了一个图片加密的应用程序。通过团队合作做出一个程序这个经历对培养CS的兴趣起到比较好的作用。


女生学CS,有什么优劣?

我觉得好像没有什么劣只有优。一个客观事实是学CS现在主流是男生。而公司在追求一个性别比例平等,所以相对而言,同等条件下,公司会录用女生而非男生。所以女生找工作还是比较大。据我所知所有的美国大学,因为CS专业女生数量少,所以会有一个全是女生的组织,会定期组织一些小活动挺有意思。



对硬件不感兴趣怎么办?

其实CS可以完全回避对硬件学习的,所以对硬件不感兴趣完全不影响对CS的学习。

CS零基础,本科才开始学会不会有劣势?

有没有CS的基础不太重要,主要是有没有逻辑思维的能力很重要。如果一个人理科很好,物理数学很好,那么学习基本的算法是没有问题的。我大一之前是没有学过任何关于CS有关的东西的,所以零基础还是可以学习CS专业的。



伯克利相对其他学校优势在哪?

尤其是本科选校,重视一下学生的比例。伯克利虽然计算机排名第一。但问题是伯克利作为公立学校学生数量太多,一个基础的CS专业课就有1500人,这样导致竞争非常激烈,还是看孩子能不能适应这样一个高强度高竞争的学习环境。本科我个人而言比较喜欢合作氛围比较强而非竞争氛围强的环境。所以大家可以考虑一下私立学校,人比较少,有些私立学校因为比较小,CS排名不太靠前,但其实里面的老师都是很厉害的,教学是百分之百没有任何问题的。


CS专业比较火,学的人也比较多,

未来会不会饱和?

就目前这个发展趋势来看,对基础领域工程师的需求还是越来越大,因为不光是传统的科技产业,还有一些非科技产业,比如说电厂煤气厂,其实都需要雇佣一些和软件相关的工程师职位。所以短时间内饱和的话还是比较困难。


本科研究生学校的水平对找工作

会不会有影响?

有影响,但远远没有其他专业大。拿到面试之后全靠面试当场算法题的发挥,CS算是找工作的时候对对学校要求最小的专业了。但是本科学校的知名度对申请研究生和博士的影响比较大。

CS选校是根据专业排名还是其他排名?

对本科同学而言,专业排名当然是很好的反应了一个学校CS项目的质量,但是本科同学还要考虑一个比较大的问题,师生比,因为师生比越小,从教授那里得到的关注度越大,这样推荐信就更容易得到,科研的机会也更多。这种情况下了好多私立学校要比公立学校要有优势,即使排名没公立学校高。



希望大家有所收获。




棕榈大道留美预备课程

CS专业体验课


开班啦


报名与课程咨询,请加小榈学长为好友。

记得回复“CS课程”哦!

— — END — —

【相关阅读】

【留美CS体验课】零基础教学,带孩子深入计算机科学的世界!

孩子不会写,写不出?四堂课教孩子言之有物! | 批判性写作第1讲实录

阅读、写作、演讲,留学不具备这些能力怎么行?暑期课程奉上,让孩子能力飞跃,收获满满!

▼棕榈大道最新讲座板块

【美东】

波士顿本科学习生活篇、波士顿科研就业篇、

华盛顿特区篇、纽约篇

【美西】

西雅图篇、洛杉矶篇、湾区篇

......

👆场次已完结,请关注我们公众号,

获取文字实录与录音,报名更多讲座哦!

暑假不要闲!快来看看我们的暑期课程吧!

点击图片试试!


▼点击图片查看更多干货

有价值的信息欢迎转发、分享给更多需要的人。

▼ 长按下方二维码关注 

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

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