只接受发布货源信息,不可发布违法信息,一旦发现永久封号,欢迎向我们举报!
1064879863
16货源网 > 餐饮行业新闻资讯 > 软件开发 >  计算机专业学生该如何提高自己?


计算机专业学生该如何提高自己?

发布时间:2019-09-12 16:26:44  来源:网友自行发布(如侵权请联系本站立刻删除)  浏览:   【】【】【
你现在是大三上学期最后一段时间对吧,那我不建议你马上去实习。如果不打算考研,而是想直接参加工作,而且还是编程相关(尤其是java,这个我最熟悉了)的工作,我觉得下面我的建议会对你有一定帮助:首先,你c
计算机专业学生该如何提高自己?

你现在是大三上学期最后一段时间对吧,那我不建议你马上去实习。

如果不打算考研,而是想直接参加工作,而且还是编程相关(尤其是java,这个我最熟悉了)的工作,我觉得下面我的建议会对你有一定帮助:

首先,你c语言学的如何?基础语法是必须的,数组、指针、结构体这些掌握的如何?指向指针的指针、指针数组、数组指针这些概念都区分得开吗?能不能用c写一个四则运算小程序?大学期间应该会刷oj题吧,最常见的八皇后之类的问题能不能写出来(用c写出来)?

如果上面我说的这些,你有否定回答,那先去补下这个吧,计算机专业有一定基础应该花不了太多时间,马上寒假了,别出去浪了,春节前搞定它。这个过程呢会锻炼你的编程思维,这个是特别重要的事情,比掌握语言本身还重要。c语言真的是我接触过的,学习编程最好的入门语言,把它学好了,再学别的都觉得一马平川。

学好了c,就可以去学习java或者c++或者c#了。我拿java举例哈,首先理解面向对象这一理念(和结构体比较下),然后学习java的基础语法,把你c语言写的oj题拿java再写一遍。然后学习java高级,学会map,set,list的用法,知道线程,异常,类与封装,接口,I/O等知识,然后用上封装和list,map,把你的oj题代码改进下,用更具备java特色的方式写出来。给你一个月,不能再多了。

好了,你有java基础了,接下来学习下数据库,然后学习jdbc;学习html,粗略了解下css和JavaScript,然后学习jsp;学习servlet(划重点,这个是最重要也是最难的地方),然后跟着教程写出一个简单的web程序,实现前台到后台再到数据库这个流程。同样一个月,咬牙坚持。

接下来,你要暂停学习新知识的步伐,先认真记熟,jdbc的使用方式,常见的多表关联查询sql写法,还有理解(或者死记硬背下来)servlet的生命周期,你要能很熟练的修改你的web程序(数据库里加个字段,前台也增加相应字段,你要能在前台填入、修改这个字段的值,还能把它显示出来)。一周,够了。

然后继续学习新知识,去学SSM(或者SSH)这三大框架,不求甚解的去学习(划重点,不要去思考为什么,尤其是不要去想spring内部怎么实现的,也不要去深究配置文件的详细内容),你先会用这么个东西就行了,你跟着教程把代码打一遍;给配置文件里面写上注释,记住都要有哪些东西就够了。教程上怎么写,你就怎么写,教程上怎么说,你就怎么记。同样一个月,然后同学你是不是该看看大三下学期课程了?不要挂科啊。

当你按照上面我说的,一口气把SSM框架教程看完了,这时你觉得你脑中空空如也,觉得自己好像会点什么,可又好像啥都不会。恭喜你,你已经可以去公司实习了,但是,最大的问题在于,你现在过不了公司的笔试面试。

呐,我们要进行下一步的打磨了: 首先,再回忆下jdbc、servlet、sql,觉得生疏就再背一次; 其次,看看你拿SSM框架写出来的web程序,做到能很熟练的修改它(数据库里加个字段,前台也增加相应字段,你要能在前台填入、修改这个字段的值,还能把它显示出来); 第三,搜下java面试宝典、java笔试题、java面试题,看熟,尽量理解,到一定得做到背熟; 第四,这个时候是夏天或者秋天,你要买一件衬衣,不要看上去是卖保险或者房地产中介的那种,要看起来沉稳的衬衣就行(实在不行就网上调侃程序员说的那种格子衫,切记颜色要选正常颜色); 第五,准备你的简历(强烈推荐“一页纸简历”这种模板),还有,你可以写废话,但是不要给自己挖坑乱写,尤其是不要为了装x而写自己不熟悉的技术(划重点); 第六,看部电影放松下——你以为真让你放松啊,记得写一篇观后感,啊,不,是用两百到五百字左右讲述下这个电影的讲了什么内容,并对其进行一句话点评(面试的时候大几率用到); 第七,找几家凑巧看到的校招企业练练手,快速熟悉笔试面试的套路; 第八,葫芦娃都只有七个你还想让我说啥第八,找到合适的企业就去实习呗,记得一定要坚持学习,再把SSM的学习视频翻出来看看看,这次真的要认真琢磨啦,尤其是spring!!!

如上,是java web程序员的学习路线,自学培训都可以(培训的话,机构要选正规点的,不过哦,培训费用...),或许时间划得不合理,但是我只能说,大四上学期的秋招是最好的找工作季节,一切都要在那之前准备好。





以上呢,是我印象中,17年之前的要求。IT行业的技术飞速发展,该回答中的某些技术也正在走向“过时”,各位浏览本回答时,请注意本文仅供参考,真要付诸实践的话,请自觉学习时下最流行、最热门的技术。



之前说了这么多java web,都是老技术,下面也说下我对稍微新一点的技术的看法吧。

首先是spring boot,它做了很多事情,但感觉又啥都没做。spring boot本质上,并没有像Spring framerwork、Hibernate等那样,从技术、从思维上,完全改变了编程的方式。它只是对项目开发进行了一定程度的简化,可以认为是对maven的加强。所以如果熟悉spring,hibernate,mybatis等这些老技术,然后了解maven,就能很轻松接受spring boot——不就是让我少配置了一些东西吗。但是spring boot体现着“约定大于配置”这一开发原则,这点一定要明确:开发者只需要对应用中极为个性化的部分进行配置,其他部分都可以使用默认配置来实现,把开发者从冗长的配置中解放出来,从注意力放在实现上,转换为更多注意力放在业务逻辑上。所以作为应届毕业生,学习spring boot需要多少时间呢?三天都嫌多!而且对于初学java web的同学,使用spring boot,屏蔽掉底层的配置,对学习百害而无一利。在学习阶段,我甚至仍推荐使用xml配置方式,来对各个框架进行配置——如果时间允许的话。

接下来说下spring cloud。微服务这个概念,是很重要的,它很巧妙的拓展并简化了分布式系统,又对高可用、云服务等有天然契合。而spring cloud呢,是对业界成功的微服务案例(Netflix公司),进行封装,从技术上来说,本身也是像 spring boot 一样,没有革命性的创新(本质上来说Eureka,Zuul,Turbine,Hystrix 等都是Netflix的技术,像hibernate、status一样独立于spring),它所展现的,是对spring boot的升级——我不仅提供了各种技术模块的缺省配置,还给出了整合他们的最佳实现,给出全套的技术方案。那学习spring cloud要多久呢?对于大部分应届毕业生来说,入门五六天,想搞懂要很久,看个人造化。因为对于普通的想从事java web的应届生来讲,进入公司后,所接手的,只是简单的业务实现,如果你对ssh或者ssm等框架已经熟悉,稍微了解下spring cloud是怎么干活的,知道通用的规范,就够了,公司不指望刚招收的实习生去搞项目架构的。

最后说下前台技术。说实在的,这几年我是完全没有想到,前台会发展这么快的。node,es5,vue,react,es6/7/8… 然而很不幸,我所在的项目,一直都要兼容ie8(某些极端客户甚至要兼容6...),所以一直没机会深入接触这些。但简单入门呢,两周是够的。

谢谢邀请。如果经济上允许,建议还是培训。自学是可以,但是太浪费时间,你现在已经马上要实习了,时间上不允许。学习编程这个事情入门有点难,一旦遇到问题,如果没有人指点帮忙,是很痛苦的,很容易伤自信的。很多学IT的,都是因为在编程过程卡住,没有人指点无法继续下去就放弃的。另外,做IT待遇水平很高,如果你能尽快入职上班就是金钱,早一个月上班就可以多挣5000多,而且在IT行业,工作经验和时间很重要,多一年工作经验工作可以多3000元,实习也是可以当作工作经验的。

所以,建议你参加一下培训。参加培训的价值不是让培训公司帮你找工作,而是让培训公司帮你入门,帮你少走弯路,有快速进入IT的门槛资格。只要你自己心态对了,跟上老师节奏,有问题随时让老师帮你指点,培训是值得的。对培训公司不要抱太多的期望,目的只一个,尽快入门。

鉴于题主是大三的学生,个人建议首选是实习,然后是自学。培训真心不建议,计算机专业的学生去培训班真的学不到什么东西。

培训班一般教的是比较实用性的比较表面(无贬义)的东西,而不会涉及比较底层。例如培训班可能会教你一个库的各种使用方式、使用场景,而不会告诉你这个库为什么选择这种数据结构、为什么使用这个算法。而校招是比较重视这些底层的东西的,反而对顶层的应用不那么看重。建议去实习的原因是校招的时候有实习经历是很有优势的,而且还可以申请实习的公司转正,多一次机会。

至于怎么准备校招,主要从这几个方面:代码语言能力、数据结构与算法、系统知识

