为什么成为一名程序员?

好久没有写感悟类的文章了,本来考完研就打算写一篇文章,对大学四年做一个“复盘”的,但复试被调剂了,难受了很久,之后也实在没什么由头写。在岁末年初前夕,我终于不打算再拖沓了,准备好好整理一下,做个纪念。一方面,审问一下自己的初心,整理一下思绪;另一方面,思索未来的方向,慕然回首时,不回因碌碌无为而羞愧。

初次接触

我和程序的渊源,最早可以追溯到小学。

上的小学是我们县里最好的私立小学,当时还很潮,有微机课。现在回想起来,还记得上课时要穿鞋套才能去机房,调皮的男孩子扣出鼠标里的轨迹球当弹力球玩。那时的微机课学了好多东西,但到现在我记得最深的是老师在一个框框里演示一个小乌龟爬呀爬,画出了各种图形,那个框框老师说叫Turtle。之后老师让我们自己操作,我照着书敲击键盘,画出了圆形、方形,三角形,很有成就感。当时的我根本不知道在做什么,等多年以后我在python里发现了turtle库的时候,猛然如雷击,这竟然是在编程?

后来初中为了考计算机等级,学了excle,里面的函数有求和、取平均,最大最小,甚至还有if-else结构,其实这也算是编程了吧。

上了高中学习压力大增,虽然学校也有微机课,但只在高一上过几节,讲了一些计算机基础和剪辑视频。后来了解到当时高中重点班里就有一些学霸,在搞NIO(信息学奥赛),他们在高中应该就学完C语言和数据结构了,听说在南方这很常见,但对我们这些北方小县城的学渣是不敢想象的。

选择专业

高考算是人生第一次重要选择,我高考成绩很差,理综考了有史以来的最低分(17年理综生物的一道道横线永远也忘不了),只能上一个二本。那时候,知乎和B站还很小众,没有这么多专业选择的文章和视频。家里也没有走出小县城的人做指导,我只能靠那本学校发的一本全国高校分数线的书,按图索骥,找和自己分数匹配的学校专业。当时大部分选择还是省内的学校,那就找找合适的专业吧。我开始选了一堆土木工程、机械工程、自动化,爸爸看了看,紧锁眉头,问了我一句:你以后想去工地还是去工厂?啊这,我想了想我自幼体弱多病,也不爱运动,肯定做不了体力活。看了看剩下的还有计算机、数学、统计之类的专业,家里一位当老师的大姨说可以学学数学,但我又想到我高考刚一百出头的数学成绩,学了数学岂不是会被累死?最后权衡之下选了计算机科学与技术,现在回想起来,还挺好玩的,计算机并不是当时的首选项,如果当时选了数学或统计,研究生再转计算机,又会是怎样?

可惜没有如果,最重要的一次人生路线,我就这样阴差阳错做出来选择,去了离家开车只需要两小时的一所财经类高校,庆幸学校重视计算机,计科专业是国家特色专业,老师和学校也尽力提供了各种资源。我怀着对大学生活的憧憬度过了暑假,终于等到了开学。

大学生活

大一刚开学,我就像逃出笼中的鸟儿,参加了好几个社团,本想着终于开始自己丰富多彩的大学生活了,但社团活动就是无聊的签到和开会,后面我也不想去了,一有空就在宿舍躺着完手机。如果我一直这样下去,可能就真的废了吧,但我的C语言老师改变了我。我的C语言老师当时对我们非常严格,期末成绩由三次上机考试分数组成,有一次不及格,直接挂掉。每次上完课后都会在Online Judge上布置作业,如果系统判断是抄袭,也是直接挂科。在这样的重压下,我们不得不认真完成作业准备考试,有时为了完成作业,整个宿舍写代码到深夜。不得不说,严师出高徒,我在OJ上练习多了竟然也对写代码兴趣愈发浓厚,简单循环加判断的组合竟然能解决这么多问题,每次练习AC了就很开心,WA了就抓耳挠腮。后来学院ACM集训队招募队员,我通过了选拔,开始了算法学习。

在ACM集训队学习期间,晚上就是刷算法题,周末参加线上的比赛,假期师哥们讲解算法。我当时整体做题补题到自闭,看着周围同学都能很快理解题意码代码,我一遍遍怀疑自己是不是智力缺陷。有很多同级的同学崭露头角和师哥们取打省赛、区域赛,也获得了很好的名次,说不羡慕是不可能的。后来我也明白自己没有竞赛的天赋,索性就当学习吧,就这样给大佬们当陪读,学了些数据结构、图论、动态规划、搜索算法等。ACM比赛带来的抗压能力、代码能力、算法理解力、思维缜密度这些是最珍贵的。我的博客最早也是写算法题题解的,想来这也算是ACM带给我的好处——整理知识、分享知识。不得不说,那些一直参加ACM的同学毕业去大厂的真的不少,阿里字节都有。今年毕业时,我校ACM队终于拿下了省赛金牌,后生可畏啊!

到大二时我选择了退出,选择了另外一个学习计算机底层的实验室。当时实验室的学习任务是在Linux上做一些汇编实验,用的是CMU的CSAPP上的实验,里面的汇编拆弹让我一步步了解了程序是怎么在内存中执行的,很nice!大二开始学C++、Java、操作系统、组成原理,我也可以搞一些事情了。当时我每上完一节课,就对着课本整理笔记放在博客上,最开始只想着自己回顾的时候方便些,后来有越来越多的网友阅读,也有不少在下面评论的,我像得到了正反馈一样,越来越有赶紧了。就这样我整理完了算法设计与分析C++Java数据库组成原理操作系统图形学等的专栏笔记,随着学习的投入,我的成绩排名也保持专业前三。

初入江湖

未完待续。。。