国外的游戏教育

DigiPen的历史  1988年,Claude Comair在加拿大的温哥华市创办了计算机仿真和动画公司DigiPen。  1990年初,DigiPen公司开始提供三维计算机动画专业的培训计划。同年,该公司与任天堂北美分公司合作,为那些对视频游戏开发饶有兴趣的开发人员提供了一个专科培养计划。1994年,DigiPen应用计算机图形学院迎来了它的第一批学习电脑游戏编程的学生,这批学生在温哥华的校园内学习了两年的2D和3D电脑游戏编程。

随着视频游戏平台往更复杂、更精密的方向发展,DigiPen决定为交互计算产业提供一个本科级别的课程计划。依托于DigiPen工程师丰富的专业技术经验,他们设计了一个四年制的学位课程并得到了华盛顿州高等教育同等委员会(HECB)的授权。1996年的5月,HECB授权DigiPen颁发实时交互式仿真专业(Science in Real-Time Interactive Simulation)的本/专科学位,这是世界上第一个专门的计算机/视频游戏开发本科学位。2年后,DigiPen技术学院在位于美国华盛顿州的雷德蒙市正式成立,并且开设了交互式仿真专业的本/专的学位课程。

1999年,DigiPen增加了3D计算机动画的应用艺术专科学位。  Digipen的第一次毕业典礼于2000年7月22号举行,共有6位专科和5位本科毕业生发表了毕业演说。在毕业之前,11个毕业生中已经有9位在游戏领域找到了工作。2002年11月,DigiPen技术学院被职业学校和技术学院认证委员会(Accrediting Commission of Career Schools and Colleges of Technology)鉴定合格。因此,在2004年秋天,该学院又增加了以下学位项目:计算机工程本科(Bachelor of Science in Computer Engineering)动画制作本科(Bachelor of Fine Arts in Production Animation)计算机科学硕士(Master of Science in Computer Science)到2005年秋季, DigiPen已经拥有超过700名在校学生,其在课程上的要求始终贯彻了业界的最高标准。

学位授权和鉴定在通过了HECB的权威认证以及学位授权法案所制订的授予学位的最低教育标准要求后,从2006年3月15日开始,DigiPen技术学院可以颁发以下学位:实时交互仿真本科学位(Bachelor of Science in Real-Time Interactive Simulation)计算机科学硕士学位(Master of Science in Computer Science)计算机工程本科学位(Bachelor of Science in Computer Engineering)三维计算机动画的应用艺术大专学位(Associate of Applied Arts in 3D Computer Animation)动画制作的艺术本科学位(Bachelor of Fine Arts in Production Animation)DigiPen技术学院向职业学校和技术学院认证委员会(ACCSCT)申请了学位鉴定。申请过程中,ACCSCT的专家组成员与研究院的管理人员、全体教员和学生进行接触,从而对学校的教育项目和整体效果进行评估。在评比过程中,Digipen曾三次获得“杰出奖”。

ProjectFun计划除了专科学位项目外,DigiPen还为初、高中生提供了视频游戏编程和三维动画制作的学习机会。目前,DigiPen已有三个项目加入了”ProjectFUN计划”,包括:ProjectFUN车间从1994年起,DigiPen就为学生提供了为期1至2周的工作室实习计划,学生将有机会亲身体验到游戏编程和制作三维动画所涉及的内容并将和机器人一起工作。Project FUN技术学院在2000年秋季,DigiPen为对计算机科学课程感兴趣的中学生提供了一个相应的专业课程计划。目前在华盛顿州、加利福尼亚州威斯康星州、伊利诺斯州、俄亥俄州以及堪萨斯州都有ProjectFun技术协会的网站。Projec tFUN在线2005年5月,DigiPen推出了在线授课计划。让学生在家中便可参与整个课程计划。该计划是“车间学习计划”的一个补充。

