关于当初
升入高中以后,因为学校抓学习抓的很紧,也没有很多时间去接触学习之外的东西。在高二那年,我认识了一位竞赛班打OI的同学,听说他拿了信息学竞赛的国家一等奖,可以直接保送清华,那时觉得编程是一件很厉害的事。
当时我们班有一位同学,因为觉得自己清北无望,决定休学准备出国,在高三开始的时候拿到了宾夕法尼亚大学的大学的计算机专业的offer。在他再回到学校时,他给我说了一下他的计划:到光谷实习小半年,然后去美国读大学,读完之后在美国工作。我当时就感慨,当我们还在为高考奋斗的时候,他就已经有自己的规划了。
高三开学的时候,我以“题目不会做,要查阅资料”为由,让母亲给我买了一台手机。有了手机之后,也没看太多资料,反而玩起了知乎。也正是那之后,我开始知道“大学会面临更多的选择”,“有些人只是看起来很努力”,“计算机专业和软件工程专业有什么区别”,虽然不能说知乎上看到的东西都是正确的,但是还是给我打开了新世界的大门。另一件事就是,我发现自己每次考试都考不过每天在寝室看动漫的室友,心态上受到了一点影响,让我有点怠惰,于是每天就多出了一点时间胡思乱想,考虑未来的事情,去了解理工科的各个领域以及各个大学的情况。
我是一个很犹豫的人,对于我来说,很少有事情是立刻决定下来的,而是一件件小事,一个个想法慢慢积累起来的。以上是我认为对我做出专业决定影响比较大的几件事,也正是在这样的不断了解的过程中,我做出的一个自然而然的选择。
自己在大一的时候,学了一点点前端的皮毛,后来因为各种原因没能坚持下去,现在看来也是一大遗憾。大二零零碎碎入门了Java,并加深了对C语言的理解。大一大二有几段使用C++编程的经验。现在想来,自己的代码量本身就不大,除去学习时的代码,有效的代码行数更是少得可怜。写过最复杂的项目也就是大二下实训与同学合作的车牌识别管理系统,以及《编译原理》课程实现的类C语法的编译器。
关于未来
上大学以来,我的心态也发生了一些变化。一开始进入大学,我是想进入技术团队锻炼自己,毕业直接找到一份理想的工作。在学习过程中,我发现自己对于原理感兴趣,对于一样事物,很想弄清楚它到底是如何工作的。在上数学课的时候,我也发现自己对数学并不讨厌。所以我还是打算读研,一是再花一些时间去尝试,去体验,去寻找自己真正感兴趣的方向并专心下去。二是想对计算机进行进一步的深入探索。三是再给自己一段缓冲期,去学会适应社会。接下来的这段时间,计划提升一下C++的编程能力,之后打算去实习,获得一些软件开发的经历,对业界的情况有进行大致的了解。
关于当下
我觉得自己目前是喜欢这个专业的,这是我感兴趣的专业,也是我不断思考做出的决定。我觉得我是一个话比较少的人,面对一个问题,我更倾向于一个人思考,也比较喜欢一个人安静地做一点喜欢的事。我觉得自己比较适合做技术方向,或者是理论和原理研究方向。我现在具备的能力有较好的数学基础,Unix/Linux的开发基础,C/C++的编程基础,一点点图形学的基础。自己现在没有什么特别精通的东西,能力也有点杂,但是我都进行了尝试,也都是我感兴趣的地方。
与一名合格的毕业生的最大差距应该就是实践动手能力吧,感觉自己写代码比较少,很大一部分是因为自己有点懒,觉得知道怎么写就行了。但是其实实际动手还是有很多细节坑要踩。
关于课程
在大学中,我有几门印象比较深刻的课程:
1.《数据结构》,GangShen真的是一个很有魅力的人,记得有好几次,在进行复杂度证明的时候,他总能够用一两句话切中要点,对于数据结构的讲解,他总是言简意赅,并留给了大家足够的思考时间。在知识点的间隙,他也会讲一些冷笑话。在当时我的看来,他不仅技术能力强,也是一个很有趣,很随和的人,甚至认为他就是我五十岁左右应该活成的模样。
2.《线性代数》,我对这门课的印象深刻,倒不是因为线代老师上课讲的知识点,而是他的一句话:“你们这一代人应该去做你们想做的事”。因为自己高考发挥得一般,进入大学一定要进行弥补,无论是继续深造还是工作,都要干出一番事业。所以有一段时间,我将自己逼的很紧,在生活中不敢有一丝松懈,想要通过不懈的努力去做出辉煌的成就。后来,学完了概率论,受到了网上文章的一点启发,我以概率的眼光去看待自己的人生,发现自己成为顶尖程序员的概率不是太高,我越来越觉得自己不过是一个平凡的人,普通的人,我开始想以自己喜欢的方式去生活。那段时间自己太过于关注自己的成就,或者说太执着于确定自己的辉煌未来,让我忽略了学会去生活。我渐渐开始意识到以前的自己有点像一个野心家。想了很多之后,我开始转变心态。除了课堂学习的内容,我还会自己感兴趣的部分做拓展阅读和代码实践,也不再只诚惶诚恐地去关注自己的考试分数。
3.苏曙光老师的《微机原理与接口技术》,这门课是将我的对计算机的认识上升了一个档次,无论是对于端口、接口和地址的理解,还是有关汇编和硬件的实验,都让我受益匪浅。苏老师上课也是生动有趣,结构清晰。
4.《The Essence of Lineral Algebra》,这是一系统的动画短片,通过动画解释了线性代数的几何学本质,从复杂的计算中脱离出来,对线性代数的本质进行了生动的阐述。这个系列真的从根本上改变了我对线代的看待方式。
我认为科班出身和速成培训的区别在于,数学和计算机基础,以及解决问题的能力。第一,在实际的编程中,有很多问题停留在代码层面是没法解决的,在面对出现的问题时,科班出生的程序员可以结合操作系统或者硬件的角度来分析问题;第二,科班出生的程序员在本科和研究生会有开发经验,并且会总结最佳实践,在解决复杂系统的问题时,这些经验对解决问题有很大的帮助;第三,软件开发中遇到的很多问题,都需要用数学知识建立建模,这个时候就需要用到图论,线代,高代等知识。
关于教学
邹老师在博客中提出
我心目中理想的师生关系是什么? 是 Coach / Trainee (健身教练 / 健身学员) 的关系。
这个也是我比较认同的,老师在课堂上的时间有限,能教的东西也比较有限,只能够将课程的核心的内容教授给学生。最后还是需要学生自己投入时间、精力去学习。在一些关键的时间点,也需要老师来对学生进行正确性的指导。老师和学生应以互相平等,互相尊重的态度进行交流,沟通。