专业总结
转眼到了大四下学期,时间过的好快,在大学的这四年里经历了很多,也学习了很多,从对这个专业毫不了解,到选择这个专业开始,再到踏入校门。专业学习的过程便开始了。下面就讲讲大学四年我对专业学习的一个总结。
大学一年级,也就是刚踏入大学校园的那一年,怀着对大学美好的向往来到了河南最优秀的学府郑州大学,作为信息工程学院软件工程专业的一名学生,开始了自己大学的学习生活。当时对自己要学的专业一无所知,只是知道与电脑有关,还有就是一提起来自己学的专业,别人都一脸羡慕的样子(后来才知道是被认为电脑坏了可以找来解决问题的首选人士)。经过了对大学环境的初步认识,就开始了对大学知识的学习。
大一上学期的课程还是很基础的,基本上与专业知识无关。记得当时学的课程有大学英语和微积分等等吧。当时觉得纯粹是为了不让自己的大脑盾掉。微积分这个课程我倒是挺喜欢的,因为在别人看起来很难的作业问题我基本都可以解决,好吧,这也仅限于大一上学期的微积分。大一上学期没有带电脑,后来想想当时就是带了电脑,估计也只是当作了一个娱乐工具而已。大一上学期的生活就是学习英语知识和数据知识。数学知识倒是觉得很重要的,但是当时完全就是为了考试成绩而去学习的。大一上学期就这样每天晚上班级一起签到上自习,然后回寝室室友一起看电影,当时每周五大家一起看电影到一两点是多么快乐的时光啊。
大一上学期就这样过去了,过的很美好,但是却感觉收获基本是没有的,最起码连电脑键盘都没摸过几次,更别说学习什么专业知识了。到了大一下学期就开始学习专业知识了。刚开始接触的编程学习语言是C语言。用的是谭浩强那本N年不变被奉为经典的C语言书籍。好吧,大一下学期也为自己配置了电脑,算是开始了真正的专业知识的学习吧。那时候编写的代码,额,基本就是树上的例子,例如循环输出之类的简单的逻辑代码。这个学期还学习了一门课程叫做计算机科学基础。英文版的书籍,大概是介绍了一些计算机相关的名词,例如什么是硬盘,内存,计算机是什么时候产生的。
在大一的这半年里,偶然的机会接触到了学校的ACM训练,才知道原来编程并不是都是像课本上的作业题那么简单的,这里面大牛巨多,也才感觉到专业的压力,因为他们都很优秀,而且里面好多人有的从高中开始都已经开始编程了,说实话,那段时间感觉自己距离别人好远,然后也就默默的在练习着编程的能力,虽然这点能力也仅限于作对了某个OJ上的题目。就这样,这半年一遍学习着C语言的知识,一遍学习着算法。当时学习这些算法只是觉得和别人有差距,还有就是锻炼手速,因为好多代码都是直接从网上从看别人的博客得到的,(在此请无视我的节操)。当时看到别人在网上贴题解而且有好多的访问量感觉很羡慕,自己偶尔也会发些题解,仅限于一些算法题目。
在这里十分想说一下在网上发博客这个习惯,以前看到别人写的书中在前沿序那部分经常说感谢家人和朋友还有说限于作者水平,书中难免有错误。我会觉得好假啊,可是当自己开始发博客时确实感觉很艰辛,因为你不对问题有深刻的理解都不敢把自己做的东西些出去。有时候一个问题又会引出好多的问题,你必须得把他们都搞懂了才敢下笔写点什么。写博客的另一个好处可以锻炼自己的语言组织能力,这在后来越来越发现文字的组织能力也是十分重要的事情,以后我也会坚持写博客吧,一个专业人士的良好的习惯。
大一结束了就到了大二这个学年。到了大二继续认识新的人吧,大二上学期的课程到还是不太多,作为软件工程专业的学生,没有什么好说的,就是你必须要多动手,书本上的知识写的再好,不加以联系还是不能够真正的应用到实际中。大二这上半学期还是继续用C语言写点小的程序,因为目前还没有学期其他语言,说实话也不知道这个专业改怎么学习,其实要是这个时候有高年级的学生带会是件很幸运的事,应为可以少走很多弯路。好了,这学期还是有所收获的,那就是这学期我们学习了新的语言java。作为桌面开发的语言,java当时是我第一个用来做图形界面的语言(现在也是,应为不会Qt或者MFC等)。当时记得做的一个东西是联系了一些java的swing类库和用它做了一个小的计算器。自己当时感觉不错的就是,加了一个栈,可以支持公式和结果的后退,类似于浏览器的后退和前进功能。
大二上学期另一个很重要的课程是计算机组成原理,当时我记得对机组很感兴趣,现在也是,不过虽然考试成绩很好,但是我对于电脑中每个模块之间的关系确实相当的模糊,至于后面学习操作系统的时候,更加觉得机组没有学习好,作为软件工程专业的学生,虽然不比太了解硬件,但是至少了解硬件会对你理解整个计算机的运作过程都是重要的。不满你们说,到现在我都不知道写一个简单的C语言的源代码helloworld程序,计算机是怎么打印输出的。我也一直在探寻这个问题的答案,虽然我知道它是无比的艰难的。
大二上学期也不知打怎么就这样的过去了,每个学期都要对自己说,要加油啊时间过得很快,可是每个学期时间就这样悄悄的溜走了,从每一个字间和寝室的进进出出间。大二了上学期还没有接触过网络的东西,这学期学习了数据结构,确实是一门比较重要的课程,在现在做东西的时候,数据的设计好坏与正确与否对整个项目来说都是致命的。
大二下学期吧,这个学期学习了jsp还有数据库,是的,要开始做网站了。这学期学习了软件工程导论,从书本上了解写软件开发的生命周期和软件开发各个周期应该干的事情。这学期也是开始分小组开始做课程设计了。应为以前也没有学习过html,不得不承认我的大学好像并没有掌握什么语言。那就做后台吧,好歹老师还教过jsp。这个还是会一点的,做一个数据库的连接也是没有问题的。当然也不会考虑底层的连接,数据库的优化,以及语言级别的优化,是否需要建索引等问题。只要是连接上能玩当时已经感觉很不错了。当时我们做的东西是类似于消息推送的平台。消息发送一遍,可以多个平台接受。记得当时给我分的任务是后台处理消息的组织。但是到最后还是不得不被别人推到从写了,可能当时那代码写的真的很烂吧。
大二已一个课程设计作为结束了,大家貌似都还没有满足于对于jsp这个简单的可以写点网页应用的语言满意,都在学习新的东西,各种框架啦等等吧。但是我就是感觉对网页的东西不太感兴趣,其实这些东西确实很难,高并发,还有tcp/ip连接等等,看看淘宝那么多专家就知道这也是很难的事情。
到了大三了,同学们都知道该干点什么了,这学期对技术到时没有教授什么,到时对文档规范做了很多训练,这学期开始了对项目各个阶段的文段的书写。学习了各种建模工具,倒还是很受用的。这学期在学习课业知识的同时,我也去图书馆看点自己喜欢的书。随便说下,这个时候早就不在刷算法题了,自己没有坚持下来。我当时对计算机还是挺感兴趣的,虽然额,也还是一直小白。这学期开了点linux的东西,因为偶然一个机会看到别人在玩ununtu系统。觉得很高大上,这学期大部分时间也就是在玩这个东西,去图书馆借书,然后边看变学习,学习书上的各种命令和对软件的各种配置项的设置。当时配好一个软件都很兴奋,尤其是在ununtu下连接上了校园网。这个过程却是很话费时间,建议时间宝贵的人不要这么折腾了,应为不是真正的应用,配置后又会忘记的。等到实际要用的时候在学习也不迟,网上有各种介绍,都不是什么难事。
到了这个时候,大学的知识不得不说已经学习了一大半了,而我也越发的感觉空虚,因为这个时候自己并没有掌握什么东西,反而是对未来的恐惧,像我这样的水平,出来混会有人要么?不会的,我对自己的能力十分了解,在没有一个人比自己更了解自己了。那个时候为了当初选择这个专业十分苦恼,有句话说的好,你大学受的罪就是因为你当初选错了专业。可是,什么又是自己该选择的专业,没有人能也没有人会告诉你的。自己的路还是要自己走的,不过这个时候真的希望可以当时有高年级的学长可以多给说说大学到底要该怎么度过?在此,我建议,就计算机专业的学生来说,多和高年级的学长沟通吧,因为这会为你带来的财富是你想不到的。对此的遗憾会成为我以后成长的一份财富吧。
大三下学期,是的,这学期的课是整个大学课程最重的。这学期学习了操作系统、编译原理和计算机组成原理。我也想对这几门课多说一些。首先是操作系统,我前面说过了,我觉得学习操作系统的前提是你对计算机组成原理知道的差不多,首先最起码得知道chache是怎么和内存打交道的,一条微指令的执行过程或者是线程中的处理器是怎么取到数据和地址的,又是怎么区分的?数据总线和地址总线是怎么寻址的?好吧,其实好多我现在也不知道,为此我也感觉十分的遗憾,因为这些真的是专业的基础课程。如果这些都不知道,那么学习操作系统也只能是纸上谈兵罢了。操作系统,一个可以学习好久的知识块,结合前面多少代人的智慧。越来越庞大的内核,是的。我就知道windows现在的系统源代码已经上百万行了。系统从加电开始,执行硬盘前640B的加载程序,然后加载window的系统内核。我记得windows的系统是微内核,而linux是但内核,但没有办法去说哪个系统比哪个好。操作系统这门课确实是很重要的,你可以想象一下,如果你知道自己写的代码是如何在内存中进行操作的,每一步运行的结果你都清清楚楚该是多么爽的一件事啊。
另一个对我来说很有兴趣的事情是编译原理,先说下后面的一些事情吧,有次去面试,我说自己很喜欢编译原理,别人问题,你做过编译器么?我说词法分析和语法分析,别人笑了。又问你用过lex和yacc没有,我说没有用过。后来才知道这两个一个是强大的词法分析器,一个是强大的语法分析器。就像在一篇经验贴上写你精通C语言,因为别人做了几年C语言项目的人都不敢说自己对C语言是精通的。好了,话题转过来,对编译原理的喜欢一部分是因为我确实对它很感兴趣,另一部分是很喜欢当时教我们编译原理的老师柴老师。柴老师是我认为大学非常不错的老师之一。如果你有幸可以听到她的课程,我想你也会喜欢听她讲课的。柴老师对学生真的很好,平时对我们也很和蔼。额,我们还是说说编译原理都学习了什么吧,编译原理是讲授的是对一个高级语言写的程序翻译成机器可以理解的语言。可是这过程却有很多的难点。对了,这个时候是提前学习过汇编语言的。但是当时也就是对程序的压栈和退栈过程优点了解,其实汇编语言的语法基本记不得,因为不常用。编译原理课程也是有实验的,当时考虑到自己的内力,就让对源程序进行语法处理生成token表,然后运用一定的语法规则对源代码进行语法分析,生成语法树。记得我当时使用tc最原始的画图程序画的语法树界面,不得不说树中两个节点之间的距离记得当时是很难调的。
计算机网络,让我了解了一点网络知识,在这里偷偷的告诉你们,以前我根本不知道为什么要用DNS服务器,不知道网络连接的机制,还好这门课给我普及了一些知识,但我学习的东西也仅限与扫盲而已,我是这么评价自己对这门课程的学习的。不过对计算机网络的理论知识的了解,对后来用socket编程也是有很大的帮助的。至少,了解到了tcp和udp传输的效率和可靠性等的不同。对计算机网络的学习估计连入门都不敢说吧,因为要知道tcp/ip详解是多么厚的一本书啊。天啊,怎么想想,计算机专业的学生要学习这么多知识啊。
到了这里,我的大学的理论知识学习的就这么多了,这个身边已经有好多的同学在开发图形界面的小应用程序了,不得不说其实我好羡慕他们啊,因为别人一问你计算机专业的学生,是不是开发过什么专业。这个时候我就尴尬的不知道怎么回答了。一点感悟就是,只有能力能够给你带来自信,这在我写自我简介时也可以表现的出来,因为大学四年苍白的我都不知道要写点什么好。在这里姑且就这个专业的学习给出来几点建议吧,或者有用,或者没有。但到了大四这个时候总想给后来的人多说一点经验,好让他们少走点弯路,走的至少能比我顺一点我就感觉心满意足了。
首先,就是开始专业学习的时间,千万别等,大学就这么四年,如果你以前没有接触过计算机,还是提前接触下吧,我是高中才开始接触到电脑的,可以想象连开机键都不知道的当时。大一的时候就开始学习一门语言,然后开开网上的别人的博客,养成一个号的习惯。自己做点自己感兴趣的东西,比如,对文件读写很感兴趣,就可以写点小程序对文件进行操作,然后在进一步对文件的编码进行学习,为什么会乱码?等你学习这些时候,目前的知识估计就不满足你的要求,你就又会学习操作系统的知识,等等。这样你的进步是飞快的,一步一步来,收获也是很大。毕竟你有这个基础的时候,自己的学习能力也就培养出来了。
第二,作为这个专业的学生,本科千万不要把时间都话费到联系算法上,因为以后工作了,你不能指望一个项目靠算法生存下去吧。应该自己试着找找开能不能做一点大的类似于项目之类的工作。这对你掌握大点的东西是很有帮助的,也更是对你的能力全面的提升了。如果你大学真正的做过几个成熟的项目,我可以很肯定的告诉你,你会比任何人都自信。可是这种机会,不是每个人都可以好好利用,而差别在这中间也一点点的拉大了。在这里,在此强调下,这个真的很重要,它会锻炼你学习的整个能力的。
第三,多做一点东西,不怕小,比如说一个安卓的小的应用程序,当别的专业的人问起来时你也好可以很自信的告诉他你曾经做过什么。不是为了证明什么,就是在他看来你确实是计算机专业的人了。
如果你能完成上面的几点,而且你是一个能坚持的人,那么我可以很肯定的告诉你,你一定会有一番作为的。因为计算机要学习的东西实在是太多了,我大学四年确实没有学习到什么可以让我可以自信的东西。也很遗憾,大学并没有按照它该有的姿态绽放。在这里,写点东西,一是为了对大学学习的东西进行一个总结,二来也是为了记录下,勉励自己继续在计算机的世界进行探索。