学位项目DigiPen学院是一所以计算机科学教育为主的学校,侧重于将计算机科学应用在实时交互仿真程序、计算机工程和3D游戏上。DigiPen学院将理论和实际项目应用进行了创新和开拓性的结合,并且提供了很多的实习机会,一部分学生可以在DigiPen夏季工作室中实习。另一部分学生则有机会在任天堂、微软、EA、索尼娱乐和AmazedEntertainment、Valve等著名游戏公司进行实习。实时交互仿真本科专业(Science in Real-Time Interactive Simulation) DigiPen技术学院四年制的实时交互仿真本科专业共154学分,分8学期修满,每学期15周。这个专业的毕业生通常就业于计算机和视频游戏领域,职位可能是中级程序员、初级设计人员或者是工程设备人员。获得R.T.I.S本科学位的学生,在数学、图形学、计算机科学、交互仿真系统的设计与开发方面将会有非常扎实的理论基础和实践经验。这些学生至少会参与四个课程设计中的一个,每个设计都跨越两个学期,例如在不同平台上编写很多小游戏。部分学生的实践项目可以从DigiPen网页上下载,网址是:http://www.digipen.edu/programs/gallery/index.html。R.T.I.S专业毕业的学生拥有为基于文本的、滚动卷轴的、仿真和3D游戏进行设计、开发以及撰写帮助文档的能力。他们将通过团队合作来学习游戏设计、制作和编程的基本原理,能够撰写游戏设计文档和技术设计文档,学习进度管理的工具和技术并参与到几个游戏的整个制作过程中去。计算机工程本科学位(Bachelor of Science in Computer Engineering)DigiPen技术学院的计算机工程本科专业以为对人才要求苛刻的产业提供优秀人才为己任,该计划将理论基础知识和项目相结合,顺利完成计算机工程课程的学生将会获得以下的技能以及相应的专业工作机会:*在数学、物理和计算机科学方面拥有广泛的基础知识。*在电子工程方面的基础,包括:电路基本理论、特别是数字电路、微处理器、微控制器和嵌入式系统。*在小团队内进行设计、构建和测试原型系统的工作能力。每年都会有一些重要项目的开发,使学生有机会将理论知识转换为实际应用。*系统设计、软件工程、编码和系统集成方面扎实的基础技能。*业界标准硬件和软件应用技术方面的扎实基础知识。*专业的工作习惯和态度。学生们应该了解如何将专业评价运用到他们的工作中,并且有能力鉴定和创造出符合专业质量标准的作品,理解产品流程,可以为自己的作品制订合适的目标与进度表,并坚持贯彻下去,能够了解产品的压力和积极管理这种压力的方法。学生将长期研究产业的这一分支且能够巧妙而全面地论述他们在社会改良方面的责任。

