通往下一阶的战斗——研究生报到前最后一夜有感而作

通往下一阶的战斗
——研究生报到前最后一夜有感而作

  人生的最后一个《暑假》(也许算不上,毕竟本科都毕业了),很快就迎来了大结局。原本是想在开学前好好地回顾一下自己在本科期间以各种渠道接触CS的经历、经验和教训的,但却因为人类的本质而一直没有憋出半个字……现在转眼就进入到了研究生阶段前的最后一个夜晚,我觉得无论如何,也要在这个时候凑出这篇文章了。

开篇:物理研究=手推公式+计算器?

  在经历了十二年的学习后,由于一直缺乏对电脑功能的认知,加上在竞赛期间频繁地使用计算器,导致自己在直到进入大学的时候都以为物理研究是使用“手推公式+计算器”的方法进行的。

  当时也知道有“编程”这个玩意,但却只知道是用机器来解决问题,而不知道是如何使用的。可能是因为受到过各种科幻片的影响,一提到“编程”一词,脑袋里面只能脑补出《黑客帝国》里面的乱码。

  “这都啥啊,大家都是怎么学会的?”那时的自己总是这么疑惑。

  第一学期的时候物院开了C语言,一开始是选了的,但后来听说名额很紧张,最好还是把机会让给微电的同学,所以便撤掉了。当时没有求知欲的我,并没有继续往下自行探索。于是,在接下来的几个月的时间里,我依旧对程序保持着“黑客帝国”这样的认知。

启蒙:MATLAB处理实验数据?

  第一学期没有物理专业课,但却有化学实验。在实验的前期,数据都非常地少,即便是使用普通的计算器也能够很轻松地应付过来。而到了中后期,则开始逐渐出现了线性拟合这样的操作,但即便如此,使用物竞时期送的较为高端的CASIO计算器也能够完成这些运算。

  而到了最后一次实验的时候,则在实验原理中出现了一个求解微分方程的环节。由于这个微分方程较为复杂,于是便有同学问老师该怎么办,回答便是“可以使用MATLAB进行求解”。

  MATLAB是啥?难道还能做到计算器做不到的事?于是便在第二学期选了MATLAB的公选课。

  在课上逐渐学会了如何将MATLAB当作计算器来使用,如何在MATLAB中作出比Excel画的更好看的图表,如何使用MATLAB对微分方程进行解析或数值求解,以及如何写函数——m文件……由于当时还没有接触过编程,因此在编写m文件时,程序就像狗窝一样乱:

function[y1,y2]=SunTime(J,W,~)
%SunTime.m        根据经纬度计算日出日落时间(北京时间)
%J                经度(南半球的话在前面加个负号)
%W                纬度(以东经为准,西经的话在数值前面加个负号)
%SunTime(J,W)     输入经纬度
%SunTime(J,W,~)   输入经纬度以及时间
%                 第三个空随便填个数字就行
%                 之后我会引导你去填日期和月份
%                 月份填错会报错,但是别把日期填错了啊
%                 否则后果自负……
%不要不按格式来……

