第一部分:结缘计算机
在进入大学之前,我的生活和计算机似乎没有太大的关联。要说和计算机有关的生活,也就是打游戏了吧。因此在高考填报志愿之前,我从来没有想过会去学习计算机。后来选择计算机,仅仅是听说这个专业很火,很多人学。
大一上学期的计算机基础操作,学了一点点Python。第一个程序是print(‘hello, world’),运行后在屏幕上看到hello, world一行字十分激动。这是我写的第一个程序。再到后来,老师讲了变量,表达式,函数以及Python的面向对象。当然那时候的我是不能理解面向对象的。
但后来我渐渐发现,我周围的同学并不都是和我一样对计算机和编程一脸懵逼。他们进入大学前有了很强的编程能力,博客I[1]也是这么说的:“我把所有课余时间都放到学习电脑和编程中了。很少玩游戏,而且比较少参与课外活动,周末和假期都把所有时间都投入到学习编程中。高中,学习的确繁重,但我仍然把相当多的学习时间都放到学习编程中。”这让我意识到,原来一开始我就落后了别人那么多,不努力追赶,就会掉队。
1. 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答)
当初选择计算机专业的时候,只知道这门课是敲代码的,学完就可以做游戏做软件。因为不曾接触过计算机编程,也不了解专业的内容,所以在开始学习这个专业之前,谈不上喜欢这个专业。
到了大学和同学比较,发现我的条件并不怎么样。一切从零开始。我在读博客时发现很多很厉害的人在初中高中就接触了计算机和编程,这一点我是比不上的。但了解了这个专业之后,我喜欢上了计算机,我也相信这份热爱能帮助我更加努力的学习。
2. 计算机是你喜欢的领域吗?是你擅长的领域吗?
学习了两年计算机,确定了计算机的确是我喜欢的领域。我很享受自己写的程序正常运行时的成就感。一个程序能快速且精确地处理输入,然后把结果输出出来,我认为这是十分神奇的,即使十分清楚它的内部逻辑是怎样的。我还记得在不了解递归时看到了汉诺塔问题。网上的简洁的递归程序让我十分着迷,即使了解了函数调用,但我从来没有想到过函数里面还能调用自己。这些以及其他一些神奇又精炼的算法和表达式让我喜欢上了计算机和编程。
计算机专业是不是我擅长的领域,这个问题很难说。至少作为一个理科生,可以自信的讲解决理科的题目是我擅长的领域。而计算机编程也能表述为一个个数学题,所以我想我应该也是擅长的吧。
3. 你热爱这一专业吗?你对计算机的热爱是怎样的?仅仅是口头的吗?
我认为我是热爱这一专业的。中学时代,做语文英语的题目总是让我昏昏欲睡,而面对数理化时却从来不会这样。因为我当时是热爱数理化的。到了大学,敲代码时我总是很亢奋,有时候过了睡觉的时间都浑然不觉。所以我想我是热爱计算机的。
第二部分:在计算机系里学习
现在我也已经在计算机系里面学习了两年了,学过了数据结构,学过了计算机组成,学过了面向对象和操作系统,以及一系列的数学课程。让我真正入门编程并快速提升编程能力的就是大一下学期的数据结构。首先是快速掌握C语言的基本语法,以及指针操作。然后讲了链表,树和图。课上讲的都是照搬书上的内容,讲完一遍感觉还不是自己的东西。真正帮助我的是课后针对性的编程题。每道题都紧扣课上的基础内容,需要自己实现各种数据结构。同时又有难度上的提升。这对于当时的我来说很有挑战性。完成了这些编程题目之后,才算是真正理解了这些数据结构的内涵。博客B[2]中也提到了类似的经验:
我们的授课老师,却只讲最简单的概念和不深的理论描述,给我的感觉就是,“数据结构”几乎是门和“离散数学”差不多的数学课——他用最肤浅的知识,“成功地”告诉了我们“数据结构”是门几乎不用动手写程序的课程,只用上课听听就好了。于是乎,一门需要动手实践、将会极大地提高我们编程素养和思维能力的课程,就被我们这样迷迷糊糊上完了。
2005年准备研究生考试的时候,我旁听了朱仲涛老师的“数据结构”课,当时的感觉只能用两个字来形容:震撼。在他的课上,我对数据结构有了全新的认识,对计算机也有了一点与以往不同的了解。他的讲课风格非常独特,他只用1/5的时间简述一下要讲的内容,剩下的时间都是当场写程序。
在读了大神的博客之后,发现他们在本科学习阶段做的最多的一件事就是看书,并且自己敲书上的每一行代码,然后运行。这是我没有做到过的。本科学习是积累的过程,要看很多书,要深入的看书,包括每一块代码和每一章末尾的习题。只有拥有异于常人的精力和对计算机的热情才能真正学好这门课。
大二上的计算机组成原理一方面让我们了解了计算机中最底层的运行原理,另一方面,我们通过数周的编程,修改和重构,完成了真正意义上的完整的项目。当完成编码后看到输入的一条条汇编指令得到结果的时候,这种成就感是十分醉人的。
大二下学期的面向对象课程让我们初步感受到什么是结构化和模块化编程。你写代码不仅仅为了完成当前需求,还需要考虑到需求的更新和补充,以及其他人能够快速的读懂你代码的逻辑。因此面向对象的三个精髓:继承,多态,封装变得尤为重要。
1. 你对你的大学生活有什么想要吐槽的地方吗?你理想的大学教育应该是什么样子的?跟学校给你的有什么区别?比较你在中国大学的经历,你的老师和学校能做到和国外那样吗?如果不能,请分析一下为什么。(必答)
2. 迄今为止,你写了多少代码,描述你做的最复杂的软件项目/作业。(必答)
到现在为止,我大概写了近万行代码。我认为最复杂的软件项目是MIPS流水线CPU。这个作业大概有上千行代码,直到P7时,能支持二、三十条指令,以及中断处理。这项作业的难度逐步提升,完成P5以后,原来的一部分代码由于逻辑结构不够清晰,已经很难再扩充功能支持更多的指令,因此我在P6时将大部分代码重构。重构之后的代码在扩充功能时变得十分清晰而简单。P7增加中断处理时也并没有那么困难。
第三部分:未来规划
有时候的确也会去想一想以后走怎样的路。博客L[3]中也这样写道:“如果你对技术的热情一般,也没有太多的自我价值的追求,也不想拼搏,而且对吃大锅饭不反感,对没有激情的工作不反感的话,那么,你应该去事业单位,当个公务员,走走常规则的人生,养养老也不错。这里,我多说一句,根据中国的现在国情来看,如果你有自我价值的诉求,你要去大城市,去好的公司,走体制外的路线,如果你又不想来大城市 ,只想呆在地方的话,那么,我个人非常建议你走体制内的路线,在地方,只有体制内的路线是最好的。”一方面我希望将来的工作富有挑战,另一方面,生活在大城市里对无依无靠的毕业生来说是很困难的。而最终要走哪一条路,只有自己经历过才能知道。阅读过博客A之后我也意识到了面试时技巧的重要性,同时本科期间多看书多做题是有助于面试的。
1. 对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样来规划你技术道路,职业道路和社会道路?(必答)
在未来,我希望能从事和前沿技术密切相关并且投入实际应用的工作。进入社会投入到工作中时,应该抱着提升自己的态度,多学习多积累,这将是未来自我发展的基础和本钱。
[1] http://www.cnblogs.com/unruledboy/p/DevCareer.html
[2] https://book.douban.com/subject/4006425/discussion/22803961/
[3] http://coolshell.cn/articles/4561.html