在DigiPen,实时互动仿真本科、三维计算机动画应用艺术专科、动画制作艺术类本科和计算机科学硕士学等专业课程,都是为了致力于从事娱乐产业的学生准备的。计算机工程本科的学生在选择职业方面将会更广,这一点从以上的分析中就可以看出。该专业毕业生所从事的职位有诸如项目工程师、系统架构师、系统分析师、设计工程师、软件工程师和硬件/软件工程师这样一些职位。通常,游戏之所以会被用作教学范例,是因为游戏中所涉及的技术同样适用于其他广泛的领域。计算机工程的本科学位需要修154个学分,分8学期,每学期15周。一般是4个学年内完成。动画制作的艺术本科学位(Bachelor of Fine Arts in Production Animation)DigiPen技术学院从2004年秋天开始设立四年制的动画制作艺术专业本科学位。这个学位需要修满144个学分,花费8个学期,每学期15周。获得该学位的毕业生具备了从事3D动画、数字2D动画和动画前期制作的能力。随着动画产业的成熟,各公司更愿意聘用那些能够熟练使用专业商业软件和掌握传统动画技术的人才。因此,各工作室热衷于寻找那些在动画制作、传统美术、现代计算机软件和流媒体方面拥有广泛的理论、实践和技术技能,且能将它们综合在一起的美工。洞察力和长期的潜力变得尤其重要,同样重要的还有专业的责任心和恒心。动画产业的发展对DigiPen的教育提出了一系列重要的理论挑战。因此在课程的设计上必须经过很好的顺序组织,只有这样,才能让大多数的学生从中获益。DigiPen技术学院在动画制作方面的B.F.A专业就是为了满足这样的需求而诞生的。完成该课程的学生将会获得以下技能和合适的职业:
*在2D和3D动画制作经验方面深厚而广泛的基础。*关注某一制作领域,这样学生可以在毕业前有确定的就业选择并且通过论文来完成这一选择。*应用绘图方面扎实的基础和完整的技能。*描述故事的技能。包括口述故事,通过文字描述故事,通过对话、表演和电影等手段讲述故事。*使用标准硬件和软件的基本技能。熟悉现代接口和工作流程规范,同时了解在保持生产进度的同时如何学习新的软件。*拥有专业的职业习惯和态度。学习如何将职业批评利用和结合到工作中去,有能力鉴定并创造出符合专业质量标准的作品。理解产品流程同时,可以为自己的作品制订合适的计划目标并且遵守这个目标,了解产品的压力和处理压力的方法。3D计算机动画应用艺术专科课程(Associate of Applied Arts in 3D Computer Animation)DigiPen技术学院现在还开设了2年制的3D计算机动画应用艺术专科课程。这个专业共80个学分,分为4个学期完成,每学期15周,一般完成此专业需要2个学年。该专业的毕业生一般从事创作模型、结构图和3D动画方面的工作。随着3D电脑动画产业的成熟,各公司现在所需的电脑动画制作人才不仅要有3D软件使用经验,还要有极强的创造力。各工作室需要的人才除了掌握理论知识外,同时还要具有高水平的传统艺术技能。如果想要获得成功,动画制作人员必须对故事的发展、情节的设计、情节的串连、照明、照相合成和声音设计有深刻的理解。DigiPen在教学上使用的内容创新的教材保证学生最大的发挥其在数字媒体方面的潜力,为了帮助学生成为成功的动画制作艺术家,DigiPen会要求学生们在规定时间内独立或联合完成许多项目,就像他们在实际工作中将会遇到的一样。这些动画制作项目对为期4个学期的理论课程是一种深化。通过两年面向产品的实践项目课程,学生们逐步拥有了一批高质量的作品剪辑。当学生寻找工作时,这些作品剪辑能向各大公司展示自己的个人艺术视觉和技能。
申请要求实时交互仿真专业和计算机工程本科专业(Real-Time Interactive Simulation (R.T.I.S.) degree programs)的申请要求:熟练的英语水平,非英语母语国家必须达到TOEFL550(笔试)分或213分(机考)。达到12级或累计GPA至少达到2.5或相当于2.5。数学平均成绩达到“B”或者GPA达到3.0,包括有代数学、几何学、代数学Ⅱ、三角学、微积分预学课程(至少),如果可能再加上微积分/AP微积分。其他会考查的科目还有物理、化学和计算机科学。计算机科学硕士专业(Master of Computer Science degree program)的申请需求:熟练的英语水平,非英语母语国家申请者必须达到TOEFL550(笔试)或者213(机考)。完成本科学历并累计GPA至少达到2.5或相当于2.5。3D计算机动画学位专业(3D Computer Animation degree program)的申请需求:熟练的英语水平。非英语母语国家申请者必须达到TOEFL550(笔试)或者213(机考)达到12级或累计GPA至少达到2.5或相当于2.5。提交至少10个作品剪辑,这些剪辑要能够表明艺术范畴,特别是肖像/动物画、字体设计、建筑透视图等等。提交的作品述不退还,请邮寄复印件。动画制作专业(Production Animation degree program)的申请需求:熟练的英语水平,非英语母语国家申请者必须达到TOEFL550(笔试)或者213(机考)。达到12级或累计GPA至少达到2.5或相当于2.5。提交10到20份作品剪辑。剪辑中50%的作品要能表明学生的艺术范畴和技能。首选内容为动画样本、肖像/动物习作、字体设计、建筑透视图、风景画习作、雕刻和油画。另一半作品必须是直接来自于观察,不能是照片、其他平面资料或者学生的想象。如果可能,可以提供更多的作品供DigiPen分析。提交的作品述不退还,请邮寄复印件。
除了一般的要求外,对于申请者,DigiPen还会着重考虑一些重要的个人特质:一种强烈的达到目标的愿望。DigiPen是一个能够引起挑战兴趣的学校,每个人必须准备长时间的课程设计并且为通过考试而努力学习。教学的目标是将学生培养成一个有活力的产业设计工程师。逻辑思考能力。编程是一种逻辑性和组织性强的思考方式,有些人会发现比起其他工作,自己可能更适合做编程。程序员着眼于世界,分析事情为什么发生以及如何发生,而且他们会尝试着寻找如何让程序在计算机的仿真环境下运作的方法。对艺术创新的理解。程序员需要能够欣赏艺术家和艺术的思考方式,而且还要能在同等的水平上和艺术家共同工作。因为在制作高质量产品上,艺术和编程的联合是非常重要的。艺术家需要学习怎么与程序员共同工作,程序员可能是用线性方式来观察而不是以艺术方式看待事物。将自己的艺术感用在别人的设计中充满了挑战性,DigiPen可以帮助你如何面对挑战。在视频游戏产业中,对艺术家和程序员来说,不耻下问是必要的。因此,学习如何接受有建设性的批评是非常重要的。尊敬自己和同学。专业人员最好的个人品质就是尊敬自己和与你一起工作的人们。