%caimx   自编于2018-04-01
switch nargin
    case 0
        error('看帮助(╯°Д°)╯')
    case 1
        error('看帮助(╯°Д°)╯')
    case 2
        t=0:1:700
        y1=6*(1-tan(23.26*(pi/180)*cos((2*pi/365)*(t+193)))*tan(W*(pi/180)))+(120-J)/15;
        y2=6*(3+tan(23.26*(pi/180)*cos((2*pi/365)*(t+193)))*tan(W*(pi/180)))+(120-J)/15;
        plot(t,y1,'r-',t,y2,'g-')
        axis([0,365,0,24])
        xlabel('天数')
        ylabel('日出时间     日落时间')
    case 3
        a=input('输入月份:');
        b=input('输入日期:');
        if a==1
            t=b;
        elseif a==2
            t=b+31;
        elseif a==3
            t=b+59;
        elseif a==4
            t=b+90;
        elseif a==5
            t=b+120;
        elseif a==6
            t=b+151;
        elseif a==7
            t=b+181;
        elseif a==8
            t=b+212;
        elseif a==9
            t=b+243;
        elseif a==10
            t=b+273;
        elseif a==11
            t=b+304;
        elseif a==12
            t=b+334;
        else
            error('不知道一年只有十二个月吗(╯‵□′)╯︵┻━┻')
        end
        
        y1=(6*(1-tan(23.26*(pi/180)*cos((2*pi/365)*(t+193)))*tan(W*(pi/180)))+(120-J)/15);
        y2=(6*(3+tan(23.26*(pi/180)*cos((2*pi/365)*(t+193)))*tan(W*(pi/180)))+(120-J)/15);
        yz1=floor(y1);
        yz2=floor(y2);
        yx1=y1-yz1;
        yx2=y2-yz2;
        yxx1=yx1*60;
        yxx2=yx2*60;
        j=23.26*cos((2*pi/365)*(t+193));
        if abs(j-W)>=90
            sprintf('极夜')
        elseif W>=90-abs(j)
            sprintf('极昼')
        else
        if yz1>24
            yz1=yz1-24;
        end
        if yz1<0
            yz1=yz1+24;
        end
        if yz2>24
            yz2=yz2-24;
        end
        if yz2<0
            yz2=yz2+24;
        end
        sprintf('日出时间 %d时%d分',fix(yz1),fix(yxx1))
        sprintf('日落时间 %d时%d分',fix(yz2),fix(yxx2))
        end
    otherwise
        ;
        end

  整门课程学下来后,用电脑解微分方程的问题就解决了。那时第一次切身体会到程序的强大,于是在课程结束后还用MATLAB去尝试解决各种曾经用计算器解决不了的问题,玩的不亦说乎。

  随着对MATLAB熟练度的提升,渐渐地学会了如何使用MATLAB导出动画、导入表格数据并进行计算等技能。因此在大二开始后,这些技能都顺利地用在了物理实验数据的处理上,瞬间就将曾经的复杂到头秃的计算过程给简化为“一键完成”了,减少了不少的压力。至此,作为工具,MATLAB差不多是能将计算器给取代了。

  除了分析数据外,在那个学期,也分配到过用MATLAB模拟有心力场运动的课程演示,但截至那个时候,代码依旧乱的和狗窝一样,不堪入目。这时想到:不是有个东西叫算法吗?那个会不会就是教怎么把代码给写整洁的?虽然这个理解非常地荒唐,但想要学习算法的念头就此产生。

终于来到起点:C语言

  在经历了一年的专业课灾难后,到了大二,终于能排上C语言这门课了。在正式开始学习后,总算是将积累多年的紧张给消除了:原来C语言是用英语来写的啊!太好了,不是一大串意义不明的字符。。。

  在那个学期的课程中,是从Hello World开始学起的,然后到赋值语句,再到流程控制语句,再到数组和函数……因为课程定位原因,从指针开始的部分就是一笔带过的了,自然也没有学会,只是知道了有这个词而已。

  一个学期下来后,C语言会用一点了,虽然代码写的还是很难看,但也差不多可以写出一个能解决小问题的程序了。

  听过来人说,学习了C语言,就像是拿到了手动挡的驾照,今后去学其他语言就轻松很多了。于是,在大二的寒假,为了进入天体物理的课题组(当时通知的是会Python者优先),便又开始了Python的学习。

面向对象!新世界的大门!

  “面向对象”这个概念,我几乎是同时从C++和Python这两种语言中接触到的。在大二的第二学期选择了C++的公选课,其中提到的面向对象的思想让人眼前一亮:原来还可以用这么形象的方法来思考问题!而就在那个学期看Python网课的时候,也看到了Python版的面向对象的写法,开始慢慢地意识到“程序应该都是有共同性的”。

  每当使用面向对象的方法编程时,都会像自己造了个机器人一般兴奋。每创建出一个新的对象,都仿佛是创造了一个新的生命。

  在又经过了一个学期的断断续续的编程训练后,代码整洁度似乎终于有了一点提高。

