大家好,我是程序员鱼皮。最近高考结束了,也有很多同学毕业了,首先祝福这些朋友在人生的新阶段一帆风顺。
刚参加完高考的朋友,面临的最大问题就是选专业,这段时间也有一些家长向我咨询:还能不能选计算机啦?怎么才能学好计算机?
其实很早之前我就做了一个网站 框框大学
,里面有各专业前辈们的学习建议,可以多看看。
https://www.kkdaxue.com
借着这个时间点,我决定写一篇文章,根据我自己以及身边学计算机朋友们的经历和经验,给学计算机的朋友们 10 条 “血泪” 建议,希望能帮助更多想从事这个行业的朋友少走弯路。
对于已经学计算机的朋友,看完文章后可以思考一下:如果再给你一次机会重新学习,有了这些建议,会不会比现在更好?
学计算机的建议
1、慎重选择
相信还是会有很多朋友冲着 “高薪” 的名头选择计算机专业,放到几年前还是合理的,但如今想靠计算机专业轻松拿高薪已经不现实了。
虽然计算机专业并不止于完全饱和,但就业的竞争的确是大大增加,所以千万别幻想学计算机就是月薪过万、年入几十万,要考虑清楚自己是否喜欢计算机、是否适合学习计算机。
如果之前完全没接触过电脑,就不太建议学计算机了,因为大多数学校大一开始就会学习编程语言的,如果你连软件安装都搞不定、打字都打不出来,就已经跟其他同学拉开差距了。
的确勤能补拙,但这是需要一定天赋的,也需要真的热爱。举个真实例子,我大学室友就是很努力的人,但他大学时才接触电脑,打字刚开始都是用单手一个手指一个手指敲的,很多理论知识他能学会,但编程速度就是很慢,学习时的艰辛我看在眼里。
可以提前在网上看一些免费教程自学,如果发现对计算机不感兴趣、或者学习起来很吃力,那么就果断换专业吧。计算机跟数学的关系也是比较大的,逻辑思维能力一般的同学,在学习计算机基础和一些底层原理的时候,会非常痛苦。
2、明确目标和规划
一定要尽早想清楚自己未来要做什么,考研?就业?保研?还是留学?
目标不同,你要付出的行动路径也不同,所以越早明确目标,你走的弯路就越少。
我在网上看到过一些帖子,就像什么考研失败、考公失败、换岗失败之类的,失败的原因有一部分是没有准备到位,在各个选择间徘徊,又怎能到达更远的地方呢?
明确一个目标后,就要根据目标提前做好规划。
比如准备直接就业,那么就要赶紧学好一门编程语言和开发框架,从大一就可以开始加入一些编程相关的社团、学长的开发工作室、老师的实验室等,持续做项目、参加竞赛、准备简历、找实习,给自己增加经验值和履历。有同学说 “后端大三下就要准备实习了”,其实不然,我见过很多学历不高又能进大厂的同学,是从大二暑假就开始找实习了(我自己就是呀)。总之越早学越好,机会是给有准备的人,别等到毕业才意识到时间过得好快。
如果准备考研,从大一大二就可以开始了解了,因为考研每一年都在变化,多了解院校和政策有助于帮你明确目标。考研比较稳妥的话,英语可以提前学起来,但其他的核心学科至少要全力准备一年的时间。
如果打算保研的话,从大一就要开始了解学校的保研政策了,可以多询问学长和辅导员哪些课程好刷绩点、哪些比赛能加分,还要努力修好专业课。尤其是大一,刚开始的绩点如果太差,基本就和保研无缘了。像我大一刚开始的绩点是 3.7,不是很高(满绩点是 5),后来卷了几年、再加上竞赛的加分,才拉到了 4.1 左右,拿到了保研名额。
3、专业和就业的选择
努力很重要,但选择比努力更重要。在专业和方向的选择上,还是要慎重。如果刚开始还不确定自己要进什么样的公司、或者找什么语言和方向的岗位,那么就选计算机科学与技术或者软件工程专业,就业面会更广泛一些,读研也会有优势。
就业需要考虑企业规模、行业、个人兴趣等等。
如果你的目标是公务员、好的央企国企、或者一流大厂,那么最好去读个硕士研究生,当然也不是说不读研就进不了大厂了,只不过机会更少一些。很多的私企小厂,对学历也没有特别严格的要求。
再聊聊行业,大部分学计算机的同学都是去做开发,所以首推以计算机技术为主要驱动力的行业,比如互联网、通信、游戏、软件公司等。还有一些以计算机为主要支撑力的行业,像机器人、新能源汽车、智能制造、物联网等,对于开发岗位也是很友好的。
当然,除了开发之外,计算机专业的同学还有很多可以选择的岗位,像算法科研、技术运营、产品经理、项目管理等等,这些岗位或多或少会和研发同学打交道,有计算机相关的知识背景,求职的成功率会更高一些。
4、自主实践
记住一句话 “只跟着学校学计算机,大概率是找不到工作的”。计算机是一个理论和实践都极为重要的学科,对大多数不搞研究的同学来说,甚至实践比理论更重要。你哪怕不会什么算法,能写出代码也一样可以干活。
所以,自主性很重要。一定要多利用网上的资源自学,而不是每天到点听课就以为能够找到工作了。学校的课反而不是什么都要听,有很多课对你找计算机工作没有任何帮助,比如一些文化素拓、大物实验课之类的。我对这一点的印象太深刻了,我就属于刚开始跟着学校老师的 ppt 学习,后面意识到跟其他学校同学的差距后,疯狂自学,能不听的课绝对不听,专心写我的 Bug。
有同学会好奇了:你这样不会耽误绩点和学分么?
别担心,完全不会!老实说,只要你利用网上的资源自学好,再回过头来听学校的一些专业课,会发现真的很简单。比如我们大三上了一个前端 web 开发课,因为之前我已经写了 2 年的前端,所以这个课从来没听过,结果最后考试的时候,5 分钟左右我就第一个交卷了,98 分。拜托,考试的那些题目跟公司的面试题比起来,连个零头都算不上!
除了自学之外,前面也提到了,要多做项目、参加竞赛、参加一些工作室、还可以参加一些开源项目来实践。像我是大一就加入了学校的网站建设工作室、大二成为负责人,这段经历是我找工作的一个重要加分项,也为我后面带团队做项目、自主创业打下了基础。
5、持续学习
学计算机,千万不要三天打鱼两天晒网,必须每天学、坚持学。
尤其是刚开始学编程语言的时候,大部分同学的学习模式还没转变过来,可能还跟高中似的背书呢,很有可能就是学了忘、忘了学,所以哪怕只间隔一天,你都要花更多的时间把之前学过的内容捡起来。
做项目也是一样,过个一两周自己之前写的代码估计都不记得了,所以最好还是投入连续的实践学习,效率更高。
大家也要珍惜机会,大学是为数不多能让大家专心学习的地方,千万不要摆烂,要让自己每天都有事情做。
唉,实话说我真的很怀念那段时间在教学楼、图书馆、实验室自习的时光,不用处理各种各样的消息、也没有对未来的恐惧。
6、走对圈子跟对人
拒绝无意义的社交,而是要向优秀的人靠齐,抱团取暖。
比如可以向学长请教学习求职经验、找队友一起参加竞赛、找老师争取一些项目资源等等。当然,谈恋爱也很重要,不过不要强求缘分哦,你变得优秀了,自然能吸引到更优秀的伴侣。
我见过很多同学,就是没有走对圈子,被各种负面情绪所影响了。比如整个寝室都打游戏,你也很难抵挡住诱惑,就摆烂了。像我当时的室友经常晚上打游戏、追剧之类的,我为了防止被同化,就在实验室待到 23 点多才回来,也才能有今天的一些收获吧。
现在网上的信息也越来越充斥着焦虑,这种时候更要找到积极向上的同学,跟着他一起学习进步,千万不要自我放弃。必要的时候,千万不要心疼金钱上的投资,自己的时间比什么都宝贵。
7、学好一门技术
注意关键词是 “一门”,没错,不要求多,只要学好一门编程语言和框架,能做出项目就行了。
我见过不少大一的同学什么都学,Python、Java、PHP、前端等等,我自己当时就是这样的,以追求会的编程语言数的多少来衡量水平。现在回过头看还是有点浪费时间了,其实先掌握一门编程语言,积累了足够多的看文档能力、解决 Bug 的经验后,再学其他语言根本就是洒洒水啦~
刚开始学纠结语言很正常,大一的时候多探索也未尝不可;但如果你学了好几年(等到大三甚至大四的时候),还在纠结选择什么语言,那就不太好了。
对于科班的同学,学校刚开始就是教 C 语言和 C++,可以先全力把这门语言学好;如果是自学编程做项目,那么可以选择 Java 或前端;如果是出于兴趣学习编程,想从事产品、算法方向的工作,可以先从 Python 学起,比较简单易上手。
8、别背代码
学编程最忌讳背代码,而是要多写代码去理解。
我在最开始学习 C 语言的时候,也是敲一次忘一次,很痛苦。但我又不想放弃,于是强迫自己去记忆代码,渐渐地把学编程变成了背单词。但花了很多时间,好不容易把单词背下来了,却还是写不出代码,考试连个链表都做不对,这就让我逐渐怀疑自己是否适合学计算机了。。。
后来和前辈们的交流中,我发现记不住代码是很正常的,倒不如说能记住代码的人 “不太正常”(太聪明、记性好)。
我之前专门写过 一篇文章 ,给大家分享 “编程不忘大法”,还整了个思维导图:
但其实说这么多,总结下来就一句话:多敲、多记、多练、多查。
看完跟着敲,关键知识做好笔记,多做项目多练习,不会和忘了的知识就查。就这么简单~
记忆力不是你学不好编程的理由,我说的。
9、重视基础
计算机基础知识有很多,最核心的是三大件:数据结构和算法、操作系统、计算机网络,当然计算机组成原理、密码学、编译原理也算是基础,只不过相对前几个,实际开发应用的机会更少了。
基础知识是区分科班和非科班同学的重要因素。很多同学不注重基础,以为把代码写出来、项目做几个,就稳能找到工作了。几年前可能还行,但现在大多数公司面试都会考察计算机基础,手写个算法题,甚至有些让你手撕红黑树、手撕 B+ 树等等。为什么要考基础?虽然平时开发项目不一定会直接用到,但有了基础后,你写代码遇到问题的概率会降低、出了问题更好排查,而且能想到更多更好的技术实现方案。
注意,有同学觉得工作用不到算法,很可能只是因为你没有学过算法想不到更好的方案罢了。
举个例子,你熟悉操作系统,就知道线程池的核心参数怎么设置能提高并发性能;你熟悉计算机网络,就知道怎么优化请求性能;熟悉算法,就能写出时空间占用更低的程序。
但有一点必须要强调,我发现目前流行一股风气,把计算机基础看得过于重要了。可能一个项目都没有,就天天背操作系统的八股文、刷什么图论之类的算法,这就有点本末倒置了,没有项目连简历关都过不去,背再多题目又有什么用呢。找工作能干活是前提,而基础好是一个加分项。
另外有一点,基础不是靠突击就能巩固好的,如果是科班的同学,建议从大一开始,就通过看一些书籍和视频接触些基础知识。等之后要找实习前几个月,可以开始每日刷算法;距离找工作一两个月左右,可以再重点巩固八股文,而不是背了就忘。
10、软实力的提升
大学就是一个真实社会的缩影,在这里不仅要学会技术,更要学会为人处世之法。
比如沟通交流能力、责任心、表达能力、信息收集能力、问题解决能力、工作拆解能力、复盘总结能力、组织管理能力等等。
我也是在大学期间参加了各种竞赛、作为工作室的负责人、甚至还开过打印店,锻炼了自己的上述能力,也建议朋友们有机会的话,一定要多跟同行交流、多作为负责人带队参加竞赛,大学期间如果能积累到一些人脉和物质资源,必然是极好的,可能会终身受益。
就聊到这里吧,毕竟写了 4000 多字真的很累啊!以上仅个人观点,有帮助的话给鱼皮点个赞吧~
可访问我的 Github:https://github.com/liyupi ,了解更多技术和项目内容。