游戏制作流程的简单总结……看了这些,你还敢开发游戏吗?

以下是游戏制作流程的简单总结:

一、计划阶段:首先,是项目计划阶段。

1、创意管理:第一步,是召开个会议,在会议中最常见的方法就是采取“头脑风暴法”。每个人都必须拿出自己的建议和想法,之后大家一起进行讨论。另外在会场内,会有专人进行会议记录。而在项目开发的前期则会有市场调查。

2、撰写草案:第二步,撰写策划草案,也叫意向书。撰写策划草案的目的在于,使得小组内每个成员对即将开发的项目有一个大体的认识,并且对目标进行明确。

3、市场分析:第三步,市场分析。决定了是否需要开发这个游戏。

1)、目标客户:最重要的一点是确定目标客户。即该游戏是面向核心玩家,还是普通的大众玩家。如果是面向核心玩家所开发的游戏,则需要游戏的难度更大一些;反之,如果是面向大众玩家开发的游戏,则需要游戏的难度简单一些。最好的方法是允许玩家自定义游戏的难度。

2)、成本估算:以网游为例,包括以下几个方面

·服务器:运行网络游戏所需花费的硬件方面的成本。成本中的大头。大约占到总成本的40%左右。

·客服:属于人力成本的范畴。网络游戏不同于单机游戏的部分在于,其不同于单机游戏的“售后不理”的销售模式。用户在玩这个游戏之后,运营商需要不断的提供更新和各种在线服务。

·社区关系专员:同上,属于人力成本的范畴。同其他方面的花销相比,这方面几乎可以忽略不计。

·开发团队:人力成本,这方面花费的真正大头在核心成员和天才制作人的薪资上。

·管理:管理方面花费的成本,这方面成本较少。

·用户帐号管理:发行成本的一部分,但也属于运营的范畴。至于成本几乎可以忽略不计。

·办公室、电脑、家具:这方面是大头,不过这次花费之后,开发下部游戏时基本上花费就不需要或者很少花费了。

·带宽:发行成本的一部分,但也属于运营的范畴。成本也是极高的,当然各地可能都不一样。

·网管:发行成本的一部分,同样属于运营成本的范畴。

·其他杂费:杂七杂八的一些费用,包括水电费、燃气费、可能还会包括买咖啡和茶叶的钱。

·宣传、广告和推广的费用:属于运营成本。应该说最好的宣传方法就是广告,但各种广告在花费上都不尽相同,这个就不细说了。

·客户端:制作游戏客户端、点卡、充值卡、印制游戏说明书、游戏包装、游戏赠品一类的成本。

4、需求分析:第四步,撰写需求分析书。这包括以下三个方面:

1)、美工需求:撰写美工需求分析书,内容包括需求图、工作量等。其中工作量需要以天来计。内容具体如下:

·场景:包括游戏地图、小场景等方面。

·人物:包括玩家角色、重要NPC(玩家队友、提供任务的NPC、主线剧情NPC等)、次要NPC(路人、村民等)、怪物、BOSS等。

·动画:动画方面估计每个公司的需求都不尽相同。如果公司能力有限,动画的制作可以考虑外包的方式。

·道具:主要需要考虑是否采取纸娃娃系统。

·全身像:人物的全身像方面。

·静画&CG:游戏中可能出现的静画和CG的需求。没有则不需要写。

