02
2008
08

大学学习学习心得

现在我已经大四将要毕业了,这个心得早就应该写,起码要半年前写,因为大四下学期的生活几乎没有给我带来任何的改观。在学习上,我几乎经历了该经历的(我这个年龄),这些学习中,只有大学的学习让我感到一种自主,一种无法形容的豁然开朗的感觉,是计算机改变了我,我也尽力去改变计算机的一切,尽管我知道这很难,但这是我的职责。
 可以说,学习无论学什么都不会浪费,很明显的原因就是,计算机兼容了太多的学科,让你无法去想象,你可以提到任何一个,我都能说出计算机的作用。所以,如果有机会我们什么都要学,但不要盲目的学,因为你是学计算机专业的,要学的主要是计算机。
 学计算机并兼有多方面知识的人才确实很少,这也难怪,上帝造人就是这样,要达到这一点,要付出很大的代价,需要一些机遇,我们只需要抓住自己所能创造的机遇就可以了。
 说实话,具我了解,中国的计算机确实和国外差的太多,这是多方面原因的,一个就是人家发展60几年的计算机,被中国十几年搞定这显然是不可能的,中国人能比国外人聪明多少??中国计算机教育存在着严重弊端,初等教育和高等教育计算机完全脱轨,很多刚上大学的学生连计算机都没有摸过,更别说学了,四年期间的努力很难填补。还有就是,中国学生学习方向不明确,甚至没有目标。可以说很多大学生对自己的专业,在四年之间几乎什么都没有学到,而学到的是关系,更确切的说是人与人交往的关系,但这个学的还是有好有坏,确切一点就是混。当然,光靠专业实力来闯天下固然不行,那么那些生产力的发展就交给了有专业实力的人,所以中国高级人才少的很。
 我处在中国软件萌芽的阶段,这阶段需要大量的人才,所以很多大学里没有学到东西的人(学习计算机的),也不用怕,几乎都能找到工作,也不会沦为底层人民,因为大家都这样,只是到公司的培训,有了突飞猛进的发展。这样短暂的学习永远成不了高手,虽然现在我不是个高手,但我可以这样说。
 确实,如果你不是对计算机热爱的话,那它对你是枯燥的,什么都是,但为什么人们都对异性感兴趣呢??这确实值得研究,如果成功的话,这样可以改变一个人,会不会带来世界末日是另一码事。
