谈谈我的本科专业——软件工程

CC98十九周年坛庆活动,谈谈自己的本科专业

我是软件工程专业的一名普通学生,趁着19周年坛庆的这个活动,来说一说我对我的本科专业的看法。

Q1:为什么选择这个专业

这个问题说来话长,高中的时候做数学高考卷大题很有成就感,觉得自己以后肯定想去读数学系,我本身不擅长物化生,也对这三门课没啥兴趣,选考的时候考的都不咋地,所以填志愿的时候避开了所有对物化生要求比较高的专业,但是我的高考分数不上不下,上数学系可能还多了几分,当时听说计算机很热门所以就报了工信大类,最后也确实被工信打雷录取了。
后来发现进了工信还需要专业分流,填志愿的时候怂了没报CS,退而求其次报了软工。一个是因为当时CS的竞争看起来比较激烈,有很多OI选手和各种竞赛大佬,另一个是因为听说软工不用修硬件课,可以省不少事,综合考虑之下就报了软工。

Q2:本科阶段的学习经历

我上大学前完全没接触过编程,属于是半路出家的类型,刚开始学C小程的时候花了很久才成功运行Hello World,在安装VS的时候也是花了很久才搞明白怎么在VS里面创建一个工程然后开始写代码。大一一年下来,我的编程能力其实没有非常大的进步,基本停留在会做PTA编程作业的水平,而对于怎么做一个Project,怎么写出一个工程项目的代码就基本束手无策了(比如C大程),这个阶段我也非常迷茫,因为大一大部分课程还是基础课和通识课,仅有的专业课也是离散数学这种纯理论课程,在面对C大程这样的课程的时候,我也对自己是不是应该学计算机产生了严重的怀疑。C大程这门课上课完全不讲怎么写代码、怎么用老师给的图形库,但是大作业却要凭空做出一个系统出来(我们当时做的是最简单的俄罗斯方块,而且我其实也不咋会,全靠队友带),至今给我留下心理阴影,不仅是因为课程本身设计上有诸多不合理之处,我自己也没有掌握正确的学习计算机知识的方法,还停留在高中阶段的做题思维中。
大二之后,专业课的比例逐渐提高,但是我发现大部分课程上课和作业的割裂感非常严重,而且很多时候老师并不关注你的代码实现,作业和实验得到的分数往往和报告的页数正相关,这个阶段虽然写的代码变多了,但是很多时候我还是感到莫名其妙,因为老师布置的作业只有纲领性要求而全无细节上的指导,很多代码作业都是我凭感觉写的,至于代码的架构是否合理,细节上有没有出bug,我都很难得到有效的反馈。不过因为比较在乎绩点,大部分作业还是尽量花点心思去做,但是对于一些莫名其妙的东西,该糊弄的时候也会糊弄。
我印象比较深的是,大二下的时候,正值疫情爆发大家都在家里上网课,而软工专业正处于大学四年中最艰难的一学期,硬课特别多,大作业和考试也都特别多,但是因为疫情原因,很多考试推迟到秋学期返校,只留下几门课在线上考试,而且很多大作业也推迟ddl,这间接的救了我的大二下。当时考试考完之后,大家还有一周左右的时间补各种大作业,后面暑假快结束才开始复习几门没考完的课程(好多是4学分的专业核心课程)。如果按照在校内的正常学习的时间安排,我觉得我很可能活不过大二下。
另一件让我印象很深的事情是,大三上的时候学了软工三连,这几门课给我造成了非常严重的心理创伤,具体的可以看这个帖子
总的来说,对于本科阶段的学习,我是不那么满意的,总觉得自己没怎么在学校的课堂里学到很多有用的东西,这个固然有一部分自己的原因,但和我们学校本科培养方案的设计以及实际教学过程中存在的各种问题也不无关系。虽然这几年我们学院不少课程也在尝试进行改革,但是很多根本性的问题依然没有被解决,我对这些问题的讨论可以看我之前的这个帖子。教学改革不能只靠某个老师突然大发善心或者某个助教辛勤奉献,否则也难以推广和持续,而这背后涉及到的问题太多,我在这里就先不说了。
在本科阶段的课程学习过程中,我整理出了一些笔记和课程经验,汇总在这个github仓库里面,希望能对有需要的同学起到一点帮助,同时我希望有更多同学能够整理并分享自己的笔记和学习经验,让更多的人看到,这样既可以减少学习过程中踩雷带来的痛苦,也可以节约更多时间,让后面的学弟学妹做更多更有价值的事情。

Q3:有什么相关的建议?

  1. 早一点定下未来规划,不管是出国、保研、工作还是考研,都应该有自己的学习计划和路线,不要局限在学校的几门课程中。找工作的同学可以趁早学点技术栈或者溜出去实习,保研的同学可以联系一下实验室,出国和考研我就不知道了。
  2. 提高自学能力,有兴趣的同学可以去学真世界一流名校的CS公开课,绝对能学到不少东西,我虽然学的不多但确实有不少收获,相减胡学长的这个仓库和另一个由PKU的大神整理的仓库
  3. 计算机专业还是应该多写代码,多动手实践,少卷些sb报告