·人物头像:人物的头像制作需求,其中包括人物的表情方面,包括喜、怒、哀、乐、悲等多种表情。

·界面:界面的需求,包括主界面、各项子界面、屏幕界面、开头界面、END界面、保存和载入界面等方面。

·动态物件:包括游戏中可能出现的火把、光影等方面。

·卷轴:又称为滚动条。根据游戏的情况来定具体的需求。

·招式图:根据游戏开发的具体情况决定是否有此需求。

·编辑器图素:各种编辑器的图素需求,例如关卡编辑器、地图编辑器等方面。

·粒子特效:3D粒子特效的需求。

·宣传画;包括游戏的宣传画、海报等方面的制作需求。

·游戏包装:游戏客户端的封面包装的制作。

·说明书插图:游戏说明书内附插图的制作需求。

·盘片图鉴:游戏客户端盘片上的图鉴的制作需求。

·官方网站:游戏官方网站的制作需求。

2)、程序需求:撰写程序需求分析书,内容具体如下:

·地图编辑器:包括编辑器的功能需求、各种数据的需求等。

·粒子编辑器:关于粒子编辑器的需求。

·内镶小游戏:包括游戏内部各种小游戏的需求。

·功能函数:包括游戏中可能会出现的各种程序功能、技术参数、数据、碰撞检测、AI等方面的需求。

·系统需求:包括升级系统、道具系统、招式系统等系统导入器的需求。

3)、策划需求

·策划的分工:包括剧本、数值、界面、执行等方面。

·进度控制:要时刻注意时间和开发进度的控制,需要写一个专门的项目进度表。

·例会:项目会以里程碑的形式呈现。当完成一个里程碑后,或者到达固定日期时,需要召开例行会议,除了成员彼此交流外,还需讨论开发中遇到的困难,进度是否有拖延等问题。

二、组织阶段:其次,是项目组织阶段。

1、确定日程:确定游戏开发的日程和进度安排。包括以下几个方面:

1)Demo版本阶段

·前期策划:前期策划和项目的规划。

·关卡设计:关卡设计阶段。

·前期美工:前期的美工制作。

·后期美工:后期的美工制作。

·程序实现:程序的实现,包括编码等。

2)Alpha版本阶段

·内部测试:主要是测试和完善各项功能,看一看是否有重大BUG。

3)Beta版本阶段

·外部测试:进一步测试和完善各项功能,并预备游戏的发行。

4)Release版本阶段

·游戏发行:项目完成阶段,开始正式的发行游戏。

5)Gold Release版本阶段

·开发补丁:开发游戏的补丁包、升级版本,以及 各种官方插件等。

2、确定人员:确定各个项目所需的人员。包括策划、程序、美工、测试、音乐、运营等方面。

3、分配任务:分配各个人员的具体的开发任务。

4、撰写策划书:正式撰写游戏策划书。

三、开发阶段:其三,是项目开发阶段。

作为策划来说,此阶段主要需做到同各方面保持顺畅的沟通,并处理各种游戏制作中的突发事件。其中需要做到与同事的沟通、同主管的沟通、同领导和老板的沟通等。

四、控制阶段:最后,是项目控制阶段。

1、时间

1)、成本控制:需要注意到开发成本的控制,包括服务器、客服、场租、人工(社区关系专员、开发团队、管理)、设备(办公室、电脑、家具等)、带宽、网管、宣传、广告和推广的费用等方面。

2)、市场变化:需要注意市场的因素。

·发行档期:需要注意发行档期,要赶在暑假和寒假之前发行。
·盗版因素:必须时刻注意盗版、私服等因素对游戏发行的影响。

3)、竞争对手的因素:需要时刻注意竞争对手的情况。毕竟,知己知彼,才能百战不殆。

2、品质

由于开发人员的水平大都参差不齐,所以必须根据制作人员的总体水平,决定作品的品质。既不能要求太高,亦不能要求太低,需要折中考虑。

3、突发事件

例如,老板的突击检查、项目投资人的突然撤资等,这些都必须全盘考虑。

4、控制成本

包括时间、品质等方面的成本控制。

程序员从初级到中级的10个秘诀

#1: 学习另一门语言

