‘壹’ 自学程序员的学习顺序和课程都是什么
展开全部
基础课程包括:计算机硬件基础、计算机网络基础、操作系统、计算机组成原理、计算机体系结构、数据库原理、软件工程、离散数学、算法设计与分析、数据结构、编译原理
编程语言可以根据需要选择,底层开发人员必学:汇编语言、c、c++;web应用表示层开发人员:html、xml、javascript、jsp(或asp,php)等;普通应用程序开发:c++、vb、.net(其中包括多种语言,可根据现有基础选择)、java等。
如果你是学生,或者如果你有充足的时间。我建议你仔细的掌握下面的知识。我的建议是针对那些希望在IT技术上有所成就的初学者。同时我还列出了一些书目,这些书应该都还可以在书店买到。说实在的,我在读其他人的文章时最大的心愿就是希望作者列出一个书单。
大学英语——不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是不可想象的。中文的翻译往往在猴年马月才会出来,而现在的许多出版社干脆就直接把E文印刷上去。学习的方法是强迫自己看原版的教材,开始会看不懂,用多了自然熟练。吃得苦下得狠心绝对是任何行业都需要的品质。
计算机体系结构和汇编语言——关于体系结构的书遍地都是,而且也大同小异,倒是汇编有一本非常好的书。《80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文着)。你需要着重学习386后保护模式的程序设计。否则你在学习现代操作系统底层的一些东西的时候会觉得是在看天书。
计算机操作系统原理——我们的开发总是在特定的操作系统上进行,如果不是,只有一种可能:你在自己实现一个操作系统。无论如何,操作系统原理是必读的。这就象我们为一个芯片制作外围设备时,芯片基本的工作时序是必需了解的。这一类书也很多,我没有发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。
数据结构和算法——这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时)。很多人喜欢买C#版的,但我觉得没有必要。C#的语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法变得更复杂。倒是在学完了C版的书以后再来浏览一下C#的版的书是最好的。
软件工程——这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》(黄色,清华)。不要花太多的时间去记条条框框,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再来回顾回顾,每次都会有收获。
Windows 程序设计——《北京大学出版社,Petzold着》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本《Inside Windows 2000》也最好放到这本书的后面读。
在这本书中,没有C++,没有GUI,没有控件。有的就是如何用原始的C语言来完成Windows 程序设计。在学完了它以后,你才会发现VC其实是很容易学的。千万不要在没有看完这本书以前提前学习VC,你最好碰都不要碰。我知道的许多名校甚至都已经用它作为教材进行授课。可见其重要。
上面的几门课程我认为是必学的重要课程(如果你想做Windows 程序员)。
对于其它的课程有这样简单的选择方法:如果你是计算机系的,请学好你所有的专业基础课。如果不是,请参照计算机系的课程表。如果你发现自己看一本书时无法看下去了,请翻到书的最后,看看它的参考文献,找到它们并学习它们,再回头看这本书。如果一本书的书名中带有“原理”两个字,你一定不要去记忆它其中的细节,你应该以一天至少50页的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。
你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书。
‘贰’ 程序员对学习过的知识要怎么复习
最近一个月,我在准备面试。以前工作的时候忙,没来得及追根究底,趁这次面试的机会好好的研究了java底层原理,感觉很有成就感。忙了一个月,有些学习上的心得,记录一下:1、分解知识再复杂的知识也是由一个个单一的知识点组成,分解它们,逐一攻克。比如说jvm虚拟机,可以分为公享区域(堆、元空间)和私有区域(栈、程序计数器、本地方法区),栈里面又有很多栈帧,栈帧又可以分为局部变量表,操作数栈等等。2、用思维导图做好存档思维导图就好像一个个房间,A房间将JVM,B房间讲gc,假设你学了jvm相关的内容,就把这些知识存档到jvm那个房间。3、不求甚解作为一个要通过技术改变世界的码农,怎么允许自己不求甚解呢?不是不求甚解,而是暂时的不求甚解,因为有些底层原理,我们很难一下子弄明白,比如spring源码,那怎么办?今天看一遍,不是很懂;明天再看一遍,懂一点了;后天再看一遍,恍然大悟,这是一个循序渐进的过程。4、努力回忆我趁每天早上跑步的半小时,努力回忆学过的知识,因为已经做过思维导图了,所以回忆相对比较轻松。此外还有晚上睡觉时,也是回忆知识的绝好时间,以至于我常常失眠到一两点。一旦发现某些知识回忆不起来,立马打开电脑复习,这种经过努力回忆的知识点,记得更牢,理解更深刻。5、努力实践无论你怎么努力,总有一些你不知道的知识点,如果你觉得准备得差不多了,那赶紧去面试。我之前把面试看成被面试官虐的过程,被面试官问得哑口无言,因此心惊胆战,但昨天一个电话面试,让我喜欢上了面试,因为我把面试当成朋友间的技术聊天,相互学习而已,即便有一些问题没答上来。我很庆幸,面试官启发了我。挂完电话之后,赶紧补上不会的知识。
作者:把大象装进冰箱
链接:https://www.jianshu.com/p/bfbfac6bafb5
来源:简书
简书着作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
最近一个月,我在准备面试。以前工作的时候忙,没来得及追根究底,趁这次面试的机会好好的研究了java底层原理,感觉很有成就感。忙了一个月,有些学习上的心得,记录一下:
1、分解知识
再复杂的知识也是由一个个单一的知识点组成,分解它们,逐一攻克。比如说jvm虚拟机,可以分为共享区域(堆、元空间)和私有区域(栈、程序计数器、本地方法区),栈里面又有很多栈帧,栈帧又可以分为局部变量表,操作数栈等等。
2、用思维导图做好存档
思维导图就好像一个个房间,A房间将JVM,B房间讲gc,假设你学了jvm相关的内容,就把这些知识存档到jvm那个房间。
3、不求甚解
作为一个要通过技术改变世界的码农,怎么允许自己不求甚解呢?
不是不求甚解,而是暂时的不求甚解,因为有些底层原理,我们很难一下子弄明白,比如spring源码,那怎么办?今天看一遍,不是很懂;明天再看一遍,懂一点了;后天再看一遍,恍然大悟,这是一个循序渐进的过程。
4、努力回忆
我趁每天早上跑步的半小时,努力回忆学过的知识,因为已经做过思维导图了,所以回忆相对比较轻松。此外还有晚上睡觉时,也是回忆知识的绝好时间,以至于我常常失眠到一两点。一旦发现某些知识回忆不起来,立马打开电脑复习,这种经过努力回忆的知识点,记得更牢,理解更深刻。
5、努力实践
无论你怎么努力,总有一些你不知道的知识点,如果你觉得准备得差不多了,那赶紧去面试。我之前把面试看成被面试官虐的过程,被面试官问得哑口无言,因此心惊胆战,但昨天一个电话面试,让我喜欢上了面试,因为我把面试当成朋友间的技术聊天,相互学习而已,即便有一些问题没答上来。我很庆幸,面试官启发了我。挂完电话之后,赶紧补上不会的知识。
‘叁’ 软考复习计划(软设)
更多软考经验请到一起软考网(http://www.17rk.com)查看.
以下贴一篇别人过软件设计师的文章你看下.希望对你有所帮助.
《经验谈:软件设计师考试如何应考?》http://www.17rk.com/viewthread.php?tid=1075
操作系统和数据库是程序员和软件设计师每年的必考内容,从1987年到2005年春季软考都少不了它们的身影。
近年来,程序员和软件设计师大纲虽做了一些大的改动,但操作系统部分变动并不是很大,上午分值多是1到5分之间,下午是不确定出题,也就是可能会出到,也可能没有。但不可大意,如2004年秋季下午题的第四题就是道操作系统题。
另外,在出题形式上更趋于具体的分析,而不再是纯粹的概念题。如PV原语操作就比较多偏向于对生产者/消费者问题的解答。大纲所列知识点虽不能全部都涉及到。不过再通过我们对历年题型的综合分析后(特别是1995到2005春季),可以明确的是操作系统方面的题目,一般集中在进程,存储管理和作业管理这几个方面。1998年到2000年这几年的操作系统,有很多是重复出题,而且都集中在上面说的几个方面。希望各位考生在复习时把主要精力放在主要知识点上。
数据库在程序员和软件设计师的出题中比重不小。分值上午一般会有5分左右,下午有和软件工程结合出题,或者与UML联合出题的情况。这种结合多是考查ER模型到关系模式的转换,以及用SQL来建立关系模式,2005年春季考试上下午都有数据库的题,且下午是独立题目。而且我们思达网校的老师一致认为这是考生朋友们应该牢牢抓住分数的部分。具体的重点是很清晰的,ER模型和关系模式之间的转换,关系代数,关系演算,范式,SQL语言(查询的比重较大)。复习时应注意掌握以上这些知识点。
面向对象和UML是新大纲的新要求,可以参考的并不多。不过对概念的考查火力比较强,考生很不容易在面对对象方面的众多概念中拿到分,这就要求考生朋友们一定要注意平时在复习时就把这些内容有意加强记忆。UML是在下午题中出现,从2004年春季考到2005年春季考的下午试题中发现出题UML的火力点多在对各种静态图和动态图。
为了让同学们更好地进行考前复习顺利拿到软件工程、计算机网络和专业英语部分的理想考分,在此给同学们谈一些体会和方法:
软件工程部分:
软件工程部分一般来说上午和下午都有题,是比较重要的模块。上午一般有5分左右,下午一般有一个大题15分。
上午的题侧重于识记的,原来一道题有五个小题,即就考相关知识点的五个小问题,现在的趋势是把五个小题分散成五个独立的选择题,就相当于多考了几个知识点了,所以说考察的知识点增多了,且具有一定的综合性,提高了应考的要求。所以在以后的复习和做题中应对题中所涉及的知识点有明确的认识,即你知道考的是哪方面的点,在此基础上强化和吃透,做到举一反三。上午的知识点主要是熟悉软件开发的过程、一些基本的开发设计方法及控制管理开发过程的规范等。(考程序员的同学就只有上午的题,考软设的同学还有下午的题)
下午的软件工程题型比较固定,一般多为DFD或业务流程图,还有有时候是的程序流程图,这部分是我们必须得13分左右的题,现在重要谈一下该类题涉及的知识点FD或业务流程图,及相应的应试方法:业务流程图与DFD图性质和作用类似,都是系统分析时产生的逻辑模型(功能模型,结构化设计和面向对象化设计都包括的重要部分,为后面建立E-R概念模型,系统设计做好稳定的信息模型基础),即描述系统的输入数据、处理功能、输出数据,功能模块间及对应部门之间的信息流动关系。业务流程图比DFD图要粗略一些,DFD描述的数据流更细致(如输入、输出和存储的数据、同层模块间的数据交互及处理环节间的信息交互等)和功能更具有层次性(自顶向下,逐层分解),它更接近计算机处理流程,更容易将该业务流程转化为计算机软件实现的流程;业务流程图侧重描述某一业务功能的实现过程及相关的数据和处理,是一种大概的信息流描述方式,要进行细化和深入构建,才能最终转化为DFD数据流图,进而转化为(更接近)计算机软件处理业务流程。针对这类型题:一、了解其该业务实现的功能及各个处理环节的处理功能,二、各个处理环节包括的输入、输出(重点是新增的)数据,三、处理环节之间的数据(或文件)匹配,即处理模块输入输出数据(文件)的(或上下)平衡,有时要延伸到最后的输出或前面几步的输入等,才能确定该处理的输入和输出数据的平衡匹配,直到反复验证文件或其包括的数据项使得各个处理环节间匹配和平衡,即没有发生干涉或矛盾,同时,要识别其中的关键字及考虑数据项冗余程度和处理效率等问题。同学们可以用相应的题来进行体会和感觉,学会不断从题中、从其答案中总结出一些做题的规律和技巧,一旦相似的题出现后,就一触即发了。
计算机网络部分:
该部分题一般出现在上午,一般是5分左右,同软件工程上午的题一样,大题分散成了几个独立小题,增加了考点和综合度。该部分识记和理解的较多,特别是ISO/OSI七层参考模型、对应的通信协议、通信设备、TCP/TP体系、局域网技术、网络安全技术、Internet的新应用技术及IP划分等。深刻理解ISO/OSI七层参考模型、对应的通信协议和TCP/TP体系等思想和原理。注意一些网络方面新的发展和应用技术,如XML、SOAP、J2EE/JSP/SERVLET、B/S结构的应用等,有了相关知识背景,对专业英语也是很有帮助的。同学们时间紧,通看书后,直接做题,在题中体会和感觉,进一步掌握这些知识点,摸索出考察知识点的规律。
参考资料:http://www.17rk.com
‘肆’ 谁能给我一个自学程序员的课程表
如果想软件开发
离散数学 操作系统 网络技术 计算机组成原理 数据库技术 数据结构
C/C++ vc++ windows程序设计 多媒体技术
如果学偏硬的话 还要学 汇编程序设计 单片机 电子技术
以下是XX大学本科计算机系教材:
计算机导论
计算机电路基础
数据库系统概论
信号与系统
算法分析与设计
计算机组成与结构
硬件描述语言及应用
复变函数
数字逻辑电路课程设计
数字电路与逻辑技术
离散数学
数据结构
数据结构课程设计
电子CAD实训
面向对象程序设计
数据库开发课程设计
微机接口课程设计
计算机图形学
人工智能导论
汇编语言与微机接口
操作系统
多媒体技术
计算机网络
VC程序设计
数据库开发技术
单片机原理及应用
Linux操作系统
常用网络组建与维护
Java程序设计
单片机课程设计
编译原理
通信概论
软件测试技术
计算机控制技术
MATLAB
DSP原理及应用
WEB开发技术
软件工程
嵌入式系统开发及应用
智能机器人技术
计算机综合应用课程设计
数据采集与处理
建议你买本书,书比网上的电子版教程好的多,如计算机届超级权威教授 谭浩强 老先生写的《C语言程序设计(第三版)》,全国发行了700万册,可以说是学C语言的人必看的书,我们大学就用这本书,很适合自学,通俗易懂
建议你学习其它计算机知识时也看他的书,他出的书很多,涵盖面广,每一本都很经典
这里有他的教程word版下载
http://www.longtengwang.com/Soft/UploadSoft/down/c/%CC%B7%BA%C6%C7%BFC%D3%EF%D1%D4%BD%CC%B3%CCWord%B0%E6.rar
另外,机械工业出版社的 计算机丛书系列也相当经典,全是翻译国外经典教材,国外计算机发展早,水平比国内高很多,看这些教材事半功倍,推荐(美)Al Kelley Ira Pohl的《C语言教程第4版》
学习程序语言要持之以恒,不浮躁
‘伍’ 程序员考试有上机题吗
程序员考试有上机题。
程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员,系统架构师,测试工程师五大类。
岗位职责
1、对项目经理负责,负责软件项目的详细设计、编码和内部测试的组织实施,对
程序员
小型软件项目兼任系统分析工作,完成分配项目的实施和技术支持工作。
2、协助项目经理和相关人员同客户进行沟通,保持良好的客户关系。
3、参与需求调研、项目可行性分析、技术可行性分析和需求分析。
4、熟悉并熟练掌握交付软件部开发的软件项目的相关软件技术。
5、负责向项目经理及时反馈软件开发中的情况,并根据实际情况提出改进建议。
6、参与软件开发和维护过程中重大技术问题的解决,参与软件首次安装调试、数据割接、用户培训和项目推广。
7、负责相关技术文档的拟订。
8、负责对业务领域内的技术发展动态进行分析研究。
‘陆’ 对于程序员,该如何将工作和生活时间合理安排呢
虽然是一个实习生,但是也要有紧迫感。10年前我才出来撸代码的时候,都是时刻担心被炒。毕竟公司不是慈善机构,对我们都有考核期。你要尽快把需求,接口文档把业务逻辑走一遍。
‘柒’ 寻程序员复习计划.
一看你就没经验
考试的时候不考太难的
主要注意编程风格就可以了
一定要注意风格
如果程序错误而你风格好你有一分拿,如果风格不好程序正确你一分也没有
总之,注意风格就好
别害怕
你行地
一点也不难
祝你成功!!!
‘捌’ 如何自学成为程序员
如何学习自学编程的方式最好的莫过于在网络上面查找资源。
目前,网络上电脑资源多不胜数。其中有很多都是基础到精通的视频教程。通过视频讲解。让你明白重点知识。你通过查找一套适合自己的视频。然后看完是基本。
这里推荐几个可以在线学习的好网站:慕课、极客学院、传智播客、如朋网、网易公开课等等做笔记在进行看视频的过程中,一定注意要记笔记。
对视频中重点的部分进行截图,并加以文字解释。就形成了自己的笔记。这些笔记对于你来说很重要。通过记笔记的形式,你就不需要重新观看视频了。只需要复习的时候查看笔记就够了,这样就大大的节约了时间。
下面介绍一个记笔记的好软件:CherryTree多练习代码在视频中讲解的代码,我认为你至少需要自己写三遍以上。在写代码的时候,就用到了上面写的笔记了。通过看笔记截图,即可自己慢慢摸索写出来代码。当然练习到一定程度,就需要你适当的做个项目。巩固自己的知识。
程序员必备技能
1、熟练开发工具
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。
而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVAOne很可能会成为未来的主流开发工具之一。
其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,CBuilder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
2、熟知数据库
为什么数据库是如此重要?作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。
虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL,Postgres等。
3、了解操作系统
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。
Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。懂得网络协议TCP/IP。
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课。
网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEBServices,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深入掌握TCP/IP协议是非常必要的。
至少,需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
4、明白DCOM/CORBA/XML/WEBServices存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。
XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布式计算的基石之一。
5、不要将软件工程与CMM分开
大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合。
编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。
6、需求理解能力
程序员要能正确理解任务单中描述的需求。
在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
7、模块化思维能力
作为一个优秀的程序员,他的思想不能局限在当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。
这样做可以使代码能重复利用,减少重复的劳动,也能使系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
‘玖’ 请教有经验的程序员,关于初学者学习编程的问题
编程
这是每个游戏编程FAQ里都有的问题。这个问题每星期都会在游戏开发论坛上被问上好几次。这是个很好的问题,但是,没人能给出简单的答案。在某些应用程序中,总有一些计算机语言优于其他语言。下面是几种用于编写游戏的主要编程语言的介绍及其优缺点。希望这篇文章能帮助你做出决定。
1、C语言
如果说FORTRAN和COBOL是第一代高级编译语言,那么C语言就是它们的孙子辈。C语言是Dennis Ritchie在七十年代创建的,它功能更强大且与ALGOL保持更连续的继承性,而ALGOL则是COBOL和FORTRAN的结构化继承者。C语言被设计成一个比它的前辈更精巧、更简单的版本,它适于编写系统级的程序,比如操作系统。在此之前,操作系统是使用汇编语言编写的,而且不可移植。C语言是第一个使得系统级代码移植成为可能的编程语言。
C语言支持结构化编程,也就是说C的程序被编写成一些分离的函数呼叫(调用)的集合,这些呼叫是自上而下运行,而不像一个单独的集成块的代码使用GOTO语句控制流程。因此,C程序比起集成性的FORTRAN及COBOL的“空心粉式代码”代码要简单得多。事实上,C仍然具有GOTO语句,不过它的功能被限制了,仅当结构化方案非常复杂时才建议使用。
正由于它的系统编程根源,将C和汇编语言进行结合是相当容易的。函数调用接口非常简单,而且汇编语言指令还能内嵌到C代码中,所以,不需要连接独立的汇编模块。
优点:有益于编写小而快的程序。很容易与汇编语言结合。具有很高的标准化,因此其他平台上的各版本非常相似。
缺点:不容易支持面向对象技术。语法有时会非常难以理解,并造成滥用。
移植性:C语言的核心以及ANSI函数调用都具有移植性,但仅限于流程控制、内存管理和简单的文件处理。其他的东西都跟平台有关。比如说,为Windows和Mac开发可移植的程序,用户界面部分就需要用到与系统相关的函数调用。这一般意味着你必须写两次用户界面代码,不过还好有一些库可以减轻工作量。
用C语言编写的游戏:非常非常多。
资料:C语言的经典着作是《The C Programming Language》,它经过多次修改,已经扩展到最初的三倍大,但它仍然是介绍C的优秀书本。一本极好的教程是《The Waite Group's C Primer Plus》。
2、C++
C++语言是具有面向对象特性的C语言的继承者。面向对象编程,或称OOP是结构化编程的下一步。OO程序由对象组成,其中的对象是数据和函数离散集合。有许多可用的对象库存在,这使得编程简单得只需要将一些程序“建筑材料”堆在一起(至少理论上是这样)。比如说,有很多的GUI和数据库的库实现为对象的集合。
C++总是辩论的主题,尤其是在游戏开发论坛里。有几项C++的功能,比如虚拟函数,为函数呼叫的决策制定增加了一个额外层次,批评家很快指出C++程序将变得比相同功能的C程序来得大和慢。C++的拥护者则认为,用C写出与虚拟函数等价的代码同样会增加开支。这将是一个还在进行,而且不可能很快得出结论的争论。
我认为,C++的额外开支只是使用更好的语言的小付出。同样的争论发生在六十年代高级程序语言如COBOL和FORTRAN开始取代汇编成为语言所选的时候。批评家正确的指出使用高级语言编写的程序天生就比手写的汇编语言来得慢,而且必然如此。而高级语言支持者认为这么点小小的性能损失是值得的,因为COBOL和FORTRAN程序更容易编写和维护。
优点:组织大型程序时比C语言好得多。很好的支持面向对象机制。通用数据结构,如链表和可增长的阵列组成的库减轻了由于处理低层细节的负担。
缺点:非常大而复杂。与C语言一样存在语法滥用问题。比C慢。大多数编译器没有把整个语言正确的实现。
移植性:比C语言好多了,但依然不是很乐观。因为它具有与C语言相同的缺点,大多数可移植性用户界面库都使用C++对象实现。
使用C++编写的游戏:非常非常多。大多数的商业游戏是使用C或C++编写的。
资料:最新版的《The C++ Programming Language》非常好。作为教程,有两个阵营,一个假定你知道C,另外一个假定你不知道。到目前为止,最好的C++教程是《Who's Afraid of C++》,如果你已经熟知C,那么试一下《Teach Yourself C++》。
3、我该学习C++或是该从C开始
我不喜欢这种说法,但它是继“我该使用哪门语言”之后最经常被问及的问题。很不幸,不存在标准答案。你可以自学C并使用它来写程序,从而节省一大堆的时间,不过使用这种方法有两个弊端:
你将错过那些面向对象的知识,因为它可能在你的游戏中使得数据建模更有效率的东西。
最大的商业游戏,包括第一人称射击游戏很多并没有使用C++。但是,这些程序的作者即使使用老的C的格式,他们通常坚持使用面向对象编程技术。如果你只想学C,至少要自学OO(面向对象)编程技术。OO是仿真(游戏)的完美方法,如果你不学习OO,你将不得不“辛苦”的工作。
4、汇编语言
显然,汇编是第一个计算机语言。汇编语言实际上是你计算机处理器实际运行的指令的命令形式表示法。这意味着你将与处理器的底层打交道,比如寄存器和堆栈。如果你要找的是类英语且有相关的自我说明的语言,这不是你想要的。
确切的说,任何你能在其他语言里做到的事情,汇编都能做,只是不那么简单 — 这是当然,就像说你既可以开车到某个地方,也可以走路去,只是难易之分。话虽不错,但是新技术让东西变得更易于使用。
总的来说,汇编语言不会在游戏中单独应用。游戏使用汇编主要是使用它那些能提高性能的零零碎碎的部分。比如说,毁灭战士整体使用C来编写,有几段绘图程序使用汇编。这些程序每秒钟要调用数千次,因此,尽可能的简洁将有助于提高游戏的性能。而从C里调用汇编写的函数是相当简单的,因此同时使用两种语言不成问题。
特别注意:语言的名字叫“汇编”。把汇编语言翻译成真实的机器码的工具叫“汇编程序”。把这门语言叫做“汇编程序”这种用词不当相当普遍,因此,请从这门语言的正确称呼作为起点出发。
优点:最小、最快的语言。汇编高手能编写出比任何其他语言能实现的快得多的程序。你将是利用处理器最新功能的第一人,因为你能直接使用它们。
缺点:难学、语法晦涩、坚持效率,造成大量额外代码 — 不适于心脏虚弱者。
移植性:接近零。因为这门语言是为一种单独的处理器设计的,根本没移植性可言。如果使用了某个特殊处理器的扩展功能,你的代码甚至无法移植到其他同类型的处理器上(比如,AMD的3DNow指令是无法移植到其它奔腾系列的处理器上的)。
使用汇编编写的游戏:我不知道有什么商业游戏是完全用汇编开发的。不过有些游戏使用汇编完成多数对时间要求苛刻的部分。
资料:如果你正在找一门汇编语言的文档,你主要要找芯片的文档。网络上如Intel、AMD、Motorola等有一些关于它们的处理器的资料。对于书籍而言,《Assembly Language: Step-By-Step》是很值得学习的。
5、Pascal语言
Pascal语言是由Nicolas Wirth在七十年代早期设计的,因为他对于FORTRAN和COBOL没有强制训练学生的结构化编程感到很失望,“空心粉式代码”变成了规范,而当时的语言又不反对它。Pascal被设计来强行使用结构化编程。最初的Pascal被严格设计成教学之用,最终,大量的拥护者促使它闯入了商业编程中。当Borland发布IBM PC上的 Turbo Pascal时,Pascal辉煌一时。集成的编辑器,闪电般的编译器加上低廉的价格使之变得不可抵抗,Pascal编程了为MS-DOS编写小程序的首选语言。
然而时日不久,C编译器变得更快,并具有优秀的内置编辑器和调试器。Pascal在1990年Windows开始流行时走到了尽头,Borland放弃了Pascal而把目光转向了为Windows 编写程序的C++。Turbo Pascal很快被人遗忘。
最后,在1996年,Borland发布了它的“Visual Basic杀手”— Delphi。它是一种快速的带华丽用户界面的 Pascal编译器。由于不懈努力,它很快赢得了一大群爱好者。
基本上,Pascal比C简单。虽然语法类似,它缺乏很多C有的简洁操作符。这既是好事又是坏事。虽然很难写出难以理解的“聪明”代码,它同时也使得一些低级操作,如位操作变得困难起来。
优点:易学、平台相关的运行(Dephi)非常好。
缺点:“世界潮流”面向对象的Pascal继承者(Mola、Oberon)尚未成功。语言标准不被编译器开发者认同。专利权。
移植性:很差。语言的功能由于平台的转变而转变,没有移植性工具包来处理平台相关的功能。
使用Pascal编写的游戏:几个。DirectX的Delphi组件使得游戏场所变大了。
资料:查找跟Delphi有关的资料,请访问:Inprise Delphi page。
6、Visual Basic
哈,BASIC。回到八十年代的石器时代,它是程序初学者的第一个语言。最初的BASIC形式,虽然易于学习,却是可怕的无组织化,它义无返顾的使用了GOTO充斥的“空心粉式代码”。当回忆起BASIC的行号和GOSUB命令,没有几个人能止住眼角的泪水。
快速前进到九十年代早期,虽然不是苹果公司所希望的巨人,HyperCard仍然是一个在Windows下无法比拟的吸引人的小型编程环境。Windows下的HyperCard克隆品如ToolBook又慢又笨又昂贵。为了与HyperCard一决高下,微软取得了一个小巧的名为Thunder编程环境的许可权,并把它作为Visual Basci 1.0发布,其用户界面在当时非常具有新意。这门语言虽然还叫做Basic(不再是全部大写),但更加结构化了,行号也被去除。实际上,这门语言与那些内置于TRS-80、Apple II及Atari里的旧的ROM BASIC相比,更像是带Basic风格动词的Pascal。
经过六个版本,Visual Basic变得非常漂亮。用户界面发生了许多变化,但依然保留着“把代码关联到用户界面”的主旨。这使得它在与即时编译结合时变成了一个快速原型的优异环境。
优点:整洁的编辑环境。易学、即时编译导致简单、迅速的原型。大量可用的插件。虽然有第三方的DirectX插件,DirectX 7已准备提供Visual Basic的支持。
缺点:程序很大,而且运行时需要几个巨大的运行时动态连接库。虽然表单型和对话框型的程序很容易完成,要编写好的图形程序却比较难。调用Windows的API程序非常笨拙,因为VB的数据结构没能很好的映射到C中。有OO功能,但却不是完全的面向对象。专利权。
移植性:非常差。因为Visual Basic是微软的产品,你自然就被局限在他们实现它的平台上。也就是说,你能得到的选择是:Windows,Windows或Widnows。当然,有一些工具能将VB程序转变成Java。
使用Visual Basic编写的游戏:一些。有很多使用VB编写的共享游戏,还有一些是商业性的。
资料:微软的VB页面有一些信息。
7、Java
Java是由Sun最初设计用于嵌入程序的可移植性“小C++”。在网页上运行小程序的想法着实吸引了不少人的目光,于是,这门语言迅速崛起。事实证明,Java不仅仅适于在网页上内嵌动画 — 它是一门极好的完全的软件编程的小语言。“虚拟机”机制、垃圾回收以及没有指针等使它很容易实现不易崩溃且不会泄漏资源的可靠程序。
虽然不是C++的正式续篇,Java从C++ 中借用了大量的语法。它丢弃了很多C++的复杂功能,从而形成一门紧凑而易学的语言。不像C++,Java强制面向对象编程,要在Java里写非面向对象的程序就像要在Pascal里写“空心粉式代码”一样困难。
优点:二进制码可移植到其他平台。程序可以在网页中运行。内含的类库非常标准且极其健壮。自动分配合垃圾回收避免程序中资源泄漏。网上数量巨大的代码例程。
缺点:使用一个“虚拟机”来运行可移植的字节码而非本地机器码,程序将比真正编译器慢。有很多技术(例如“即时”编译器)很大的提高了Java的速度,不过速度永远比不过机器码方案。早期的功能,如AWT没经过慎重考虑,虽然被正式废除,但为了保持向后兼容不得不保留。越高级的技术,造成处理低级的机器功能越困难,Sun为这门语言增加新的“受祝福”功能的速度实在太慢。
移植性:最好的,但仍未达到它本应达到的水平。低级代码具有非常高的可移植性,但是,很多UI及新功能在某些平台上不稳定。
使用Java编写的游戏:网页上有大量小的Applet,但仅有一些是商业性的。有几个商业游戏使用Java作为内部脚本语言。
资料:Sun的官方Java页面有一些好的信息。IBM也有一个非常好的Java页面。JavaLobby是一个关于Java新闻的最好去处。
8、创作工具
上面所提及的编程语言涵盖了大多数的商业游戏。但是也有一个例外,这个大游戏由于它的缺席而变得突出。
“神秘岛”。没错,卖得最好的商业游戏不是使用以上任何一门语言编的,虽然有人说“神秘岛”99%是使用 3D建模工具制作的,其根本的编程逻辑是在HyperCard里完成的。
多数创作工具有点像Visual Basic,只是它们工作在更高的层次上。大多数工具使用一些拖拉式的流程图来模拟流程控制。很多内置解释的程序语言,但是这些语言都无法像上面所说的单独的语言那样健壮。
优点:快速原型 — 如果你的游戏符合工具制作的主旨,你或许能使你的游戏跑得比使用其他语言快。在很多情况下,你可以创造一个不需要任何代码的简单游戏。使用插件程序,如Shockware及IconAuthor播放器,你可以在网页上发布很多创作工具生成的程序。
缺点:专利权,至于将增加什么功能,你将受到工具制造者的支配。你必须考虑这些工具是否能满足你游戏的需要,因为有很多事情是那些创作工具无法完成的。某些工具会产生臃肿得可怕的程序。
移植性:因为创作工具是具有专利权的,你的移植性以他们提供的功能息息相关。有些系统,如Director可以在几种平台上创作和运行,有些工具则在某一平台上创作,在多种平台上运行,还有的是仅能在单一平台上创作和运行。
使用创作工具编写的游戏:“神秘岛”和其他一些同类型的探险游戏。所有的Shockwave游戏都在网络上。
资料:Director、HyperCard、SuperCard、IconAuthor、Authorware。
9、结论
你可能希望得到一个关于“我该使用哪种语言”这个问题的更标准的结论。非常不幸,没有一个对所有应用程序都最佳的解决方案。C适于快而小的程序,但不支持面向对象的编程。C++完全支持面向对象,但是非常复杂。Visual Basic与Delphi易学,但不可移植且有专利权。Java有很多简洁的功能,但是慢。创作工具可以以最快的速度产生你的程序,但是仅对某一些类型的程序起作用。最好的方法是决定你要写什么样的游戏,并选择对你的游戏支持最好的语言。“试用三十天”的做法成为工业标准是件好事情。
‘拾’ 软考(程序员)哪里有比较详细的复习资料
考试日期: 2006年5月20日
9 : 00-11 : 30 基础知识
14 : 00-16 : 30 应用技术
报名时间: 2006年2月15日— 3月17日
此次报名全部采用网上报名、网上缴费、网上上传照片的方 式,要求报考人员提前到招商银行、中国工商银行、中国建设银行网点办理 网上支付卡。报考人员在规定的时间内登录北京市人事考试网 (网址: www.bjpta.gov.cn ,下同) ,点击首页“网上报名”栏目,按照北京地区 2006 年上半年计算机技术与软件专业技术资格 ( 水平 ) 考试网上报名系统规定的程序和要求,在网上提交报名信息、 上传本人照片并通过招商银行、中国工商银行、中国建设银行的网上支付卡直接缴纳报考费用。报考人员网上缴费成功后,方可在网上打印申报表并按照规定贴好本人照片 ( 2004年以后拍摄的证件照,尺寸规格:34mm×45mm,与上传照片一致) , 在第一场考试时,交监考员并领取报名费用发票。
凡已在网上报名并成功缴费的报考人员可于 2006年5月11日至5月18日登录北京市人事考试网下载打印准考证,凭此准考证、申报表和本人身份证明( 身份证、机动车驾驶执照、军官证、护照 )原件,在规定时间、地点参加考试。
考试大纲和教材出版信息见 www.ceiaec.org/ 资格考试 / 教材目录。