代码语言能力:这个主要是对于主要语言的掌握程度,会问一些看起来可能与实际编程时不太在乎的东西。如C++虚函数怎么实现的,标准库vector使用时的内存变化情况等。同时还会包括框架类的东西,比较面Java的人一般会问spring相关的问题等。C++可能还会有链接、makefile相关的问题,不过这个如果不会一般没有什么影响。

数据结构与算法:需要掌握基本的数据结构,数组、链表、队列等。算法可以刷刷leetcode,中等难度的就可以了。能力较强的可以刷一刷算法导论。

系统知识:这个对于校招生一般就是考察网络知识、操作系统的知识了。操作系统的话看一本类似深入理解操作系统的书基本就可以了,网络知识一般就是TCP/IP 相关的东西。有余力的可以学习下Linux的使用、shell编程等。

看到题主的情况,换一个角度去想,其实这三者可以不矛盾。


对于实习:

我是这样想的,正处于大三,实习一般应该是学校会硬性要求的,我们可以找一个地方去实习,去看一下自己的差距在哪里,了解一下当前的市场行情,现在企业到底需要什么样的技术人员,我需要掌握哪些技术才能胜任我自己想应聘的岗位,这个是我们实习的收获。


对于自学:


在你实习的时候,你总会发现自己技术上的不足之处,这种感觉会催促你自己去学习一些东西,只有知道自己不知道,才能有机会让自己知道(这句话有点绕口,但还是有点道理的)。这其中,你完全是可以自己自学一些Java基础知识的,你可以找一些自学的书籍还有视频教程(我之前学的Java,还有一些视频教程,个人感觉还挺好的,如有需要,可以私信找我,我把我的资料发你),这个阶段只是你的初级阶段,不要对自己要求很高,能够看懂就OK的。再就是可以在学习过程中,可以感受一下,自己的自学能力是不是很好?能不能坚持下去?后期对自己是选择继续自学还是转战参加培训会有帮助!


对于培训:


培训应该是你在实习中后期才要考虑的问题
,这个时候,对你自己的情况应该已经大体了解了。经历了实习,看到了自己有哪些不足,经历了自学,看到了自己本身的学习能力是好还是坏,如果看到自己自学的能力还是不错的,完全可以继续自学下去的,但如果自己没有一定的自控力,或者学习起来有点吃力,又或者急于想快速掌握Java技术,这个时候可以考虑一下去培训。


没有必要把培训想的很差,对于培训,我个人的想法是:这个过程应该是相对的,就比如说,老师教的再好,学生不学,那结果必然是悲剧;再比如说,学生再怎么努力学习,但老师不行,那结果也会是悲剧。


所以如果真的最后走到这一步,我们可以放松心态,去挑一个适合自己的培训班非常重要。


以上仅是我个人的观点,可以酌情参考一下!

同是计算机专业,过来人的建议:

1.搞清楚自己是不是想往技术方向发展(也就是码农),计算机毕业一般就业就两个选择:IT和互联网,而进入这两个行业,不见得一定要去敲代码,技术背景可以展现优势的地方有很多。

2.想通过大学本科阶段设立的课程精通代码,确实是不靠谱的,但这至少可以帮你认识到自己适不适合做这件事,有没有必要通过考研/工作的方式继续深造。

3.如果确定自己对于技术很感兴趣,只是现阶段缺少合适的方法,那么与其纠结怎么学,不如考研,本科和研究生的培养方法是不一样的,只要目标明确,未来就业阶段的优势会很明显,工作上手的时间也比较快,还能搏一个实打实的文凭,何乐而不为?

4.如果只是为了让自己专业对口,并非想要在技术上继续深挖,那么以计算机为基础延展开的可选项还是很多的,尤其是在互联网领域,比如腾讯:

可以看到,无论是产品还是设计,都对计算机专业或是技术能力有一定的诉求(且这一类的岗位,并没有直接的专业,计算机已经算是比较对口了),多点尝试和了解,步步为营,方是上策!

至于怎么学,不建议自学,由于各家公司的筛选标准越来越高,成功案例实在凤毛麟角;去大厂实习是第一选择,且不说可以直接转正,找工作阶段,拿得出手的实习经历是非常有力的武器,前提是得提前做好准备,实习入厂的难度虽然没有秋招高,但也具备着相当的门槛;再然后就是线下培训,相对会更系统一些,对于没什么经验的人而言,不失为一种好的选择。


学习的目的最终都是为了就业,做好选择,才不会南辕北辙。

-

回想我上大学的时候,除了不放人的实验室,其他同学基本都去实习了,有的人甚至翘课也要去(雇人点名),实战是快速提升的最佳路径。


天赋异禀,自学能力强的建议看视频和书自学,网上免费的资源很多,关键看你有没有毅力和好的学习方法;


天赋普通,学习能力一般的去找个公司实习,钱是其次,关键是要有所收获,不管是技术、运营还是产品;


天赋较差,需要人逼着学,觉得找工作压力大的,可以报个培训班,最好是结业有考试推可以荐到正规公司就业的;


最后,不论你选择哪一条路,核心都是要让你的能力和知识储备有所提升,至少,要能够给你的工作简历上增加一个亮点。

-

本来随手一答,只想着解决题主的疑问,没想过要维护这个答案。但是连续好久都有人在评论区就同一个问题质疑。那我就统一回答一下。不过这个答案是给那些有疑问的朋友,而不是那些坚守“我没听说过所以肯定是瞎扯”原则的人的,没工夫跟这些人抬杠。

第一、题主的问题就是去实习还是自学?这个问题的前提就是他能够找到实习机会。所以我的回答就是去实习,而没对如何找到实习机会进行回答。因为我已经默认了题主的这个前提了。

第二、你们真的小看了大厂招揽人才的手笔和培训人才的能力。当初跟我一起在我们组实习的一共13人,算我只有两个人是计算机专业的。大部分人刚来的时候真的没什么计算机基础,第一天有一次摸底考试,我打了70多分,排第二,而大部分人只打了二三十分,甚至有人只得了个位数分。这些人我说不会helloword不过分吧?但是为什么还招呢?因为这些人基本上都是985,而且在各自专业,都是排名前20%的人。大部分人都至少拿过一次国家奖学金。比如我之前提的那个水产专业的,是中国海洋大学水产专业的,常年霸占着该届第一,校长奖学金拿到手软。大概什么实力各位心里应该有数了,跟你们提的什么也不会大概有点出入的。就是这些人,经过培训,仅用两周,就从啥也不会变成了能自己写出来一个编译解析器。这些人,我就问你如果你是hr,你招不招?

所以,自己不了解的东西,好好问,别用你那贫瘠的经历来揣测。


原文:

谢邀

去实习!去实习!去实习!哪怕helloworld都不会写也去实习!

不要想着自学了,不现实。不客气地说,你都大三了,要是能自学早就自学了。不要想着自己一发奋努力一下就有好转了。真正能坐到靠努力逆袭的人太少了,多数人都是打开电脑后看见隔壁在LOL,没忍住也一起撸了一把,不小心没打赢,想着赢一局就收手,然后一天就过去了。我太了解这种人了,因为我就是这种人。

所以这个时候就需要一个人拿着小皮鞭在后面赶着你去学,就像当年高考一样。对大学生来说,这个人不可能是老师,只可能是老板。只有赤裸裸的经济利益关系才能让别人这么关心你。

由于基础不好,去实习的初期你一定会异常痛苦,作为一个自觉大学基础还不错的人,我当初都觉得异常痛苦。但是挺住,不要低估人的主观能动性,挺过这段时间你就会发现你的技术飞速增长。毕竟最好的练兵永远都是实战。不要担心自己基础不好,当初实习的时候我见过无数几乎0基础的人,没学过编程的大有人在,电子、数学专业神马的都算比较对口的了,甚至我还见过水产专业机械专业医疗专业法学专业的各路大神。比起这些专业的人,你就算基础再差,耳濡目染这么多年了也比他们强啊。

所以真想学就对自己狠一点,把自己逼到那条路上就好了

某垃圾一本的大二计科在读菜鸡来强答一波吧。

目前为止,本菜鸡只学过线代、高数、离散、概率论、数据结构、计导、C语言、Python、C++、JAVA这些相关课程,也没有参加过啥培训。下面来讲下我自己用的一些方法。

①多刷题吧。 PTA上面的题我个人感觉还行吧, Leetcode上有很多大公司的面试题,不管是对考研还是工作都有一定的帮助。附上链接:如何高效利用Leetcode?

当然领扣上的题是有一定难度的,相比之下Codewars上的题就简单些也挺好玩的,它有8个编程段位,一开始是8段,通过编程解答问题可以提升段位,段位越高,段数越小。 ?本菜鸡现在5kyu,大部分题用Python求解的,毕竟人生苦短嘛。

②写博客。 写博客主要不是为了给别人看,是为了过几个星期、几个月甚至几年后依然能看懂自己的代码。写博客挺简单的,但是坚持下来挺不容易的。附上本菜鸡的CSDN链接:本菜鸡的CSDN博客。扫描下方二维码查看本菜鸡的博客园。

③参加一些比赛。本菜鸡只参加过校赛、PAT、CCF啊,蓝桥杯和ACM暂时都没碰过,毕竟目前能力还有限。

溜啦溜啦,复习去了。

啦啦啦~建议培训或者实习。能有前两者尽量尽量尽量不要自学!建议有钱的话先培训,预估一万吧。首先先定好方向哦。培训后自己做两个小项目,做的还不那么差的话直接找公司实习。