其实你学的是哪一门语言并没有关系,但是学习另一门语言(不管你已经了解多少种语言)将把你打造为更好的程序员。能学会一门与你日常使用的语言风格迥异的语言则更佳。打个比方,如果你是C#程序员,学习VB.NET或者Java对你的帮助就没有学习Ruby或者Groovy大。

我说“学另一门语言”的意思是要真正学会它。学习一门语言包括三个领域的知识:语法、内置操作符和库,以及“如何使用”。前面两个简单;我认为一名有经验的程序员,根据语言的不同,能在半小时到几小时内掌握足以维护代码的语法知识。操作符和库只不过是知识逐步积累的过程,你什么时候想清楚要了解什么了,再去查阅参考材料也不迟。只有第三项,“如何使用它”
- 要花上你几个月的时间去跟这门语言打交道,真正的奇迹就在此发生。我建议用这门语言的风格去做一个适合该语言的项目。

真正学会了另一门语言之后,我敢保证你的程序员水平一定会突飞猛进。

#2: 学习先进的搜索技术、手段和及策略

作为一名好的程序员,不仅仅是技能的问题了,而是你寻找信息的技巧,这个趋势越来越明显。对大部分人而言,仅仅输入“现代语言及开发框架”,这都是泛泛之谈,记不住多少的。因此,你完成工作的能力通常取决于你的检索能力。不幸的是,了解到如何找到准确而高质量的信息可不仅仅是跑到TechRepublic来找答案,或者在你选好的搜索引擎上敲几个字那么简单。

“技术(Techniques)”、
“手段(tactics)”和“策略(strategies)”看起来是一回事,实际上并非如此。你需要学会的技术是掌握你喜爱的搜索引擎的高级搜索系统;你需要了解诸如布尔操作符,如何过滤结果(像“非”关键字,域限制等等),关键字的词序扮演什么角色,等等。一句话,RTFM(Read
The Fucking Manual,读那些他妈的手册)吧。

你应该学会这些手段,诸如如何接近特定的搜索,以及了解自己实际上想查些什么。查错误很容易 — 只需查出错代码即可 —
但是许多搜索的关键字选择要困难得多。

至于策略,你需要学会的东西,包括像应该使用哪种搜索引擎(提示:普通的搜索引擎不一定就是最佳选择),
使用普通搜索引擎前应该访问哪个网站,甚至是应该到哪个论坛去寻求帮助,等等。

#3: 帮助别人

教别人始终是学习一切东西的最好方法之一。相对而言,由于你在开发领域还是个新手,认为自己没什么可教给人家的,这可以理解。但这毫无意义。记住,你所学到的一切都是你从别人或别处学到的;因此请尝试一下,成为另外一个人要请教的“别人”。每天尽量花一点时间试着回答TechRepublic上的问题,其他网站的亦可。读读其他会员的回答,你也可以学到很多东西。

#4: 有耐心,常练习

研究表明,要成为一名“专家”,需要花费10年,或者10000到20000小时的刻意练习时间。 真的很久。还有,成为专家不尽然就是执行10年同样的任务;通常这意味着要在特定领域内执行广泛的任务。需要花费大量的时间和精力才能成为”专家”;做几年程序员是不够的。想在30岁左右成为一名高级软件开发工程师 ?要么尽早接受教育/培训,要么你得愿意在闲暇时间进行大量的工作、阅读和练习。我从高中开始编程,还牺牲了许多休息时间去跟踪行业发展、学习新技能等等。结果,我获得中级和高级程序员的时间就比我的大部分同事都要早得多,随着时间的推移,这些就转化成为很多的金钱。

#5: 对教条拒之门外

是时候开诚布公了:也许初级程序员了解的东西还不足以说出做某件事情有一种最好的方式。尊重朋友或者权威的观点是好的,但直到你更有经验之前,不要把他们的观点说成是你自己的。很简单,如果你所了解的不足以让你独立地找出这些东西来,你又怎么会认为你知道哪一位“专家”是对的呢?话是难听了点,不过请相信我;由于受某些愚蠢建议的蛊惑,或者追随某些根本不知道自己在说些什么的所谓专家,白白把自己的职业生涯耽搁了几年,这样毛头小伙程序员,我见过多了。 这一点有一个很好的例子,就是面向对象结构的滥用。 比如说,许多初级者读了一些有关面向对象的信息后,突然间,他们那简单的应用程序的类图看起来就像埃菲尔铁塔一样了。

