我先说一件事。
如果是四年前的我,坐在你现在的位置——
刚拿到录取通知书,知道自己考上了一本计算机,心里有点兴奋,有点迷茫,有点不知道接下来会发生什么——
我希望有人认真告诉我几件事。
不是那种”好好学习,认真上课”的废话——
是那种真实的,扎心的,可能让你当下有点不舒服,但三年后回头看会感谢的话。
今天,我来说这些话。
先说一件可能让你不舒服的事
你考上了计算机专业,一本——
你觉得自己站在了一个不错的起点上。
你说得对,这是一个不错的起点。
但我要告诉你一件事——
计算机专业,是这个时代竞争最激烈的专业之一。
不是吓你,是真实的数据——
全国每年计算机相关专业的毕业生,超过一百万。
其中,来自顶尖院校的,来自985、211的,数量庞大——
他们和你竞争同样的实习,同样的岗位,同样的机会。
还有那些自学成才的,那些在GitHub上有大量开源贡献的,那些大二就已经有大厂实习经历的——
你坐在大学宿舍里的第一天,已经有人比你领先了。
这不是让你绝望,这是让你清醒——
清醒地知道,你面对的是什么,你需要做什么,你不能浪费什么。
然后我要告诉你——
这个竞争激烈的赛道上,每年都有人从普通院校杀出来,进大厂,做出好项目,走出一条别人没想到的路。
那些人,不是天才——
是那种从大一就想清楚了,然后认真走的人。
你现在就在想这个问题,说明你有机会成为那种人。
所以听好了——
第一件事:大学第一周,就去配好你的开发环境
不是开学第一个月,是第一周。
不要等到专业课开始,不要等到老师要求——
自己去把Linux装上,把Git配好,把一个你感兴趣的编程语言的开发环境搭起来——
Python,或者Java,或者C++,随便哪个,先把它跑起来。
然后写一个Hello World。
这件事,听起来很小,但它会告诉你一件重要的事——
你是那种主动去做的人,还是那种等着被安排的人。
这个区别,在大学四年里,会被放大无数倍。
主动去做的人,四年后的积累,和等着被安排的人,差距大到你现在想象不了。
第二件事:课程里有一些东西,比你以为的重要得多
计算机专业的课程,有些看起来枯燥,看起来没用,但它们是你整个职业生涯的地基——
数据结构与算法——这是一切的基础。
不夸张,这门课学好了,是你和那些”会用框架但不懂原理”的人,最核心的区别。
大厂面试,算法题是标配——
不是因为工作里天天手写算法,是因为算法题在测试你的思维方式,测试你面对陌生问题的分析能力。
这门课,不要只是应付考试,是要真正理解——
每一个数据结构,为什么这样设计,它解决了什么问题,在什么场景下用它最合适;
每一个算法,它的思路是什么,时间复杂度为什么是这个,有没有更好的解法。
这门课,是你大学里最值得花时间的课,没有之一。
计算机组成原理和操作系统——这是你真正理解计算机的两扇门。
很多人学完四年计算机,写了很多代码,但对计算机本身是怎么工作的,是模糊的——
内存是怎么分配的,进程和线程是什么关系,为什么这段代码慢,为什么那个程序崩溃了——
这些问题,没学好组原和操作系统,你只能靠猜。
学好了,你能真正看见那些别人看不见的东西。
计算机网络——这是你理解互联网的基础。
HTTP是怎么工作的,TCP和UDP的区别是什么,DNS是做什么的,为什么有时候网页打不开——
这些东西,不只是面试题,是你日后做任何互联网相关工作的底层认知。
数学——线性代数、概率论、离散数学。
很多计算机学生,最后悔的事之一,是没有认真学数学。
如果你以后想做算法,想做机器学习,想做图形学,想做任何稍微深一点的方向——
数学,是你绕不过去的门槛。
现在认真学,以后感谢自己。
第三件事:从大一开始刷算法题,不是大三
这件事,很多人告诉你,但你可能觉得还早——
不早。
LeetCode,从现在开始刷。
不是让你现在每天刷十道,是从现在开始,养成这个习惯——
每天一道,或者隔天一道,不求多,求理解,求真正把那道题的思路搞懂。
为什么要从大一开始——
因为算法这件事,不是靠临时抱佛脚能搞定的——
它需要你建立一套思维方式,那套思维方式,需要时间,需要积累,需要做过足够多的题之后,那种”见到题,知道从哪里下手”的感觉,才会形成。
大一开始,你有足够的时间,慢慢建立那套感觉。
大三才开始,你在赶进度,在焦虑,那种状态下学到的东西,效果差得多。
刷题的顺序——
先把基础数据结构吃透——数组,链表,栈,队列,哈希表,树,图;
然后是基础算法——排序,二分,双指针,滑动窗口,递归,回溯;
然后是进阶——动态规划,贪心,图论;
按照这个顺序来,不要跳,不要看见难题就跳过,卡住了就去看题解,理解思路,然后自己再写一遍。
每道题做完,问自己——这道题的核心思路是什么,什么情况下我会想到这个方法,这道题有没有其他解法。
这三个问题,比刷题的数量,重要得多。
第四件事:尽快找到一个真实的项目,做出来
这件事,是我认为计算机专业学生,最容易忽视,但最重要的事之一。
课里学到的,是原理和语法——
但原理和语法,不等于你会做东西。
会做东西,是一种和知道原理完全不同的能力。
它需要你真实地面对一个从零开始的项目——
需求是模糊的,路径是不清晰的,遇到的问题是课本里没有的,解决方法是需要你自己去找的——
在这个过程里,你会学到任何课程都给不了你的东西。
怎么找到第一个项目——
不要等到”我够厉害了”再开始,那一天不会来。
从你感兴趣的东西开始——
你喜欢游戏,做一个简单的小游戏;
你喜欢音乐,做一个音乐播放器;
你觉得某个日常生活里的问题很烦,写一个工具来解决它——
不需要多复杂,不需要多完整,需要的是你真实地从零做出来一个可以运行的东西。
第一个项目,做出来了,放到GitHub上——
然后开始第二个,比第一个复杂一点;
然后第三个,再复杂一点——
这个积累,到大三找实习的时候,就是你最有价值的简历内容。
第五件事:GitHub,从现在就开始用
这件事,很多人大三才开始重视,太晚了。
GitHub,不只是代码托管平台——