我接触计算机(相对和我一届学生)可以所算是早的,但那时只是游戏,但我认为对我已经足够了,如果那时有计算机高手在我面前(这是个幻想,几乎不可能),那我可能就上不了大学了,整天沉迷于编程了,相对来讲,在中国大学学历大重要了,尤其是好的大学。我第一次接触计算机是在初中一年,大约九七年,那时还是DOS系统,是486,586流行时代,当时不知道486,586是什么,但大家都这么叫,而且都知道586比486快,而且要好,我上初三和高一阶段 ,1999年,开始有了windows95,那时都叫95网,这是从文字界面到图形界面的转换,我能感上这个,我是庆幸的,这使我对计算机的发展有很深的印象,当时也是处在游戏阶段,我从来没有想过做游戏,也没有想过怎么做。可以说我的童年是在电子游戏上度过的,在2000年,开始有了windows98,2002年我见到了windows me,可是直到我高中毕业我还是对计算机的基本操作还不会,原因很简单我只知道打游戏。我高三那年,是我对计算机编程的萌芽,它的出现,让我产生了极大的兴趣,也是游戏把我带动的,我要感谢文曲星,这样也许就是个上天的安排。当时文曲星cc800上有了QBASIC编译系统,而且有一些简单的系统函数,可以让编程者编写自己的程序,我从网上下载了几个游戏程序,那些代码都是公开的,而且可以修改,我对那些程序真的震惊了,虽然我不是很了解,但那些眼花缭乱的游戏开始画面,和动画效果,能在这么小的手掌机上做的这么好,我真的很佩服编程者,我查查一些基本画图函数,自己做了几个简单的动画,还不错,达到我想要的效果,尽管不是很难,但对我是个极大的鼓舞,我很兴奋。由于是高三阶段,面临高考,我也没有时间去学这个东西,我只能在他们编写的游戏中改改,我可以说他们已经做的很好了,我很佩服,有些知识现在我还没有接触到。
 一年以后,我来到了大学,来学习计算机,其实大学里学习的主要是理论,实践要靠你自己,因为大学时间主要靠你自己支配,学不学是你自己的事情。理论很重要,它是你起飞的飞机场,实践就是你的双翼,他们要结合起来才可以,因为你飞的累了,还要在飞机场停下来歇歇,这就是你理论知识不足的时候。大学的8大专业课都重要的很,我们不能忽视任何一门,它们是计算机的基础。
 下面我就把我从所学的每个专业课中获得的心得说一下。
 数学:
 刚到大学时,学习的心态还停留在高中,不知道为什么而学,学有什么用,这也是中国的特色吧!但到后期越深的课程,尤其是计算机图形学等很多课程都和数学是息息相关的,如果哲学排在所有学科的首位,那么数学就要排第二,它是那些我们看来比较变态的人,把世界的高度抽象,我经过考研后,和参加数学建摸辅导后确实对数学有些了解,但这只是很浅显的,真正的数学内涵离我遥遥无期,我试图把自己的思想和这条轨道靠拢,但始终很难达到。说实话,中国的教育是失败的,他过分强调知识的结果,不注重过程和起始,思维过程很重要,其实结果并没有它重要,思维的方式决定着一个人,从小就听人家说1+1=2,但为什么?从什么地方来去思考,怎么思考,却很少有人知道。我可能说的有点偏题,但这是重要的,也许是我说数学来把说思维模式引出来。在讲授思维时,这狠难,最根本的是,人们对思维还存在着争议,而且不同人的经历也多少要决定人的思维。我在这里只说学习上的思维。我认为人从一出生,就具有某种特长(这是相对的),也就是说在同等环境下的人学习(我们排除在这种学习以前的经历的影响,比如说学习音乐),一定会分出优劣,在大家都很努力的情况下。如果有音乐天赋的人,他不去努力,可能落后于努力而不具有天赋的人,所以勤奋出天才不假,但要用到自己具有天赋的一面,那必然事倍功半。天赋和兴趣不是一会事,但大多数人,能在有天赋中找到兴趣,在兴趣中而找不到天赋。所以在大学阶段,(在中国这种教育,高中阶段几乎不可能),在大多有自己支配的时间里,你要尽快找出自己的天赋,并发现这方面的兴趣。记住,你在这方面有天赋,不代表你在这方面比任何人都前,但你已经比很多人强,如果你很努力,你会走的更高。说了这么多,回来说数学,老师讲课很少讲数学的思维模式,虽然我不清楚真正的数学思维模式,但我很清楚老师一定没有讲,他也很难讲出来,因为很少有人知道牛顿看苹果落地,为什么会想出万有引力定律,而为什么我们不能。很多人说是牛顿爱思考的结果,这一点不假,但并不是每个爱思考的人能想到,很好问题就在这里,这就是我们跟人家的差别,因为思维的东西很难传授给别人,所以这样的高人很少,光靠他们留下的书是很难解决问题的。
 离散数学:
 离散数学包括很多章节,各个部分联系不是很大,而且各个学校的教材和所讲授的知识重点也不一样,但大体要讲的都是一样。我个人认为离散数学是最难的,最难的在图,群等,它们之所以难,是我们很难容入到那种神秘的思考方式,容入思考方式太难了,只有靠我们的感悟,因为这些真正很强的人真的寥寥无几,能指导我们的更是很少,我本人始终无法理解群的真正含义,我也没有去查什么相关资料,但我知道,再抽象的数学理论,都不是凭空想象的,它一定有它的现实基础,它的出现是有来历的。
 数据结构:
 数据结构是十分重要的学科,它完全是建立在实践的基础上,也就是说,你要多打代码。它在一定程度是依赖语言的。我很清楚的知道,第一遍学习数据结构,也就是几乎很少有实践的,大脑几乎一片空白,也是只有在考试前,反复的复习才知道在讲什么,只能手工的模拟执行过程,把算法转化成程序始终是个迷。但我认为这已经足够了,因为任何理论只有在理解它,你才能凌驾于它,所以接下来一个质的飞跃就靠自己,靠自己把那些算法变成代码,在自己有想法时,能够把这个想法用适当的数据结构实现,这需要在电脑旁的硬功夫,绝对是。一个高级的程序员,绝对是个硬功夫。这种把自己的想法变成代码,也是你独立思考的开始,记住思考很重要,他是你在捕捉你的灵感,善于思考的人,灵感来的很快,而且你的灵感会告诉你,对于它,你能把它做出来,这一切都是思考的结果,我不是个思想家,但我知道,我每天对世界万物的沉思,在指引着我发现那些太多的为什么的答案,这个世界为什么这个样子,它后面究竟隐藏着什么,让我们大胆的假设吧!!多做程序的人,程序会改变你的思维,这绝对错不了。
 语言:
 我们一共学了四种语言,VB,C,C++,Java。VB的语法很简单,它确实是我练习算法的平台,它使我实现很多小游戏,对数据结构有了很深的了解,但我本人对VB不是很感兴趣,它只能做些小项目,因为它为大家提供的友好界面,阻挡了大家通往高级程序员的道路,它封闭了语言太多的细节和计算机的基理,使你对它的界面有太大的依赖。C是个纯面向过程的语言,它的语法不是很难,你用它大约一年半多左右,就完全可以掌握它,记住这需要你的实践,大家几乎学的都是潭浩强的书,这本书我开始认为很好,但我看了很多国外的书,和很多国外人所打的代码后,和国内高级程序员所说的话,我只能说这本书,只能是你的开端,但不能让你更深层次了解语言。但你要问我初学者用什么书,我还会介绍这本书。C的精髓在于指针,你能灵活运用指针就几乎等于你掌握了C语言,这是一种高效的语法支持,快的让你无法想象,我很有感触,在VB下要慢的多。C++是个很复杂的语言,你要完全了解它,要在C语言的基础上,我很少用C++,我相信我会攻克它的,也许很多人用C++,但了解它真正的机理估计不是很多,我看了C++ primer之后的感触,它确实很复杂,也是这本书太深入了,了解一门语言,少了编译知识确实不行。
 编译原理:
 其实编译原理和汇编,操作系统,语言都是紧密相关的,编译器是在操作系统之上,语言之下。在讲编译器时,除了讲编译源程序成目标程序外,还介绍了很多地方都用到的自动机理论,这个也很重要。在人工智能,很多分析语法,文字类的东西都很重要。编译原理和语言是相辅相成的,只学语言不学编译,无法真正的了解语言,而编译器是在语言基础上的,没有语言的了解更学不了编译,现在大多数高校的编译原理讲的语言都是基于面向过程的,但我认为足够了,你真正的理解了编译所讲的东西,自己在深入学习面向对象的语言,你一定会很好的把握面向对象的编译过程,很好的掌握面向对象语言,在语义分析过后的中间代码生成和动态存储空间分配,和汇编有很大的联系,我在学习汇编时,总是先把要求的题目写成C语言,在转化成汇编语言,这就是不知不觉的一种中间代码生成,虽然不完全一样,但让你掌握中间代码生成已经足够了。动态存储空间分配,主要基于指针所指向的动态空间。因为非指针的变量在编译时就已经有内存分配了,这也是编译要做的事。
 汇编:
大多数学的都是8086,编译器我推荐用TD,很好的开发环境。作程序调试是最主要的,没有作过程序的人是想不到调试是多么难 ,好的开发环境有助于有效的开发程序。个人认为,学习汇编要和计算机组成联系起来,主要是指令系统,讲CPU时的知识。汇编是最低级的,最快的语言了,有时为了运行速度不得不用汇编来实现想要的功能,我认为对汇编的掌握程度,只要你能做出个递归函数就可以了,你了解了很多指令用法,寄存器的使用,计算机存储数据和代码的方式,函数调用的方式,栈是怎么实现函数的,你会有很深刻的发展,相信我没错的,一定要上机实现一个递归函数,再加上你对C语言的了解,和一些编程知识,你就可以摆平几乎所有的汇编程序了。
 数据库
我在大学里没有接触过太大的项目,而且平常编程对数据库深入不多,只是达到了做网上书店所要求的基本知识,首先是ER图,各种范式,还有数据流图,怎么用语言插入数据,删除,查找等等,实际上,你要不是搞理论的,深到数据的具体存储效率的级别,我想这些对于编程就足够了,但对于高级的数据库程序员这些是不够的。
 计算机组成
对于学习汇编和C语言这个其实很重要,因为这些语言还没有屏蔽这些硬件细节,VB就几乎完全屏蔽了硬件细节,你不需要了解太多的硬件知识。但学习汇编和C语言并不是要你了解到能作出CPU和连接存储器,我们只要知道他们的运行机理,但有一点你不要怀疑,那就是电信号他就是那样有趣,有趣到你无法想象它的速度和高低电平的传递,但是事实就是这样,你不需要怀疑,承认它就好了,因为我们还不能解释规律,只能运用它一样。原理对软件程序员就应该足够了,它会使你更加容易了解操作系统和硬件的工作。
 操作系统