#6: 深入学习一点先进理念

成为一名中级程序员,很大一部分是要在代码里面体现出一些所擅长的概念。就我而言,是多线程/并行性,
是正则表达式,以及如何对动态语言进行变化(后两个在我离Perl渐行渐远后开始退化)。这是如何发生的?多线程和并行处理是因为我读了相关文章,觉得它看起来很有趣,然后再自己把它弄清楚了;然后我就一直使用这些技术来写应用。我做过一件工作,是用Perl写的,里面运用了大量的正则表达式。我也用一个过程引擎模板和内置数据库系统写过我自己的电子商务引擎;那时我几乎花了2年时间在这上面。

找到真正令你着迷的东西。也许是图像处理,也许是数据库设计,等等。即便你是一个入门级的程序员,也要尝试一下成为某一自己所关注领域的专家。这会让你相当快速地进入到中级水平,一旦你到了那个水平,你的专家之路也走到一半了。

#7: 学习你的领域里面的基本理论

写出“Hello
World”,跟理解那些字是如何显示到屏幕上的是两码事。通过学习支撑你所从事的工作的“基础/底层工作(groundwork)”,你会变得更加在行。为什么?因为你会理解事物为何会以这种方式运作,当东西坏了就能知道是哪里的问题,等等。通过掌握工作的底层机制,你变会得更出色。

如果你是Web程序员,读读HTTP RFCHTML规范。如果你使用代码生成器,好好看看它生成的代码;如果你使用数据库工具,看看它生成的底层SQL语句,不一而足。

#8: 看看高级程序员的代码

在工作中看看高级程序员写的代码,然后问一问事情是如何以某种特别的方式完成的,为什么?可能的话看看开源的项目。甚至即使其他程序员没有最好的编程习惯,你也会学到许多编程经验。当然,要小心别学到坏习惯。我的意思是说不要生搬硬套人家的东西;你要能领会到哪些是能行的通的,哪些是有道理的,然后再模仿人家。

#9: 学习好的习惯

愚蠢的变量名,糟糕的缩进习惯以及其他一些凌乱的迹象就是一个没有经验的程序员的最好标记。一个程序员在学会如何编程时,却经常没有被传授到那些不那么有趣的细节,像代码格式编排
。甚至尽管学习这些东西并不会令你的代码更好,也不会令你成为更好的程序员,它也会确保你不被同事视为入门级的程序员。甚至即使某人是高级程序员,如果他的变量是以他那97只猫的名字来命名,或者其函数叫做“doSomething()”的,他们看起来也不像是知道自己在干什么的人。而且会令其代码在过程中更难以维护。

#10: 要玩的开心

想要痴迷于单调乏味的工作?痛恨工作吧。要想升级为中级程序员可不仅仅是为了拿到不断增长的工资不达目的誓不罢休,而是要真正享受工作。如果你不喜欢自己的工作,且还是初级程序员,你怎么会认为成为中级或高级程序员情况就会有所好转呢?换工作或改职业吧。反过来说,如果你喜爱所从事的工作,那就好!只要你坚持下去,我保证你能成为一名更好的程序员。

前人经验总结

“又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经历沉淀或者经验提炼,希望对所有的软件工程师们有所帮助,早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议,前面几点旨在确定大的方向,算是废话吧。

谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员:PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。

1、分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“重要的道理明白太晚将抱憾终生!”所以放在每一条,让刚刚毕业的朋友们早点看到哈!

2、一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,“我刚毕业,还不知道将来可能做什么?”,“跟着感觉走,先做做看”。因为,这样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域,将来自立门户?还是先在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。

