凡是过往皆为序章
本文最后更新于 2020年10月20日 上午
我已经拿到本校的推免资格,保送到北京邮电大学网研院攻读研究生。
序言
写这篇文章的初心来自于:在知乎上被邀请回答问题——在北方工业大学就读是怎样的一种体验?。当初的随手一答已经成为了我点赞数最多的回答,每年的高考季有很多学弟学妹顺着这个回答找到我咨询一些问题。
现在我的大学生活已经接近了尾声,目前的我也处于一个放空的状态,每天无所事事,所以我觉得是时候将“重写这个回答”这件事提上日程了。
2017年的夏末因为高考分数的原因步入了这个校园,之前从没想过自己会来到这个学校,因为高中模拟的分数要高出高考的实际分数高一些,所以我也算是半个高考失利吧。至于没有复读的原因在于我觉得我的一年青春比少考的那二十几分更重要。
当时在填报专业的时候,考虑的因素只有两点:
- 计算机
- 我高考那年计算机还没有这么热,我单纯是因为自己的热爱才决定选择这个专业。现在看来估计我是赶上末班车的那群人,对于现在或者以后想选择这个专业的同学,我劝你慎重,希望你考虑一下你是真的喜欢还是盲目从众(真的喜欢我支持你,但对于从众的人我向来觉得他们只配做炮灰)。
- 大城市
- 这个选择我觉得有利有弊吧,我也没法说清大城市读一个差一些的学校或者留在家乡读一个好一些的学校到底哪个更好。只能给一个参考
- 工作:来大城市,实习机会多,找过工作的同学都知道,实习经历甚至有可能比你的学校更重要。
- 保研:留在家乡,排名更高的学校保研名额更多(我可没说你躺着就能拿)。
大一的生活
入学时我在理学院的数学系就读,当时虽然一心想去计算机专业但是分数不够(差两分),报考的时候想的是就算去不到计算机专业,也要去相近的专业,于是就被 信息与计算科学 这个名字给骗了,入学之后发现就是数学专业。
入学之后第一件事就是:打听一下怎么转专业,对这个问题我的小导员(学生,比我们大一届)的回答是及其消极的,他不建议转,原因是:对方学院不会给你分配好的专业,听到这个事情的时候我还是挺沮丧的。但事实并非这样,我不但转到了计算机专业,而且在该专业拿到了专业第一的成绩。
这件事告诉我们:如果你认定了一件事,那么就去做,虽千万人吾往矣!
在此给大一新生们一个建议:你已经是成年人了,需要学会独立思考了,家长、老师、学长他们说的话、给我们的建议需要听,但是不要盲从。
大一的生活可以说是很轻松的,步入大学的我一下子没了高中那样的枷锁,高考结束了一下子没有了压力,同样没有了目标,这样的生活下,难免懈怠。每天的生活几乎就是:寝室->教室->食堂,三点一线。每天唯一做的有意义的事情就是上课,但是还不能保证上课时都在全神贯注的听讲,下课后除了写作业更是不会去复习,更别说学习额外的知识了。大部分的课余时间都用来打游戏了(奥,对了这个时候我还有女朋友,所以根本没时间顾学习)。
但是大一的生活也不能说是完全的没有意义和枯燥,还是有很多有趣的事情让我体会到了大学生活的多姿多彩。
认识了一群性格各异但是都是非常值得交往的好兄弟
学生会的经历
分别加入了校会的外联部和院会的志愿者部,相比之下院会更加温馨大家相处都很和睦,但是接触到的事情很有限,参加最多的志愿活动是“敬老院慰问”和星期五的“社区义务家教”。
校会是因为受高中夏令营一位大连理工学姐的影响,她当时在外联部,所以这个名字给我的印象很深,所以校会报名时义无反顾的选择了这个。校会因为人比较多,所以鱼龙混杂,那种氛围我不是很喜欢,所以属于其中的混子,虽然分配的任务也都做,但是不会多做一点,也不喜欢和其中的人过多来往。不过这段经历还是很值得我回忆的。
当然啦!也还有一起其他有趣的活动值得一提!
王若宾老师主持的“谷歌创新训练营”
运动会的啦啦操排练(好像只有我们几个男生报名参加…不过就免于去拔草了)
关于大一的其他
理学院短短的一年生活中,唯一给我留下深刻印象的是教我们数学分析(一)的黄纪政老师,他与其他老师不同之处在于,他对你的督促不仅仅局限于课堂和书本,不单单希望大家将数学学好,还希望我们可以严格要求自己,提高对自己的要求,不要将眼光局限于北工大,而是去看北大的学生是如何学习和努力的。
虽然其他同学对此不屑一顾,甚至觉得这样的唠叨根本就是在浪费上课时间,但是我并不能苟同。我觉得在大学这样的环境中,如果还有一个人愿意不断督促你,唠叨你是一件莫大的幸事,至少可以为你时时敲醒警钟。可惜的是黄老师的课我只听了半年,在我大一下学期时黄老师就调离了北方工业大学,到北京邮电大学去任教了,这其实也反映了黄老师的能力。黄老师走后和我的一位同学还有联系,他为这位同学争取了一个去北大旁听的名额。
大一结束后暑假的军训真的很辛苦,当时的12天真的是数着日子在过,甚至无数次想过要不我也找个理由跑回来得了。但是还是没有这么做,这次经历虽然更加坚定了我不去当兵的想法(可能我比较病娇吧,受不了这种生活),但是却让我更加敬佩选择去当兵的人们,也理解了国家对他们在各方面的优待。
不过我们下一届的同学就没有了这种经历,他们作为国庆70周年学生方阵的参演人员,因为他们的暑假都在排练,所以自然没有了时间参加军训,国庆的经历也就冲抵了他们的军训。突然有点羡慕他们!
参加活动后,国家给颁发的荣誉勋章
大二的忙碌
大二开始,就在计算机学院(那时候还叫“计算机学院”,现在已经与“电信学院”合并改称“信息学院”了)开始了我的新生活。
口袋发票
大二可以说是我最忙碌的一个学年了,我不但要学习当学年的课程,还要补修落下的课程。此外我参加了一个课外的Python小组开始学习做一个小的项目。Python是我到目前为止使用的最多的一门语言,几乎我所有的项目都是用Python作为主力语言开发的,因为其及其灵活在开发时省去了很多时间。
这个课外小组是由我们当时的辅导员“李伟”老师组织的,李伟老师虽然没什么权力,也比较抠门,经常压榨我们给他干活(以勤工助学的名义)但是在这过程中我确实学到了很多,也收获了不少,加上老师对我比较信任,所以我还是对老师持感激的态度。
小组一开始有20名左右的成员,由16级的学霸周宇航负责给我们培训。
周宇航的能力确实是令人折服的,在计算机学院16届的所有学生中能力应该属于前5名(因为有几位大佬也很强,包括邱雷大佬在内的),最后推免至浙江大学。
但是几次培训过后,小组成员渐渐开始变少,很多人都不在参与培训了。最后剩下的只有包括我在内的三人,我又拉来了另一名从微电子系转来的同学“BB-fat”,我们四个人作为一个组合开始创作我们的第一个作品——“口袋发票”。这款程序的灵感来自于参加学校的”大学生科技活动“时需要进行发票的报销,报销发票需要查验发票,这个过程及其费力并且只能在电脑端进行操作,于是我们想开发一款微信小程序,能够便捷的帮助用户完成查验需求,顺便实现发票的整理、管理等功能。
当时我在队伍中主要作为后端程序员进行开发,编写包括爬虫在内的几个模块,使用的技术以Selenium为主,没有任何软件工程思维的浸润,代码的质量简直不敢恭维(受水平所限)。
参加天汇杯时的场景(应某人要求,给他强行打码)
那时我们为了完成它遇到了一个又一个的问题:开发、部署、上线、提升体验各种各样的,那时候也不清楚大家那里来的那么多的热情,每天的课余时间几乎都花在这个上面,三四个人挤在BB-fat的电脑强讨论解决问题的方法,不断更改代码提升作品的完成度。
这个作品参加了多个比赛,经过了反复的打磨,虽然还是一个玩具般的作品,但是对我个人而言已经是很珍视的作品了。
这个作品打磨的过程就是我们作为初学者不断成长的过程,也是我们几个友谊凝聚的过程。
最后一版的作品如下:
后来BB-fat通过逆向工程的方式破解了国家税务总局的JS代码,也就获得了请求查验的接口逻辑,这时万事俱备只欠东风,因为查验发票时有一个验证码输入的步骤,所以想要一键查验必须过了验证码这关。我承担了这个任务,通过机器学习的方式训练了一个简单的CNN去识别验证码,但是不得不说这个验证码属实复杂,不但有噪点、干扰线、数字、英文还有中文,所以训练这个模型的任务量巨大,主要是需要的一个巨大的数据集去进行训练,但这个打码的任务不是我搞得定的。最后训练的模型效果很差,相关代码(包括破解JS部分)已经开源在GitHub上了。
因为分了太多的精力在开发上,所以课业自然也就被我忽略了一部分,这个学期的课程只能用对付来形容,知识学的属实一般,很多知识都没有真正的掌握,期末的时候也只是对老师强调的知识进行了多一些的复习。最后的成绩当然也将我的学习状态暴露无遗,成绩大多数都在85-92之间,属实算不上好看。
智能学工
到了大二下学期,口袋发票的开发已经结束,我在李伟老师的安排下,开始参与开发一款名叫”智能学工“的桌面端程序。这款程序是为了解决,学院学工办的老师每天需要面对众多的同学,但是无法保证来访的每个同学,他们都认识,都了解情况,所以
选择的语言还是Python,这次选择的技术是PyQt5,这个程序的意义我不敢恭维,但是却使我基本掌握了PyQt5,为以后开发”C/S“结构的课程设计打好了基础。我在独立开发桌面端的全部功能,这个产品虽然最终部署到了学院的学工办,但是属实起到的作用微乎其微(😂 )。
放一张照片纪念一下吧
我的北方
在开发“智能学工”的同时,机缘巧合之下,信息中心的马时来老师提出了想让BB-fat牵头找一些同学开发一款方便学生学习、生活的小程序,小程序的认证主体为“北方工业大学”。
当时BB找到我,问我想不想加入,虽然当时除了开发爬虫的经验,我并没有其他的开发的经验,所以其实我并帮不上什么特别大的忙,但还是想都没想就答应了。当时的想法只有一个:作为北方工业大学的学生,大学四年毕业之后能给母校留下了点什么,作为母校的学生这也是一种荣耀。
这个目标如今也达到了,在”我的北方“的扉页上,我们几位早期工程师的名字永远的记录在上面了。
第一版主要是庞宇和阿徽负责前端,BB-fat教施雯写一些后端主要功能的代码,我没什么工作写一些CRUD的代码。校会的老部长:许馨月和谢总负责产品整体功能的规划。
第一版的北方还略显粗糙,但因为许、谢两位部长都还在任,有学生会的推广和帮助,”我的北方“的第一次亮相还算顺利,上线后的后端也没出任何的问题。加之4月末我们上线之后,5月末开始草拟”点滴校园“活动,”点滴校园“一经推广便迅速在校园内蹿红。
点滴校园:汇总每个学生在校园中消费、生活的点点滴滴,以汇总形式展出,反映出学生大学生活的状态的一年一度的活动。
时至今日我都认为当初的那版像素风的设计、弹幕星球的创意、分享页的合理安排都是非常棒的。当然这也反映在了用户的访问数据上,推出一下午的并发量至今是我们的巅峰。
相比之下2020的点滴校园,由于各种原因,无疑是一个不那么成功的活动(遗憾😪)。
北方在趋于稳定后,BB-fat对其进行了一次重构,重构的代码虽然可能设计上并不是完美无缺,但是代码质量无疑上升了很多。我们的BB同学也在这个过程中,编码能力不断提升,将我们几个甩在了身后。
2020.09 ”我的北方“应该已经迎来了他的最后一版,我们大四了,要毕业了,但是我们没找到可以接手这个项目的人。当初我们单纯是为爱发电,通过BB的邀请组成了这个团队开发了这个小程序,现在想找到类似的一个团队继续开发新功能很难。
转折
大二结束的时候,我们小学期的名称是”硬件课程设计“,任务主要包括四个水题和最后设计一个可以实现32条MIPS指令的简单CPU,凭借全专业只有我做出来的优势,惊喜地拿到了100分的好成绩(在这里谢谢傅颖勋老师)。
傅老师是清华存储实验室的博士,在分布式系统,大规模机器学习方向上都有很高的造诣,而且人特别好,及其负责,考本校研的同学可以考虑一下哈!
这个100分对我特别关键,帮我提了相当多的绩点,也帮助我一下跃居到专业绩点第一的位置,但当时我并不知道,后来回想起来,侥幸侥幸… 相关的代码我也已经开源在了GitHub上,又兴趣可以参考:MIPS-CPU-implementation,我当时大量参考了雷思磊老师的书:《自己动手写CPU》,如果你将这本书看了个大概相信你也可以完成这个任务。
因为当时我们有一个去俄罗斯交流的机会,而且我作为贫困生是可以免费前去的,但当时我并没有报名。后来因为去俄罗斯的那些同学无法参加小学期,所以他们的小学期成绩不是很好看。而我却因为没去拿到了满分,现在想来真是塞翁失马焉知非福!(因为报名时并不知道会这样)
大三的期待与焦虑
大三学期是渐入高潮的一个学期,这个学期刚刚开学,世烨就问我有没有兴趣保研。当时我对保研完全没有任何概念,因为我的默认印象里,虽然我的成绩不错,但是和实验班的几个同学相比完全没有优势,所以就算是有保研机会,也应该是属于他们。但从世烨口中得知我们普通班是单独排序的时候,我也没有特别在意,因为那时对自己的定位了解的还不是很清晰。
回去之后反复想了很多次,觉得这是个机会不应该放弃,于是开始多方打听具体的细节。当时正值上一届的保研结束,当时北方项目组的庞宇恰好也参加了保研的面试,他是我当时唯一想得到的可以请教的人。那晚回去之后我立刻给他打了电话,他告诉我:16级第一的胡跃坤很厉害,第二不太了解,但第三的女生就是单纯凭借绩点拿到的名额,因为她完全没有任何比赛和项目的经历,所以他的结论是绩点是最重要的,当时刚好我的成绩排名第一,所以那时候我就下了决定:我要保研。
阴差阳错地还真被庞宇说中了,因为去年推免的选拔,绩点只占60%的分数,在大家成绩相差不多的情况下,绩点并不是最重要的东西,竞赛和面试更能影响最后的总分数。但今年的情况变了,在教育部的要求下,今年的选拔中绩点占了90%的分数,真的成了最重要的东西。
当时想的是,保持成绩领先的同时,努力凑比赛,尽量拿到更多的夏令营Offer,这样相当于三驾马车并驾齐驱,没有短板才能让自己立于不败之地。
最后的结果也确实印证了,机会留给有准备的人。
保成绩
大三上的课程有:汇编、操作系统、数据库以及我补修的思修。为了保住绩点,每一个实验我都好好做,做到完全弄懂之后才会动手开始写,报告也都认真写。实际上专业课我是比较有把握的,因为以往的经历告诉我:只要是认真听课理解了老师的知识,期末考一个90分是没问题的。
唯数不多让我完全没把握的课:近代史、思修、马原、毛概。其中我已经搞定了三门,只剩最后一门思修,虽然听说思修想要挂科特别难,但是我追求的是90分,所以当时第一节课我就找到老师告诉他我要保研,所以绩点很重要,能不能通融一下,后面的思修课无论再无聊我也都参加,上台演讲我也都参与,但是结果却一般般,只给到了85分。
这学期不得不提的课:汇编,徐迟老师的课是那种不按常理出牌的课,他的PPT内容摘自国外的一本书,内容从进制到寻址方式再到汇编指令,习惯了传统那种讲课方式的学生完全跟不上,而且在做他的实验和作业的时候也是完全找不到任何头绪。想要很好的完成你需要对数字路基以及组成原理的知识融汇贯通,还需要在课下自己查缺补漏额外学很多知识。
这里我觉得老师完全没问题,这种非亦步亦趋的教学方式,更加培养学生的自我学习能力,想学好需要自己课外极大的涉猎,这个过程中对人能力的提升是极大的。那些觉得这样完全是胡闹的人,我只能说:是你们自己太菜!
因为我需要保证我自己的成绩,所以对于课堂上的知识,一旦有一点弄不懂,就需要课后回去查、回去补,学习一个新概念的过程中又会碰到新的知识,知识栈不断加深,这是对一个人能力的考验,考验你会不会爆栈。对实模式与保护模式、分页寻址这些知识的学习过程中,我真的觉得自己收获了很多,配合上这学期在上的体系结构对知识进行了升华。
我跟徐老师的关系还不错,有时候还能聊上几句。
操作系统的吴明礼老师给我的感觉就是:他具有有知识分子那种书卷气,但同时又很负责任的老师。老师经常上课的时候跟我们将一些道理,诸如”努力不一定有结果,不努力最后一定没结果“此类,而且在实验上一直希望我们可以做一下清华大学操作系统的实验,我其实是想试一试的,但是当时我在保我的成绩,最后并没有冒这个风险。
传言吴老师是香港理工大学的哲学博士,不知道他是否真的学的是哲学😂 。
大三下疫情袭来,所以就是一个学期的网课。
- 计算机网络当时的安排是自己看网课,不过我没看,因为觉得那个华南理工老师讲的干货太少,不如看书配合PPT的效果好,所以整个学期的学习就是在自学中度过的。不过最后的考试还算容易,题目也都是见过的。
- 不过那个实验课我得吐槽一句,LJ老师的验机标准让我不敢苟同,他只看重完成度,却不在意实验是不是学生自己完成的,有的学生干脆是淘宝买的软件,他却给予了认可。那些自己做的但不是很好的,他却不满意。
- 编译原理是我们究极认真的束老师的课,就凭任课老师我也不敢马虎,所以当时学的特别认真,不但课后每章都整理学习笔记,而且还会回头看网课复习(当时看的是国防科大王挺老师的课,讲的确实很好,不过要看中国大学MOOC上的,不要看B站上的,那个太长了)。因为当时看的特别认真所以上课的时候还曾经指出过老师的一次错误😂 。不过编译原理不愧是计算机最难的专业课,我学的这么认真最后只考了80多分,好在大家的分数都不是很高。
- 软工对我来说反而是最难的一门课,因为他都是一些概念性的知识,理解起来没什么难度,但是对于考试来说就无从下手复习,知识点也都偏零碎。
水比赛
推免评选的另一个重要加分项就是竞赛加分,我作为一个外院转过来的学生,不像原计科专业的同学,大一就在学长老师的熏陶和带动下参加算法比赛,加之之前没参加过所以底子薄弱,所以有比赛的时候考虑的参赛对象自然把我排除在外,因此我的竞赛获奖真的是少的可怜。
我的大量时间都用在了开发上,我把我自己这种行为称为不入流的旁门左道。
现在为了参加评选,必须抓住为数不多的参加比赛的机会。当时我正在上赵会群老师的“软件测试”这门课,我突然想到去年不是正好组织参加过一个“软件测试”的比赛嘛。正巧的是比赛刚刚开始报名,暗道一声侥幸并决定一定要参加比赛。
软件测试这个方向,说到底确实技术含量较小,从业者也多是来自差一些的学校,所以比赛的竞争压力很小,北京市只有我们学校在大力推广(因为杨波老师的缘故)。更关键的一点是因为我之前写过爬虫的原因,对Selenium特别熟悉,比赛中大量使用Java的Selenium库,所以对于这个比赛我又多了几分把握。
拉上小烟跟我参赛,经历初赛、复赛,毫无悬念地我们从北京市出线,进入全国总决赛,总决赛在广州举办,学院同意为我们报销了路费,所以我们又在12月动身出发前往广州参加总决赛(白嫖旅行)。但由于我们属实是赶鸭子上架,之前对这个方向一无所知,没什么经验,最终在两个赛项上都只取得了全国三等奖的成绩。
不过12月的广州给我留下了好印象,超级舒适!
关于这个比赛的一些经验和方法的总结,我放在了下面的博客中,有兴趣参加这个比赛,水比赛的同学可以参考:
其他
大三结束后的暑假,我就在忙着参加夏令营,之后是预推免,直到正式推免。关于后面的这部分,我放在了另一篇文章去讲,有兴趣可以看一下。