大家每个人对操作系统都不陌生,所有的计算机的课程几乎都是息息相关的,他们都有太多的联系,有些你可能迷茫,当所有的学完以后,你应该有个豁然开朗的感觉,那就是计算机的一切不应该是个迷。操作系统和硬件的接口,就是那些硬件提供的指令,通过这些指令来操作硬件,就象操作系统定义一样,他是管理系统资源的,管理硬件的使用,你在学习操作系统时,把它看成一个管理者就可以了,它是一个有着自己管理方法的管理者,管理这些硬件给每个进程使用,进程说白了就是一个应用程序在内存中或在外存中,有着运行权利的程序。现在的操作系统是多任务的,可以运行多个程序,并发是指单个CPU而言,每个进程在CPU中轮流执行,因为它太快了,你根本感觉不到他们的交替性,就象在同时运行,大多数教材讲并发比较多,我们大多数计算机都是单CPU的,具体怎么交替运行,那就是操作系统管理进程使用硬件的方法,不同的操作系统方法不同,但你的方法不要让其中的一个进程总是得不到想要的硬件使用(活锁或饥饿),但想出个好办法还不发生死锁(这里不说什么是死锁了,我毕竟不是再讲操作系统)也很难,总之,你要学的就是这些方法,这里说的是管理CPU,还有管理内存,外设等等。我在给出进程定义时,还说了外存,其实通常就指硬盘,因为你的内存太小,运行的程序又多,我要为了让其他的程序运行,只能先把它放在外存,也叫挂起。总之,你学的就是管理硬件的方法,怎么管理才能有效率,方便用户使用。如果可以,你也可以设计一套管理方法,那你就作出了一个新的操作系统。
 计算机网络