它是你的作品集,是你能力的公开展示,是你在这个行业里的名片。
一个面试官,看见你的GitHub上,有两三年持续的提交记录,有几个认真做过的项目——
他对你的判断,和看见一个空白的GitHub,完全不同。
从现在就开始——
把你写的每一个项目,无论多小,都推上去;
养成写README的习惯——这个项目是什么,解决什么问题,怎么运行,用了什么技术;
学会用Git做版本管理,不是只会git push,是理解分支,理解合并,理解为什么要这样做。
这些习惯,从现在开始养,到大三的时候,你的GitHub就是你最好的简历。
第六件事:选一个方向,深入进去,不要什么都浅尝一遍
计算机这个领域,方向极多——
前端,后端,算法,机器学习,计算机视觉,自然语言处理,网络安全,游戏开发,嵌入式,操作系统——
每一个方向,都有它的深度,都有它的门槛。
大一可以广泛探索,这没问题——
但到了大一下学期或者大二,你需要开始收敛,选一个你真正感兴趣的方向,认真深入进去。
为什么不能一直广泛探索——
因为每个方向,从入门到真正有竞争力,都需要大量的时间和积累——
你如果一直浅尝,每个方向都知道一点,但没有一个方向真正深入——
找实习的时候,你拿不出一个真正扎实的方向,你就是那种”什么都会一点,什么都不精”的人——
那种人,在竞争激烈的市场里,是最难找到好机会的。
选方向的方法——
不要只看哪个方向工资高,工资会变——
看哪个方向,你愿意在深夜,不是因为要交作业,而是因为真的好奇,去研究它;
看哪个方向,当你遇到困难的时候,你的第一反应是”怎么解决”而不是”算了换个方向”;
那个方向,就是你应该深入的方向。
第七件事:英语,必须认真对待
这件事,很多人觉得和计算机没关系——
大错特错。
计算机这个领域,最新的技术,最好的文档,最重要的论文,都是英文的。
你能不能直接读英文文档,直接看英文教程,直接理解英文报错信息——
这件事,决定了你能不能第一时间接触到最前沿的东西,还是只能等别人翻译之后,才能看到二手的信息。
而且——
如果你以后想去大厂,想出国读研,想进外资公司——
英语,是硬门槛。
从现在开始——
所有的技术文档,优先看英文原版,不要先找中文翻译;
遇到报错,先去Stack Overflow找答案,不要只在中文论坛搜索;
看技术博客,订阅一些英文的技术博主——
这些习惯,坚持下去,你的英语技术阅读能力,会在不知不觉里变得很强。
第八件事:找到一个真正在做事的老师,早点进实验室
这件事,我之前说过,但在计算机这个语境里,值得再说一遍——
进实验室,做真实的项目,跟着真正在做事的人——
这件事,能给你的,不只是经历和简历上的一行字——
是那种在真实问题面前,你的思维方式被训练的过程。
课堂里的题目,有标准答案。
实验室里的问题,没有标准答案——
甚至连问题怎么定义,都需要你自己先想清楚。
这种训练,是你后来在职场里,面对真实的、复杂的、没有人告诉你答案的问题时,能不能撑住的基础。
怎么进实验室——
大一下,或者大二上,去找你感兴趣方向的老师——
先认真看他做的研究,找到你真正感兴趣的点;
然后去敲他的门,或者发一封认真的邮件——
不要说”我想学习”,要说”我对您的某个研究方向感兴趣,我愿意从做这些具体的事开始”——
这个主动,大部分人不会做,做了的人,成功率很高。
第九件事:关于就业方向,提前想清楚
计算机专业毕业,有几条路——
大厂——
字节,腾讯,阿里,美团,华为,百度——
这条路,竞争最激烈,准备周期最长,需要算法扎实,项目经历丰富,最好有大厂实习——
如果这是你的目标——
大一就要开始准备,不是大三。
因为大厂的提前批,有时候在大三下学期就开始了——
你在大三才开始刷题,才开始做项目,时间极其紧张。
而那些大一就开始积累的人,到了大三,已经刷了一千道题,已经有两三段实习经历,已经在某个方向上有了真实的深度——
你们站在同一个考场上,但你们的准备程度,根本不在同一个量级。
提前批的逻辑是——
大三下,投简历,笔试,面试,拿到return offer——
然后大四,实习转正,毕业直接入职——
整个流程,比你想象的早很多。
所以,如果大厂是你的目标,你的时间线要往前推两年来想。
考研——
计算机考研,竞争同样激烈。
近几年,计算机考研报录比在某些顶尖院校,达到了恐怖的数字——
几十个人抢一个名额,不是夸张。
如果你想考研,有几件事要早想清楚——
你考研是为了什么——是真的想做研究,还是为了提升学历背景,还是逃避就业压力?
不同的原因,对应不同的策略——
真的想做研究,选导师比选学校更重要,认真看那个导师在做什么,他的学生后来去了哪里;
想提升学历背景,选学校的名气,但同时要在大学里积累真实的能力,否则学历是空的;
逃避就业压力,这个动机最危险——因为研究生毕业,就业压力还在,而且可能更大,你只是推迟了面对它。
考研的准备,通常需要至少一年——
大三下开始,是最晚的时间节点,再晚,时间不够用。
出国——
如果有出国读研的想法,有几件事要早准备——
语言成绩——托福或者雅思,越早考越好,因为考试成绩有有效期,而且考好一次不容易,留出时间多考几次;
科研经历——顶尖的海外项目,非常看重你的科研背景,有没有发过论文,有没有跟着老师做过真实的研究;
推荐信——需要三封推荐信,来自真正了解你的老师,这意味着你需要从大一就开始和老师建立真实的、有深度的关系;
GPA——成绩不需要满分,但不能太低,通常3.5以上是基本线,越高越好。
这些东西,都需要时间积累,都不是大四才开始准备能来得及的。
创业或者独立开发——
这条路,很多人想,但真正走的人少。
不是说不能走,是说这条路对你的综合能力要求极高——
你需要能独立做出一个产品,需要懂技术,懂产品,懂一点运营,还需要能在没有任何外部激励的情况下,持续推进一件很难的事。
如果你对这条路感兴趣——
大学里,做项目,做独立的作品,学会从零做出一个完整的东西——
这是最好的训练,也是你以后能不能走这条路的最真实的检验。
第十件事:建立你的技术影响力,越早越好
这件事,很多人觉得是大V才需要做的事——
不是。
在你的专业领域里,建立一点点影响力,带来的机会,超过你的想象。
怎么建立——
写技术博客——
不是要你写给大众看的科普文章,是写给和你同水平或者稍低水平的人看的技术分享——
你最近学了什么,踩了什么坑,解决了什么问题,你的思考是什么——
这些东西,真实,具体,有价值。
平台,CSDN,掘金,知乎,GitHub都可以——
选一个,认真写,不要三天打鱼两天晒网。
写博客对你自己的价值——
强迫你把模糊的理解,变成清晰的表达——这个过程,是真正的理解发生的地方;
给你建立一个公开的知识库,以后忘了某个东西,翻自己的博客就能找到;
让你在找实习和工作的时候,有东西可以给面试官看——
“你看,这是我写的关于这个技术的文章,这是我对这个问题的理解”——
这比口头说”我会这个”,有说服力一百倍。
在GitHub上参与开源项目——
不是让你去给Linux内核提PR——
是找一个你用过的、感兴趣的开源项目,从修复文档错误开始,从修一个小bug开始,慢慢参与进去。
这个经历,是你技术能力最有力的证明——
因为它是公开的,是可以被任何人验证的,不是你说自己会,是你真实地做过。
最后,说几件关于大学生活本身的事
前面说了很多技术的东西,但我不想只说技术——
因为大学,不只是职业训练营。
不要让专业焦虑,吃掉你整个大学。
我见过一些计算机专业的学生,四年几乎全部时间都在刷题,做项目,备考——
他们毕业的时候,技术能力不错,但有一种空——
不知道自己除了写代码还会什么,不知道自己喜欢什么,不知道自己和一个正常人应该怎么聊天——
那种空,会在某个时候,以某种方式,让你付出代价。
给自己留一些时间,做和专业无关的事——
读一些和计算机完全无关的书,认识一些和你完全不同背景的人,去做一件你一直感兴趣但一直没机会做的事——
那些东西,会在你意想不到的时候,给你意想不到的收获。
而且,它们会让你成为一个更立体的人——
不只是一个会写代码的人,是一个有自己的视角,有自己的判断,有自己的生命厚度的人。
那种人,比只会写代码的人,走得更远,也活得更好。
认真维护几段真实的友谊。
大学里的朋友,是你人生里很特殊的一批人——
那段时间,你们都在最真实的状态里,没有太多利益的纠缠,那种基础上建立的关系,很扎实。
毕业之后,你们会散落到各个城市,各个行业,各个方向——
那个网络,是你以后真实的资源——
不是功利意义上的”人脉”,是那种真实的、互相了解的、在你需要的时候愿意帮你的人。
那种人,在大学里遇到,是最自然的。
出了大学,建立这样的关系,难得多。
认真经历一次真实的失败。
大学里,去做一件你不确定能不能成的事——
参加一个你可能赢不了的比赛,做一个你不确定能不能做出来的项目,申请一个你觉得自己可能没资格申请的机会——
然后,如果失败了,认真地把那次失败坐下来分析一遍——
发生了什么,为什么,下次可以做什么不同的。
那次失败,是你能在大学里得到的,最值钱的东西之一。
因为在大学里失败,代价小;
出了大学失败,代价大得多,而且你可能没有人帮你善后,没有老师帮你兜底,没有学生身份给你缓冲——
所以趁着现在,去做那件可能会失败的事,然后在失败里,真正地学一次。
说一个最底层的东西
我说了这么多——
技术的,学习的,职业的,生活的——
但我最后想说一件比这些都重要的事——
搞清楚你为什么在这里。
不是”因为高考分数够了”,不是”因为计算机好就业”,不是”因为父母希望我读这个”——
是你自己,真实的,内在的——
你对什么感到好奇,你想用四年的时间,变成一个什么样的人,你希望在这四年结束的时候,你能说”这四年,我做了什么”。
想清楚这件事,所有的规划都会有方向;
没想清楚,所有的规划都是在随机走,走着走着就迷失了。
这件事,不是一天能想清楚的——
但从现在就开始想,比从来不想,要好得多。
好,最后我来说一件真实的事。
我高中的时候,坐在县城的教室里,想过很多次——
如果我能去一个好的学校,学一个好的专业,我会怎么过那四年。
我给自己设想了很多——
我会认真学,我会做很多事,我会变成一个很厉害的人。
然后我真的来了,来了之后我发现——
那些设想,实现了一部分,没实现的也有一部分。
没实现的那些,不是因为能力不够——
是因为我在很多时候,没有早一点想清楚,没有早一点开始,没有在那个窗口还开着的时候,走进去。
我现在告诉你这些,是希望你不要等——
不要等到”感觉准备好了”,不要等到”感觉时机对了”,不要等到”看看别人怎么做”——
你已经站在那扇门前了。
推开它。
现在就推。
四年之后,你会站在一个你现在还想象不到的地方,回头看今天的自己——
然后你会想——
还好,当时推了。