建议立即参与实习。

本答案适用于专业功底不好但试图本科毕业就参与互联网工作的计算机专业大三学生。

我们永远不可能做好充分的准备再去打战。

至此你已经落下了太多的东西,算法与数据结构,高数线代离散,汇编编译原理计算机系统,软件工程形式化方法等等。

补不完的,每一个方向展开都是庞大的一门学科。想研究传统算法的已经打了三年竞赛,做系统安全的也把体系自底向上摸熟了,想做应用开发的已经有若干个自己的独立产品了,想继续深造的也已经有自己擅长的研究领域了。现在开始补习,且不论低到炸裂的自制力,就算日夜苦学,也只能是个样样稀松的伪全栈。

当务之急,是找到自己的长处,再发展成亮点,增加自身的不可替代性,而不是再去弥补那些本科阶段用来打好基础的屠龙术。

有的答主回答得挺好,不过指针的指针,数组指针,指针数组,这些东西很多人还真不明白,但这并不影响他人成为某一方面的专家。比如我能闭着眼跟你细数深度学习这六年来的发展,随手搓一个Leetcode中级的基本算法,但我也仍然搞不清楚JAVA的垃圾回收机制,这还是面试的必考点,该语言的重中之重……但这并不妨碍我做基础视觉的研究,拿到相关offer。对,我就没用过JAVA。

学校专业课和业界脱轨是众所周知的,在学校碰不到分布式架构,高并发系统,百万规模的数据处理——而这些,在公司就是日常。相反的,在学校里手搓B树复现SQL,搓AVL树优化线性复杂度,搓可持久化线段树优化区间查询——这些东西在实际应用中是不可能也不应该要你手搓的。建议学吗?建议。可以不学吗?可以。

只有向前迈出实习的那一步,你才明白市场需要的是什么样的人,你还有哪些东西需要弥补,才能规划处自己的学习路线。留在学校自主补习专业课,本质上是习惯了暖床,不愿意踏出自己的舒适区。至于计算机相关专业如果需要报名培训机构,怕是连最后一点尊严都没有了。

Update:

有的同学是真的一点也不会,管我要速成的办法,那可以参考这个回答着重补一下基础:计算机专业哪些专业课实用性强?

般这种基础类问题,大佬们都不喜欢答,所以我就献丑了。

我一般认为计算机是一门理论与实践结合比较紧密的学科。也就是习武之人热衷的心法与招式的结合。基本上不存在不跟敌人过招儿(实践),就能成为绝世高手的可能。所以在学校什么都没学会,只是每天被师傅(老师)迷迷糊糊的从睡梦中叫醒,学着打坐、扎马步。眼看学徒期满,要被赶下山了。发现江湖上流传已久的易筋经(大数据)、凌波微步(区块链)、乾坤大挪移(深度学习)一点都不会。师傅微微一笑,去吧,去历你该历的劫。

你内心肯定骂这老秃驴,就教我的那点三脚猫功夫,怕是在宫斗剧(职场)里活不过一集吧。哈哈哈~

非也非也,下面师姐以浅薄的闯荡江湖的经验总结几点。

先说心法:

1.独立分析问题、解决问题的能力

这点不只是学计算机,是任何职场的生存之本。

2、扎实的基本功

数学、英语、数据结构、计算机网络、c++、算法

这道不是说你必须什么都学的精通,最基本的要求是用到时,应该一拍脑门,我当初学过啊,然后再找到相关知识点细看。比如说c++吧,不用记住语法,但是抽象、继承、封装这些基础概念知道。在学校考试基本上用不到,但是工作中让你独立设计一个模块时,这些概念能让你代码优雅、易读。不会让后来接手你代码的人一脸懵逼。

3.天下代码,唯google不破

是的,你没有看错,计算机技术更新迭代之快,一开始就不要觉得会有学完的那一刻,最好早日建立终身学习的观念。老司机们一开始也不会给你太难的问题,基本上就是垫垫脚自己能解决的。95%你遇到的问题,前辈们都遇到过了,网上基本上都有,所以不要不会就问别人,先自己Google。

4、跟进新技术

我一般认为工程算法不分家,公众号、知乎上各领域的技术大佬关注起来好嘛。对新技术保持好奇心,多动手实现。

5、一颗安静的心

有时候我觉得追bug,兼职就像追凶杀案的嫌疑犯,整个过程枯燥无趣还极其考验智力、体力、意志力。如果烦躁的时候,就想想大师姐我,貌美如花,还敲的了代码,不也天天安分守己的写bug吗。哼!(?ì _ í?)

6、喜欢

如果做了很多尝试,还是学不会,就去找真正喜欢适合自己的事去做吧。这事就跟找恋人一个道理。没人规定你了解(学习)一阵子了,就一定要跟她在一起一辈子。




再来招式:

虽然我认为你应该自已动手找适合自己的教材,不过既然答题就应该认真答,推荐几本我自己看过的吧,看这些之后,找个初级工程师的岗位应该不难。

0、关于语言

刚开始不要给自己设限,一定是某种语言的拥护者,用到什么学什么。

语法上变量、函数、类这些是每个语言都有的东西。照着w3c菜鸟教程写就行了。

再有逻辑上的循环、判断

再有容器map、set、list

实现这些的堆、栈、队列

等等都是基础,用到的大多数东西都是在这些基础的东西上搭建起来的。不用一开始就想搞个大新闻。从简单的开始,慢慢迭代优化。

1、网络


2、java并发


3、算法


4、机器学习


5、深度学习


建议:

至于题主问题描述中的三个选择,建议实习+自学,原因不解释。



少年,我看你骨骼精奇,是万中无一的编码奇才,维护cs世界的和平就靠你了,我这有本秘籍——》


有时间再填坑~

占个坑,有时间回答。我是计算机专业,大二开始搞 Java,毕业也在干这个。


有时间了,来回答下。


计算机专业是工科,工科向来是实战出真知。理论课听的云里雾里,是因为你实际敲代码太少。


计算机学习一定要关注以下这些方面。


多动手。这个专业的同学基本离不开电脑,实践课也基本是敲代码。所谓的多动手,就是多敲代码,熟能生巧。实验课一定不要直接拷贝同学的答案,一定要自己思考自己敲,慢慢就有手感了。


多思考。做任何事一定要想清楚了再做,否则做了很多无用功,得不偿失。计算机编程也是一样,没想清楚一段逻辑就上手敲,很容易把自己转晕。但如果有了基本的思路但不清晰的时候,完全可以上手。此时再敲代码是对思路的延续有促进作用的。


多读书。我指的不是课本,课本一般比较老。互联网发展这么快很多内容已经淘汰了,而且课本上的很多描述晦涩难懂,容易引起学生学习的 抗拒心理。建议多读业界口碑优秀的相关书籍。比如李智慧的《大型网站技术架构》等等,我有 Java 相关的很多电子书,大三的时候基本都看了,需要的话可以私聊我。


重基础。基础在任何知识体系里都是最重要的,因为再复杂的知识都是它衍生出来的。无论变化多大,万变不离其宗。所以基础掌握的好,基本做啥都能融会贯通。Java 的话基础知识很多地方有总结,包括我的个人博客。感兴趣可以看下,http://huayonglun.com


做项目。我们学习的很多知识其实是零散的,这样很容易忘记。如果把他们系统地结合在一起,就能起到巩固作用不容易忘记。而系统性的学习就是通过实战做项目来体现。哪里有项目可做呢,可以网上找一些,先看一遍然后精品照做一遍。或者有报培训班,都会安排好几个项目来做。


至于你提到的实习,培训和自学三者的选择问题。我觉得不是单选题,有钱的话可以去参加培训,因为有人指导,有人一起学习,有项目可做。有能力找到实习工作就去实习。自学的话,不用多说,这是任何时候都该有的学习品质。


我其实就是自学,培训和实习都经历过的。感觉都很有好处,能实现互补,所以最后 Java 方面的技术才表现的不错。


感兴趣可以关注我的微信公号:永伦的小屋

重视个人成长和技术提升。

先说总体结构,基础知识+一门主流编程语言或技术+实习

尽管网上有各种天花乱坠的所谓教程,但是这个行业还是推崇真才实学,反对花里胡哨,有能力的人肯定不会太差。

首先基础知识是首要的,计算机几门基础课,数据结构计网操作系统算法,面试必考,而且可以培养一个很好的思考问题的方式和所谓的计算机素养,以后工作学习中都能收益。这是计算机科班出身应该有的资本而且退一步想,就算你完了想考研,这些也都是初试复试要考的。牛客知乎百度谷歌csdn不懂就查就问,多做题,只要勤奋没有你查不到解决不了的。

然后是掌握一门主流的能让你找到工作的技术,刷题,上git做一做开源项目,没必要报培训机构。说实在的,学生期间做的项目一般单位不会看,规模和技术都不够格,而且基本都是别人吃剩的有的人还是写文档混的项目,只要让面试官明白,你对这块确实很熟,能完完整整说明白整个过程和内在的逻辑就够了。你可能说你不会,不要担心,网上到处都是资源,认真学多动手有问题就查就问,学到东西都是自己的。至于学什么怎么学,结合自身情况,各个方向都能有大佬介绍

之后是实习,找工作是一个需要内在技术修养和外在信息获取的综合体。觉得自己能力不够,那就找日常实习,没有hc没有转正都可以,在年前就做,去了基本是打杂,但是也有一个非常好的机会和平台学习。而且有实习经历是最好的背书,一步快步步快,之后春招实习,实习转正秋招,每一次实习,之前的实习都是最好的背书,一步快步步快。

