有人说,大二或许会是大学四年的最低谷,因为大一的新鲜懵懂已经过去,但前进的方面又未明了,大二才是开始迷茫的时期。的确是这样的。但迷茫什么呢?对我而言,我不知道是该理论先行还是实践先行,不知道现在对我们而言,是该“博”还是该“约”,是该“专”还是该“通”,面对我日益下降的对技术的兴趣,我不知道该偏向于计算机科学还是计算机的技术,我也不知道我该怎么来打发人生的无聊。给老师发了几封邮件,问了实践方面的一些问题。但早该料到这样的问题是问谁都不会有结果的,更不要说其他关于人生方向的问题。或许真的“只有靠自己,才能回答生命中的难题”。马上就大三了,把一年来的思考写下来吧。对我算是一个总结,对其他人算是一个可借鉴的材料。
这个问题产生的原因很简单,学校的课程很理论,并且还一厢情愿地加了一些所谓的实验课。其实真的什么都没有学到(当然,倘若是学校的本意是普及对某课程的入门知识,他们的确做到了,但我相信我在没有分数负担情况下自学能学得更好)。但如果自己做很多实践,考试分数怎么办,分数就是 GPA,意味着保研资格,意味着奖学金,意味着很多很重要的但又无意义的东西,丢不了。做很多实践应该是把知识掌握得更牢固啊,为什么分数会低?如果你参加了一个 10 个周的算法设计与分析课程,却发现如果自己课后如果要加强实践,则可能要花一个半小时看一个 MIT 的算法导论视频,到 POJ 上做一个类似的题可能要花一天时间的时候,就会发现理论课就是理论课,理论课的东西想用实践来巩固,就是在其他课程上的自杀。在理论和实践上不能走极端,但这个极端的界限需要不断调整,也最难调整。真正的实践肯定会比理论学习要占更多的时间,所以针对某些真正感兴趣的科目进行实践是最有效率的。而进行的实践,比如算法分析一门课,就可以仅锻炼解决问题的思维,而把具体实现的比重放轻。
计算机科学与技术专业,它把科学与技术相提并论,难道科学和技术很紧密么?不,至少从我课后对一些纯技术的开发的了解来看,大学前两年学校的教学中它们就是断了的线。在大二一年的思考中,我开始慢慢远离了那些层出不穷的技术,更加偏向于对计算的学习(当然我目前的理解是,计算机科学应该是对“计算”的一门科学,至于是否要更深入地“用计算的眼光看世界”就是另外一码事清了)。我越来越觉得需要把这两者分开来对待。如果偏重于技术,那么四年中,就需要对计算机的各种技术有了解。语言呢,php,js,C,C++,java,python⋯⋯如果是系统管理呢,还有 perl,shell,ruby⋯⋯还用各种开发工具,了解各种框架,读各种代码⋯⋯在里面找一个自己的方向。偏重于科学,我也不知道什么重要。但就从我学习 SICP 这本书的初步理解呢,我姑且浮浅地认为思维方式吧,比如书里面说到的抽象:在不知道数据具体表示的时候,如何设计函数得到求导数过程,或者如何设计通用函数。正像是书中序言说的:“‘计算机科学‘并不是一种科学,而且其重要性也与计算机本身并无太大关系。计算机革命是有关我们如何去思考的方式,以及我们如何去表达自己的思考的一个革命。” scheme 是应该要学的(scheme 超级强悍的递归设计方式很有启发性,同时作为函数式语言,另外的强大之处就在于处理符号,而人类理解世界也可以从符号入手,symbols are a language),其他的我还再探索,但我一直再想如果有人能给些许指点会进步更快的。其实这本书在大一就完全可以开始自学的,它对抽象思维的训练,我认为,是学习 C 语言不能比的,并且还可以早日了解关于计算科学的知识。除了这本书应该还有很多东西可以在大学前两年接触,但有什么办法呢?到了现在还能相信老师会给一个毫不起眼的学生完完整整地分析他的情况,给出切实可行的建议么?不。他们有他们要做的事情。
我曾一度非常想做一个课外的东西,比如自己研究一下搜索引擎,或者开始尝试做一个解释器,或者模仿着做一个操作系统⋯⋯就想做一个超出我能力范围的东西,慢慢研究。当时不确定做什么,看到其他人博客上他们又参加 google code of summer,又是研究各种东西,就发邮件问。我想知道一个读计算机专业的大二学生能做什么来提高自己的能力,因为课余时间是相当丰富的。但没有人能够回答,谁又能知道另外一个人到底想做什么呢?对什么感兴趣就做什么呗,那都感兴趣怎么办?自己尝试着先做做就知道了。很多东西和我们所想的是完全不同的。比如非常非常想学编程语言,那就学上几个,然后才会发现,编程语言不是那么重要,编什么东西才是重要的。我曾经一度想用 Python 来编个简单的博客程序,满足简单需求就好了,想看看 django 框架能不能实现。后来把 django 的 tutorial 上的简单留言簿实现之后才发现,这个是真的超水平了,并且曾经以为会感兴趣的东西在做过之后才知道不感兴趣。自然之后的博客程序也没找落了。大三的课程很可恶,白天的课全满,没有一点空隙。那自己的研究就更没有着落了。慢慢的找吧,自己的研究不需要上缴作业报告。
这个学期参加过两个竞赛,一个是全国数学建模的校内选拔赛的第二轮(总共是三轮),一个是信息安全全国邀请赛的校内选拔赛。前者我是半路插队的,后来我自己退出了;后者没有通过的原因未知,据说是我们设计的东西太复杂(这个理由我认为逻辑上通过不了)。我本来以为数学建模上用 python 的几个科学计算库就够了。但事实是不够的,matlab 是必须的。所以在比赛过程中我一边查 matlab,一边做。还好,第二轮拿到了第十名的成绩,没有拖她们的后腿。想退出数学建模的理由很简单。我想这个时候是开始深入学习计算机的各种理论的时候了,虽然数学建模对整理已经学过的知识有很大帮助,但我不得不说,它是要靠积累的。“连博士生,研究生都做不出来的给你们做,还在三天之内做完,肯定有现成的解的,就看你们能不能找到”,指导老师如是说。我不愿意把时间花在这个上面。当我提出退组的时候,有一个同学给我发短信说,“你以为这里是试验场,想来就来,想走就走?”我不得不说,是的,大学就是我的试验场。不实验,我怎么知道数学建模没啥神秘的??两个比赛过程中,和他们的合作是很愉快的。特别是Z君对一个教授的态度让我看到了作为一个学生的应该有的态度,我因此思考了很多。在两年里,我几乎没对几个老师有过好的印象,而教授在我看来有的也是些很水的位置。如果学生心里对老师连最起码的尊敬都没有了,那这个大学真的和劳务市场没什么两样了。我们还应该看到学校里面真的有那么一群老师,他们是真正的传道授业解惑者。对老师应该抱有该有的尊敬态度。我参加竞赛的目的不为那个保研资格,中国的研究生博士生在各种负面报道下,已经没有了该有的吸引力(当然,迫不得已的话还是要在国内读研的)。“参加竞赛是为了提高自己的能力”是我在竞赛中的态度,也就是我退出数学建模比赛的原因。
无论是学习,还是目标的确立,我相信我在这一年中是主动的。给老师发邮件咨询专业的问题,给陌生人发邮件咨询技术细节,我一直想要主动地去改变被动的局面,虽然迷茫依然在。但我觉得还不够主动。我早就该主动去和一些研究生联系联系,更全面的去了解一下国内研究生的情况;我也早该主动地制定一下阅读的计划,有很多时间胡乱读书的时代已经过去了。总之有很多值得改变的东西。
大二一年,我发现我对在学校学习的兴趣逐日递减,恨不得整天逃课去看夕阳。无聊也时常来袭,但叔本华的人生观点很容易就让对无聊产生一种友好的态度—无聊是必然会产生的,无论你有多高雅的兴趣,多么丰厚的阅历。在实现了自己的一个小小的目标之后,必然会产生无聊,而解决方式,可以尝试着为下一个目标而努力。这也就是人生的悲剧。既然无聊挥之不去,那就无须再刻意地去赶走它,由着它,随着它。我毫不怀疑地相信大三会更加无聊。无所谓,“一蓑烟雨任平生”。
一楼住软件学院的学生。每次走过昏暗并且带有各种异味的一楼通道时,我都在想他们是如何过活的。我知道在墙的另外一边,他们正在兴奋地玩着魔兽等各种游戏,或许几个月没有整理桌子,几个月没有洗衣服,难闻的带着霉酸味的味道不断地从门缝里往外漏。这哪里是人住的地方!电脑,在不会用的人手中俨然成为了一种束缚。这种束缚像病毒一样会传染,无聊就是媒介。特别是计算机和软件的学生,好像他们的专业真的和电脑关系很大一样,其实根本不是那个样子。我曾经也被电脑束缚着。我总想如果随身把电脑带着,有空的话就打开电脑编程,那一定会对编程有很大提高。但我忽略了,打字的提高不是编程水平的提高,对于数学的抽象思维的训练,对构架的了解才是思想的精华。所以根本没有必要天天带着电脑,“如无必要,勿增实体”。当我意识到我拿着电脑,很多时间都没有必要地花在了电脑上后,我决心把电脑放在宿舍,再也不把它带出门。后来学 scheme,到了课后题需要写程序的时候,就写在笔记上面,回到宿舍之后,再把一天写的代码敲到电脑上,没浪费多少时间,还能够把错误直接标在笔记上。后来发现这样也不太好,早上写的,到了晚上输入代码的时候,当时的思路经常会忘掉。后来也不那么极端了,整理一下一天计划,需要的时候才带电脑,并且约定如果不编程,不写博客绝对不打开电脑。一天的效率果然飙升。
除了多读书,多编程之外,最重要的是着手构建自己的知识体系。我有的时候很迫切地想对人生有个认识,哪怕片面的认识也好。但这么些年以来,在一股力量的作用下,闭着眼睛就走到这里了。看得少了,自然判断力就弱很多,更多时候我认为我对周遭发生的事情是没有判断力的。比如所谓的各种国内事件,看到人批评,我心里也好像赞成他,看到人赞扬,我心里好像也赞成他。判断力越少,生活感越少,越觉得自己并没有真正的活着⋯⋯但这已不能仅算是大三的计划了。