【规划篇】如何规划自己的大一生活
说实话,计算机专业的同学和其他专业还是比较不一样,其他专业的学生,同一个班级的同学,可能到了大四,差距也不会太大。但是计算机不一样,对于计算机的同学,入学时同一个起点,不同规划的人,一年后大家的差距就非常明显,甚至有些人一年后,就比很多大四的同学要厉害了,到了毕业,你们的差距就是天差地别,甚至有些人毕业后的起点,是另外一些人这辈子都无法触及到的。
所以呢,对于学计算机的同学,做好自己的规划,往正确的方向去学习,是非常重要的一件事,不然就是大学毕业,要么失业要么去到一些非常差的公司了。
在帅地的大学生涯里,我觉得我混的还不错的,而且在我的四年大学里,没有依赖任何一个人,完全来自于自己的摸索,实现了毕业进大厂,半年挣到人生第一个 100 万,大厂工作一年辞职创业……,所以我写的大学规划,可能会和别人写的有一点不一样。
下面我先跟大家讲一讲我的故事,然后再给出参考建议。
大一第一学期的故事:C语言与转专业
其实我这个人,不是特别喜欢告诉别人你要去做什么,更多的还是希望通过分享自己的故事,让大家自己去感受,之后基于自己的情况,再去做出符合自身情况的规划,所以下面先简单聊一聊我的大一。
我大一第一学期读的不是计算机专业,而是木材科学与工程,这是一个非常冷门的专业,当时高考没考好,所以我那会的想法就是:以服从调剂的方式进去学校,然后再找机会转专业到计算机专业。
我大学第一学期的目标非常明确,那就是希望第二学期能够成功转专业,只要做好的这个事情,其他事情都是浮云,于是在我进入大学那会,我就通过公众号啊,论坛啊,学校 QQ群等渠道,把转专业所需要的条件全部掌握了,无非就是对英语,数学绩点有要求,然后参加 C 语言考试。
所以第一学期,我的数学和英语成绩,是我大学四年的绩点巅峰。
至于 C 语言的学习,大概是在 11 月份开始学的,我这个人学起来比较专注和疯狂,要么不学,要么就天天学,大概学了一两个星期,我就已经学到了指针了,还做了一个贪吃蛇游戏,不过游戏的源码是我从网上找来修改的。
反正那两个星期学的挺入迷,中午放学回来,一边吃午饭一边刷视频,下午有时候就不去上课了,去不去上课,主要看自己的心情以及啥课程,晚上刷 C 语言刷到 12点(因为12点要关灯睡觉了),有时候去了课堂,也是自己看 C 语言,按照这股激情,想不快都难。
后面我有个同学,计算机专业的,来了我学校,我发现他的 C 语言还没有我好,本来他想吹 C 语言有多难多难多,没想到最后是我教他做作业了。
后面我了解到转专业考试,需要在 OJ 上做题,所以我就给一些计算机专业的同学借了 OJ 掌握,开启了刷题之路。
记得第一道题就是 A + B,但其实我非常懵逼,虽然我知道 A + B 程序怎么写,但是我不知道它要我干啥,所以前面的一些题,我主要是看答案来做的,后面就慢慢熟悉了 OJ 的刷题规则了。
于是我花了几天,把 C 语言的几十道题都刷完了。其实这个时候的我,比大部分科班的人都要强了。
按照我这种准备方式,转专业考试那就是手到擒来,所以在第二学期开学转专业考试的时候,我很轻松就通过了考试,很轻松就成为了科班人员,并且我对 C 语言的掌握,也超过了大部分的科班人员。
其实参加转专业的人很多,有一些还是我的同学,但是好多人都转失败了,因为他们直到转专业那一刻,C 语言的基本语法都不懂,或者等到了很晚才去准备,对于这样的学生,学院老师,估计也不大想收你了。
而我则不一样,我的目标非常明确,这一学期,其他的都可以丢,唯独转专业要成功,其他奖学金啊,活动啊,比赛啊,不好意思,我没有兴趣,当然,对于感兴趣的我还是会去玩,只是我不会为了那些很虚的东西去花时间参加那些很虚的活动。
大一第二学期的故事:每天都在折腾
我特别感谢自己在这一学期的各种折腾,因为这一学期的折腾,让我提前掌握的很多东西,更加明白了自己未来的规划,同时也让我感受到,只要你想学,一个学期真的可以学习好多好多好多东西。
其实转专业过去之后,我个人对 ACM 是特别感兴趣,觉得好牛逼啊,如果我能够拿一个奖,那这个逼装起来就太爽,但是很遗憾,我并没有进到 ACM 集训队,因为当我们转进去计算机专业的时候,已经错过了考试了。
虽然没有混入 ACM,但我也不甘拉下,于是各种刷题,学算法,学习数据结构,记得当时天天不是刷题就是学数据结构,反正无论上啥课,我都是课堂上刷数据结构的书,回宿舍敲代码,做算法题。
按照这股劲,我记得老师队列还没教完,我已经把图论相关的刷完了,自己也接触了各种算法思想,刷了不少算法的书。
后面也不知道怎么回事,学着学着,就不想天天整算法,数据结构啥的了,而是想去做一个游戏,APP 之类的出来,最好做出来之后,可以给别人玩,然后我嵌入广告,挣点广告钱。不得不说,对于挣钱这种事,我真的是充满动力,,,
于是我开启了折腾写软件的道路,先用 C 语言写了贪吃蛇啊,俄罗斯方块,当时我看了一本 AI 的书,还写了一个 AI 版俄罗斯方块,让我初步接触了 AI 是个啥玩意,后面我还上传到了 CSDN 赚佣金
后面我觉得 C 语言写的游戏,界面太麻烦了,于是我了解到 windows 编程可以绘画各种界面,于是我怀着好大的期待,买了一本厚度 900 多页的 windows 编程,名字貌似是叫做《Windows程序设计(第5版,珍藏版)》。
那会也是一整天看的那种,记得不到一个月,我就差不多刷完了,当然,很多只是简单瞧一眼了,记得当时写了个计算器,后面我就放弃了,因为我又没兴趣了。当时学习 windows 程序设计,让我学到了很多东西底层的东西,比如鼠标移动啊,各种点击事件啊,等等。
接着我又多 Android 萌生了兴趣,寻思写个 APP 放在应用商店里,于是我刷了《第一行代码》这本书,跟着做了一个天气预告,之后买了几个项目实战,做了一个背单词之类的 APP,但是做的很粗糙了,后面我也没兴趣了,也就没继续做了。
是的,你没看错,学习数据结构,算法,学习做一些游戏,学习 windows 程序设计,学习安卓,这些都是我在第二学期 + 暑假做的事,还有其他乱七八糟的。
虽然这些东西都是浅浅接触,但是我觉得对我的编程能力提升很大,同时也明白了一些东西:那就是,自己真的很渺小,曾经还想成为一个编程大佬,做出几个牛逼的软件,或者拿几个 ACM 大奖,,,然而啥也没实现。
说实话,大一之所以这么折腾,是真的因为特别感兴趣,但是在之后的大二开始,就少了这股劲了,不过那会也有新的目标了,那就是拿个大厂 offer。
如何规划自己的大一
上面我已经说了我的故事了,不知道你看了之后是什么感想,如果你和我有着一样的折腾,那么恭喜你,我觉得你做的很好;当然,如果你没有像我一样折腾,但是这一年有在认真学习编程,比如把数据结构,C 语言,算法,都学的很好,那么恭喜你,我觉得你也做的很好。
帅地作为一个过来人,这些年也接触了非常非常非常多的学生,如果你和我一样,只是一个普通人,并且未来要靠这个专业去挣钱的,那么我觉得,大学的规划,真的非常重要,但是呢,我又觉得,对于大一,也不用把自己限制的太死,所以呢,我也不会规定你需要去学习什么。
但是呢,无论怎么样,如果你想要成为一个优秀的人,想要让自己在未来有更多的选择,那么我们的大一,有些内容我觉得是必须要学的。
核心一:学好一门语言
学好一门语言的核心就是 刷题 + 掌握核心原理。
一般来说,大一很多学校会教 C语言,也有部分学校是教 Python 或者 Java 来作为自己的第一门语言,不过我个人是更加推荐学习 C 语言,所以下面的内容,也是以讲学好 C 语言为主。
怎么样才算是学好呢?考试高分 不等于 就是学好了。
首先,我认为学好编程,学好一门语言,前期配合做练习题是一定需要的,因为如果你仅仅只是懂得使用 if, while, for 这些基本语法,那就太简单了,而且学了可能也就忘了。
所以呢,在前期,刷题不仅可能帮助我们去更好掌握这些基本语法,还能提高我们的编程乐趣,更是可以为以后我们学习算法。
那么问题来了,刷什么题?去哪里刷题呢?
一般来说,我们 不需要刷多难的题,只需要刷一些逻辑题就可以了,比如最简单的,打印 A+B;比如通过 for 循环打印五角星;计算 0 ~ n 有哪些数是质数,等等。
通过练习这些,都可以很好提高我们的编程能力,说不定还能让你爱上编程。
至于刷题的地方,很多学校有自己的 OJ 系统,比如以前我们的学校,OJ 上就有 C 语言配套练习题。如果你的学校没有自己的 OJ 系统,那么也没事,你可以去其他学校的 OJ 系统学习这些,比如比较有名的杭电的OJ,等等,自己可以去网上搜索一下哦。
这里需要强调的事,这个阶段的你,就不要去 LeetCode 上刷题了,因为那些都是偏向面试的算法题,还不适合当前的你,当前的你,不需要学习奇技淫巧,而是打好基本功。
其次,学好一门语言,除了要刷题之外,我们还要去掌握它的核心原理。
比如在咱们的 C 语言中,你要学好指针,明白地址的概念,只有你掌握了这个,你才是真正入门了 C 语言。
可能你经常听过这样的话:学好了 C 语言,日后去学习 Java,Python 等,会非常容易。
其实这是有前提的,前提就是你掌握了一门语言比较核心的原理,比如你学好了指针,明白了地址、内存这些概念,那你以后去学习其他语言,就真的很容易。
比如你去学习 Java,在 Java 中,有引用这样的概念,如果你学过指针,明白地址,里面就知道这些玩意了。
所以呢,在大一,你最基本最核心的任务,就是一定要学好一门语言,并且认真去 OJ 刷一刷题。
核心二:学好数据结构与算法
有时候你经常会看到这样的一句话:程序 = 数据结构 + 算法。
我们先不谈论这个等号是否真的成立,不过我们可以从这句话侧面看出,学好数据结构与算法,非常非常重要。
是的,帅地大一的这一年,基本把一大半的时间都用来学习各种数据结构 + 刷算法题,这为我后面学习其他内容以及校招进大厂,打下了坚实的基础,所以我这里建议大家在大一的时候,就要把数据结构与算法学好。
不过据我了解,大多数人的数据结构,学的一塌糊涂,很多人只是掌握了理论,但是让他们学,大盖就是:一看就好,一写就废。
对于数据结构的学习,能够把理论变成代码,非常非常重要,因为你懂和你能够用代码实现,这其中相差十万八千里,所以呢,对于数据结构的学习,大家务必要用代码去实习理论。
很多人可能会写不出来,不过没事,写不出来非常正常,同学们可以第一次完全可以跟着书上的来写,即使是跟着书抄写,你依然会遇到很多 bug,而解决 bug 的过程,能够让你更加深入去理解这些数据结构。所以大家遇到 bug 的时候,千万不要慌,要有耐心去解决,你一定可以从解决 bug 的过程中,学习到很多真正有用的技能。
至于数据结构的话,很多时候,学校自己的书籍,我认为不大适合初学者,因为学校的书籍,很多时候是伪代码实现,这对初学者非常不友好,这里我个人推荐看《大话数据结构》或者《数据结构与算法分析:C语言描述版》。
数据结构的内容可多可少,不过对于初学者来说,不一定需要把所有内容都掌握,核心掌握这几个就行,分别是:链表,栈,队列,二叉树,哈希表,这几个,一定要自己用代码来实现基本的增删查。
这五个是核心,此外还有图论也需要去掌握它的一些概念,图论的内容很难,大家能学多少就学多少吧,学图论主要是理解一些概念。
核心三:算法刷题
学 c 语言的过程中,我们会去 OJ 刷题,但是其实很多学校没有 OJ,找不到刷题的地方,对于这种情况,大家可以跟着课本的课后题做一做,或者网上搜索一下相关的基础题吧。
不过这个是时候的刷题,还不是真正意义上的刷题,更多的还是锻炼你的思维,代码基本功等等。当你开始学习算法的时候,你就会进去真正的刷题时间。
可以说,我大一第二学期,基本大部分的时间,都花在了刷题 + 学习各种算法思想上,比如学习简单的二分查找啊,枚举啊,也有比较难的回溯算法,贪心算法,动态规划啊。
这些对于初学者都非常难,经常就是一道题做大半天,看个答案都要理解两个小时,甚至不一定看的懂答案,比如当初第一次接触 01背包问题,那会我还没有学过动态规划,真的就是搞了大半个月,依然没有理解为啥可以这样做。
不过呢,我非常庆幸自己大一在算法这块的折腾和投入,因为通过刷题,让我的代码能力变强了很多,比如我能够把很多理论,用代码来实现,并且在日后的校招求职中,笔试和面试也给我带来了很多帮忙。
所以呢,我觉得对于大一的学生,第一学期可以好好学习一门语言,自己做一些小项目,到了第二学期,有了一定到编码能力,就要开始刷题了。
那么去哪里刷题?
这个的话,其实网上有很多 OJ 平台,大家搜索一个,然后注册之后去刷就可以了,我当时在自己学习 OJ 刷题 + 注册了一个杭电的 OJ 刷题,不过更多的还是看书。后面为了应付面试,就主要在 LeetCode 上刷题了。
最后
然而,我说的这几个,只是必须要做好的,除此之外,你还可以去学习你感兴趣的事情,注意,无论是什么编程知识,只要是你充满兴趣的,你就狠狠去学,狠狠去折腾,比如写个博客网站,比如做个小程序,比如写个小游戏,等等。这也是我说的,不要太限制自己,因为这些东西,都可以很好提高你的学习能力。
上面写了个人的一些学习经历,以及简单给了大家的一些建议,总的来说就是:主线学好一门语言 + 数据结构 + 算法,副线你可以去多折腾,然后如果有兴趣,就去参加一些算法类或者开发类的比赛。
然后自己规划之后,就好好去学,网上各种焦虑的帖子就不要去关注了,因为有些东西,我们改变不了,还轮不到你来操心,你最好的做法,就是一心投入学习,最好是可以学的快乐。