实习这个我是深有体会,我们学校是211但是计算机专业很一般本科教学也不怎么样,学习基本靠自己,学校的话一般简历关都没问题但是之后全部靠自己。我见过秋招收割at头条等收割机,也见过一筹莫展最后随便去个培训机构或者外包的。我最好的朋友也是给我感触最深的,成绩不怎么样,没拿过任何奖,没有什么活动干部职务,没进过实验室混项目,大三之前我们都在过,上大三以后开始学习,就是把专业知识弄明白,java里里外外基本都弄清楚,每天必刷牛客知乎等相关论坛获取信息,对症下药,剑指offer等一直在做,信息搜集的非常完善。一开始啥都不会,也没经验,学校并不出彩,大三下偷偷摸摸去猪做日常实习,就是换个地方学习,然后凭着自己的实习春招去了狗东做实习生,暑假开始实习后就投秋招的提前批,这时候已经有两段大厂实习了,at都是走的提前批,然后atj都收割了也就不参加了。每一次找机会的时候都充分准备,而且背后都有很丰富的经历。

最后说点个人的看法,在思考这个问题之前,想明白你到底想做什么,不是计算机专业学生就一定要干计算机,干计算机也不一定是研发,路还很长很宽,想明白自己是什么人,到底对技术有没有兴趣,这比想干什么更重要。

如果确认了自己想法,就加油做吧,不要瞻前顾后,勇敢投简历,完善自己,祝成功

一定要去实习呀孩子。

实习能学到的很多东西,比如团队协作,软件开发流程,版本控制,都是自学和培训没办法感悟到的,而且现在的就业形势下没有实习经历秋招很容易在简历关就被卡死。不要怕实习前什么都不会,大部分人都不是天才,之前做的也都是学校里的玩具项目,实习才有机会体验到产品级的开发。而且实习能够帮你扩宽视野,选择更适合自己的小方向,我在实习的时候都会尽量挑自己从来没接触过的项目和语言,每一次实习都是一次知识结构的蜕变,对大方向都会有一次更深刻的了解,受益匪浅。

专科的学弟吗?如果是,建议你先考本科,我有朋友去培训java去了全国最好的培训机构广州分公司,出来实习2.5k,为什么在好的培训机构出来工资却最低,你慢慢往下看。

有家大公司上市公司准备要我朋友因为我朋友学得挺好,培训教的全部努力学会了,可是发现我朋友是专科的就不敢要了。

所以别说什么学历不重要,我发现很多贴吧很多文章都读书无用论说学历不重要的人,要么是误导他人,要么都是在互联网发展初期的大神而且运气加努力得来的,可是这些人眼光却很短浅。

其实你会发现,在社会上,很多高层很多有钱人都会让自己的后代提供好的教育,而不是让他去基层去爬起来,让他们的后代能够更好的发展未来。

所以对于家庭没有背景没有人脉没有资金和权力的来说,学历或许对很多人来说是唯一选择,至少你在步入社会之前是。

学历在后期可能没有技术重要,可是学历是一个敲门砖,好的学历HR更能看到你的思维模式你的处理问题的能力,绝大多数公司也会更加认可高学历。

如果这些建议你都觉得不太合适自己,那么就去实习像我朋友这样,刚出来实习工资低是正常,也不要觉得实习工资低没用而坐以待毙,人生不是为了赚那点薪水,而是为了未来人生更好的打开一份事业。

我来说说如何学好这个学科哈。

很多人没搞清一个概念:计算机专业,并不全是编程的课程。还有很多非常牛逼的原理课,十分高深,有趣和有用。

学完了C语言能干啥?这个问题一直困惑着我长达五年,后来读研,真正了解了这个行业,才知道编程语言仅仅是一种工具,不同的编程的语言,往往适用于不同的方向。

大学里,计算机课程教育,目的并不是要培养出一批码农程序员,而是为了出高水平高素质的科研人员,或者说是为了培养出这群人作准备。所以你才会发现计算机专业的很多课程,往往跟动手编程关联不大,考研408中的四门专业课(数据结构,网络原理,组成原理,操作系统)里,只有数据结构在课程教学中跟编程非常相关,而其余三门往往是讲授计算机,互联网,操作系统这三样东西是如何设计出来的,是思想上的东西。

上篇我是如何在一晚上拿到阿里巴巴offer一文分享给大家后,获得大家一致好评,都说学到了很多面试技巧。
但这次我要说的是面试技巧只能让你提高获得面试资格的概率,最终能不能拿到offer还得看你的硬实力。
我在准备10几天的时间下顺利通过面试,也许有人会说是运气,但运气为什么有的人有而有的人没?
因为运气是留给有准备的人的。就算彩票中奖起码也得比大部分人多做一步,首先得去买张彩票。
因此本篇我不讲速成论,而是让你扎扎实实打牢基础,然后等着运气降临。
看过我的编程人生一文的同学应该知道里面我提到自己读了很多书,专业的非专业的都有。
在这过程中我也踩了不少坑,好书读过,烂书也读过。当然话说回来,你不读也不知道它是好是烂,这是个悖论。
这次我就结合自己的真实学习经验,并结合大学里的课来给大家分享那些年我读过的书。
注意,本文提到的书不是网上随便找的书单,全部是自己亲自看过的。


1.屠龙术


为什么这节标题是屠龙术,因为我认为读这些书能让你了解计算机科学的本质,掌握屠龙之技。

了解了本质,一切就变得容易了。
以下书籍重要程度分先后。


1. 汇编语言(王爽版)

没看错,就是汇编语言。为什么是汇编语言,因为我认为现在大家对这门古老的语言都不重视。
这本书是我在大三上汇编语言这门课时买的。当时上课用的教材不是这本,因为个人感觉教材不太友好,在网上搜索后买了这本书。
这本书不厚,由浅到深的介绍了汇编语言,重要的是还有实践代码。学完后会让你对汇编语言有一定的了解,不深,但是足够用了。我汇编语言课最后考了94分,这本书功不可没。
很多人会问,汇编语言都淘汰了,学了有什么用,你看现在哪家公司招汇编语言开发?
我想说是的,现在公司很少有用汇编语言的了,毕竟有了农耕机,谁还用牛耕地?
但是,我要说的是,只有用牛耕过地,你才会更了解这片孕育万物的土地。
学任何东西只有了解它的本质,你才能学的更快,学的更深,学的更好。
而汇编语言就是能让你了解语言本质的东西,是所有高级语言的源。
所以不管你是计算机科班出身还是半路出家,我都建议你去看看这本书。

如果你本身就是计算机专业,那你上课时候一定要认真去学,为你的“专业性”打基础。
如果你是中途转行或者经过培训上岗,我也建议你有空的时候去看看,能让你更了解计算机的本质,缩小和科班的差距。
当然花了这么多篇幅介绍此书,我也不是让你成为汇编语言的高手,只是让你对这门语言有一定的认识。
不会汇编语言不会影响你成为编程高手,但是一定成为不了大师。


2.深入理解计算机系统


这本书很多人应该都知道,是经典书。能让你对整个计算机硬件和软件体系有所了解,建议计算机从业者收藏,反复阅读,常读常新。
如果是计算机专业学生,建议和计算机组成原理这门课搭配使用,可以出奇效。


3.现代操作系统


这本书是我大三上操作系统这门课时看的书,当时上课用的教材不是这本,是我在图书馆看到的。当时看后觉得讲的比较详细,就自己买了本当作教材使用了。
这本书如书名,讲操作系统原理,计算机专业学生应该都会上这门课。建议大家上这门课时候都能认认真真上,尤其是考研的同学,考研会考里面的知识。
为什么我建议认认真真上,因为这门课比较枯燥,内容也比较难,所以逃课率很高。我是为数不多从来不逃这门课的学生之一。


4.计算机网络


这本书是我大二上学期上计算机网络这门课时买的。同样学校教材也不是这本书,是自己在图书馆查资料时发现的。
这本书讲的比较全面,可以提高对计算机网络系统的认识,同样建议准备考研的同学好好学这么课。


4.离散数学及其应用


这是大二下学期我们上离散数学课的教材,主要讲计算机中的数学知识。
计算机学科本就是从数学发展出来的分支,因此数学对程序员的重要性不言而喻。
写程序最重要的是逻辑性,学习这本书能系统性的提高逻辑推理能力,学的时候最好把每章后面的题做一下。


5.数据结构与算法分析


这是大一下学期上数据结构课时我搭配的一本书。同样上课教材不是这本,是我在图书馆发现的。
讲数据结构的书很多,为什么选这本书?
因为这本是用C语言来描述的,示例代码都是C语言。我认为学数据结构算法最合适的语言是C,用纯面向过程的语言去学习数据结构和算法才更能理解其本质。
算法本质是对空间复杂度和时间复杂度的优化。
空间上C语言没有面向对象的特性,声明变量后完全可以根据变量类型计算出程序总共消耗的内存,可以更准确的评估程序运行过程中到底消耗了多少内存。
时间上C作为面向过程语言,可用函数库很少,通过自己写代码能让你清楚的了解程序运行时执行了多少指令,让你对你算法效率有更精确的评估。
当然随着计算机CPU性能的提高,内存的不断增长,程序员对时间和空间的要求也没那么严格了。但在系统性能优化和虚拟机优化等难度较高领域对算法还是有严格的要求。
虽然用Java、Python、JavaScrpit等语言介绍算法的书市面上很多,也能让你对算法有一定了解。但我认为通过这些书去学习算法,还是有隔靴搔痒的感觉,虽然你懂了,但是没有那么透彻,换种语言说不定也就写不出来了。
而用C语言能让你更透彻的理解算法的本质,因此我建议有C语言基础的同学最好用这本书去学算法。尤其是计算机专业学生,因为大部分专业课教材里涉及到的代码都是用C语言写的。