所有和硬件有关的最后一个,说实话计算机网络很杂,你学第一遍后,把网络7层所有管理方法说出个查不多,很难,大多数学生都是晕头转向,网络是个很庞大的系统,它从硬件到软件,被规定了很正规的完整体系,这样大家都遵照这个规则才能,使每个人开发出的软件和硬件都可以用。记住计算机的交互就象人与人的交互,它通过0和1来代替人的语言,表情或所有可以可以传达信息的东西,也可以说是计算机通信的暗号,只有双方都知道了这个暗号的含义,双方才能通信,你和另一个人怎么通信,那么计算机和另一个计算机就怎么通信。例如:我想给你一个礼物(计算机看成我要给你发送数据,A发给B),我要先通知你,看你能不能收(这符合人的交往)(A发给B一个0和1组成的编码,事先两台计算机已经规定好了,比如说10010011代表看对方是否能接受),如果这个请求不丢失的话(丢失有很多处理方法,你自己也可以想一个处理方法,比如隔一端时间你没有收到对方是否同意接受,你就重发信息,总之,只要你肯想象,任何都是可能的),(1)对方发送一个可以接受的消息(比如说10010012),你收到了,你就可以发送,发送途中又有很多情况,比如说,你怎么发送,作车,还是徒步,如果交通堵了怎么办,是把礼物一起送过去,还是分开送过去,等等,具体到网络里是快速发送,分开发送,我们学的就是这些方法。(2)对方发送个不能接受的信息,你是还要立即发送,还是不发,还是等一会在发,这些方法很活,你要学的就是这些方法,如果你可以处理网络中出现的任何问题,你不学它也可以。我要告诉你的是,你要学的就是就是通信协议(就是实现规定好的暗号),通信方法,出现问题怎么处理等,你有好的方法,你可以不学了,很简单,方法就是人发现的,你比它的好,学它的干什么,就用你的。
 软件工程
软件工程是从实践中总结的经验,对于很少做过项目的大学生来说,确实很难理解,只要你作过一些项目,比如网上书店之类的系统,你就会有些了解,它说的很对,我很清楚的记得软件工程分这几个过程:(1)可行性研究,也就是你要做的这个系统可行不,是否值得去做,做了能得多大效益。(2)总体分析,这个就是从整体来规划你要作的系统,只是个概况,并没有详细的阶段,把系统大体分成几个模块。(3)详细分析,这个阶段就是来详细每个模块,把所有的细节都要写好。(4)程序编码(5)测试(6)售后服务。
每个过程有分很多规范,因为一个项目很多人做,很多公司做,没有个很好的规范会乱套的,所以最后很容易合在一起。
 我上面所介绍的都是最基础的,只要你掌握这些,学任何计算机的东西都不成问题,关键一个字那就是思想,也许有些具体你忘记了,但思想你会永远记住,你会看的时候也会很简单,和别人讨论时你也知道他们在说什么。
 记住的是一定要在思想上有飞跃,学会思考,你的灵感会让你抓住问题的突破口,凡事多问为什么,原因在何处,怎么才能解决,至于怎么才能到达这个境界,我没有什么太多的高招,因为我也不是什么高手,最直接的就是,多看书,多思考,多练习写程序,要在理解的基础上,抛开所有的别人写过的模板写出自己的想法,自己的程序,如果你参考别人的,那么你知识在量上有飞跃,质上根本没有飞跃,即使你方法很苯,你把它实现了,那你也是成功的,因为你挑战了自己,你在思想上有了飞跃,表面上你没人家做的好,那是他有现成的代码可以使用,当没有现成的代码时,你的想象力就发挥了作用,思考和想象高于一切,你的内心得到了升华,你有好的新方法现在就比那些旧的方法好,所以创新很重要,是勤于思考的人的专利,不要死记公式,要问问公式的来源,什么都要弄懂,为什么书上这么讲,死记不如不记,死记只能得到眼前的利益,人成功不就在于要长远的考虑吗??
 我认为多学学哲学逻辑学,对人的大脑思维很有帮助的,我说的哲学并不是专指马克思哲学,很多种,他们都有可以借鉴的一面,如果你站在任何一个立场去思考问题,你就会觉得他们似乎说的都有道理,就因为有些人立场不同,才发生的冲突。思想教育是最重要的,也是最难的,尤其学习上的思想境界,很难用语言来沟通,要靠自己勤奋的练习,多加的思考,还记得我说金庸的武狭小说吗??那里的功夫学习和这里说的学习就是一样的。
 

« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。