我学计算机的四年,共勉!
公子龙:我是一名不称职的 B 站 up 主,视频不多且粗糙,但不妨碍我是一名 B 站的忠实用户,前一段时间,睡前我打开了 B 站打算刷下,结果系统推荐了一个直播,打开一看,是一位程序员正在直播。
说实话,我第一感受,还是挺佩服的,因为我很清楚,屏幕里这位努力直播的年轻人,是和我一起做自媒体的同行,在白天的劳累工作之后,还坚持在十二点努力的直播,这种拼劲是一眼就能看得出的。
我当时很理解他,和我一样,在承受劳累工作的同时,也拼命的挤出所剩无几的业余时间,来通过一些较容易接触的渠道,扩大自身的影响力,例如我们这一代人能够抓住的自媒体机会。
后来我发现这个小伙子也在写公众号,文章写得很好,年龄上刚刚大学毕业,进入了腾讯工作。他的文章中,我觉得最棒的是记录自己大学四年编程学习生活的文章,从文字中可以看到一种力量,努力的力量,这很打动我,现在,我申请转载过来这篇文章,我们一起来看看,全文七千多字,认真看完,会有收获的。
我的大学四年
程序员鱼皮:论努力,我不会输给任何人。
认识我的朋友都知道,即使目前在鹅厂的高压下工作,我也依然坚持利用午休和下班后的时间创作,每晚都是接近 2 点才上床休息。
朋友们总劝我,你别肝了,我说:大学的时候,可比这累多了。
下面分享一下我通过自学,最终拿到大厂 offer 的故事。
前言
我是上海一所 211 学校的本科生,网络工程专业,虽然学校不算太差,但在各种 985 面前,是没有竞争力的,只能说学历不拖后腿。
我从小就对计算机很感兴趣(主要是喜欢打游戏),由于高考时失利严重,所以在进入大学前,就给自己定下了一定要进大厂的目标,决定要好好努力,不输其他名校的同学,我要证明自己不比他们差。
不过现在回想起来,当时确实是年少轻狂啊,也没有想到零基础学习计算机,竟然需要那么漫长的努力。
还好,虽然在追求目标时走了一些弯路,但总体还算顺利。
下面分享我大学四年的学习和求职经历、方法、技巧经验,在最后精心总结,建议大家收藏,并定期和自己的现状来对比,按照我的经历,每位同学都可以进大厂!
大一
其实,我的大一比较滑水,新鲜的事物太多,让我渐渐忘了入学前的目标,忽略了学习的重要性,不过这也应该是大多数同学的真实写照吧。刚入学时我加了很多社团,每天就是和兄弟姐妹们开心滴玩耍,完全不在意自己的成绩。但幸运的是,我加入了一个给学校开发网站的工作室,老大给我布置了一些学习网站开发的任务,因此上学期也学到了一点课本之外的知识,但专业课的成绩着实一般。
寒假回家跟名校的朋友交流后,我意识到自己忘记了曾经的目标,于是决定洗心革面,发奋图强。和朋友的交流中,我意识到想要学好编程,仅通过学校的计算机课程是远远不够的。于是,我买了几本书,在大学的第一个寒假,学完了 Java 这门编程语言、数据库理论和 MySQL 数据库的使用。刚开始自学的确比较困难,所以整个寒假 每天早上 8 点钟爬起来就是学习,一直学到晚上,那段时间几乎是 闭门不出,所以感觉时间过的很快。自己对这个寒假也没有什么深刻的记忆了,有时 因为一个 bug 熬到半夜 的郁闷心情。
在刚开始学 Java 时,我看书上的例子是看一遍忘一遍,看了半天啥也没学会。于是,我就跟着书本敲代码,把每一个例子,每一行代码都理解、啃头,认真完成课后练习,并且将练习的代码结合自己的想法做了些修改,试着自己开发了一些小软件,比如整人儿程序,打开软件后就会在屏幕上出现无数个关不掉的窗口。自己开发和设计程序的过程是非常爽的,没有课本和作业的束缚,让我渐渐对编程产生了兴趣,也为后面持续努力自主学习埋下了种子。
在大一下学期,我首先端正态度,开始认真学习学校的计算机专业课程,希望能得到一个好的成绩。除了学校教的基础课外,我在网站开发工作室中学习了更多网站开发知识,主动承担校园网站建设任务,并且用学到的技术手动为自己开发了个人博客,来记录自己的学习过程。
随着前端学习的逐渐深入,我开始好奇前端页面背后的请求逻辑,于是开始自主学习 Java 后端的知识,刚开始接触后端,感觉像是打开了新世界的大门,我意识到, 握草,编程真的是这辈子都学不完啊,然后开始更努力地学习。
与此同时,在这学期,我抓住了两个机会,首先是作为队长申报了国家级大学生创新创业项目,这个项目的申报属实不易,我被老师拒绝了好几次,他每拒绝一次,我就重新提一个想法、设计一个方案,最终终于成功抓住了机会,带领团队开发了一个一站式校园信息整合系统。做这个项目的时候,正是课程最繁忙的时候,那段时间,光是做课程 oj,就让我很头疼了,但还好有责任心驱使我前进,每天晚上肝到 2 - 3 点,我也能够将项目做好。
第二个机会是,我加入了导师的研究生团队一起做项目,机会是靠自己争取的,简单的说就是毛遂自荐,虽然当时我只学了简单的 Spring 后端开发,但我相信自己能够通过爆肝,虽不奢望追上师兄们的步伐,也要不拖大家的后腿,为项目多做贡献。
光通过做项目,我就赚到了几万块钱,做到了经济独立,同时也积累了一些经验,在专业课上取得了不错的成绩。
当时的我,天真的以为,照这个节奏努力下去,已经足够了。
但随着我看到了身边更多优秀的人(比如我表哥,在清华,大一发论文,他是我最优秀的榜样),学到了更多的知识,我发现,自己还是太嫩了,那个时候的自己,根本谈不上努力,只是个沉迷学习的傻子。
大二
大二这一年,除了担任班长,我还当了学生会部长、社团部长、网站开发工作室的负责人,因此,除了专业课学习外,还有非常非常多其他的事情要处理。但是,不论其他事情要处理到多晚,我都始终坚持每天留给自己几个小时用来自学技术,哪怕熬夜到凌晨三四点,然后第二天 8 点接着醒来上课。课上犯困的时候,我会做一些相对不用动脑的工作,比如记录一些实验课的报告。然后等回了寝室,躺在床上,把电脑放被子上,我便会打起精神,开始自主学习编程。
虽然此前我已经学了很多编程语言,但是,从大二开始,我坚定地选择 Java 作为自己的主语言。
大二上学期,我几乎每天都是在教学楼、学院楼或是图书馆度过的。为了巩固自己的 Java 基础,我不仅上网看了一套完整的 Java 视频教程,还读了《 Java 核心技术卷》这一经典书籍。为了检验自己的学习成果,我自主报考了国外的 Java 等级认证,特地办了张跨境银行卡来支付报名费,还好通过努力复习,高分通过。Java 基础打扎实后,我开始学习主流的 Java 开发框架、微服务技术等。我的记性比较差,但还好学编程不靠死记硬背,背代码的肯定是比不过自己做项目、多写代码的。因此我学编程知识时有个特点,就是边学、边敲代码做项目,每学完一个技术,我都会独立开发一个项目,比如团队协作系统、CRM 管理系统、校园通讯系统、即时聊天系统等。
哦对了,那会儿,之前的网站工作室负责人毕业了,临走时,把工作室托付给了我,当时工作室成员不多,光我自己,就独立做了 5 个以上的网站。在老师的推荐下,我还去给其他学院的老师开发系统,而且那段时间,在上数据结构和算法这门课,我还在研究 ACM 方面的题目,所以有时会忙到连中午吃饭的时间都没有,直接待在其他学院的老师办公室吃盒饭。
我会整理自己做过的项目,慢慢地竟也积累了不少,有一些项目改造改造,拿去完成课程大作业,或者参加比赛,都非常不错。
我也经常在自己写作的地方分享自己做过的项目和经验,欢迎大家看一下。
大二寒假,我参加了一个计算机作品竞赛,有幸找到一位很优秀的学长,他做后端,我做前端,我们一起开发了一个大学二手置换平台。在这个过程中,我学到了很多团队开发的技巧,也从学长身上学到了很多编程小姿势。学长校招拿到了阿里的 offer,也是给我带来了不少的鼓励吧。
这个寒假,除了开发作品外,我看了一些计算机网络方面的书籍,补充自己的理论知识,基本也是全天都在学习,只有晚上跟朋友出去玩玩桌游,即使在玩时,可能抽空还会想想白天遇到的难题,痛并快乐着吧。
通过不断开发作品,我意识到自己的前端网站开发效率好像不太高,于是在大二下学期,我开始学习前端框架 Vue,比 jQuery 更加高效地开发体验带给我极大的学习兴趣,一口气学了一个多月,看完了 2 套 Vue 完整教学视频,并且自己动手写了几个 Vue 完整项目,同时还学到了很多打包工具,自己也实践了他们的配置方式。
当时觉得大二暑假好像没什么事做,就计划要不用技术赚点钱吧,因此我没有选择去做兼职,而是想找一份和自己职业目标相关的实习,于是我开始跑到大公司的官网去投递简历,即使简历上什么内容都没有。结果可想而知,像阿里巴巴这种一线大厂根本就不鸟我,朋友们觉得真实么?
没办法一次进大厂实习,那就一步一步往上爬吧。那我就在各种求职网站去海投简历,终于有幸在实习僧上收到了几家公司的面试邀约,基本都是要坐几个小时地铁的公司,但肯定也都要去试试吧。当时自己虽然做了不少网站,但由于面试准备不充分,屡战屡败,结果只有一家公司肯要了我,岗位正好是 Java 后端开发。
于是那年暑假,我每天早上 6 点就要起床赶高铁去上班,学校在郊区,我要先骑着我的小、小电动车去地铁站,然后坐地铁,换乘 2 次,再走老长一段路,来回四个小时的车程。后来,为了省时间,我发现了一条更精妙的路线,公司在高铁站附近,那我干脆就坐高铁去!于是,每天可以节省近一个小时的时间来学习。
当然,在车上的时间我并没有浪费,而是利用这些零碎时间用手机刷 Java 等知识的练习题、看其他同学的面经、或者阅读公众号上的技术文章。我给自己定了一个每日任务,每天读 4 篇文章,刷 30 道牛客 Java 题目,经过两个月的时间,题目刷通了两遍,也学到了很多技术知识。
那段时间,我白天在公司上班,晚上还要回到学校去接着跟老师做项目或者自主学习,弥补面试时发现的自身的不足。
即使在工作中没什么活的时候,我也会刷算法题,带薪刷算法题,绝对不让自己闲下来,因为我怕我一放松,就会懈怠。等我走的那天,刷了估计也有几十题了。不过有一说一,那会儿网上的算法教程和经验分享都不多,所以我也走了很多弯路吧。给大家整理了一些学算法的资源,希望大家不要像我刚开始一样,随缘刷题,低效又无趣。
还好,整个实习真的非常愉快,虽然只有两个月,但我真的收获爆表。
学到了很多技术和业务知识,开拓了眼界,也明确了我今后的职业发展方向;学会了团队沟通和协作,懂得了诚信的重要,也收获了人脉。当然,最重要的是收获了人生一段难忘的回忆。
这也是为啥我建议大家在学了一些技术后,趁早去找一份实习,不用担心自己的经验不足,通过面试和企业工作的磨练才能让你积累更多的经验和技术,也能帮助你明确自己的目标。
不过遗憾的是,到最后也没赚多少钱,饭钱自己掏,高铁费齁贵,哈哈。
在今年,为了解决学了就忘的问题,我开始使用一种新的学习方法 —— 费曼学习法。每次学到一些知识,我会尝试用自己的方式进行复述,并和其他同学进行分享。只有能清晰地讲述所学知识,并让他人能够理解,才算是真正学会了。用这种方法,我不仅加深了对知识的印象,语言表达能力也得到了很大的提升,还有了更多给学院同学分享的机会,开过几场讲座,而这些都对我今后的面试非常有帮助!
让我欣慰的是,自主学习课外技术竟也帮助我理解了一些学校的课程,因为很多理论知识之间是有关联的吧,所以今年的成绩还算不错,拿到了国家奖学金。我用奖学金的钱,再加上之前做项目的钱,买了配置更高的电脑和设备,激励自己学习。
大三
在之前的几次面试失利中,我感觉自己的编程知识是缺斤少两的。一方面我要学习更多且更深层的后端知识,不能仅停留于 “会用”,而是要 “活用”。因此在大三这一年,我又学了像消息队列、搜索引擎等企业后端必备的技术,以及 MySQL 优化、虚拟机调优、Redis 底层,并且通过阅读源码,自己搞了一些框架。另一方面,我意识到了数据结构和算法的重要性,开始刷算法题目,每天早上花 2 - 3 个小时搞几道题,坚持了近一年,总共搞了 1000 道题吧,也顺便考了一些算法类证书。
学的技术越多,我越发现啊,学编程还真是得靠敲的!光说不练假把式,其实很多视频教程中的小 Demo 都蛮不错的,要注重积累,并试着将重复的代码进行抽象,避免重复造轮子。很多技术都是因为有实际应用需求,才被人创造,才需要你去学习,比如你要做一个支持用户登录的 APP,你就要学习登录机制;要做即时通讯,你就要了解 RTC、Socket;性能低了,你就要去优化;担心网站被黑了,你就要做安全措施;懒得写重复代码,你就要学低代码、大前端等等。
直到现在,我依然是一名兴趣驱动型 coder,会经常带着小伙伴们一起做一些好玩轻松的项目,提升兴趣的同时学到不少编程小技巧,欢迎朋友们来看看。
正因为明白兴趣和实践的重要性,所以我大三一整年都沉迷于做项目、找实习、参加竞赛,乐此不疲。
上学期先是在实验室跟着老师研究区块链技术,不得不说,实验室的环境更适合学习,从早上起床就来实验室,直到晚上十点多甚至是十一点才走,感觉真是很充实!几个月过去,终于开发出了落地应用并出版了一本教材(个人编写占比超过 50%),也是这段时间的研究让我浮躁的内心渐渐变得平静。
在寒假前我向字节跳动投递了简历,在一份实习经历和坚持刷算法题的加成下,我很顺利地成功通过了面试,开始了日常实习生活,在不敲任何一节课的情况下,每周上班 3 ~ 4 天。(好奇为啥没翘课还能一周上这么多天班么?后面详细给大家分享,欢迎关注我呀!)
实习部门是个新部门,地铁每趟要近 2 个小时。虽然使用的是自己不太擅长的 Php 和 Go,但学习起来很容易,导师和上级非常好,给我绝对的发挥空间,从入职起就参与项目的需求评审,甚至后来是自己一个人负责了一个项目的后端,和其他部门的同事打交道也非常多,成长非常非常非常快!而且字节跳动的待遇真的没话说,全员 Macbook +免费三餐零食下午茶。
后来快离职了,导师和上级也没给我安排什么任务,除了解决下之前写的 Bug 外,我不会闲着,有空就坚持刷算法,LeetCode、交大 OJ、浙大 OJ、牛客、PAT、北大 OJ,我都刷了几十道题,其中 LeetCode 刷了 600 多道!顺带一提,在来回四个小时的车程中我依然会看技术文章、背单词、看面经、或者刷刷面试题目。不得不说,字节跳动真的是一家很好的公司,他的价值观(字节范儿)也带给了我很大的激励吧,共勉。
实习四个月后,我跑路了,原因是自己还在纠结到底是保研还是就业,不妨两者都试试,到时候再选择一个更优解。所以回到学校后,为了丰富简历、给上海落户凑一些积分,我参与了一些大型竞赛,像挑战杯、互联网+、三创赛,在所有团队成员共同努力并让我抱大腿的情况下,也获得了一些奖项。
后来,某天在校溜达时,我突然收到了腾讯的电话面试邀请,总共只有两轮面试,都是些后端问题,还好我每天都在看面试题,有备而来,所以答得还行,也就顺利搞到了暑期实习的 offer。
大三这一年,我专门搞新技术的时间并不多,但是通过不断做项目、刷算法、不断发现和解决问题,我的基础和技术能力都有了很大的进步。有了更多的知识积累,在学新技术时,我可以将一些新知识和以前的知识对照和串联,从而理解的飞快!比如学过前端 Vue 框架后,再学习 React 框架就轻而易举,我的技术栈也越来越丰富了。
大四
大三暑假,我开始了在腾讯的实习生活,刚开始还是挺不适应的,总是在简单的工作上翻车,但后来多花了些时间学习,也渐渐能独立完成工作了。后来,我在实习转正答辩中取得了同组第一的成绩,顺利搞到了不错的 offer,并成功签约。不知道小伙伴们是否需要我出一期实习转正的视频呢?
整个大四,我基本都在腾讯实习,每天依然是坐地铁往返学校和公司,在路上坚持学习。疫情期间,我就在家里远程实习,下班的时间除了做毕业设计、写论文之外,我还独立开发和上线了一个完整的小程序【面试君主】。
等毕业证搞到手,我已经在腾讯实习了近一年,后面的转正也都非常自然。
不过转正之后,激动的同时,身上的责任和压力也大了许多。想了解我转正经历的朋友,请点赞后在评论区告诉我吧,让我知道有人看了几千个字后,来到了这里~
这就是我的大学生活,一段平凡的奋斗史。
当然,想要进大厂,只靠努力还是不够的(但不能不努力),我认为进大厂还需要以下要点:
兴趣,学自己喜欢的,这是你前进的主要动力 目标,有目标才有规划,才能避免像我一样走了弯路浪费了些时间 自学,只有持续自学,你才能看到更大的世界。其实现在网上好的学习资源非常多,为了帮助大家发现优质编程资源,我花了 200 个小时开发了编程导航,还整理了免费编程资源大全。 实践,纸上得来终觉浅,对编程来说更是如此,必须要多加练习 机会,在我的故事中看似有很多的幸运,但其实每一个机会都是要自己争取来的,你变强了,更多机会和幸运才会眷顾你。而每个机会都可能会改变你的命运。 突破,打破自己的舒适圈,这样才能给自己多一点选择,多一点成功的可能性。 时间,珍惜你大学的时间,这段时间的努力会在未来,给你带来更大的价值 生活,保持健康规律的生活,不要像我一样因为常年熬夜,记性越来越差,头发掉的越来越快。
最后再给在校的同学们一些建议。
建议
给目标直接就业同学的建议:如果时间还多,那么就按照自己的节奏和兴趣去学习技术并实践,心无旁骛。你要知道研究生也才多一年多的做项目和研究时间,如果本科你把别人准备考研的一年用于学习技术,那么技术实力完全不输于研究生!
给考研同学的建议:提前了解目标院校考察的专业课,并在该门课初学时就多下功夫。所有的实践课要好好学,平时有空也多上牛客等平台认识更多的朋友,了解找工作常用技术和其他同学的情况,避免考研失败后春招完全小白。
给保研同学的建议:如果 一心决定读研,担心保不到好的学校,也可以准备下考研,顺便也能复习到一些面试知识。
总之,给自己 多一个选择,多一条后路。