0%

Review the THREE Years as an Undergraduator

大三结束了,随着 5 月 29 日最后一门本科的考试英语草率收场,让我觉得突然我的大学就要结束了 :(。当时在寝室里收拾东西的时候还颇为感慨,大学本科四年,19 年入学半年后的 20 年寒假就遇上了疫情,学校开始居家、线上、封校,可惜了只过了半年的正常大学生活。相比于 20 级的惨在于,它像是让你见识了大城市的繁华,突然把你打回乡下。巨大的落差感让人对大学生活充满幻想,又不得不向现实低头
从进入大学之后,我便会每年在 12 月 31 日前回顾自己一年的收获和反思,并将它整理成一点文字。尽管我没有什么文笔,写的可能也只能代表一小部分,但是我仍然希望如果有人因为看到了我对于自己本科学习生活、社会工作、科研科创等方面的回顾和思考,对自己的目标或态度有所影响。希望它不管是对我自己的反思和回忆还是对看到我所写的回顾的你都有帮助

由于目前仍然没有确定结果,所以就不介绍自己的情况了。同样,我也不觉得成绩和奖学金能代表一个人的能力,对我自己来说也一直没有看重成绩,对于一些别的方面也是后来才知道的

我所总结的合适的本科发展路线是:

  • 大一入学后的第一学期是打基础,转换思维的,可以做的是
    • C Programming Language 学透,圣经,里面所有的代码都是源码级的,很多地方必须亲手试一下才能明白为什么这么写更好
    • 科普性质的 计算机基础、计算机网络、操作系统等,可以参考《图解》系列和《网络是怎样连接的》系列
    • 基础的数据结构,了解程度超过顺序表(课程内会接触到链表),能学到简单的树和图的存储最好
    • 简单接触 Linux,有能力进行安装和简单的使用
  • 大一下第一次选择一个特定的方向进行尝试,可以做
    • 选择一个更细的方向并尝试学习到能用来参与项目的程度,一些方向举例
      • java 基础和一些框架的开发使用
      • web 后端,可以基于 java、Go、Python 学习语言基础和 web 框架
      • 深度学习,学习 python 基础和深度学习课程,如李宏毅、李沐、吴恩达等老师,准备参与科研
      • 前端,学完 HTML、CSS 后开始看如 vue、react 等框架,能配合 node 做完整的应用(开发区比较缺前端,可能能更容易的参与到项目中)
      • 移动端开发,如 iOS 开发需要学 Swift,安卓开发看 java 和 kotlin 等,了解一些移动端的设计思路
      • 服务器运维,相对比较简单,多折腾和搭建,对参与项目和后续的课程都有一些帮助
      • 网络安全,下也有很多细分,可以参加 CTF
      • 一些方向开发区并没有充足的资源,例如计算机体系结构、分布式系统等。在读研选择方向时并不占优势
    • 也可以加入实验室,学习实验室的研究方向,如王雷老师的 wilna 实验室做无线感知。也有的实验室会给新人安排学习任务和对应的学长学姐进行指导
    • 跟随 C++ 课程学习 OOP 思想
    • 根据自己感兴趣的方向决定数学的重心,如做深度学习可以多关注线代、做密码学需要在离散上多下功夫
    • 听闻课改后大一下的课程变得繁忙了,所以目标比较少,主要在于尝试一个细分方向
  • 大一小学期如果不前往东软实习的话,就会比较水
    • C++ 深入 STL,这对于后面的保研等需要做算法题的时候会有很大帮助
    • QT/MFC 是第一次课程内抛弃黑窗,去做一个 GUI 的应用。了解 QT 的消息通道思想,对大部分人来说这个没有用处
    • 前端作业,很水,对于不想做前后端的来说了解前端的代码模式就可以
    • 大一小学期开始,可以做第二次细分方向的尝试。由于大二的课程比较多,所以从小学期一直到大二结束都作为这次尝试的时间段。需要注意的是,在大二结束的时候一般来说自己大概要做什么方向就或多或少有一个比较明确的定位了
    • 多关注一些比赛,项目类的如“互联网+”、挑战杯,竞赛类的可能更多一些
  • 软院把大二的课程安排的非常繁琐,尽管核心专业课很多,但是注水课也非常多,需要尽早甄别
    • 在有了大一的成绩排名之后,就能大概预估出自己是否要往保研上走了。如果成绩比较好,可以考虑分一些精力出来,加入到实验室里。软院本科生科研的氛围不算很好,但是每年还是会有很多本科生参与发论文。有一定的科研经历,甚至能有论文作为佐证对于保研的时候来说帮助非常明显,我的巨佬同学本科到现在都已经有三篇论文了
    • 大二的专业核心课比较多,但是课内涉及的不够深入,并且考试比较迷,还是应该自己向外拓展和实践。比如计算机网络可以多去看看自己家的路由器,做一些网络设备;操作系统在 Linux 接触的时候也会有一定的了解
    • 大二全年的课程代码量都很小,除了数据结构会写一点模拟之外基本就不怎么敲了。所以一定要通过项目或算法题来让自己持续敲代码的状态
    • 大二上大概在 11 月左右会继续细分专业,从 20 级开始只分软件工程系和网络工程系了,但是课程主体并没有修改,所以可以参考之前的细分专业:
      • 软件工程:智能系统控制(嵌入式)、软件测试与开发、大数据、软件金融、水下机器人
      • 网络工程:网络安全、物联网(共约 120 人)
        课改之后,只区分软件工程和网络工程,细分专业的课程只要在自己系内都可以选修。以课改前我们的经验,网络相较于软件会在大二课更多更忙,但是大三网络只有选修课,并且很多注水,就显得网络系大三都没啥事。就努力程度和保研难度来说,网络会更好一些,但是相对的是自己放弃了纯软件工程的 title,做网安对于想要出国的同学来说也会稍微麻烦一点,顾忌更多
        就我所在的网络工程-网络安全为例来说,课程设计并不合理。有关 CTF 的网络攻防实践被安排在了大三下学期,而此时对于本科阶段想要入门 CTF 来说已经很晚了
    • 大二下开始有细分专业后的专业选修课,但是作为分完专业的第一个学期,专业课必然是注水的,其目的更多的是在让大家了解一些细化的研究方向,多数课程名字里也会带上“导论”。这些课很多人都不会认真听,也带着有些老师会不愿意讲课。除了摆烂的时候,我会在课程开始的时候多听一听,对这个方向有一个大概的初步了解,可能并不深入,但是会有一个第一反应来决定我是否对它感兴趣,这会成为我后面对课程内容关注程度的一个重要参考。一定不要所有选修课都水过去,会让自己感觉分专业毫无用处,学不到东西
    • 一些课程如大数据导论、以及大三的软件工程课都会有翻转课堂,积极参加和准备,不管准备到什么程度,在将一个新内容尝试学习并转化成内容输出的过程中会学到很多东西
  • 大二小学期是一个比较特殊的时间点
    • 这个小学期之前只开设 java 课程,现在加了 python 可以二选一。课程比较简单,但是对于前面上双语课的同学来说可能是第一次团队合作开发项目,最好可以尝试一些团队管理的方案,这个时间点不管是课内还是课外都已经接触了很多工具了,就不要再用 QQ 互相之间发代码文件,可以开始学着用 Git 做团队项目的管理,去处理冲突,把自己放在真实的工程的角度去考虑开发这件事
    • 大二的暑假前后是参与比赛比较多的一个时期,我个人的很多比赛和奖都是在这段时间拿的。可以多关注和参与,不一定只看学院目前认可的,多抓住机会出去看看,和别的学校的团队交流,有很多比赛学院老师也不知道呢
    • 能力强的同学可以在大二就参与春招了,然后在这个小学期的时间去公司实习。即便最终没有拿到实习 offer 也无所谓,大二有能力去实习的人不多,但是能有机会提前参与企业的笔试面试,可以帮自己在下一年确定需要补的方面
    • 对于已经确定要工作的同学,可以考虑在大二小学期提前选修大三小学期的课程。如果有时间冲突可以找教务处理课程冲突,这样大三小学期就有一个完整的暑假时间来进行企业的实习。对于保研的同学来说有实习经历并不一定是好事,对学校的老师来说,更希望自己的学生能读到博士,有更多时间来深入的进行科研学习,而不是早早的就确定要工作
    • 大二结束后,每个人的意向就应该明确了。保研、考研、工作、出国、考公,这是每个人都绕不开的问题,如果一直到了大三中间都还在犹豫,那很可能哪边都做不好
  • 由于课程设置的原因,大三会有大把的时间交给自己来支配
    • 大三的最核心的课程可能就是软件工程,但是对于很多人来说,它的意义主要体现在考研本院的时候考试的范围
    • 这时候的专业选修课基本摆脱了“导论”性质,一些课程就比较有意思了,不论对这个方向感不感兴趣都可以做深入了解。先把面打开,再从里面找自己最想做的点。并且对于要读研选方向的同学来说,可能很多方向都或多或少在专业选修里接触过一点
    • 网综实验其实就是计算机网络实验,这是比机组实验专业贴合度更高的实验课,也是软院唯二的两门专业实验课之一。学完记得想想自己家的网络拓扑,增添点新设备
    • 大三课程多为大作业形式,尤其是网络系。有空余时间多去准备一些东西
      • 工作:常规来说春招是金三银四,三月是投简历的高峰期,但是不代表 1 月 2 月就没有机会拿到 offer。如果想要找工作,最好从 1 月就开始陆续投递简历,趁寒假再补充补充项目经历、算法能力和八股。22 年的情况表明,金三银四的规律可能已经不再那么明显了,很多公司开始泡池子,拖发 offer 等。但是,大环境不好不代表有能力的人找不到实习,适当降低要求和不要纠结互联网厂是很多人的出路
      • 考研:我周围准备考研的同学大多在寒假回家左右开始准备,舍友回家带了一个大箱子的张宇数学。也有一些同学在大三下返校后开始学习考研的内容。需要注意想报考的学校的考试内容,之前也出现过快要考研了学校突然修改考试科目的情况。就算要考本校这种只考软件工程的,也要准备一些 408 内容
      • 保研:算法题需要尽早开始刷,不要像我一样很畏惧,觉得自己什么都不会不敢做。保研同样注重专业课,一些学校如中科大,面试会以专业课为重心进行提问,对你的其他方面反而关注较少。不过总体来说,rank >= 科研经历 > 科创竞赛 = 项目经历 > 社会工作经历
      • 出国:就当前国际形势来说出国可能并不是最优选,但是无疑本科毕业这个时间点是出国比较好的时候,国外找工作的话短期的硕士是非常不错的选择。出国要求在 rank 不低的情况下尽量多去兼顾科研、实习和志愿活动,也可以考虑像 kzm 类似的交换项目并在结束后申请当地的硕士,门槛会低一些

如果不那么看重成绩排名,建议能选出对自己重要的课程,把重心放在它们上。明确有些如高等数学、大学物理等课程是普适的教育,可以减少在它们上花费的精力(但不是不学
软院本科四年的核心专业课是:C、C++、数据结构、计算机组成原理、计算机网络、操作系统、数据库,以及你希望深入学习的方向专业选修课。如果你想继续在这个专业走下去,这些课程都非常重要,一定不能仅限于课内的那点东西
专业书籍参考大黑书系列和动物系列,其中大黑书大部分都可以闭眼买了看,都为学术巨著,有很大的参考性和权威性;动物系列是书籍封面有一个代表性的动物,多为一些编程语言和框架的研究

学院对某些竞赛非常看重,甚至对于某些过于看重,出现了明显的德才不配位的情况。如果你对自己有信心,可以去学习 acm 算法,不过参考 cyq 佬,如果你想拿到一个比较好的成绩,可能需要一定程度上对课内的内容进行取舍甚至放弃。不过对应的,acm 的含金量还是非常高的,不管对于你其他的学习还是工作、保研都有很大帮助(尽管也出现过小公司 HR 说他们不喜欢 acm 选手的情况)。比较可惜的是,开发区的 acm 整体氛围并不好,对于没有 NOI 基础的同学来说很不友好,据我观察,在别的学校是不存在这种情况的,我在东北大学和中国海洋大学的同学都在 acm 铜牌以上,他们在入学前也没有基础
数模比赛在我眼里是一个非常水、门槛低、但是在学校眼里含金量很高的比赛大类,如果你能坚持把全年的数模打完,基本上科创奖学金就没跑了。在和同学的交流中,我的结论是,数模 10 个人中可能有 9 个并没有相应的水平,它的奖对于大部分来说,只是个奖,并不代表你学到了它的思想或是怎样,这也就意味着,对于和我有同样想法的 HR 或者老师来说,如果有一个数模选手和一个软件设计类比赛选手放在一起,我会选择第二个,因为数模这个有很大可能不是有水平。同时,它门槛低到不管你是否了解它,都可以随便报名参加。我在本科期间直接参加了两次数模,组队的成员均为从来不打数模比赛、对相关知识并不了解的同学,我们每次都从零开始,拿到一个国三和一个美赛 H 奖,过后反过来看也只是累了三天而已,并没有什么收获。可能对于大佬来说这两个奖啥也不算,我也并没有看不起数模大佬,但是在这个类别中水分很大,真正有能力的比较少,导致我并不喜欢数模。我的建议是,如果你能找到大佬带,就一定要去参加学习一下,但是如果不是必须要科创奖学金,这三天甚至它的附加时间,我建议不如去参与到一个开源项目中,对你带来的收获可能更大。可以参加,但最好不要在这上面花费很多精力
还有创新创业类比赛,也可以积极参加,但是我作为一个参与比较多这类的过来人的感觉是,它更像是一个 PPT 和关系比赛。没有一个“优秀”的指导老师、没有唬人的 PPT,你的项目很难在这条路上走得远,即便走出去一片光明,身处开发区的不利地理位置也可能让你止步。可以提供一个比较有意思的思路,创新创业类比赛对参赛团队成员的学校和专业都没有限制,可以挂靠和参与到别的学校的团队中,每年这类比赛开始后都会有一些相对较低的高校的经管之类专业的同学来寻找组队,并且大创类比赛的项目门槛较低,很多东西都靠吹,不一定真的要做实现,其他高校的竞争压力会小非常多

推荐课程列表

  • 计算机科学速成课,虽然叫速成课,但是对于计算机的基础学习非常全面,按照一层层抽象讲也能让你对计算机体系有一个宏观的认识
  • C语言程序设计-浙大翁恺,对入门 C 语言来说,翁恺老师的课是最能讲到思想的,配合 C Programming Language 这本圣经一起看帮助非常大
  • C++语言程序设计-浙大翁恺,同一个老师,C++ 相对来说不如他的 C 语言课程,但是仍然是非常好的课程
  • 计算机组成原理-南大袁春风,朋友推荐,大二的课程南大应该做的相对更好一些
  • 操作系统:设计与实现-南大蒋炎岩,这课一开始看真的很震撼,后来发现主体依照 CSAPP,但是老师的一些思想和操作都很亮眼,男神级人物,有幸借面试机会和蒋老师聊天,完完全全被碾压
  • 线性代数-MIT,MIT 的神仙课程,光这个课程就已经翻录过了,老师把线代从设计思想上讲活了。尽管和课内的思路不同,但是非常推荐学习,我也做了这门课程的笔记
  • The Missing Semester of Your CS Education,MIT 的神仙课程,补足一些你在课内不会有机会学习的东西,重点在了解和引起兴趣,非常优秀的课程,博客内也有以前看这门课的笔记
  • 玩转 Linux 命令行,花花自己制作的课程,对于稍微接触了一点命令行的同学来说会收获很大

Welcome to my other publishing channels