主剧情 大一上
回想起2015年6月我被科大录取的那一天,那时我还是相当开心的。我周围黑科大的人挺多,但我自己倒是觉得在这里挺自在的。
我是高二被科大录取的,高二的暑假除了大量的玩耍之外,我凭着自己的兴趣干了一点别的事情。
我从小就没被限制玩电脑,即使是在高中那么紧张的时候,电脑仍然在我旁边想用就用。后来被科大录取了,不用上课了时,自然也是这样。有一天,我从新生群里面发现有个叫Code::Blocks的东西,便下载下来安装了。打开一看才知道原来是个写C语言的东西,便下载了一本谭浩强的C语言教程开始从头看。遇到有意思的程序,就在Code::Blocks里面敲一遍,跑一遍。有时候会抄书,有时候想挑战自己就自己写。当时的最高水平是把汉诺塔的递归程序给实现出来了。我记得我当时还分不清函数的定义(definition)和声明(declaration),遇到语法错误也不知所以然。于是我就一个劲地百度,走了许多弯路,最终当然还是调好了,因为这些错误前人都走过。
我每天会看一个下午,入学前的7月份就是这么过来的。我记得我最后看到了文件/IO那块。当然那时候我对指针还是一知半解,这本来就不是一次能理解清楚的东西。
这个暑假的另外一个收获是入门了Mathematica(下简称MMA)这个可玩性很高的东西。MMA简直可以称为全宇宙最强的(符号计算)科学计算器。虽然我没多用过MATLAB,但我是更偏爱MMA的,就是因为它强大的符号计算功能。
MMA比CASIO 991强到不知道哪去了。当看到MMA把复杂的符号积分算出来并化简时,我简直要惊呆了:
当时搞物理竞赛算得累死累活,最后和答案对不上时,为了确认这是否一个计算错误,我得一步一步得验证每一个积分/求导/解方程有没有弄错。大量的时间都花在计算和化简上了,然而我的计算速度和正确率仍没有提高,大学也是。
尝到了甜头,自然就会贪婪地想让MMA帮我做更多的事,恰好MMA又有一套非常友好的帮助系统,哪个函数怎么用,几秒就能查清楚,不仅如此,该帮助系统简直是一本百科全书,对数学、物理中的一些概念都很详细地做了解释。大一时我没事就会去看MMA的帮助。于是我大一物理课的表达式化简/积分求导,以及大物实验的作图,基本全靠它了。
暑假还凭着点良心,凭着少许热情看了一点物理书,主要是《新概念物理》系列,看的很少。数学则是看了几页就看不动了,虽然有些家长说数分学分多,拉绩点之类的话。而且上课之后,事实证明我看的速度远没有老师讲的快。
大一上学期我上的程序设计课是tlx老师的。自然我就不想听她讲那些基础的C语言知识了。过几周后她给我们讲,我们可以选择做“大作业”,自己写一个比较复杂的程序,就不用写那些无聊的算法题和上机了。我就很开心地找老师报了名。
我的选择是做一个图形化的小游戏(其制作过程写在这里了)。于是之后大半个学期的上机时间和上课时间,我都坐在教室最后一排,抱着电脑写代码。最后C代码大概写了400多行,算是一个完整的游戏,有简单的玩法,方向键控制人物移动,鼠标控制攻击方向,同时需要躲避敌人的攻击。
后来,C语言的课讲到后面,开始小有难度。上机题也变得麻烦了。而且当时老师和周围的人都鼓吹的精神是:应该在编译前就要做到零error。我开始意识到,为了应考,我需要做到的不是写出炫酷的图形程序,而是需要熟练地、毫无差错地把建链表的C代码默写到纸上。于是我发现我正在做的事情不利于考试,就再次找到老师,说接下来我不写游戏了,要好好做作业。
其实从工业界IT领域来看,若不是为了应考,上述的精神是大错特错的。语法错误根本就不是问题,现在的IDE(Integrated Develop Environment,比如大家上C用的比较多的Code::Blocks和Dev-C。现在更热门的选择是Visual Studio)完全可以做到在你写出有语法错误语句的下一秒,就用红色的下滑线准确地提示你了。况且在有成百上千个源文件的工程中,粗心导致的语法错误在所难免,通过人工检查来除错,效率实在太低了。
别的课我就不详细写了,因为我在其他课上没做出什么与众不同的事情和成果。当时我周围人都有点吐槽少院课程安排不合理,比如强制给我们上数分,而不是单变量微积分,无论我们打不打算学数学;以及强制给我们上化学。其实我觉得少院的数分比单变量也不见得会要求高太多,至少“不一致收敛”这种概念还是在我的理解范畴中的。我觉得,数分对我来说最大的意义就是,让我能明白严肃的大学数学课程大概是个什么样子,数学家都是怎么在思考的,以及让我明白我不适合学数学专业。。
大一上就这么很开心地过去了,除了数分和思修是3.3以外,其他基本都是优秀,因为我的物理基础还不错,所以除了数学以外的课程都很轻松。
快到寒假时,新生研讨课开课了,我和小伙伴开始讨论选题。提出的多个题目似乎都不能达成一致。其实选题还是挺讲究的,作为理科生,若是选了一个文科题目的话,就只能做收集资料式的泛泛而谈;若是选了理科题目,如果难度太大,自己又驾驭不了(但如果难度适中,还是有很多探究的地方的,如有的组会做的是小纸船在水中的动力学分析,这个导师当时就很赞赏)。
我们组先有人随便提了个“湖北、广东的XX文化对比”这种文科题目,因为四个人有两个是湖北人,两个是广东人。然而有组员希望做的东西能有理科生的研究性质,而不仅是调研。接着就有人提了“高维空间”。
相比之下,我觉得工科题目是相当吼的,因为总是可以做一些有成就的事情,即使是重造轮子(造轮子,是指把别的程序员已经写好了的很成熟的、大家都在用的程序/工具,自己再重写一遍。这种事情并不会对这个世界有什么直接的贡献,多半只是为了锻炼自己能力。)也无妨。我在别的班的选题示例上看到了二维码相关的选题,立马就来了劲。犹豫了一小会儿,查了一下资料粗浅了解了一下二维码的编码原理,就信誓旦旦地在讨论组里说,我们做二维码吧。
可能是因为这个题目确实挺实在,也可能是因为我表现的过于自信,大家都同意了。
欲知后事如何,且听下回分解。