犹豫就会败北!怒丢双学位机会

  大一的时候,曾经是想选择CS双学位,随后尝试将这两门学科进行融合的。但真到了大二选择双学位的时候,却因为不敢冒险,害怕因为挂科断送前程,而亲手葬送了自己的唯一一次机会。

  丢了这次机会后,甚至有了想留级的想法,但为了这点事就留级,未免也太冲动了。于是,便只好在遗憾中前进,在不断的失去中生活。

  “谁说只有双学位才能学他们的课?我这就自己去选。”带着这样的心态,我在大二暑假选课时,毫不犹豫地点下了算法和数据结构。

误入新世界:算法/数据结构

  当时已经知道了算法不是用来让程序变得好看的,但出于好奇,还是想知道一些如何评判并优化程序的复杂度,于是便还是选了这门课,并且连带着选了作为前置课程的数据结构。

  在经过了大三第一学期的学习后,误打误撞地了解到了伪码才是描述算法的最佳语言,并同时接触到了几种最基本的数据结构,用在同学期的计算物理上再合适不过了。

  至此,学习算法的念头实现了,接下来是见好就收,还是继续深入?

  一看选课列表:还有个软件工程?走走走,去选……

软件工程:一个人走得快,两个人走得远

  大三第二学期除了保研准备和学得三脸懵逼的固体物理外,主要就是软件工程的时间了。一周六个课时,且大多数都是小组实验的课,就这样在疫情的线上课程中拉开了帷幕。

  疫情、分组、人生地不熟、外行人捡漏、线上……于是,发消息没人说话,小组成员离奇失踪的日子开始了……那个学期,在理论方面倒是涨了不少的见识,而在实践方面则非常无奈,8人组最后硬生生地被组成了5人组,然后又是毫无合作精神的各自独闯天涯(例如一个人就把程序写完了,另一个人再随后补上类图这样的骚操作)……最后期末分数自然随着小组给分的爆炸而爆炸,简直不堪回首……

  当然,正如小标题所言,在这门课程中,的确是学到了这样的精神,这也许比小组实践的经验还要略胜一筹。

最后的疯狂

  保研后,大多数同学都进入了无课的大四上,开始全身心投入到课题组里,向各种等级的论文奔去。而我却因为还有好多想学的东西没有学到,而将重心放在了继续选课上。

  一开始以为编译原理+数据库系统+csapp+量子信息这样的配置不会显著影响到自己做课题,但我很快就发现自己错了:每门课都有着两门课的分量,在四门课火力全开的情况下,自己根本没有一点做课题的时间。

  在未来,课题还有许多机会去做,但这些课,以后再也不会见到了。带着这样的想法,加上当时听说的大四挂任何一门课都会取消保研资格的说法,我无奈地放下了课题,将注意力放在了课程当中。

  大家都在向研究生飞奔而去,而我却依旧停留在本科生的阶段。看着课程群里的各位都是18岁、19岁,而我却已经满了21岁。这样的差异,总能让自己长叹一口气。

  即便是将全力放在课程上,整个学期过的也是异常辛苦,常常在图书馆待10小时以上,最后两个月下来体重骤降十斤,这甚至是在大一都无法做到的事。

  付出固然会有回报。经过那个学期后,终于是学会了计算机的一些底层知识,学会了从汇编的层面去解决许多曾经注意不到的问题,学会了数据库的物理存放方式与各种存储逻辑,学会了曾经绕的头晕的指针,学会了程序翻译的流程……

  而延长了半年的学生生涯,也在csapp期末考试结束后的那个下午,拉上了帷幕。

  大四下便只做了一件事:毕业论文。然后整个本科的生活就在灯红酒绿之中结束了。

又一个起点

  因为有了前面的经历,所以在研究生阶段选择的课题便是和程序密切相关的项目。而在遇到了课题组的另一位成员后,才深刻地意识到了自己还有很长的路要走。“人外有人,天外有天”,这句话永远不会过时。

  “为什么你当时没有选择双学位?”在发现大佬竟然也没有选择双学位后,我发出了这个疑问。

  “我只要自己高兴就好了,为什么一定要这个学位?”

  是啊,让自己高兴就好,这才是学习。

(2021/9/5  23:02)这一个半小时的时间里,在毫无逻辑的情况下瞎打了几千个字,总算是把这篇完全不像样的“总结”给水完了。以后必然会慢慢地完善这些细节的,但在那之前,研究生的生活可不会等人。那么,读研后见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值