6.数据库系统概念


这是大三下学期学数据库课时我搭配的一本书,同样不是上课教材,是在图书馆发现的。
作为一名程序员,或多或少肯定会用到数据库,有的人只会简单的SQL语句或者熟练使用MySql、Oracle、SQLServer等软件就说自己懂数据库了。
其实数据库是一套很完善的数据存储系统,SQL语句只是和用户交互的通道。不了解数据库系统的知识充其量只是个数据库软件熟练工。
而通过看这本书,你可以系统的了解到数据库知识的全貌,学完后甚至可以自己去实现一个小型数据库,这样对别人说自己懂数据库时才更有自信。


7.C++程序设计语言


这本书是我们大一上C++课程时的教材,发的教材其实是英文版的,这里我给大家介绍中文版。
毕竟是C++之父写的,比世面上其它C++书好太多。由浅入深,知识很全面,书上的代码也都很有代表性。如果把书上的代码都上机打一遍,C++绝对入门了。
不知道是不是所有计算机专业都会把C++当作第一门语言课,因为C++相对其它语言来说,入门上手会相对比较难,可能会打消掉一部分同学的积极性。
但学任何东西其实都有一个学习曲线,只要你沉下心去学,多花点时间,总会跨过那个曲线,后面学习过程就会变得很平滑。学C++也类似,建议大家不要知难而退,而是要迎难而上,翻过大山也许就能看到彩虹。
这里我也提自己一个观点,我认为把C++当成编程语言的入门课其实是有好处的。因为只要你学会C++,其它面向对象的语言学起来都会很快,只要看一遍语法就能立马上手。毕竟难的都会了,简单的不更轻松吗?


8.编码:隐匿在计算机软硬件背后的语言


这本书是我研究生时看到的课外书,也推荐给大家。
书很有趣,像讲故事一样把计算机的前世今生和重要知识点娓娓道来。如果想偷懒,不想读厚厚专业书的同学可以通过看这本书来了解计算机体系的整体脉络。


2.乘龙术

介绍完可以屠龙的书,再来讲讲自己读过的一些比较好的书。这些书可以提高你的专业技能,让你的职业道路走的更扎实,更长远,所以我称为乘龙术。


1.C语言

  • 《C程序设计语言》,机械工业出版社,作者Brian W. Kernighan / (美)Dennis M. Ritchie。

C语言之父写的,入门经典书籍,建议大家作为C语言入门的第一本书。

  • 《C Primer Plus》 ,人民邮电出版社,作者Stephen Prata。

可以作为C语言工具书,也可以作为入门。

  • 《C和指针》

深入了解指针,看完以后对指针不再害怕。

  • 《C陷阱与缺陷》

看完后可以避免C语言开发的一些坑。


2.Windows开发

  • 《Windows程序设计(第5版 珍藏版)》

这是我在大二学C#时候看的一本书,里面的代码我全部在电脑上手打了一遍。
这本书主要介绍Window系统桌面软件的开发,想了解和从事这方面开发的同学可以看看。
看过这本书,你会对你电脑上用到的软件有一个更深的体会。窗口是怎么出来,菜单点击后是怎么处理的,动画是怎么绘制的,软件又是怎么和操作系统通信的,看完这本书你通通都会知道。

  • Windows核心编程》

如果想对Windows系统有更深的了解可以看看这本书,我当时在图书馆看到了这本书,讲的也挺不错。


3.Linux

  • 《鸟哥的Linux私房菜》

Linux入门书籍。我记得在大一下学期,有段时间自己痴迷安装各种版本的Linux系统,到最后虚拟机上把当时各种Linux发行版都装全了。


4.数据结构与算法

  • 《编程之美》

这本书我没有看完,但里面的讲的算法都很不错,想对算法有提高的同学这本书一定要看看。


5.Java:

  • Java核心技术 卷1》《Java核心技术 卷2》

这两本书是在上Java课时看的,同样不是我们教材,在图书馆发现的。
讲的很好,可以作为Java入门书籍。

  • 《Java并发编程实战》

讲Java并发库的一本书,这本书强烈推荐。自己看这本书的时间很晚,是研究生找工作时候看的。
找工作时基本都会问到书里的知识点,看这本书可以在找工作时给你带来直接的价值。

  • 《Java并发编程艺术》

同样是讲Java并发编程的。Java并发编程实战相对来说全是干货,看起来可能比较晦涩。这本书可能看起来更通熟易懂些,但是没有Java并发编程实战全面,大家可以搭配着读。


6.Android

  • 第一行代码 Android》

Android开发入门书籍。因为我当时学Android时候这本书还没有,所以自己不是通过这本书入门的。
但是后面看过,讲的不错,可以作为入门书籍之一。

  • 《Android 开发艺术探索》

这本书强烈推荐。是从Android初级向中高级进阶的必看书籍,里面讲的知识点都很好。重要的是Android面试会问到很多这本书里面的知识点,找Android开发必看。

  • 《Android 系统源码代码情景分析》

从源码分析Android系统的书。自己找工作时候反复看了很多遍,面试时候也问到了一些知识点,找Android开发的也可以看看。


7.Java Web

  • 《深入JavaWeb技术内幕》

从Android向后台转型过程中看的一本书。比较全面的介绍了Java Web知识,可以当作入门辅助书籍。

  • 《Spring in action 中文版》

学习Spring时候看的书,主要介绍了官方文档的知识。讲的很全面,准确度也高。

  • 《Spring MVC学习指南》

Spring MVC入门书籍,可以快速上手Spring MVC。

  • 《Maven实战》

学Java Web离不开Maven,这本是Maven入门书籍,讲的很全面。

  • 《大型网站技术架构》

找工作时看的书,主要讲网站从小到大发展过程中技术架构的演进。看完以后你就知道为什么一个淘宝首页会有那么多程序员维护了,也能让你有理有据回怼对产品提出的“给我做一个淘宝,美团”的需求。

  • 《大型分布式网站架构设计与实践》

主要介绍大型网站建设过程中使用到的一些技术,可以作为技术参考书。

  • 《大型网站系统与Java中间件开发实践》

从中间件角度介绍大型网站的建设。


8.编码素质

  • 《大话设计模式》

大二上设计模式课时看的书。当时的教材晦涩枯燥,在图书馆闲逛时看到了这本书。这本书以讲故事的形式逐一介绍了23种设计模式,生动形象。还有代码示例,可以变学边实践,是入门设计模式的一本好书。

  • 《程序员修炼之道:从小工到专家》

大四时候看的书,可以学习书里提到的编码技巧。

  • 《代码大全》

大四时候看的书,同样可以提高自己的专业素质,构建专业的编码风格。


9.人文

  • 《疯狂的程序员》

大一时候看的一本小说。讲了一个程序员大学、工作、创业、以及爱情故事经历的励志书籍。我在手机上看完的,看的时候热血澎湃,让我在大一就对程序员这个职业有了一个初步的认识。

  • 《史蒂夫·乔布斯传》

这本书大家应该都听过,是我在大四时候看的。当时实体书比较贵,图书馆也没这本书,我在网上下载了电子版,花了两天时间趴在电脑上看完的。可以学习一下乔布斯创新和执着的精神,苹果有如今的成就不是偶然的,与乔布斯的做事风格有直接的关系。

  • 《浪潮之巅》

研究生时从图书馆借的一本书。是一本互联网发展的历史书,看完可以对互联网的历史有一定的了解。

  • 《黑客与画家》

硅谷教父写的书。我在研一时候看到的书,可以一定程度提高程序员的情商,财商。



3.立地成佛

这小节的标题是立地成佛。
别想太多,不是说你看完这些书就能成佛。看这些书只是让你的计算机基础更牢固,但是成为高手还有很长的路要走。
上面这些书也只是我读过的书的一小部分,还有很多书我没有提到。要想有更高的成就只读专业的书是不够的,还得读文学、历史、经济、商业等各方面的书。
而且光读书也不够,只能成为书呆子。学很重要,实践更重要,只有把学到的知识应用出来产生价值才能证明你确实学到了,也就是人们所说的学以致用。
所以在这里也建议大家多读书,读好书。
如果你是你学生,很幸运,你有大把读书的时间。少打点游戏,少看点综艺节目,少睡点懒觉,多去图书馆走走,自习室坐坐,你会拥有更精彩的人生。
如果你已经步入职场,工作再忙也要抽出点时间去多读读书,去升华一下自己,只有这样,在这个贩卖焦虑的社会你才会比别人多一份淡定与从容。
最后希望大家都能活到老,学到老,立地成佛。在此也我拍一张自己书架一角与大家共勉。

这里就说说力扣君擅长的方向吧,算法和实习。

题主的情况大概和力扣君一个朋友有点像。他大学的时候热衷参加社团活动,积累了很多社会经验,但是代码能力拉下了很多,现在毕业两三年,在一家创业公司作为一个程序员也拿着不菲的收入,代码写的也不错。既然有一个现实中的案例,那就不如看看他的经验分享吧!


一、学好算法,进而可以选择一家节奏较慢的中型公司实习

