归纳变量编译原理
⑴ 编译原理常用的查填表技术有哪些它们各自的特点是什么
解答如下:
技术: 删除公共子表示式;复写传播;删除无用代码;代码外提;强度削弱;删除归纳变量;合并常量。
编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 编译原理是计算机专业设置的一门重要的专业课程。编译原理课程是计算机相关专业学生的必修课程和高等学校培养计算机专业人才的基础及核心课程,同时也是计算机专业课程中最难及最挑战学习能力的课程之一。编译原理课程内容主要是原理性质,高度抽象。
⑵ 想要学习怎样编写程序和制作软件
你既然喜欢编程,就应该认认真真的学习一门语言,先从VB开始,VB是比较好的入门语言,可视化的,比较简单,是非常好的入门语言。书籍最少应该准备两本,不可能一本书籍会包含VB的所有内容,在看书的时候,可以交叉的看,一本书籍中没有讲到的内容可以在另一本中看到,这样对学习是很有好处的,也能保证所学知识的完整性。学编程是一个很漫长的过程,不要着急,要理论与实践想结合,例程书籍也是很重要的,看源代码对学习也是很有帮助的,等你学完这门VB语言之后,学习别的语言是非常简单,可以尝试c语言,按照C——C++——VC的顺序学习,有助于知识的连贯性,我也希望你能学好的。
学习C语言,谭浩强的《C程序设计》是一部非常好的C语言书籍,学习程序设计是一个非常漫长的过程,不要着急,一本书多看两遍三遍,学会交叉学习法,在学习C的过程中,可以看看数据结构,编译原理,操作系统等书籍,对编成都是很有帮助的。最开始学习的时候,先不要编一些比较大的程序,多编一些小程序,比如数组运算,字符组合等等,指针是C语言的精华,是比较复杂的部分。如果有一天你能熟练驾驭指针的操作了,我相信你,你一定能学习好C语言的。
我是2001年接触编程的,刚开始只是大概了解一下,并没有进行比较深入的学习,我是从VB开始入门的,学了1年多,然后转入C语言,按照C——C++——VC的顺序学习,C学了两年,现在开始学习C++,C++的学习是很有难度的,类,标准库,多态,继承等等比较抽象难道懂的概念,虽然他秉承了C语言的风格,但是有很多很多是C语言不具备的,要多看书,上机实践也是必不可少的。《C++编程思想》,《C++标准库》,这些书都非常好,内容也很全面,例程书籍也是必不可少的,多看源代码对编程是很有帮助的,也会少走很多弯路。总之,C++的学习是一个比较漫长的过程,大概需要两年的时间,这只是底限,如果想学通,学精,还需要更多的时间。
我向你推荐一些C++经典书籍:
c++程序设计教程
c++编程思想
c++大学教程
c++程序设计语言
数据结构算法与应用c++语言描述
c++标准模板库------自修教程与参考手册
泛型编程与STL
深度探索c++对象模型
设计模式---可复用面向对象软件的基础
重构---改善既有代码的设计
Essential c++
Effective c++
More Effctive c++
C++ primer
前五本应该属于入门书籍,后面的属于学习难度比较大的,想提高C++的编程能力,看看这些书籍有好处。建议你把编程思想这本书多看看。多做练习题,对提高编程水平的帮助是很大的。
其实语言是相通的,一门语言学会了,学习其他语言就比较容易了。
业界有这样一种说法,因为java这门语言包含了C++的一些特性,掌握了C++,就等于掌握了JAVA的80%,
在掌握了C++之后(我说的掌握指的是,可以熟练用C++编程序了,并没有要求你完全掌握C++的所有部分,没有人能达到这一点,因为C++太庞大了,如果能坚持不懈的学习C++两年到三年的时间了,你就可以学习其他的语言了)可以试着学习一些其他的语言,如JAVA,VC++等等比较复杂的语言.
这时候可以说你已经对程序设计语言有个大体的认识了,可以明确自己学习的方向,根据自己的学习情况而定,是学习一些自己比较感兴趣的语言啊(从兴趣出发),还是为了找工作啊,开始进行更深入的学习.比如学习windows下的框架编程和.net编程等等比较复杂的语言.
如果是为了找工作的话我建议你学好C,C++,JAVA三门语言.
在我国目前的软件开发行业中,北方C,C++,JAVA的需求量是非常大的.南方以VB为主.
关于英语对学习程序设计有没有帮助的文章这个话题已经有很多人议论过了,我个人建议把计算机专业术语弄明白了就可以了,你可以买一本计算机英语教程看一看,对程序设计是有帮助的。其实程序设计当中的英文都是一些非常简单的,如for,else,while.......并没有太高深的,而且学习程序设计不像学习网络,如CCNA这类认证需要掌握大量的英文。但是在学习程序设计的时候身边有两个工具应该足够了-----------金山词霸,计算机词典。相信你一定能学好程序设计的。
学习数学和学习程序设计有一个共同点------锻炼逻辑思维能力。在程序设计的学习中涉及到数学的地方并不多,所以也没有必要去认真的学习数学也可以学好程序设计的。
如果你是一个肯吃苦,肯用心学习程序设计的人,具有坚持不懈的精神的人,我相信,只要你认认真真去学,即使你的英语数学水平再差,你也一定能够学好程序设计的。
我是一名大三的学生,我也正在学习C++这门语言,一年多的时间,学习的感觉真的很累的,希望能和你成为朋友!
好了,说了这么多,可以参考一下,为自己做个学习计划,要对自己有信心,最后祝你在学习编程的道路上走的更好更远,祝你学有所成!!
⑶ 如何才能快速学会编程
认为这门专业很有发展前景,但是却很高深,因而望而却步。我从事IT行业多年了,我想以我对专业的理解来和大家聊一聊,与这些热爱IT行业的朋友共同探讨一下编程的奥妙。 进入IT界并不困难 认为进入IT行业困难可能是由以下几个原因造成的: 1.缺乏信心,中途放弃 认为自己能力不够,苯。有一些人是非常聪明,但是多数人的IQ都差不多,之所以很多事情没有做好,可能是其他原因。 认为自己基础差。其实,只要设置合理,完全可以很快的把基础知识掌握好 北大青鸟APTACH的课程起点非常的低,适合各种层次的学员学习。 2.切入点错误 学习是一个循序渐进、由易到难的过程。很多朋友都选择了一个很难的目标,但是这个目标是要有其他计算机知识做基础的,而你又没有掌握,所以就会学习困难甚至不能学习下去。我个人认为北大青鸟APTACH的课程设置非常合理,适合学员快速的掌握。 3.学习方法不对 掌握好的学习方法,就有事半功倍的效果。我学习编程,包括现在大多数的程序员、软件工程师,他们的知识都是自己拿书看出来的,当时没有条件参加学习班学习。所以速度比较慢。一慢,就影响自信心,所以很多人就坚持不下去了。成功的比较少。所以参加一个好的学习班很有必要,北大青鸟APTACH的课程是从印度,包括国际上多年实践、提炼出来的,加上老师根据自己多年的经验把一些合理的方法传授给大家,避免大家走弯路,快速成功。 学习编程最重要的是坚持 计算机编程水平是长期练习出来的,学习编程的最好方法是学习——模仿——创造 当你写程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写 设计程序开始时候确实不容易;自己程序设计水平是在不断的编程实践中完善和发展的; 每学到一个难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了; 请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100. XX; 保存好你写过的所有的程序——那是你最好的积累之一; 勤于思考,掌握精髓 要想成为一名优秀的程序员,最重要的是掌握编程思想、找到编程感觉,而不是死记硬背语言本身。所以,从某种角度上讲,很多语言是一致的。学会了C++,JAVA也能够很快上手。我们面对新的编程语言时,只需简单了解该语言的语法特点,就可以轻松应对和应用了。一名程序员的高级境界,是在反复的实践、观察、分析、比较、总结中潜移默化积累的,绝不是一篇文章或者两三小时的讲解就能够说清楚的。 要学会编程思想、找到编程感觉,必须从实实在在的编程实际工作中去实践和体验。不少朋友在学习编程时只简单地学习语法、结构,枯燥而且目的性也不强,会大大降低初学者的兴趣和学习效果。而一般的书籍,也只从语言本身去讲解语法和举一些针对这些语法的应用例子,跟使用说明书没有太大差别,没有起到灌输编程思想,培养编程感觉的作用。正因为如此,许多大学生虽然在学校学过C语言,但他们之中少有真正精通C语言的编程者,只是简单了解些语法罢了,许多重要的知识点都含糊不清。 其实,在学习编程过程中,我们不必等到什么都完全明白了才去动手实践,只要明白了大概,就要敢于自己动手去体验。有些人觉得以前从来没做过而不敢自己单独动手去做,非要等到什么都明白后才敢动手实践,这样是很难取得进步的。谁都有第一次,有些问题只有通过实践才能明白,也只有实践后才能把老师和书本上的知识变成自己的,高手与专家都是这样成才的 北大青鸟APTACH的课程注意实践和方法,着重培养学员能力,举一反三。使学生在学习中不断的归纳总结,推理和论证。 培养自己综合能力代码规范现在的编程,基本都是集体协作的过程,个人英雄时代已经过去。记住,你写的程序别人是要看的,所以时刻注意代码的书写格式和变量的命名,力求规范。规范的书写代码显示了良好的编程素质,越是大型的电脑公司就越重视。 具有整体观程序员做的往往是部分,但是对整体有感觉就更好了突出重点突出全面上一定要有重点 培养自学能力 自学能力对工作后更重要善于交流和别人交流效果要好博览群书,广泛了解业界动态,跟上时代发展
⑷ 学计算机专业要看哪些专业书
学计算机专业要看哪些专业书
计算机专业是一个大的门类,主要看你想学哪个专业方向。如果想学广告设计方面,可以从平面设计photoshop开始学;如果想学网络技术方面,可以选择一些网页编辑、动画方面的书缉;如果想学程序设计方面可以选JAVA等方面书……
学习计算机读哪些书有什么用
1,高等数学:为了及格,同时帮助概率及格
2,概率:为了证明高等数学可以帮助及格
3,线性代数:如果你学习计算机图形学,就是opengl/direct3d的话,里面的3d模型的空间坐标用矩阵来表示的,如果你需要把它们进行投影,叠加,移动,就需要矩阵乘法/变换/转置等等,所以还是很有用的
4,离散数学:主要是给你打下计算机数据模型的理论基础。里面包含集合,数,图,等等,更重要的是如果你以后要搞研究,研究0错误程序,就是完全没有bug的程序,就需要用它上面的推导理论来对程序经行证明。如果你要通过系统分析员,这个也是要考试的
5,数字电路/计算机组成/计算机技术:如果你是一个很深入的程序员,你会问:为什么浏览器可以显示那么多东西->有语言->语言是怎么开发的->高级语言->高级语言怎么完成的->汇编->汇编怎么来的->固化/机器语言->机器语言如何能操纵计算机->在节拍电路的干预下,内部芯片的结构把0/1字符串译码,操作累加器,总线,内存做不同的操作那好,这个过程差一个东西都不可以,如果你只学习里面的高级语言部分,那岂不是神龙见首不见尾,感觉很不爽???所以你要能自己做一个计算机出来才好!
数字电路是学习门电路组成的,就是如何把流动的电信号保持下来,同时让他们有规律地变化
计算机组成是让你用门电路来设计内存/cup/时钟等等
计算机技术是让你综合学到的东西,做一个简单的计算机出来。
有了哪些知识,当然还要包括编译原理,软件工程,操作系统,数据库,网络,你学习其他的语言,什么vc/vb/deliphi等等,每种语言不超过3个月你就是高手。你要学windows程序,要用api,只需要15天就可以作出像模像样的东西。当然,我这里是指语言本身而言。有了这些基础和语言掌握的熟练,你想学数据库编程,好,复习一下数据库的课程,查阅一下sql的语法,1天就有眉目了。你要学网络编程,选择一种库,看看文档,明白函数的用法,也就是一两天的问题。等你做出点东西,有了信心,你也就有了经验。这个时候去明白j2ee/. 等等的frame work,就很容易了。参看以下design pattern,你也就胸有成竹,做个小组长也可以。再过几年,有了机会,说不定就当了manager,等了到了三十多岁,你不想干软件了,你有计算机组成的基础,找几个高手带你一下,你可以去做单片机的汇编语言编程,可以去做embeded system
所以,学好了基础,也就是厚积薄发,后面你想怎么发展都可以!
学了数字电路才知道,原来很神秘的电脑是由一些触发器,逻辑门组成的,把它们集成再集成,就成了电脑了,译码器,全加器,计数器......
CMOS不过就是一种存储器,BIOS不过就是面向硬件的一种已编好的子程序,(和C的库函数差不多,我认为)学好了汇编,我可以自己编(还让我花了30人民币,买了一本CMOS设置书,认为它很高深莫测)
不学好C,怎么学好WINDOWS程序设计,怎么能做一个优秀的程序设计人员
不学好前人花几十年时间总结出来的数据结构,你的进步能有多快,那是让你踩在巨人的肩膀上。(你要是天才,我就没话说了,不过要是学了,你会更天才)
这是我自己经历的一点学习基础课的过程,它给我解疑释惑,当然这些问题在行家眼里可能不值一哂,但它是每一个新手必经的过程。
更为关键的是,基础课给了我们最核心的知识,让我们能在离开学校后有继续学习的能力。它给了我们一个知识结构,让我们能在他的基础上扩充,把新的东西加入自己的知识框架中,这是基础课重要的意义所在。很多人提到基础学好之后,学习新东西很快,就是这个道理。
不可否认的是,基础课很枯燥,很费劲。但这要看你怎么去看它,你想一想,学好了他,就能抓到计算机的本质,能让他对你俯首帖耳,这难道还不够激动人心吗?老在别人的基础之上作设计,却不懂所以然,不闷吗?
既然讨论的题目是给在校大学生一点建议,那我也说一点儿。
先说技术层面的,在学好专业课的基础上看一些学校里不讲的新知识,新技术,能促进你的融会贯通,但不可本末倒置。
再说最关键的,最想说的,请在校的学生们珍惜你的时光,不要都去打了游戏,谈了恋爱,时光宝贵,机会难得。
我经常对自己说,如果再让我上一次学,我会......
可是不会了,我只好对自己说,如果我现在再不学,就会......
于是我努力去学,边工作,边学习,舍不得丢掉一节课,在校的学生们可能无法体会听老师讲课的幸福,自学时怎么也搞不清的东西,老师一句话就茅塞顿开,老师那清晰的思路也让你受益匪浅(在这里应该感谢那些老师们,虽然他们有些时候的简略很让人恼火)。但越学,心里越没底,有太多的东西我都没学好,更有很多东西根本就不知道,正所谓皓首穷经。
我不时的咒骂自己的懒惰,也许是过于愚笨,努力不够,学习计算机也有三年多了,直到现在,我才觉得自己开始了解计算机,才明确了方向。
我从文科转入这一专业,而且也不小了,就凭着我对计算机有着强烈的兴趣。他是人类智慧的体现,程序设计更是一种艺术,他能让我们的才华得到充分发挥,我会继续努力下去的,虽然有些迟了,但为了不更迟。
希望在校的学生们能多珍惜一些时间,不要比我还迟。
下来如果觉得自己接受能力强的话就可以开始学C语言了(注意不是C++),如果感觉有困难也可以先学Pascal过度一下。还有很重要的一点就是千万不要一开始就学VB,DELPHI,VC之类的东西,这些东西在一开始学会对你造成很坏的影响。有可能会把你引入另外一个错误的学习方向而忽略了真正应该掌握的东西。学C主要是学过程话的程序设计,学会把自己的程序分成许多的函数(或过程),养成良好的编程习惯。这时可以多看一下高人的程序,不一定要懂意思,主要是学会别人程序的格式(比如变量如何起名,怎么划分函数)。除开掌握基本的控制流语句外,应该学习一些很简单的I/O函数和数学函数。C的学习主要是你舍弃原来BASIC程序那种把所有语句积成一大堆的风格,要学会使用函数,提高代码重用性。对于指针之类的东西如果实在看不懂可以先不去管,到后面会有办法。当你能够比较自如的用C编写一些小的计算程序时,你就可以开始你的数据结构的学习了(数学的学习主要是在学校,自己要多用心)。数据结构你可以一点一点漫漫看,并不需要专门空出一段时间来专门研究,这样的目的是让你能够很好的掌握它,要学会用数据结构的知识来规范自己的程序设计和提高程序的效率。学完C我认为接着最好学习汇编。这个或许有许多人都会反对,然而我个人认为这样是很好的。从最基本的DOS汇编开始,买本《IBM PC汇编程序设计》(清华黄皮)一定要一点一点吃透,实在看不懂就跳,反复的严读是一定可以看懂的。汇编是一定要掌握的,因为它涉及到很多最基本的知识。掌握了汇编和对I/O有了个很彻底的认识后,应该去学编译原理。这个东西并不要精通,但是一定要知道,在大脑里要有一个这样的概念,这对你对程序语言的控制能力都有很大的帮助。这样最基本的学习就算完成了。一般智力正常的人前一段东西应该都是可以掌握的。接着后面的学习就要看你自身的造化了。这个时候你应该研究一下数据结构,不要分散自己学习的注意力,要知道数据结构是异常重要的(相信我,绝对没错)如果你觉得自己已经对于树,连表,堆栈之类的东西和排序,递归之类的算法已经十分清楚,就可以开始学习C++了。学习前一定要有个正确的认识,那就是C和C++是两个不同的东西。学习C++是为了学习面向对象的程序设计,这个时候你对于指针应该也能够掌握了(有汇编的基础),主要抓住C++和C相比的一些新特性,对于多态之类的特性要注意理解掌握,如果没有搞懂就坚决不要往下学习。一些基本的概念掌握以后可以看一些别人设计的程序,学习别人怎么利用面向对象的方法来设计程序的。这个东西也是人之间拉开档次的一个环节,可以和数据结构放在同等重要的地位。我就见过有的人都大学毕业了还搞不懂virtual到底是怎么一回事情。其实我认为学到这里你已经为你成为一个优秀的程序员打下了很好的基础,你已经能够应用C++,懂得面向对象程序设计,对数据结构掌握很好,掌握汇编和编译原理。接下来的学习就是基于操作系统平台的了,一般是先学windows(Microsoft毕竟是老大),先学win32 api,搞请windows基本消息机制和原理,有汇编基础基本上不会碰到什么困难。
其实只要会了API,其余什么MFC,VCL都是囊中之物了,都不过是对于API的封装而已。VC,C++Builder都可轻松拿下,这只是开发工具的问题。以后的OLE(ActiveX),.NET,数据库就要看自己的发展方向而定了。我在这里强调的是前面的基本能力的学习,后面操作平台虽然知识体系庞大,然而毕竟比较死,更好掌握。最后编程能力的高低主要还是有以下几点决定:1。编程的习惯 2。数学能力(包括逻辑思维,分析问题的能力) 3。对数据结构的认识能力 4。经验的多少(包括多使用语言的掌握能力)
学习编程的道路是充满艰辛,漫长而曲折的,作者罗列了一堆自己知道的编程方面的知识,并且给出了一个具体的顺序,所谓先学什么,后学什么;没学会什么,就一定不要去学另一个什么.....其中很多内容有一些道理。但是总是难逃片面。
从入门到精通一类的东西看的太多了,难道真的凭借一本书就能从一个电脑盲编程精通的专家了么。我郑重的建议那些想“速成”高手的人,放弃你的想法吧。一个计算机专业的本科生,要花上4年时间才能毕业,需要学习的专业知识岂是一朝一夕就能掌握的。就算去除一些公共课所占用的时间,我觉得要入计算机行业这个“门”,至少需要两年的时间。两年后才能说,对计算机有一些了解了,知道了计算机的基本组成原理,对时钟晶振,中断芯片有一定了解,用汇编简单控制8259编程。也知道了一些计算机程序设计语言方面的原理,掌握了一俩门传统的样板编程语言,了解了i++和++i对于VC的编译器来说意味着什么,有了一些数据结构方面的认识,能把现实生活中的一些问题用程序模拟出来。
但这一切也不过是刚刚入门而已,只是打基础。至于以后再学习Windows系统原理,消息机制,掌握这个类库,那个类库;抑或是研究linux内核,进而了解嵌入式系统开发工具和方法,那要看个人喜好了。我只是举几个例子,但是随便那个,要敢说自己已经完全掌握,至少还要几年吧。
如果上面的东西中有的已经很精通了,可以称为专家了,那么恭喜你,你可以考虑把这些东西再总结,提升一个层次,从系统架构角度回顾一下要实现某个需求,通常需要使用什么技术,多少人,多长时间来开发,成本多少,收益多少,风险又有多少,还可以总结出一些控制软件开发进度的方法,生成软件的方法,人们把这些方法归纳起来叫做软件工程。而你,也应该是一个项目经理了吧。
如果这些东西都学会了,再次恭喜你,你可以考虑能不能把现有的客户拉到自己身边来,找个人给自己投资,成立自己的软件公司。成为浩浩荡荡的软件创业者中微不足道的一员。
自学了VB,VC,数据结构,离散,操作系统,数据库原理等。
开学以来做完了数字图像处理的所有的实验--有个别实验还是很难的。我从paperVC++被逼--也算是熟练(离精通差远了)而系里其他的同学却没有一个自己全部编出来的,都是抄书的。但并不能说明他们的计算机水平都差,比起编程水平,我更佩服那些真正计算机专家--尽管他们不编程。但是他们的研究成果往往大大帮助我们编程,很多编程思想都是他们过去的研究成果!我们就算编出来了--也就是说明我们有点小聪明,但决不可以和系统完备的大智慧相比!就像我们可以利用数学定理计算一些复杂的数学题目一样,这没什么了不起--真正了不起了还是那些定理提出者,和证明者。这一个学期前我一直想好好地把编程好好学学,可是越来越觉得数学功底不足(当然不仅仅只高数)。现在真佩服那些数学家!真正的计算机专家!过去学数据结构时,八皇后,背包,搜索--一直令人头疼,好像懂,但不爽,记不住。在一个专家(图灵奖获得者)的看似简单思想的指引下--这些算法统一到了一起-------一切似乎都那么明了!显然如果你编程的话也提高编成的水平。还有记得学数据库原理,开始那段自己在没有规则指引的条件下想理清楚各种事物的关系时,是那么的混乱。而有了armstrong公理系统的三条规则---世界就一下子变得清晰!--这个最好的程序员能做到吗,他也只能每次遇到具体问题,每次发挥它聪明去理关系,也难保不出错,还要累死大量脑细胞!
既然读研究生,重点在思想。但我有自知之明,我们那么好的功底,也许以后就是编编程序,难弄出这种精华的东西,但是注重思想的学习-会对学具体知识起到巨大指导作用。所以我不会觉得编程水平低的就不行--很可能比程序高手的价值高很多倍!
但迫于个人造诣和以后就业的压力,还是把流行技术性的东西掌握一下好。
说到底,要想成为优秀的程序员,还是要注重基本理论的学习。
终于点到题目上来了。大多数的人都希望自己的东西能够马上跑起来,变成钱。这种想法对一个已经进入职业领域的程序员或者项目经理来说是合理的,而且IT技术进步是如此的快,不跟进就是失业。但是对于初学者来说(尤其是时间充裕的大中专在校生),这种想法是另人费解的。一个并未进入到行业竞争中来的初学者最大的资本便是他有足够的时间沉下心来学习基础性的东西,学习why 而不是how。时髦的技术往往容易掌握,而且越来越容易掌握,这是商业利益的驱使,为了最大化的降低软件开发的成本。但在IT领域内的现实就是这样,越容易掌握的东西,学习的人越多,而且淘汰得越快。每一次新的技术出来,都有许多初学者跟进,这些初学者由于缺乏必要的基础而使得自己在跟进的过程中花费大量的时间,而等他学会了,这种技术也快淘汰了。基础的课程,比方数据结构,操作系统原理等等虽然不能让你立马就实现一个linux(这是许多人嘲笑理论课程无用的原因),但它们能够显着的减少你在学习新技术时学习曲线的坡度。而且对于许多关键的技术(比方Win32 SDK 程序的设计,DDK的编程)来说甚至是不可或缺的。
一个活生生的例子是我和我的一个同学,在大一时我还找不到开机按纽,他已经会写些简单的汇编程序了。我把大二的所有时间花在了汇编,计算机体系结构,数据结构,操作系统原理等等这些课程的学习上,而他则开始学习HTML和VB,并追赶ASP的潮流。大三的时候我开始学习Windows 操作系统原理,学习SDK编程,时间是漫长的,这时我才能够用VC开发出象模象样的应用程序。我曾一度因为同学的程序已经能够运行而自己还在学习如何创建对话框而懊恼不已,但临到毕业才发现自己的选择是何等的正确。和我谈判的公司开出的薪水是他的两倍还多。下面有一个不很恰当的比方:假设学习VB编程需要4个月,学习基础课程和VC的程序设计需要1年。那么如果你先学VB,再来学习后者,时间不会减少,还是1年,而反过来,如果先学习后者,再来学VB,也许你只需要1个星期就能学得非常熟练。
几个重要的基础课程
计算机操作系统原理-我们的开发总是在特定的操作系统上进行,如果不是,只有一种可能:你在自己实现一个操作系统。无论如何,操作系统原理是必读的。这就象我们为一个芯片制作外围设备时,芯片基本的工作时序是必需了解的。这一类书也很多,我没有发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。关于学习它的必要性,ZDNET上的另一篇文章已经有过论述。
数据结构和算法-这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时)。很多人喜欢买C++版的,但我觉得没有必要。C++的语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法变得更复杂。倒是在学完了C版的书以后再来浏览一下C++的版的书是最好的。
软件工程-这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》(黄色,清华)。不要花太多的时间去记条条框框,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再来回顾回顾,每次都会有收获。
Windows 程序设计-《北京大学出版社,Petzold着》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本《Inside Windows 2000》也最好放到这本书的后面读。在这本书中,没有C++,没有GUI,没有控件。有的就是如何用原始的C语言来完成Windows 程序设计。在学完了它以后,你才会发现VC其实是很容易学的。千万不要在没有看完这本书以前提前学习VC,你最好碰都不要碰。我知道的许多名校甚至都已经用它作为教材进行授课。可见其重要。
上面的几门课程我认为是必学的重要课程(如果你想做Windows 程序员)。
对于其它的课程有这样简单的选择方法:如果你是计算机系的,请学好你所有的专业基础课。如果不是,请参照计算机系的课程表。如果你发现自己看一本书时无法看下去了,请翻到书的最后,看看它的参考文献,找到它们并学习它们,再回头看这本书。如果一本书的书名中带有“原理”两个字,你一定不要去记忆它其中的细节,你应该以一天至少50页的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。
你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书。
日三省乎己
每天读的书太多,容易让人迷失方向。一定要在每天晚上想想自己学了些什么,还有些什么相关的东西需要掌握,自己对什么最感兴趣,在一本书上花的时间太长还是不够等等。同时也应该多想想未来最有可能出现的应用,这样能够让你不是追赶技术潮流而是引领技术潮流。同时,努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。坚持这样做能够让你真正成为一个软件“研发者”而不仅仅是一个CODER。
把最多的时间花在学习上
这是对初学者最后的忠告。把每个星期玩SC或者CS的时间压缩到最少,不玩它们是最好的。同时,如果你的ASP技术已经能够来钱,甚至有公司请你 *** 的话,这就证明你的天份能够保证你在努力的学习之后取得更好的收益,你应该去做更复杂的东西。眼光放长远一些,这无论是对谁都是适用的。
相信你已经能够决定是否学习C#或者什么时候去学它了。
学计算机专业的需要看哪些书籍呢?
高中起点计算机本科:
1. 计算机科学与技术专业:C语言程序设计、计算机组成原理、数据结构、操作系统、
微机原理及汇编语言、计算机网络、计算机系统结构、软件工程、面向对象程序设计等。
2. 计算机软件专业:面向对象程序设计、计算机组成原理、操作系统、数据结构、计算
机网络、软件工程、编译原理、分布式系统、软件项目管理、Oracle数据库系统等。
3. 电子商务专业:管理学原理、电子商务、物流管理、计算机网络、供应链管理、电子商务平台及核心技术、国际商务管理、电子商务案例分析、商务网站建设等。
专科起点计算机本科:
1. 计算机科学与技术专业:计算机组成原理、数据结构、面向对象程序设计、操作系统、计算机系统结构、软件工程、数据库原理及应用、计算机网络、嵌入式系统与结构等。
2. 计算机软件专业:操作系统、数据结构、面向对象程序设计、计算机原理及系统结构、数据库系统、JAVA程序设计、计算机网络、软件工程、中间件技术、信息系统集成等。
3. 电子商务专业:管理学原理、数据库原理及应用、管理信息系统、金融学、电子商务平台及核心技术、物流管理、计算机网络、人力资源管理、供应链管理等。
自考计算机专业该看哪些书呢
自考计算机专业的科目你可以到当地的自学考试办公室买一本《自学考试报考指南》,里面你所在省的所有自考专业及科目都有!
学计算机专业的都有哪些专业书本?
c语言 c++ java(谭浩强的不错) ~~~~~~~~~~~~~~~操作系统,数据结构,linux,软件基础,计算机网络(自顶向下那本不错)~~~~~~~~~~~~~
大学计算机专业应该看哪些书
作为过来人,我建议你应该先好好保持英语,至于计算机专业方面的书籍,现在没必要去看,看看计算机概论就够了,了解计算机的构造,现在可以想想你要走什么方向,计算机领域很广,要是全部按照学校的授课方式,你什么都要去学,但是后果是你什么都不精通,找工作没有丝毫用处。建议你选好具体方向,然后专门研究那个方向,当然,知识嘛,多多益善,但是要有主次
非计算机专业自学计算机编程入门需要看哪些书?
首先计算机基础要弄清楚,如果对计算机很熟悉,这个可以跳过。
之后是最重要的,就是C语言。基本上计算机编程都是C语言,有的就算不是,一理通百理,学好了C语言,其他的都不在话下。这个是最重要的。
然后是数据库,这个和C语言来说,就相当简单了。
急!计算机专业考公务员的话考些什么内容,还有要看哪些专业书??
国家公务员考试科目:
1. 内容。公共科目包括行政职业能力测验和申论两科。有关情况详见《中央机关及其直属机构2016年度考试录用公务员公共科目考试大纲》。
报考中央对外联络部、外交部、教育部、商务部、国家外国专家局、全国友协、中国贸促会等部门日语、法语、俄语、西班牙语、阿拉伯语、德语、朝鲜语(韩语)等7个非通用语职位的人员,还将参加外语水平考试,考试大纲请在相关招录部门网站查询。
报考中国银监会及其派出机构、中国证监会及其派出机构特殊专业职位的人员,还将参加专业考试,考试大纲请在考录专题网站,中国银监会、中国证监会网站分别查询。
省公务员考试:大多数省份是考公共科目包括行政职业能力测验和申论两科。
辽宁移动计算机专业面试需要看哪些书,计算机专业面试主要考哪些题?万分感谢!
本人广东移动员工。数据库、还有JAVA和C++语言很重要!另外,掌握基本的测试原理和技术也会帮助不少。
移动校招录取的学历一般要求研究生以上,当然大牛的本科生也会考虑!
移动目前最缺牛的系统架构师!不是哪个省缺,我能告诉你全网都缺!
所以如果有系统项目经验,会加分不少!
希望能帮到你!
非计算机专业学习JAVA看哪些书
零基础学Java》和 《JAVA编程基础、应用与实例》
要学计算机专业需要了解哪些知识?需要看哪些书?
计算机也有很多专业,比如软件工程、硬件方面的、网络工程、或者是综合的计算机科学与技术。等等。看书,想计算机体系结构,操作系统什么的。
⑸ 编译原理全部的名词解释
书上有别那么懒!。。。。
编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成
解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执行目标程序。解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。
编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序)。
解释程序和编译程序的根本区别:是否生成目标代码
句子的二义性(这里的二义性是指语法结构上的。):文法G[S]的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的。
文法的二义性:一个文法如果包含二义性的句子,则这个文法是二义文法,否则是无二义文法。
LL(1)的含义:(LL(1)文法是无二义的; LL(1)文法不含左递归)
第1个L:从左到右扫描输入串 第2个L:生成的是最左推导
1 :向右看1个输入符号便可决定选择哪个产生式
某些非LL(1)文法到LL(1)文法的等价变换: 1. 提取公因子 2. 消除左递归
文法符号的属性:单词的含义,即与文法符号相关的一些信息。如,类型、值、存储地址等。
一个属性文法(attribute grammar)是一个三元组A=(G, V, F)
G:上下文无关文法。
V:属性的有穷集。每个属性与文法的一个终结符或非终结符相连。属性与变量一样,可以进行计算和传递。
F:关于属性的断言或谓词(一组属性的计算规则)的有穷集。断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性。
综合属性:若产生式左部的单非终结符A的属性值由右部各非终结符的属性值决定,则A的属性称为综合属
继承属性:若产生式右部符号B的属性值是根据左部非终结符的属性值或者右部其它符号的属性值决定的,则B的属性为继承属性。
(1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性。
(2) 终结符只有综合属性,没有继承属性,它们由词法程序提供。
在计算时: 综合属性沿属性语法树向上传递;继承属性沿属性语法树向下传递。
语法制导翻译:是指在语法分析过程中,完成附加在所使用的产生式上的语义规则描述的动作。
语法制导翻译实现:对单词符号串进行语法分析,构造语法分析树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点处按语义规则进行计算。
中间代码(中间语言)
1、是复杂性介于源程序语言和机器语言的一种表示形式。
2、一般,快速编译程序直接生成目标代码。
3、为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可以将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作,使得代码优化比较容易实现。
何谓中间代码:源程序的一种内部表示,不依赖目标机的结构,易于代码的机械生成。
为何要转换成中间代码:(1)逻辑结构清楚;利于不同目标机上实现同一种语言。
(2)便于移植,便于修改,便于进行与机器无关的优化。
中间代码的几种形式:逆波兰记号 ,三元式和树形表示 ,四元式
符号表的一般形式:一张符号表的的组成包括两项,即名字栏和信息栏。
信息栏包含许多子栏和标志位,用来记录相应名字和种种不同属性,名字栏也称主栏。主栏的内容称为关键字(key word)。
符号表的功能:(1)收集符号属性 (2) 上下文语义的合法性检查的依据: 检查标识符属性在上下文中的一致性和合法性。(3)作为目标代码生成阶段地址分配的依据
符号的主要属性及作用:
1. 符号名 2. 符号的类型 (整型、实型、字符串型等))3. 符号的存储类别(公共、私有)
4. 符号的作用域及可视性 (全局、局部) 5. 符号变量的存储分配信息 (静态存储区、动态存储区)
存储分配方案策略:静态存储分配;动态存储分配:栈式、 堆式。
静态存储分配
1、基本策略
在编译时就安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址。
2、适用的分配对象:子程序的目标代码段;全局数据目标(全局变量)
3、静态存储分配的要求:不允许递归调用,不含有可变数组。
FORTRAN程序是段结构,不允许递归,数据名大小、性质固定。 是典型的静态分配
动态存储分配
1、如果一个程序设计语言允许递归过程、可变数组或允许用户自由申请和释放空间,那么,就需要采用动态存储管理技术。
2、两种动态存储分配方式:栈式,堆式
栈式动态存储分配
分配策略:将整个程序的数据空间设计为一个栈。
【例】在具有递归结构的语言程序中,每当调用一个过程时,它所需的数据空间就分配在栈顶,每当过程工作结束时就释放这部分空间。
过程所需的数据空间包括两部分
一部分是生存期在本过程这次活动中的数据对象。如局部变量、参数单元、临时变量等;
另一部分则是用以管理过程活动的记录信息(连接数据)。
活动记录(AR)
一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区 (块)叫做一个活动记录。
构成
1、临时工作单元;2、局部变量;3、机器状态信息;4、存取链;
5、控制链;6、实参;7、返回地址
什么是代码优化
所谓优化,就是对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加快或占用存储空间减少。
优化原则:等价原则:经过优化后不应改变程序运行的结果。
有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小。
合算原则:以尽可能低的代价取得较好的优化效果。
常见的优化技术
(1) 删除多余运算(删除公共子表达式) (2) 代码外提 +删除归纳变量+ (3)强度削弱; (4)变换循环控制条件 (5)合并已知量与复写传播 (6)删除无用赋值
基本块定义
程序中只有一个入口和一个出口的一段顺序执行的语句序列,称为程序的一个基本块。
给我分数啊。。。
⑹ 有几道编译原理的题目不知道怎么做了,求教!
1 选A,*与+的区别在于*包含0
2 B
3 D ABb>Abb>abb
4 D
5 B 循环优化的三种重要技术是: 代码外提;删除归纳变量和强度削弱。
1 错
2 对
⑺ (高分)编译原理的题,求高手,在线等,急急急!!!!!!
太多了,大概看了下考点:
若源程序是用高级语言编写的,目标程序是 机器语言程序或汇编程序 ,则其翻译程序称为编译程序.
何谓优化?按所涉及的程序范围可分为哪几级优化?
答:优化:对程序进行各种等价变换,使得从变换后的程序出发,能产生更有效的目标代码。
三种级别:局部优化、循环优化、全局优化。
简述常用的优化技术有哪些?
答:编译程序中常用的优化技术有:
(1) 删除公共子表示式;
(2) 复写传播;
(3) 删除无用代码;
(4) 代码外提;
(5) 强度削弱;
(6) 删除归纳变量;
(7) 合并常量。
一个句型中的最左 B 称为该句型的句柄。
可选项有:
A. 短语 B. 简单短语 C. 素短语 D. 终结符号
.递归下降法不允许任一非终极符是直接 左 递归的。
简单优先方法每次归约当前句型的 句柄 ,算符优先方法每次归约当前句型的 最左素短语 ,二者都是不断移进输入符号,直到符号栈顶出现 可归约串 的尾,再向前找到 可归约串 的头,然后归约。
算符优先文法——设有一不含ε产生式的算符文法G,如果对任意两个终结符对a,b之间至多只有 、 和 三种关系中的一种成立,则称G是一个算符优先文法。
常用的中间语言种类有哪几种?
答:有逆波兰式、三地址代码、抽象语法树和DAG。
⑻ 计算机专业有哪些课程
主要课程有计算机应用基础、应用文写作、数学、英语、德育、电工与电子技术、计算机网络技术、C语言、计算机组装与维修、企业网安全高级技术、企业网综合管理、windows server 2008操作系统。
还有局域网组建、Linux服务器操作系统、网络设备与网络技术(主要学习思科、华为公司设备的配置、管理、调试)、SQL Server、网络综合布线技术、CAD绘图等。
计算机学科的特色主要体现在:理论性强,实践性强,发展迅速按一级学科培养基础扎实的宽口径人才,体现在重视数学、逻辑、数据结构、算法、电子设计、计算机体系结构和系统软件等方面的理论基础和专业技术基础。
(8)归纳变量编译原理扩展阅读
计算机专业培养目标
本专业毕业生应获得以下几个方面的知识和能力:
1、掌握电子技术和计算机组成与体系结构的基本原理、分析方法和实验技能,能从事计算机硬件系统开发与设计。
2、掌握程序设计语言、算法与数据结构、操作系统以及软件设计方法和工程的基本理论、基本知识与基本技能,具有较强的程序设计能力,能从事系统软件和大型应用软件的开发与研制。
3、掌握并行处理、分布式系统、网络与通信、多媒体信息处理、计算机安全、图形图象处理以及计算机辅助设计等方面的基本理论、分析方法和工程实践技能,具有计算机应用和开发的能力。
4、掌握计算机科学的基本理论,具有从事计算机科学研究的坚实基础。