3、软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在MM比较多的团队中。在软件项目团队中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都要有技术基础。算我孤陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个“高学历的牛人”(非技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想而知了。

4、详细制定自己软件开发专业知识学习计划,并注意及时修正和调整(软件开发技术变化实在太快)。请牢记:“如果一个软件开发人员在1、2年内都没有更新过自己的知识,那么,其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我们:另外的那8小时如何使用将决定你的人生成败!本人自毕业以来,平均每天实际学习时间超过2小时。

5、书籍是人类进步的阶梯,对软件开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在工作中能遇到“世外高人”,并不厌其烦地教你。对于花钱买书,我个人经验是:千万别买国内那帮人出的书!我买的那些家伙出的书,!00%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上都很难卖掉。“拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧,才算是真正拥有了它。

6、不要仅局限于对某项技术的表面使用上,哪怕你只是偶尔用一、二次。“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发Windows应用程序,看看Windows程序的设计、加载、执行原理,分析一下PE文件格式,试试用SDK开发从头开发一个Windows应用程序;用VC++、 Delphi、Java、.Net开发应用程序,花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码;除了会用J2EE、 JBoss、Spring、Hibernate等等优秀的开源产品或者框架,抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。试着这样做做,你以后的工作将会少遇到一些让你不明就里、一头雾水的问题,因为,很多东西你“知其然且知其所以然”!

7、在一种语言上编程,但别为其束缚了思想。“代码大全”中说:“深入一门语言编程,不要浮于表面”。深入一门语言开发还远远不足,任何编程语言的存在都有其自身的理由,所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是:用面对对象工具开发某些关键模块时,为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、Delphi)进行系统体统结构设计时,为什么不可以参考来自Java社区的IoC、AOP设计思想,甚至借鉴像Spring、Hibernate、JBoss等等优秀的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时,为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须以个人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。

8、养成总结与反思的习惯,并有意识地提炼日常工作成果,形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知,对软件开发人员而言,有、无经验的一个显著区别是:无经验者完成任何任务时都从头开始,而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结论不应该被局限在软件开发领域、可以延伸到很多方面)。这并不是说,所有可复用的东西都必须自己实现,别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是,最好还是自己实现,这样没有知识产权、版权等问题,关键是自己实现后能真正掌握这个知识点,拥有这个技能。

9、理论与实践并重,内外双修。工程师的内涵是:以工程师的眼光观察、分析事物和世界。一个合格的软件工程师,是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作,但从软件工程师这个角度来看,这只是外在的东西,并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题,才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题,并在具体实践中验证和修正这些思想与方式,最终形成自己的理论体系和实用方法论。

10、心态有多开放,视野就有多开阔。不要抱着自己的技术和成果,等到它们都已经过时变成垃圾了,才拿出来丢人现眼。请及时发布自己的研究成果:开发的产品、有创意的设计或代码,公布出来让大家交流或者使用,你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具,5、6年之后的今天,还是那个样子,今天流行的好多Windows系统工具都比自己的晚,但进化得很好,且有那么多用户在使用。并且,不要保守自己的技术和思想,尽可能地与人交流与分享,或者传授给开发团队的成员。“与人交换苹果之后,每个人还是只有一个苹果;但交换思想之后,每个人都拥有两种思想”,道理大家都懂,但有多少人真正能做到呢?

11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品,千万不要因为没有钱赚而不做。网络早已不再只是“虚拟世界”,网上有很多的开源项目、合作开发项目、外包项目,这都是涉猎工作以外的知识的绝好机会,并且能够结识更广的人缘。不要因为工作是做ERP,就不去学习和了解嵌入式、实时、通信、网络等方面的技术,反过来也是一样。如果当他别人拿着合同找你合作,你却这也不会,那也不熟时,你将后悔莫及。

12、书到用时方恨少,不要将自己的知识面仅仅局限于技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明: “对于一个有一定基础的人来说,他只要真正肯下功夫,在6个月内就可以掌握任何一门学问。”教育心理学界为感谢西蒙教授的研究成果,故命名为西蒙学习法。可见,掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识,有空花时间看看,韬光养晦、未雨绸缪。

13、本文的总结与反思:不要去做技术上的高手,除非你的目标如此。虽然本文是关于提高软件开发知识的建议,做技术的高手是我一向都不赞同的。你可以提高自己的专业知识,但能胜任工作即止。提高软件知识和技术只是问题的表面,本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理,可以很容易地延伸、应用到生活的其它方面。在能胜任工作的基础上,立即去涉猎其它领域的专业知识,丰富自己的知识体系、提高自己的综合素质,尤其是那些目标不在技术方面的朋友