第一篇:大一计算机学习心得
大一计算机学习心得
当我们有一些感想时,不妨将其写成一篇心得体会,让自己铭记于心,这样就可以通过不断总结,丰富我们的思想。那么如何写心得体会才能更有感染力呢?以下是小编为大家收集的大一计算机学习心得,欢迎阅读,希望大家能够喜欢。
大一计算机学习心得1本学期,我选择了一门大学城公共选修课课程——计算机网络技术。这门课程,我是来到了信息学院是上课的,短短十来堂课的学习过程使我受益匪浅。不仅计算机专业知识增长了,还认识了许多来自大学城里其他兄弟院校的同学,更懂得了如何更好的为人处事。
我是来自纺院纺织化学工程系的一名大一学生。在纺院,我的专业是学习家用纺织品设计的,这是一门融工艺设计和美学设计于一体的知识涉及面极广的专业。一直以来,通过对该行业人才需求的了解,我认识到,要想在毕业后能从事与家纺行业相关的工作,我不仅要学习好本专业的知识和能力,还必须对计算机知识有相当程度的了解和掌握。因此,在选择选修课的时候,我毅然在自己的课程选项里勾了这门课程。
众所周知,21世纪是一个信息经济时代。为适应时代的发展,作为一名即将走出校园参加工作的当代大学生,所受的社会压力将比任何时候都要来得沉重,因此在校期间,我们必须尽可能的利用好学习时间,尽可能地学习更多的知识和能力,学会创新求变,以适应社会的需要。如果想从事与家纺设计相关的行业,那就更需要掌握较全面的计算机知识,因为小到计算机的组装维修,大到服务器的维护与测试,知道的更多更全面,那么对于自己以后找工作以及参加工作帮助就越大。在知识经济时代,没有一个用人单位会傻到和知识作对,不是么?
我在读初三的时候第一次接触计算机觉得很新鲜。我清晰的记得,当时有一个清晰的想法,那就是一定要学好计算机。但随着自己对电脑接触的不断深入,对计算机的认识越来越深,特别是进到大学,学习了家用纺织品设计以后。我们做CAD设计,学习了各种办公软件,可是在设计和办公过程中,当遇到一些电脑系统出错导致文件成果丢失的突发问题时。我才深深地感受到自己计算机知识是多么的欠缺,自己终归不是学计算机专业的,对计算机知识的掌握都是零散的,对这些突发问题只能束手无策。于是我暗自发誓,无论如何,以后如果关于计算机的选修课的,我一定要报名。
这次在《计算机网络》中,我学到了许多知识,许多以前对计算机迷惑的地方。在姜老师的讲解和实际演练下我渐渐明白了。
所谓计算机网络,是指将地理位置不同的具有独立功能的`多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
大一计算机学习心得2这段时间的学习真的是让我受益匪浅,有成长的快乐,有丰收的喜悦,有不懂的遗憾,还有即将离别的不舍。这几天的学习真的给我太多的感受,这几天的学习让我一生都受用无穷。将成为我人生旅途中最宝贵的收获。
一、提高了思想认识,体会到教育技术培训的重要性。
通过本次学习,我体会到教育技术培训势在必行,国家对本次培训是多么的重视,也充分体现了信息技术的重要性。随着新课改的不断深入,新的时代对点化教学提出了更高的要求,需要我们的老师要不断的学习培训,需要新型的、专业化的老师。不学习真的跟不上时代的发展的潮流了。通过培训,为我指明了今后工作的方向,我对信息教育有了全新的认识。这样一个全方位的培训,使我的教学理念又一次得到提升,二、通过学习知不足,促进步
1、通过学习,感觉到自己有太多的计算机的知识不懂,比如:程序操作、计算机理论??感受到不懂计算机,真的是太落后了,通过学习感受到自己又学到了很多的知识,在今后的学习中,我一定经常上机操作,争取早日驾驭电脑,学有所用。
2、通过学习,我体会到,我们原来的教学时多么的落后,网上平台真的挺好,学习起来很方便、很实用。我每天在网上交流、讨论、提交作业。浏览网页,阅读资料、观看案例、完成作业,在网络的海洋里,我们尽情的汲取着知识的甘露。感到一种前所没有的满足,这种满足是我们对知识的一种渴望。
3、通过学习,我对信息教育技术有了更深刻的认识,通过多媒体的操作,让我们有耳目一新的感觉,为我们的教学提供了方便,为我们的教学,提供了丰富多彩的内容。从而让我们的课堂更生动、更有新意更能激发学生学习的兴趣,更能创造性的发挥我们的课堂。
4、通过学习,我们结识了很多的伙伴,我感受到我离这些同伴的距离太远了,不学习真的落后了。在这里,大家取长补短,互帮互助,互通有无。大家都毫不吝啬,把自己知道的知识毫不保留的互相交流着。虽然学习是紧张的,可是大家的心情是愉悦的,气氛是和谐的。只是感觉到五天的时间真的是太短了,需要互相学习的知识真的是太多了。
第二篇:大一学习心得
大家好!非常荣幸能够在这里和大家分享一下我的大学一年级的学习心得。
光阴似箭,日月如梭,转眼间,我已经大二啦,回忆起过去的这一年真的是感慨万千。
都说大学是“象牙塔”,带着对大学生活的美好憧憬,我踏上了南下的列车,告别了生我养我的故乡,告别了那些熟悉的身影,来到美丽的自贡,开始了新的人生旅途。
刚刚入学的一段时间,感觉很闲了,每天无所事事。当时非常迷茫,高中时,无论老师还是家长都对我说,大学很轻松。所以这在潜意识里就给了我一个这样的观念:大学不是学习的地方,而是逍遥的地方。
然而不然 大学的课程虽然比起高中来说相较于轻松,但大学里的学习主要是靠自觉,除了掌握老师课堂上讲的内容,还要利用课余时间阅读其他相关的书,查找资料,在提高自己专业知识水平的基础上,有目的地丰富各方面的知识。如果说高中时的学习是幼儿学路由老师领着,那么大学就是大人式的学习,我们接过学习的接力棒成为了领跑者,在这一场比赛中,可以跨栏可以抢道可以跳跃,而绝对不能在起跑线上等待老师牵着你跑。只有自主自助自信的学习,才能取得好成绩,正如一个好的足球运动员,他不能只听教练的意见,而应该自己进行思考,因为毕竟,在场上铲球,抢断,过人,射门的都是你自己。
至于学习方法,我相信没有最好,只有更好,要找到适合于自己的学习方法,就像现在考研一样,选择适合于自己的辅导书才是最好的辅导书。我不是很聪明,但我知道“笨鸟先飞”,我应该属于那种兢兢业业型,每次都早去上课,不逃课,上课认真听讲,下课按时完成作业。关于学习,我觉得兴趣与目是最重要的,比如英语、计算机和比较重要的科目我上课就比较专心一点,而且在课外时间还会去阅读一些相关资料,而对于其他无关紧要的课程只是上课听一下,做到主次分明。在此我做以简单归纳:做好准备,提前预习,这样在课堂上能够比较顺利的跟上老师的节奏,取得更好的听课效果;认真听讲,做好记录,随堂记录笔记有助于集中注意听课,并且在期末备考的时候,可以有所侧重,减少盲目性;定期复习,注意交流,要避免因时间过久而遗忘所造成的重复性工作,掌握好复习的间隔;还有要多与同学交流,探讨解答问题的方法,和对不同问题的意见,将更有助于拓宽思路。
还有一个我觉得很重要的就是学习计划,不管做什么事都应该有一个计划,大到自己的学习生涯规划,小到自己的一天什么时刻该做什么,这样你才能做到有的放矢。学习计划可以写在纸上也可以记在心里,我经常会把自己的计划写出来贴在寝室里墙壁上,比如说要考试,我经常会把哪一天复习什么书和规定什么时间完成写在纸上,然后根据计划完成任务,有的时候计划时间是一个月,有的时候是一周或几天。所以,“把简单的事情千百次地做好就是不简单!”,用心做好每一次小事,日积月累,也许就将收获富足,即时的消化学习内容,有规律有计划地安排预习和复习,平常多积累,学得轻松而愉
大学就相当于一个小型的社会,作为一个步入社会的缓冲,我们可以从中学到好多的东西,学会学习,学会做事,学会做人。每个人的目标不同,决定了每个人努力的方向不同,但是相同的是我们必须奋斗,否则就会被这个时代淹没,依靠自己的努力和奋斗,相信自己,成功将属于你!谢谢大家!
第三篇:计算机学习心得
计算机学习心得体会
在未学习计算机之前,我从不知道它到底是干什么用的,为什么很多很多的人都要迫不及待的地要去学它,同时也有人陷入计算机的泥潭,不能自拔。自从我触摸到它的时候,即老师教给我们怎样使用计算机时,我才明白它的重要性。它涉及了生活的各个方面以及各个层次的人都离不开它,同时也明白了它的利与弊。
我在读小学的时候第一次接触计算机觉得很新鲜。我清晰的记得,当时有一个清晰的想法,那就是一定要学好计算机。但随着自己对电脑接触的不断深入,对计算机的认识越来越深,特别是刚进到高中,使用了各种办公软件,可是在设计和办公过程中,当遇到一些电脑系统出错导致文件成果丢失的突发问题时。我才深深地感受到自己计算机知识是多么的欠缺,自己终归不是学计算机专业的,对计算机知识的掌握都是零散的,对这些突发问题只能束手无策。于是我暗自发誓,无论如何,要学好计算机,但上高中是我忙于课业学习,没有足够的时间学习计算机知识。这一只是一个很大的遗憾,所以我在高中时就决定大学后一定要好好学习计算机知识,把落下的都补回来。
令我开心的是,大学计算机课时很多,我可以好好利用它来获取我想要的知识。在课堂上我用心听讲,认真做笔记。实践课上也好好练习,学到了很多新的知识。真的很值啊。
我对自己也提了很多要求,只为了学好知识,向全方位人才买件一步。
第四篇:计算机学习心得
我个人的这种自以为c语言很牛逼的美梦在,大一下学期的一次偶然比赛后完全破灭。(−_−#)(记得那会儿大一除了c语言其他都是基础课(比如:工程制图,高数,英语等),和计算机基本没一点关系。)
还记得,正在我沉醉自己的小天地时,那个大一下学期开学,一个同学喊我去参加一个校内编程比赛。当时满怀着胜利信心去参加了比赛。结果。。大家都猜到了,初赛做了一到巨简单题目,然后。。复赛。。一道题没做出来。更惨的说应该是:一道题都不会做,最后自己无聊的看着对面的一个mm敲码。。再后来才知道是我们学校acm基地,准备纳新举行的一个比赛。并且由于急需纳新,那次题目出的是巨简单。
悲催的我比完赛后,失败了!却还不知道为什么??!。。
后来我郁闷一个星期后,在同学中介绍中,进入了当时认为”高手如云”的acm基地。
附:当时自己的水平:计算机只懂c语言,c语言只会些一些打印,简单几乎无循环的,无指针的,100行左右代码。编译基本自己搞定。逻辑错误?基本没什么逻辑的程
随后acm学习,就简单说说。记得当大家还都在迷茫中,或忙于考软件资格证,计算机二级证,或忙于网络游戏,或忙于学习其他专业的知识的时候。自己不顾外面的一切,每天和其他认真上自习室的同学一样,早起晚归得沉醉在acm中。
在acm基地,开始学习并巩固了,计算机数据结构,计算机算法,组合数学等知识,并不停的写码!在基地我一直这样坚持了两年多吧(知道二流学校的acm的艰苦的同学可能体会到,这其中的不易),到最后整个基地的同学仍坚持学习在前线的就只有我一人。于是也很自然的,我在学校acm系统中,排在了第一。虽然如此,但是越学我也越清楚这个算法的水有多深,也逐渐意识到外面高手真的如云,而且他们的高度,并不是自己所能赶上的。也意识到了,在算法前进的路上我的最大的阻碍是:数学!!而更悲剧的是,就我自己的自学能力,再加上学校数学老师不怎么给力。很难在段时间内弥补自己的这方面的缺陷。
所以大三下学期,我退出了acm,进入了实验室,做java的小项目。
在这两三年里,除了acm还有一些是计算机基础知识让我对计算机认识更深。
汇编语言让我明白了,计算机的计算机制,学完汇编,于是当我不确定c中某种结果时:我知道将c语言编成汇编语言,然后对比差别。通过反汇编理解指针,数组等类似问题差异和区别。
计算机组成原理,操作系统,不仅认识到为什么乘法会比加法费时的原因,内存存取方式,调度,分页等等。同时也就明白如何在c语言上进行这些细微底层的调优。软件工程,则告诉我如何去大规模的程序开发的基本设计思想。自己并运用到一些课程设计中去。
于此同时平时也更多的关注了,网上出现的各种c语言本身讨论的一些问题。这其中有,c混乱代码,类似这种他编译器中的float的一个问题,c绘图,了解关注类似于结构体最后定义一个char[1]的这种奇技淫巧。于是针对c语言本身的书籍和资料,比如:≪c专家编程≫、≪c缺陷与陷阱≫。
附:个人此时水平:语言基本只会c语言和汇编语言;c语言100、200行的代码写完后基本没有编译错误,最长c代码4000多行。c语言指针操纵多级的内存动态申请维护;内存泄漏,程序崩溃自己可以独立较快解决。
汇编语言,分文件设计,3000行,自己完成所有编写,和调试。(目前基本没用,很多忘了,呵呵~)
小界面,windows编程基本不懂。所以被当时同学鄙视了:你有什么牛的?也就时一些,黑屏的数字。
到了这个时候,可以说目前(也就是工作两年后)我找到的这份工作很大一部分还要归功与acm!因为在第一份工作,我基本没有用到任何可以算上算法的算法,和算上数据结构的数据结构。(小道消息:这个工作的社招比例:1:20),好了。后面可能还会提到acm。
话说后来我离开了acm,进入实验室,于是我花了整整一个暑假,加上一个月左右的时间,学习了:java,jsp,javascript,包括ssh架构一些。
这其中比较艰难的是思想转变:
1、由面向过程转变为面向对象(刚开始用java写的代码也是面向过程的。。),2、由传统的这种小计算应用转变为这种bs模型。这两个思想的提升使我对今后编写应用软件打下了很好的基础。
不管怎么样,自己很快就能熟练写java应用,后来由于就像其他习惯c的人都非常不喜欢java的这种”拿来主义”的做法一样,我后来一直在尽量不做java方面的开发,当然也就不会再进一步深入学习java方面的知识。(当然,目前来看,java还是一门开发应用软件的很给力的一门语言,细的我就不再多说,只是自己当初不喜欢)^o^()
随后大学里面还有一门重要的课程:计算机网络。(不过大学网络很基础,后来又简单自学了一些tcpip的那三本书。)
计算机网络告诉了我计算机互相通信的原理,了解计算机底层通信的方式。后来在工作中碰到的一些简单问题也就能解决。比如: 如何窃听网络数据的原理,arp欺骗,java这种bs模型能否获取客户端的mac地址(哈哈,自己后来工作中写脚本自动签到中考虑这个问题),类似这种接口调试中技巧,webservice的原理以及协议,大小端问题也算)^o^(。
还有一个是编译原理,让我明白作为c语言这种语言的编译过程,理解了编译的几个阶段。同时明白,sizeof的值再也不用记了,因为自己就可以分析出来,而且很简单,而且理解了各种错误处于哪个时期等都有利于自己对问题的分析。
哈哈,c语言中的scanf,printf高级应用,longjmp等在这后来时间也自己再进一步学习。
于此同时,自己自学了vb,学会了用vc++写动态库,所以后来一些桌面小应用,都用vb+dll来做的。所以课程设计什么的,都是小意思了。再后来毕业设设计:用matlab+vb+dll写的,实际写码调试时间不超过两个星期(约12天),代码量近6000行。毕业设计拿了年级第一。另外爆料一下:宿舍一哥们,一个算法毕设题目,我帮他搞定,总共花了一天;另外一哥们,用我的以前的课程设计搞过。。
附:自己此时的水平:语言就不说了,此时算的上说的出口的还是c语言,其他则是我的工具而已,而且很多我现在依然忘了,(检起来也简单,呵呵~)
代码编译,调试几乎不是问题。但是此时对系统设计,软件工程认识还是基本没有,对设计模式更不了解,对社会上使用的技术也是,什么不懂。
@@@第一份工作
第一份工作,我没怎么去找,(~_~;)后来去了当时实习的公司。公司主要用的架构是:oracle+tuxedo+jsp。
当然用的也是unix主机。也就是说,我毕业后没有做类似嵌入式,windows编成的工作。后期的应用也都是,unix下的环境编成。
ok,这会儿开始了工作期间了。
在刚开始实习的时候,自己被安排做一些琐碎整理的事情,比如:将一个代码改为另外一个格式?
后来,实习了两个月,我打算离职。后来主管找我谈话,我告诉了自己的想法。后来答应我调到北京总部的一个研发部(一般至少工作一年,并表现很出色才允许调)。另外这儿不得不简单提一下为什么。。
当时公司业务逻辑层主要用的是c语言,于我同批进去的实习生,后来很多人都问我c方面的问题。这个被技术主管看到,所以。。他那次同意了我的要求。
话说调去了北京总部,就是常年的出差开始了,大约三个月后,参加了一个很大的项目,(200多号人一年多。)刚开始我只是负责一个简单的数据接口后台进程的需求调研和开发,当时自己刚入社会,做起事来相对有些不好意思。在加上,我这个正好是一个接口需求,需要和不同的人沟通。所以问题出现了,其它同事看我是个新人,也不怎么理我,常常找理由推托。最后这个小需求做的让我很恼火,自己也没太好办法。
再后来,这个需求完后,自己负责另外较为重要的数据接口。在后来近半年后,自己学习很快,很快掌握了,一些unix下的编成,以及调试技术。期间,有一个数据接口同事,和领导吵架跑回去了,领导后来让我接手,并开出了一些优惠条件^_^。自己当然接下也费了一些工作,而以前的工作则交给了另外一有工作经验的同事负责。后来我每个月都回家一趟休假,都被允许了。有时很多人老员工也没被同意哦。
这之后,自己的能力慢慢得到认识,以前不理我的同事小组长,也都开始主动打招呼^_^。在之后,慢慢的有些同事问我一些技术上的问题。后来被部分同事称为”知识库”。再后来,就不多说了,也就是毕业两年后,各种原因,离开原来公司。换了一份现在的工作。
附:技术能力,这期间c语言从自己小程序变成一个实实在在的应用的代码的转变,期间包括,多进程,网络编程,oracle一些知识包括:索引优化,sql等分析;设计模式,等但是期间更多的是提升自我团队协作,沟通,时间管理,设计分析等软素质吧。
目前还在学习中。。互联网的知识。。自己还有很多要学的。呵呵。不过,学习是一件快乐的事情不是吗?
最后对还纠结在c语言的同学一点小建议吧:
1、c语言知识一门语言,就像java,peil等语言一样,仅仅是工具,因此不要把c语言看成很难,勤动手,多思考。语言终究是为了方便人,而设计的,所以他不难。
2、不要仅仅只看c语言,要从c语言看到计算机学科所有的知识点,并用c语言去巩固它们。为什么是c语言?他的确很合适,进入计算机有全面理解的一个入口。并以计算机的的角度去思考一些问题。
3、算法,数据结构,在现实中即使没用上,也会有助于你理解一些系统设计。
4、软件工程,系统设计也是很重要的哦。^_^,5、知识永远是学不完的,计算机亦如此,而且越学越菜。^_^
6、以上建议仅供参考。
和楼主蛮像的,大一时在写个二三百行的五子棋就以为自己牛得不行了。然后大二学了C++与STL之后,一直为自己C++学得很好,而且比别人多学了STL而沾沾自喜。然后,直到后来到大二下学期接触了ACM之后才发现自己就是一弱菜~~ 与楼主不同的是,我们学校之前没有人搞ACM(省赛时都是临时组队过...我是一名大三的学生,软件工程专业,从大学开始就开始了ACM的旅程,从大一到现在,基本上都是学的数论,几何等等方面的,几何也就一般般,三维几何都不是很会,对于数论,是我最擅长的吧,像连分数,二次剩余,原根,离散对数,牛顿二项式定理,费马平方和定理求表为平方和的解,对于数学方面的虽然我感觉还有很多我不会的,但是我感觉在ACM上面已经差不多了,至于其他方面的我多少也会点,至少很基础的都会吧,现在我想重点学习搜索,图论,DP,字符串,还有很多内容。在今年刚刚结束的亚洲区域赛杭州站获得铜牌,以前的省赛,东北赛等等也获得较好的名次。我毕业后想直接找工作,所以现在我想一边学习算法,继续做题,明年继续参加竞赛,一边想搞搞工程,我个人比较喜欢Linux嵌入式的方面的,又喜欢Java 和Lucene搜索引擎方面的。我是想问,这两方面哪一个比较好,比较有前景,然后对于算法方面的,哪些是以后工作后对应职业用的比较多的,比如我觉得数论在密码学方面用的比较多。对于ACM,我暂时是不想放弃。求各位学长们,或者已经工作的大神们给我建建议啊。
ACM程序题对锻炼逻辑思维是有很大帮助的,既然你明年还想参加比赛就不能放弃OJ,相信你们学校大三的学生也会带大一大二的学弟学妹吧,你可以不学习新的算法而去整理自己以前所学的,像DP、DFS什么的整理好,给他们讲,可能还会有新的收获。ACM很有魔力,相信你心里也是放不下。
ACM不是一份工作,你也不可能拿这个当自己一辈子吃饭的武器,当然除非你以后当老师什么的,专门讲一门课程。
Java从事的方面非常多,现在各行各业都需要Java程序员,真正工作了,你会发现ACM里面的算法用的微乎其微,大部分算法已经被封装好了,根本不需要你费劲脑汁去敲代码,你需要的是知道有这个东西,以及怎么去用,这个就需要你话费很长一段时间。很多东西你需要去学和复习巩固,从基础的css,sql, js, JQuery,ssh„„差不多得花费1年多的时间,如果不报培训班自己去学的话,需要你自己制定好一个规划,下载教学视频,一步步来,多实践。
Linux嵌入式工资比Java的高,但是好工作也相对难找,我仅仅知道这些,上我去年找工作的时候听同学说的,对于这方面我不懂,也就不瞎说了自己不知道的了。ACM应该是一个跳板,帮助你进一些名企,至于到底干什么,从事什么方面,很可能不会像你现在想的这么简单。大公司、名企对毕业生不会要求技术多好,随着时间累计技术都会提上去的,他们更看好你的潜力和以后对公司的价值。最后说一句,IT程序员很辛苦,你要做好准备!加油吧!
算法,数据结构是关键,另外还有组合数学,特别是集合与图论,概率论也重要。推荐买一本《算法导论》,那本书行,看起来超爽!!基本掌握语法还不行啊,语法的超熟练掌握,不然出了错误很难调试的!!最重要的是超牛皮的头脑啦,分析能力,逻辑推理能力很重要。ACM很好玩啦,祝你成功!!
acm是3人一组的,以学校为单位报名的,也就是说要得到学校同意,还要有2个一起搞的。其实可能是你不知道你们学校搞acm的地方,建议你好好询问下你们学校管科技创新方面的人。建议你找几个兴趣相同的一起做,互相探讨效果好多了,团队合作也是acm要求的3大能力之一。
数据结构远远不够的,建议你看算法导论,黑书,oj的话个人觉得还是poj好,有水题有好题,而且做的人多,要解题报告什么的也好找。我们就是一些做acm的学生一起搞,也没老师,这样肯定能行的。
基础的话是语言,然后数据结构,然后算法。
ACM有三个方向:算法,数学,实现 要求三种能力:英文,自学,团队协作
简单的说,你要能读懂英文的题意描述,要有一门acm能使用的编程语言,要会数据结构,有一点数学基础,一点编程方面天赋,要有兴趣和毅力(最重要),就具有做ACM的基本条件了。
做acm我推荐c,c++也可以,java在某些情况下好用,但是大多数情况的效率和代码量都不大好,所以建议主用c++,有些题目用java
还有什么问题,可以问我啊。
不好意思,没见过用java描述的acm书籍,大多数是用伪命令,其他有的用的c,c++,老一些的用pascal。java只是用来做高精度的一些题的,个人觉得不用专门看这方面的书,java的基本部分学好就够用了。所以我还是推荐主用c++,在高精度和个别题再用java。你可以找找java描述的算法设计与分析,这个好像有
数据结构:C语言版 清华大学出版社 严蔚敏 《数据结构》
算法:清华大学出版社 王晓东 《算法设计与分析》
麻省理工大学 中译本:机械工业出版社 《算法导论》
基本上这三本书就已经足够了,建议一般水平的人先不要看算法导论,待另外两本书看的差不多的时候,再看算法导论加深理解。
另外还有很多针对性更强的书籍,不过针对性太强,这里就不多介绍了。以上一些都是些算法方面的书,最好的方式就是做题与看书相结合,很多在线做题的网站,PKU,ZOJ很多,推荐PKU,题目比较多,参与的人比较多。做一段时间的题,然后看书,研究算法,再做题,这样进步比较快。
还有关于ACM竞赛,我有自己的一点话说。
首先说下ACM/ICPC是个团队项目,最后的参赛名额是按照学校为单位的,所以找到志同道合的队友和学校的支持是很重要的。
刚刚接触信息学领域的同学往往存在很多困惑,不知道从何入手学习,在这篇文章里,我希望能将自己不多的经验与大家分享,希望对各位有所帮助。
一、语言是最重要的基本功
无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要过的第一道关。亚洲赛区的比赛支持的语言包括C/C++与JAVA。笔者首先说说JAVA,众所周知,作为面向对象的王牌语言,JAVA在大型工程的组织与安全性方面有着自己独特的优势,但是对于信息学比赛的具体场合,JAVA则显得不那么合适,它对于输入输出流的操作相比于C++要繁杂很多,更为重要的是JAVA程序的运行速度要比C++慢10倍以上,而竞赛中对于JAVA程序的运行时限却往往得不到同等比例的放宽,这无疑对算法设计提出了更高的要求,是相当不利的。其实,笔者并不主张大家在这种场合过多地运用面向对象的程序设计思维,因为对于小程序来说这不旦需要花费更多的时间去编写代码,也会降低程序的执行效率。
接着说C和C++。许多现在参加讲座的同学还在上大一,C的基础知识刚刚学完,还没有接触过C++,其实在赛场上使用纯C的选手还是大有人在的,它们主要是看重了纯C在效率上的优势,所以这部分同学如果时间有限,并不需要急着去学习新的语言,只要提高了自己在算法设计上的造诣,纯C一样能发挥巨大的威力。
而C++相对于C,在输入输出流上的封装大大方便了我们的操作,同时降低了出错的可能性,并且能够很好地实现标准流与文件流的切换,方便了调试的工作。如果有些同学比较在意这点,可以尝试C和C++的混编,毕竟仅仅学习C++的流操作还是不花什么时间的。
C++的另一个支持来源于标准模版库(STL),库中提供的对于基本数据结构的统一接口操作和基本算法的实现可以缩减我们编写代码的长度,这可以节省一些时间。但是,与此相对的,使用STL要在效率上做出一些牺牲,对于输入规模很大的题目,有时候必须放弃STL,这意味着我们不能存在“有了STL就可以不去管基本算法的实现”的想法;另外,熟练和恰当地使用STL必须经过一定时间的积累,准确地了解各种操作的时间复杂度,切忌对STL中不熟悉的部分滥用,因为这其中蕴涵着许多初学者不易发现的陷阱。
通过以上的分析,我们可以看出仅就信息学竞赛而言,对语言的掌握并不要求十分全面,但是对于经常用到的部分,必须十分熟练,不允许有半点不清楚的地方,下面我举个真实的例子来说明这个道理——即使是一点很细微的语言障碍,都有可能酿成错误:
在去年清华的赛区上,有一个队在做F题的时候使用了cout和printf的混合输出,由于一个带缓冲一个不带,所以输出一长就混乱了。只是因为当时judge team中负责F题的人眼睛尖,看出答案没错只是顺序不对(答案有一页多,是所有题目中最长的一个输出),又看了看程序发现只是输出问题就给了个Presentation error(格式错)。如果审题的人不是这样而是直接给一个 Wrong Answer,相信这个队是很难查到自己错在什么地方的。
现在我们转入第二个方面的讨论,基础学科知识的积累。
二、以数学为主的基础知识十分重要
虽然被定性为程序设计竞赛,但是参赛选手所遇到的问题更多的是没有解决问题的思路,而不是有了思路却死活不能实现,这就是平时积累的基础知识不够。今年World Final的总冠军是波兰华沙大学,其成员出自于数学系而非计算机系,这就是一个鲜活的例子。竞赛中对于基础学科的涉及主要集中于数学,此外对于物理、电路等等也可能有一定应用,但是不多。因此,大一的同学也不必为自己还没学数据结构而感到不知从何入手提高,把数学捡起来吧!下面我来谈谈在竞赛中应用的数学的主要分支。
1、离散数学——作为计算机学科的基础,离散数学是竞赛中涉及最多的数学分支,其重中之重又在于图论和组合数学,尤其是图论。
图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许多算法的基本思想,较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。虽然这部分的比重很大,但是往往也是竞赛中的难题所在,如果有初学者对于这部分的某些具体内容暂时感到力不从心,也不必着急,可以慢慢积累。
竞赛中设计的组合计数问题大都需要用组合数学来解决,组合数学中的知识相比于图论要简单一些,很多知识对于小学上过奥校的同学来说已经十分熟悉,但是也有一些部分需要先对代数结构中的群论有初步了解才能进行学习。组合数学在竞赛中很少以难题的形式出现,但是如果积累不够,任何一道这方面的题目却都有可能成为难题。
2、数论——以素数判断和同余为模型构造出来的题目往往需要较多的数论知识来解决,这部分在竞赛中的比重并不大,但只要来上一道,也足以使知识不足的人冥思苦想上一阵时间。素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码学常识确定大概的过程之后,核心算法往往要涉及数论的内容。
3、计算几何——计算几何相比于其它部分来说是比较独立的,就是说它和其它的知识点很少有过多的结合,较常用到的部分包括——线段相交的判断、多边形面积的计算、内点外点的判断、凸包等等。计算几何的题目难度不会很大,但也永远不会成为最弱的题。
4、线性代数——对线性代数的应用都是围绕矩阵展开的,一些表面上是模拟的题目往往可以借助于矩阵来找到更好的算法。
5、概率论——竞赛是以黑箱来判卷的,这就是说你几乎不能动使用概率算法的念头,但这也并不是说概率就没有用。关于这一点,只有通过一定的练习才能体会。
6、初等数学与解析几何——这主要就是中学的知识了,用的不多,但是至少比高等数学多,我觉得熟悉一下数学手册上的相关内容,至少要知道在哪儿能查到,还是必要的。
7、高等数学——纯粹运用高等数学来解决的题目我接触的只有一道,但是一些题目的叙述背景往往需要和这部分有一定联系,掌握得牢固一些总归没有坏处。
以上就是竞赛所涉及的数学领域,可以说范围是相当广的。我认识的许多人去搞信息学的竞赛就是为了逼着自己多学一点数学,因为数学是一切一切的基础。
三、数据结构与算法是真正的核心
虽然数学十分十分重要,但是如果让三个只会数学的人参加比赛,我相信多数情况下会比三个只会数据结构与算法的人得到更为悲惨的结局。
先说说数据结构。掌握队列、堆栈和图的基本表达与操作是必需的,至于树,我个人觉得需要建树的问题有但是并不多。(但是树往往是很重要的分析工具)除此之外,排序和查找并不需要对所有方式都能很熟练的掌握,但你必须保证自己对于各种情况都有一个在时间复杂度上满足最低要求的解决方案。说到时间复杂度,就又该说说哈希表了,竞赛时对时间的限制远远多于对空间的限制,这要求大家尽快掌握“以空间换时间”的原则策略,能用哈希表来存储的数据一定不要到时候再去查找,如果实在不能建哈希表,再看看能否建二叉查找树等等——这都是争取时间的策略,掌握这些技巧需要大家对数据结构尤其是算法复杂度有比较全面的理性和感性认识。
接着说说算法。算法中最基本和常用的是搜索,主要是回溯和分支限界法的使用。这里要说的是,有些初学者在学习这些搜索基本算法是不太注意剪枝,这是十分不可取的,因为所有搜索的题目给你的测试用例都不会有很大的规模,你往往察觉不出程序运行的时间问题,但是真正的测试数据一定能过滤出那些没有剪枝的算法。实际上参赛选手基本上都会使用常用的搜索算法,题目的区分度往往就是建立在诸如剪枝之类的优化上了。
常用算法中的另一类是以“相似或相同子问题”为核心的,包括递推、递归、贪心法和动态规划。这其中比较难于掌握的就是动态规划,如何抽象出重复的子问题是很多题目的难点所在,笔者建议初学者仔细理解图论中一些以动态规划为基本思想所建立起来的基本算法(比如Floyd-Warshall算法),并且多阅读一些定理的证明,这虽然不能有什么直接的帮助,但是长期坚持就会对思维很有帮助。
四、团队配合
通过以上的介绍大家也可以看出,信息学竞赛对于知识面覆盖的非常广,想凭一己之力全部消化这些东西实在是相当困难的,这就要求我们尽可能地发挥团队协作的精神。同组成员之间的熟练配合和默契的形成需要时间,具体的情况因成员的组成不同而不同,这里我就不再多说了。
五、练习、练习、再练习
知识的积累固然重要,但是信息学终究不是看出来的,而是练出来的,这是多少前人最深的一点体会,只有通过具体题目的分析和实践,才能真正掌握数学的使用和算法的应用,并在不断的练习中增加编程经验和技巧,提高对时间复杂度的感性认识,优化时间的分配,加强团队的配合。总之,在这里光有纸上谈兵是绝对不行的,必须要通过实战来锻炼自己。
大家一定要问,我们去哪里找题做,又如何检验程序是否正确呢?这大可不必担心,现在已经有了很多网上做题的站点,这些站点提供了大量的题库并支持在线判卷,你只需要把程序源码提交上去,马上就可以知道自己的程序是否正确,运行所使用的时间以及消耗的内存等等状况。下面我给大家推荐几个站点,笔者不建议大家在所有这些站点上做题,选择一个就可以了,因为每个站点的题都有一定的难易比例,系统地做一套题库可以使你对各种难度、各种类型的题都有所认识。
1、Ural:
Ural是中国学生对俄罗斯的Ural州立大学的简称,那里设立了一个Ural Online Problem Set,并且支持Online Judge。Ural的不少题目算法性和趣闻性都很强,得到了国内广大学生的厚爱。根据“信息学初学者之家”网站的统计,Ural的题目类型大概呈如下的分布:
题型 搜索 动态规划 贪心 构造 图论 计算几何 纯数学问题 数据结构 其它
所占比例 约10% 约15% 约5% 约5% 约10% 约5% 约20% 约5% 约25%
这和实际比赛中的题型分布也是大体相当的。有兴趣的朋友可以去看看。
2、UVA:
UVA代表西班牙Valladolid大学(University de Valladolid)。该大学有一个那里设立了一个PROBLEM SET ARCHIVE with ONLINE JUDGE,并且支持ONLINE JUDGE,形式和Ural大学的题库类似。不过和Ural不同的是,UVA题目多的多,而且比较杂,而且有些题目的测试数据比较刁钻。这使得刚到那里做题的朋友往往感觉到无所适从,要么难以找到合适的题目,要么Wrong Answer了很多次以后仍然不知道错在那里。如果说做Ural题目主要是为了训练算法,那么UVA题目可以训练全方位的基本功和一些必要的编程素质。UVA和许多世界知名大学联合办有同步网上比赛,因此那里强人无数,不过你先要使自己具有听懂他们在说什么的素质:)
3、ZOJ:
ZOJ是浙江大学建立的ONLINE JUDGE,是中国大学建立的第一个同类站点,也是最好和人气最高的一个,笔者和许多班里的同学就是在这里练习。ZOJ虽然也定位为一个英文网站,但是这里的中国学生比较多,因此让人觉得很亲切。这里目前有500多道题目,难易分配适中,且涵盖了各大洲的题目类型并配有索引,除此之外,ZOJ的JUDGE系统是几个网站中表现得比较好的一个,很少出现Wrong Answer和Presentation error混淆的情况。这里每月也办有一次网上比赛,只要是注册的用户都可以参加。
说起中国的ONLINE JUDGE,去年才开始参加ACM竞赛的北京大学现在也建立了自己的提交系统;而我们学校也是去年开始参加比赛,现在也有可能推出自己的提交系统,如果能够做成,到时候大家就可以去上面做题了。同类网站的飞速发展标志着有越来越多的同学有兴趣进入信息学的领域探索,这是一件好事,同时也意味着更激烈的竞争。
第五篇:计算机学习心得
大学学习学习心得
现在我已经大四将要毕业了,这个心得早就应该写,起码要半年前写,因为大四下学期的生活几乎没有给我带来任何的改观。在学习上,我几乎经历了该经历的(我这个年龄),这些学习中,只有大学的学习让我感到一种自主,一种无法形容的豁然开朗的感觉,是计算机改变了我,我也尽力去改变计算机的一切,尽管我知道这很难,但这是我的职责。
可以说,学习无论学什么都不会浪费,很明显的原因就是,计算机兼容了太多的学科,让你无法去想象,你可以提到任何一个,我都能说出计算机的作用。所以,如果有机会我们什么都要学,但不要盲目的学,因为你是学计算机专业的,要学的主要是计算机。
学计算机并兼有多方面知识的人才确实很少,这也难怪,上帝造人就是这样,要达到这一点,要付出很大的代价,需要一些机遇,我们只需要抓住自己所能创造的机遇就可以了。
说实话,具我了解,中国的计算机确实和国外差的太多,这是多方面原因的,一个就是人家发展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)售后服务。
每个过程有分很多规范,因为一个项目很多人做,很多公司做,没有个很好的规范会乱套的,所以最后很容易合在一起。
我上面所介绍的都是最基础的,只要你掌握这些,学任何计算机的东西都不成问题,关键一个字那就是思想,也许有些具体你忘记了,但思想你会永远记住,你会看的时候也会很简单,和别人讨论时你也知道他们在说什么。
记住的是一定要在思想上有飞跃,学会思考,你的灵感会让你抓住问题的突破口,凡事多问为什么,原因在何处,怎么才能解决,至于怎么才能到达这个境界,我没有什么太多的高招,因为我也不是什么高手,最直接的就是,多看书,多思考,多练习写程序,要在理解的基础上,抛开所有的别人写过的模板写出自己的想法,自己的程序,如果你参考别人的,那么你知识在量上有飞跃,质上根本没有飞跃,即使你方法很苯,你把它实现了,那你也是成功的,因为你挑战了自己,你在思想上有了飞跃,表面上你没人家做的好,那是他有现成的代码可以使用,当没有现成的代码时,你的想象力就发挥了作用,思考和想象高于一切,你的内心得到了升华,你有好的新方法现在就比那些旧的方法好,所以创新很重要,是勤于思考的人的专利,不要死记公式,要问问公式的来源,什么都要弄懂,为什么书上这么讲,死记不如不记,死记只能得到眼前的利益,人成功不就在于要长远的考虑吗??
我认为多学学哲学逻辑学,对人的大脑思维很有帮助的,我说的哲学并不是专指马克思哲学,很多种,他们都有可以借鉴的一面,如果你站在任何一个立场去思考问题,你就会觉得他们似乎说的都有道理,就因为有些人立场不同,才发生的冲突。思想教育是最重要的,也是最难的,尤其学习上的思想境界,很难用语言来沟通,要靠自己勤奋的练习,多加的思考,还记得我说金庸的武狭小说吗??那里的功夫学习和这里说的学习就是一样的。