之所以学好算法,是为了向面试官展示你的潜力,简单的说,写代码很多时候并不是那么好速成的,或者说,并不是那么好一步到位达到很高的水准。往往,你的算法能力标志着你个人的潜力,会让公司觉得你有良好的程序员思维,值得培养。在进入中型公司实习,不建议一开始就挑大梁,选择比较难的工作内容。既然你能手打代码,那一定也有阅读代码的能力。在此基础上主动修一些 bug、多向有经验的同事请教,这样加深自己的理解。力扣君一直认为实战、有ddl,会最大效率的加速一个人学习代码的进程。

二、选择适合的大型项目实操

如果进入理想的公司无果,建议去 Github 上完成一些大型项目,啃大型项目很苦,但这确实是一条不错的快速成长途径。大型项目的编写最好找一两个水平比自己高的朋友来进行互助,因为其中有很多的困难,需要有经验去带你渡过。如果前期很多的坑,靠自己踩过会非常幸苦,有人带的话会节省很多时间。

这里推荐去做一些自己感兴趣的方向,你可以选择做网站前端或是游戏前端,这两个相对好上手一点。

三、找准方向,及时转型

如果上述两个方法都不能很好完成,也可以考虑转型成产品经理。现在会一些代码的人去应聘产品或者策划往往会更容易成功。因为可以更好理解程序的需求,所以这类产品经理也会相对更受欢迎。

亡羊补牢,为时未晚。管因为什么原因,只要自己有意愿学习编程,那无论何时开始都有机会。程序的入门并不困难,害怕的是有急功近利的心态,如果只有半桶水就出门晃荡,会透支他人对自己的信心,也会让自己对自己失去信心。

程序,需要多写、多练,并与时俱进。

大学是系统性地学习基本原理的时候,没有必要追逐最新最流行的编程语言和开发框架,毕竟到了毕业工作的时候往往又有很多新的变化。把基本的知识体系掌握好会终身受用无穷。大学只是提供环境和条件,学习的方向和重点需要自己把握。下面这几方面对于本科生是尤其重要的。

计算机体系结构:这是理解计算机工作原理的基础,即使以后只做软件方面的工作,这方面的知识也是至关重要的。一方面软件运行在硬件上,理解计算机各部分的工作原理以及他们之间的通信机制对于代码优化和系统级的软件开发都是必须的;另一方面硬件只不过是石化的软件,软硬件不过是逻辑组合的不同实现方式而已。很多美国大学的这门课程都会让学生用代码把一台虚拟计算机实现出来,这确实是个好办法。

操作系统:所有做软件开发的人都需要对进程、线程、内存的管理有清楚的理解。操作系统为在计算机上运行多个应用程序提供基础,Docker 等这些现在流行的技术也无非是把操作系统提供的机制和工具进行了封装而已。

编译原理:编译原理让你理解程序在运行的时候具体在做什么。只有能把高级语言的每条语句在大脑中映射到 CPU、寄存器、内存里栈和堆的具体操作,才能写出高效、错误少的代码。每个计算机专业的学生都应该尝试自己实现一个语言。

一门系统编程语言(C/C++):C 语言仍然是最好的用来学习编程的语言。它在语言层面的概念比较少,容易比较快地把注意力从语法转到程序设计上。同时由于 C 在标准库里没有提供现成的容器,所以不可避免地需要学习如何实现基本的数据结构:不同类型的链表、队列、字典等,在实现这些结构的时候又不可避免地要熟悉指针操作和递归。虽然在日常软件开发中很少会需要自己实现这些容器,但是理解他们的实现和性能特点可以避免你用 Java 之类的语言时什么都用 Vector 来做。

算法、数据结构:如果你将来做系统软件开发,将会需要自己做一些算法的实现。即使是做应用软件开发,也需要在这方面有足够的知识来权衡不同的选择。虽然现代的高级语言大多提供了丰富的容器、算法函数、中间件等等,只有理解他们的性能特征和资源代价才能作出好的选择。

一门学科的知识体系就好像大脑中的一个架子,一开始搭建它的时候会感觉是个很慢的过程。但是如果你耐心地把它建立起来,再学习新的东西就会知道该把新吸收的知识放在什么位置,它和架子上现有的内容是如何联系的,在理解、记忆、应用上都会事半功倍。

谢谢邀请。随着以AlphaGo为代表的人工智能开始走近人们的日常生活,再叫上程序猿们令人无法不心动的超高待遇,CS当之无愧成为了现如今最炙手可热的专业,没有之一。在某些论坛上,劝人报考CS、转CS已经成为了热心群众的日常。而出国读CS的浪潮,更是一年比一年火热。这两年接触到很多学生:学EE的、学数学的、甚至学生物的都相继转了CS。确实,CS良好的就业出路、不算很高的学习门槛,都让它成为了这个年代学生们的一个好选择。而以美国为代表的国外优秀的CS学习环境和就业环境,也吸引着万千学子申请国外的CS项目。

然而,在选择CS之前,你确定自己真的了解,真的适合以及真的喜欢这个专业吗?

在你决定出国继续学习CS之前,你知道CS都有哪些研究方向吗?

你知道CS都有哪些好学校或者性价比高的学校吗?

如果你不能确定自己的答案的话,那么赶紧往下看,这篇文章会帮助你分析、认识、了解CS学习和申请中的方方面面!

本文主要分为四个部分:

  • 第一部分向大家(尤其是想转CS的同学)介绍一下CS究竟是什么,要学什么;
  • 第二部分则介绍了CS的申请和研究都有哪些具体的方向;
  • 第三部分主要分析了以北美为主的学校的CS实力和申请难度;
  • 最后一部分是CS申请出国的基础要求和准备。

第一部分:CS是什么,要学什么

维基百科里是这么介绍Computer Science的:

Computer science is the study of the theory, experimentation, and engineering that form the basis for the design and use of computers. It is the scientific and practical approach to computation and its applications and the systematic study of the feasibility, structure, expression, and mechanization of the methodical procedures (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to, information.

可以看出,计算机科学是一门软硬件结合、理论与实践结合的科学。国内许多重点大学本科计算机专业的官方名称为“计算机科学与技术”,这也说明CS既包含理论研究,也包含实践应用。

那么计算机专业的主要课程都有哪些呢?

以某985学校为例,在本科期间需要学习的基础数学课程有:高等数学、线性代数、概率统计、离散数学;专业必修课程有:计算机科学技术基础、C语言程序设计(及实验课)、C++语言程序设计(及实验课)、数字逻辑(及实验课)、数据结构与算法分析(及实验课)、汇编语言程序设计(及实验课)、JAVA程序设计、操作系统原理(及实验课)、计算机组成原理(及实验课)、计算机网络(及实验课)、数据库系统(及实验课)、软件工程(及实验课)、编译原理(及实验课),以及一些开发实践实习的课程。

从课程安排和学习中,可以看出CS专业要求学生能够理解计算机系统的运行原理,了解计算机软硬件的组成构造,明白高级语言与低级语言乃至机器语言之间的关系,和高级语言被计算机编译理解的过程,掌握基本的程序设计和软件开发技术,能够深入理解计算机操作系统、计算机网络及数据库技术等。CS专业的同学一般应该具有较强的逻辑思维能力、动手能力和创造能力。

所以,如果你喜欢理论研究和实践相结合,对编程和debug(调试除错,需要条理和耐心)感兴趣,不排斥长时间对着电脑工作和思考,喜欢和小伙伴们一起开发很酷的应用,或者想要研究与计算有关的各种问题,那么CS专业很可能是一个不错的选择哦。

【区分:CS和CE】:

有些同学可能会发现,在申请一些学校的时候,有Computer Science和Computer Engineering两种项目傻傻分不清楚。实际两者之间最基本的区别可以归结为理科(science)和工科(engineering)的区别。从操作层面来看两者的区别是CE的学生拥有对电路、电子学和VLSI设计的非常深厚的认知,而这些都是现代计算机实际结构中至关重要的;CS的学生学习的是数学、算法、架构、计算和编程语言等,这些构成了高级程序设计和计算的基础。我们可以理解为CS是偏理论的,CE是偏应用的。不过需要注意的是,不同学校可能有着不同的划分方法,我们还是要以学校官网的描述为准。

第二部分:CS的研究方向有哪些

CS有很多不同的方向和分支,申请CS项目的时候(特别是Ph.D.),选择方向是一个大问题,因为不同的方向有着不同的课程、培养方案、实验室,也对应了不同的毕业去向,以及竞争激烈程度。

在申请的时候,我们最好有1-3个主申的方向,最好不要完全专注于过于热门的方向(否则有全聚德的风险)。比如AI,可以看下公众号之前发的这篇文章:

申请方:AI Ph.D.美国申请总结+规划建议

博士的方向主要还是取决于自己导师的研究方向,但是理论上讲除非项目限制,入学之后依然可以改变自己的研究方向。有的学校(比如马大的Ph.D.项目)是录取学生到general program里,入学之后再来确定导师和方向。但是在申请的时候,学校还是会让大家填写自己的兴趣和倾向的。所以,无论如何,在申请之前,我们还是要了解CS都有哪些研究的方向。

按照US News的分类,Computer Science被分为四个大类:AI,Programming Language,Systems,Theory。不过在CS申请的时候(尤其是Ph.D.申请),往往在这个基础上还会再分更细的方向。不同的学校可能会有不同的分类方式(比如把几个小的分支合并起来),这很大程度上取决于师资的分布情况,但是大体上CS的研究与申请可以分为如下几个方向:

  1. Artificial Intelligence and Robotics(人工智能与机器人)

AI是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。主要包括机器意识(包括机器学习,知识表达与推论,机器人),动态系统模拟,动力学计算,触觉控制,自然语言习得与处理,计算语言学,统计语言技术,自动推理,图形图像,人机交互,成像感知与传感器,概率推论,神经估算,计算机视觉,视觉场景认知,模式识别,人工免疫,神经网络,遗传算法,小波分析,信息系统以及计划,信息提取,制造和控制理论等。AI方向的顶级会议有AAAI、IJCAI等。Robotics方向的顶级会议有ICRA、IROS、RSS等。

AI是如今最热门的方向,下面又包含很多细的分支,在申请PhD项目的时候经常是细分到这些小分支的:

1.1 Machine Learning(机器学习)
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。ML方向的顶级会议有ICML、NIPS等。近几年机器学习的热度一直居高不下,尤其是Deep Learning(深度学习),已经被应用于许多其他分支和领域。ML的研究和本科的机器学习课程作业可大不相同,不是“调包”,而是“创造包”,需要比较强的数学能力(机器学习和统计有密切的关系)。目前国内外对ML人才的需求和待遇依然很高,不过随着大量的人涌入这一领域,就业形势不一定会一直好下去。而且随着这个学科的发展和自我完善,市场的需求也会变化。但是毫无疑问,顶尖的ML科研人才依然会非常抢手。

1.2 Computer Vision(机器视觉)
计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是指用摄影机和计算机代替人眼对目标进行识别、跟踪和测量等,并进一步做图像处理,成为更适合人眼观察或传送给仪器检测的图像。比较经典的计算机视觉应用包括识别(如在巨大的图像集合或视频中寻找包含指定内容的所有图片或视频片段)、运动(图像跟踪:跟踪运动的物体)、场景重建以及图像恢复等等。CV方向的顶会有CVPR、ECCV、ICCV等。CV后来居上,目前也是最热门的方向之一,未来的发展前景可期,所以在今年的申请中,CV已经成为了CS申请竞争最激烈的战场。所以如果你想申请CV方向,最好在本科就已经有了CV相关的科研经验。

1.3 Data Mining(数据挖掘)
数据挖掘是一个新兴的方向,是人工智能技术和数据库技术的交叉。数据挖掘一般是指从大量的数据中通过算法搜索隐藏于其中信息的过程。数据挖掘通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来实现上述目标。数据挖掘的顶会有KDD等。有一些学校会在研究领域中单独把DM列出来,有些学校则会将其与大数据、数据库或机器学习合并。数据挖掘更像是运用人工智能技术,解决从海量数据中发现知识的问题,比如社交网络中的关系发现、智能推荐等等。喜欢解决实际问题的同学可以考虑这一方向。

1.4 Natural Language Processing(自然语言处理)
自然语言处理研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。NLP方向的顶会有ACL、NAACL、EMNLP等。NLP也是今年来发展迅猛的一个有意思的方向,一些学校的NLP招生会面向计算机和语言学两个专业背景的学生,足见NLP是语言学和计算机的交叉结合。NLP方向的申请没有ML、CV那么火热,但是应用场景多,发展前景广阔,也是一个很不错的选择。

1.5 Web & Information Retrieval(万维网和信息检索)
信息检索广义上是信息存储与检索,是指按照一定的方式组织和存储起来,并能根据用户的需求要找出其中相关信息的过程。信息检索是一个跨学科的领域,它对应于从信息源集合中找到满足信息需求的相关信息单元的过程。数据通常是文本的,尽管越来越多地使用Web作为数据仓库,已经导致包括多媒体数据,如图像、视频和声音,其中精确匹配被相似性搜索代替。Web & IR方向的顶会有SIGIR、WWW等。这个方向的申请相对没有那么热门,有时会和Geographic Information System (地理信息系统GIS)被划分到一起。但是好像美国国内的学生比较喜欢信息技术这个方向,对转专业的同学来说门槛也相对较低。

2. System and Network(计算机系统与网络)

其实计算机系统是一个很大的分支,内容包括OS(操作系统)、Architecture(体系结构)、Network(网络)等等。系统研究的目标是开发使软件能够在硬件上高效和可移植地运行的关键抽象和服务,为其他软件的研究提供基础。计算机网络是利用通信设备和线路将地理位置不同的、功能独立的多个计算机系统连接起来,以功能完善的网络软件实现网络的硬件、软件及资源共享和信息传递的系统。简单的说即连接两台或多台计算机进行通信的系统。Architecture方向的顶会有ASPLOS、ISCA、MICRO等。Network方向的顶会有SIGCOMM、NSDI等。OS方向的顶会有OSDI、SOSP等。系统与网络是CS下的一个非常老牌的方向,一般的CS系都会开设这个或类似的研究方向。对口的职业包括系统管理员,系统工程师,网络工程师等。与AI等方向相比,更加偏向硬件,出成果的周期也相对较长,所以申请的热度不太高。

3. Algorithms and Theory(算法与理论)

广义上面的算法是指为解决一个问题而采取的方法和步骤,而CS下的算法则是指计算机为了解决某一个问题或者完成某一个任务的一系列清晰的指令。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。现代的算法理论主要的研究目的在于如何开发出更加效率的算法,研究相关的算法的设计方法与实现技术。计算机理论,顾名思义,是为计算机科学的发展与研究提供理论基础的一门学科。这个课程的学习涉及到CS的核心课题,归纳起来涵盖了可计算性、文法与自动机、逻辑学、复杂性及语义学等5个部分,涉及到可计算性理论、形式语言、逻辑学与自动演绎、可计算复杂性和编程语言的语义等内容,并学习和研究这些内容之间的联系。Algorithms and Theory方向的顶会有FOCS、SODA、STOC等。可能是因为对数学的要求比较高,CS出身申请这个方向的人似乎不太多,但是我知道的数学专业转CS的童鞋很多都申请Theory(所以我这种数学渣就望而却步了)。

4. Privacy and Security(计算机隐私与安全)

计算机安全主要是保护计算机与网络免于滥用和干扰。从过去的历史看来,计算机攻击一般来说包含了攻击系统的完整性,保密性与可用性。而如今的信息安全技术一直在发展中,不单包含了对上述攻击的防御,同时也增加了更多的应用,如垃圾邮件,以及防止身份盗用而导致的信息泄露等。Cryptography(密码学)方向的顶会有CRYPTO、EuroCrypt等。Security方向的顶会有CCS、IEEE S&P、USENIX Security等。

5. Database(数据库)

数据库是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库的研究涉及与数据管理相关的所有方面,包括数据存储,数据检索,数据分析和视觉化,如为超大型数据组开发高效算法,为各种新型的应用领域建立大型的数据系统,也有与其他领域进行跨学科的研究,可应用的领域有电脑游戏设计,数据隐私与安全等。Database方向的顶会有SIGMOD、VLDB等。

6. Computer Graphics(计算机图形学)

计算机图形学是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。 如何在计算机中表示图形,以及如何利用计算机进行图形的生成、处理和显示的相关原理与算法,构成了计算机图形学的主要学习内容。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是由线条组成的图形,如工程图、等高线地图、曲面的线框图等,另一类是类似于照片的明暗图(Shading),也就是通常所说的真实感图形。Graphics方向的顶会有SIGGRAPH等。对数学能力的要求很高,不喜欢数学的同学要慎重哦。

7. Software Engineering(软件工程)

软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。软件工程的关注点是如何为用户创造价值。在学习内容方面它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。SE方向的顶会有FSE、ICSE等。

8. Programming Language(编程语言)

包括开发新型编程语言以助程序员实用高效地开发可靠的软件,计算机辅助语言学习,计算语言学,从初阶的打字理论,自动定理证明,语义学等发展到如今的基于语言的途径以解决计算机安全与分布式编程中的重大问题,语言应用,编程分析与优化等,可以从根本上提高软件可靠性与安全性。PL方向的顶会有PLDI、POPL等。

9. Bioinformatics and Computational Biology(生物信息学与计算生物学)

人类基因工程的完成对现代生物学中的新型计算和理论工具提出了新的要求。这些计算和理论工具对于分析,理解和控制生命的具体信息都是至关重要的。生物信息学与计算生物学在此历史背景下应运而生。此方向属新兴的研究,主要是利用应用数学,信息学,统计学与计算机科学的方法来研究生物学的问题,因此也需要从事此方向学习和研究的学生有较强的数学和统计背景。目前来说研究方法包括对生物学数据的搜索(收集和筛选),处理(编辑,整理,管理和显示)及利用(计算和模拟)。此方向的顶会有ISMB、RECOMB等。这也是一个新兴的方向,不过对学生有比较高的要求,最好有计算机和生物的双重背景,研究经历也非常重要。

10. Human Computer Interaction(人机交互)

人机交互是一门研究人、计算机以及它们之间的相互影响的学科。人机交互技术是指通过计算机输入、输出设备,以有效的方式实现人与计算机对话的技术。它包括机器通过输出或显示设备给人提供大量有关信息及提示请示等,人通过输入设备给机器输入有关信息,回答问题等。人机交互技术是计算机用户界面设计中的重要内容之一。它与认知学、人机工程学、心理学等学科领域有密切的联系。HCI方向的顶会有CHI、UbiComp/Pervasive/IMWUT、UIST等。

11. High Performance and Scientific Computing(高性能和科学计算)

高性能计算指通常使用很多处理器(作为单个机器的一部分)或者某一集群中组织的几台计算机(作为单个计算资源操作)的计算系统和环境,来解决主要的科学和工程问题。科学计算,又称为计算科学,它的主要学习内容和研究领域是利用数学模型的构造以及数量分析的技术,通过计算机来分析和解决科学问题。在实际的应用中,科学计算经常用于计算机精品真以及其它各种问题的数学计算,包括数值模拟、模型拟合与数据分析以及最优化计算等等。数值分析,是科学计算专业方向中所会应用到的核心方法。HPC方向的顶会有HPDC、ICS、SC等。

以上列出的是CS申请中经常出现的和比较热门的方向,其实除此之外还有若干有趣的方向,如Visualization(可视化)、Virtual Reality(虚拟现实)、Multimedia(多媒体)、Mobile Computing(移动计算)、Distributed Computing(分布式计算)、Management information system(这个之前也发过专栏的,感兴趣的可以去看)、Quantum Computing(量子计算)等等。当有的学校有这些方向的专家时或者是在这个交叉方向的交叉学科比较强的时候,也会单独开出这些方向供大家选择。

需要注意的是,申请人少的方向不一定就比竞争激烈的方向容易申,因为学校的招生人数也是有配比的,比如这个学校AI方向的老师非常多,所以AI方向的招生人数也会比其他冷门方向多很多。所以还需要分析学校的招生情况(可以看各方向的教授、学生人数和背景),来决定自己到底主申哪些学校和方向,一些招国际学生非常少的方向需要慎重考虑。

第三部分:北美学校CS排名和申请分析

在申请的时候,排名也是非常重要的依据之一。对CS专业而言,专排的价值比综排要更高,不过综排也有一定的参考意义。USNews对美国国内学校的专业排名还是相对比较准确的,其他排名如QS、ARWU等也都各有千秋,可以综合考量:

  • CS&IS Ranking(QS)
  • Computer Science & Engineering(ShanghaiRanking)

除此之外,cs rankings排名是众多的CS申请者都会借鉴的,是由UMASS的Emery Berger开发的,完全根据各个学校的Faculty在顶级会议的发表情况进行排名。对于Ph.D.学生来说,更应该关注的是领域内老师的研究实力,因此csrankings.org的排名就具有非常大的指导意义。这个网站还有细致到各个方向的学校排名以及学校内各位老师的发表情况和链接,对申请选校和套磁都非常有帮助。

Profetcher也是一个分方向查看学校和老师排名的好工具,直接搜索方向的名称就可以看到学校的排名和老师的排名。在我们申请方网站和APP上也可以查看学校项目的排名,同时可以快捷查看项目详情。

以上是查看和查询学校排名的方法,有些同学可能已经开始发愁了:

这么多排名,这么多网站,这么多学校,还要分不同方向,怎么看得过来呢?

——为了让大家看起学校排名更加方便,我在这里把CS Rankings排名、USNews美国专排和综排、以及大家比较关心的AI方向排名都统计到一起做成了表格,篇幅原因,只统计了cs Rankings上前50的学校。全网独此一份哦,还不快收藏起来!

表中前四所学校就是CS中的“四大”,非常全面,各个方向都很优秀,也非常难申,尤其是Ph.D.项目,牛校+高三维+牛科研+牛推是基本操作。MS项目也竞争激烈,不过其中CMU有些特殊,在于它有很多不同的MS项目,其中有一些门槛不是很高,条件比较普通,想去名校的同学可以一试(之前在cs的专业群里也发过CMU不同项目的申请难度,感兴趣的小伙伴可以加入我们CS申请的vx: a2liuxuejiangzuo

CS是一个相对较新的学科,所以可以看到表中很多学校的专排和综排之间不太匹配,比如著名的几所藤校,还有芝加哥大学、杜克大学等名校,在各个榜单上的CS专排可能没有它们的王牌专业那么亮眼,但是由于学校名气大,招生人数一般不多,申请这些学校的难度也不小,尤其是Ph.D.项目,MS申请则和具体的项目有很大关系,有些项目(比如哥大、耶鲁的CS Master)招大陆学生比较多,相对来说比较好去。学校的申请难度与专排、综排、实验室以及地域等因素都有关系,如加州大学系统的几所学校,每年竞争都无比激烈。

值得一提的是,UIUC和威斯康星大学麦迪逊分校都有有奖Master,对于不想读Ph.D.但是想要奖学金的同学来说是再合适不过了。UIUC据说口语24以上就可以申请TA,UW-Madison的项目自由度很高,无论录取到MS还是Ph.D.的track,都会得到TA的保障,而且学生可以切换track,简单地说就是两年之后你可以决定是拿MS学位走人,还是继续读Ph.D.。不过需要注意,有奖的是traditional M.S./Ph.D. program,UW-Madison还有一个Professional Master’s Program,是没有奖的MS项目(可以理解为比较像Meng)。具体的项目细节大家可以去这两个学校官网上去看,这里就不展开了。

第四部分:CS申请的基础要求,以及为什么要申CS

既然CS出国申请竞争这么激烈,那么达到什么样的条件才能申请到好学校呢?或者说,影响申请结果的都有哪些重要因素呢?

1. 院校专业背景:

一般而言,本科生和研究生都可以直接申请美国学校的Master或Ph.D.项目。院校而论,海本申请是最有优势的,大陆学校大概分几个档次,清北一档,往下是上海交大、浙大、南大、中科大等CS强校,能申到美国Top校CS Ph.D.的中国学生大多是来自这些学校的。如果是普通院校,只需要看看本校往届出国情况就可以知道自己的申请大概在一个什么位置了。

2. 专业方面:

如果你本来就是计算机科学与技术或软件工程等计算机相关的专业出身,那么直接申请CS就是匹配的;如果是跨专业申请,也要有一定的计算机基础,即上过计算机基础课程,如C语言、数据结构等,这些要求在学校官网上可以找到。

3. GPA:

对于硕士申请人来讲,大部分美国大学的最低GPA要求都是3.0(4分制),按国内百分之计算应该在平均分80分以上。对于Ph.D.申请人来讲,GPA最低要求一般为3.5,远远高于硕士的要求。根据学校的录取统计数据来看,CS专排TOP10的学校,录取的平均GPA大都在3.5以上,部分学校甚至达到了3.7。

4. 语言考试:

从官网要求来看,大部分学校的CS系对托福ibt分数的最低要求在80~90分,少数顶尖学校达到了100分。不过这只是最低要求,除非在其他方面有非常突出的成就,托福只达到最低分还是非常危险的。所以一般申请Top50学校还是应该考到90+,最好100+。Ph.D.因为大部分要做TA,对口语小分会有比较高的要求,所以申请PhD的同学口语最好有23+(24+更稳)。

大部分学校是接受雅思代替托福申请的,通常要求达到6.5分以上,一些学校会要求7以上,小分一般不低于6分。

学校官网写的GRE要求对中国学生而言,Quantitative的线过低,Verbal和Writing的线过高,这是因为美国人也要考GRE,不用太担心。一般考到320,Verbal 150+,Writing 3.0+就算是过关了(Quantitative尽量满分吧,对大家来说很容易的),315+申请MS成功的例子也不少,GRE对CS申请者而言并不是那么的重要。不过有能力的话还是尽量考高点,尤其是热门学校的申请,可能会通过卡三维来刷人,大家GPA和托福都差不多,GRE要是能有330+也很有说服力的~

5. 科研&实习:

对Ph.D.申请者而言,科研是非常重要的一环,如果作为本科生能有publication就很加分了;作为研究生,就要比拼publication的质量和数量。申请的时候最好申请和自己原本的科研一致的方向,因为只有这个方向的老师才理解你做的东西,对你的研究感兴趣,如果跨方向申请的话,科研的帮助就会打折扣(不过如果你套的导师对你的经历和能力感兴趣,一样能行)。

对MS(非research-oriented)申请者而言,实习和实践经历也是很重要的,毕竟CS是一门看重实践的学科。如果有在大型企业实习的经历,将会有比较大的优势,至少也应该参加一些校内外的编程项目/比赛,代码的质量越高越好,这里推荐Kaggle

申请方:带100多名学生打了2年Kaggle比赛,资深教练告诉你Kaggle的最新变化和比赛指南

6. 推荐信:

越是申请顶尖的学校,推荐信越重要,,特别是对Ph.D.申请者而言,一封牛推有时比一篇paper还有用,毕竟谁不想招个靠谱的学生干活.

以上的几个方面都是越早准备越好,准备得越充分越好。其实在解决这些问题之前,还有一个环节很重要,就是—心理准备。因为出国留学是一件足以改变人生方向、影响整个家庭的大事。在如今转CS的热潮之中,很多人未经了解和评估,盲目跟风学习CS,学习之后才发现自己不喜欢/不适合。所以,想要申请,就要先搞清楚为什么要申请。特别是申请Ph.D.的小伙伴要思考下,国外的学术氛围是不是吸引你,哪个国家是你的首选,同时是不是真心喜欢做科研。希望大家在申请之前有充分的理由和动力,知道自己为什么要申请CS,为什么要去XX国家,到底要申请MS还是Ph.D.项目,等等。

最后,不管你申请哪个学校,哪个项目,都一定要明确自己的目标和计划,不要人云亦云,也不要盲目跟风,要在真正了解和喜欢的前提下去申请,并且认真准备。

当然,如果看了文章之后你对专业还是不够了解,需要得到更多的帮助,也可以预约我们的服务。

关注我,

即可免费领取1.5G 留学干货

责任编辑:
热门阅读排行
© 16货源网 1064879863