源代码版本控制
  这是软件开发中一个十分重要的工程手段,几乎是必须的一个Process(过程)。很多作坊式的开发团队在采用软件工程的一些方法的时候,第一个要进行改进或增加的,往往是这个过程。对初学者学习而言,建议在开始进行实践小项目的阶段即进行源代码版本控制,因为这在以后的工作中,是一定会用到的。
  源代码版本控制的基本原理如下:
  在服务器端建立该项目的数据库,并保存你选定的项目源文件的第一个版本。客户端任一用户要获得某源文件的修改权利,需进行check out操作。之后客户端一般每完成一个无编译错误的版本想保存的时候,进行check in操作,将当前版本保存在服务器端上并成为新版本(注意,不是覆盖以前的哟)。任一客户端可以方便地得到服务器上的文件的任意版本(如果有权限的话)。一般还实现了一个重要的功能是版本比较,任一客户端可以利用版本控制工具对某文件的不同版本进行版本比较,它会标记出不同版本的同名文件的不同点,可以轻易地看出版本内容的演化,这一招很常用。下面介绍一下我接触过的三种版本控制工具(也是国内用得比较多的):
  VSS:Visual Sourcesafe
  这是微软Visual Studio自带的源代码版本控制工具,它大的特点是易安装(与Visual Studio集成在一起,装VC/VB的时候顺便搞定,不用别外费工夫),使用简单(服务器端设置相对容易,一般个人稍加摸索可以轻松搞定,客户端更是只管check in/out),基本功能完善,版本比较很直观(我喜欢)。它的特点是某人check out了某版本以后,别人将无法对此版本check out,也是说同一时间只有一个可以修改某一个文件,这样避免了不同的人对同一文件的修改造成彼此冲突(注:可通过设置服务器端实现多人check out,但几乎不会这样做,因为那样失去了VSS的一个重要的功能)。另,VSS可集成于VS环境,但根据我的经验,直接在VC里对版本的check操作,常常不生效,所以好还是到VSS程序里去进行check操作。补充:单机上也可以使用VSS,这样的好处是在对当前某些文件进行了误操作或大规模地误修改之后,可以恢复到近的无错误的版本,大程度地挽回损失。VSS实际应用较普遍,如果你是走Visual Studio路线的话,一定要用一下。
  CVS:Concurrent Versions System
  这个也是一个大名鼎鼎的开源的版本控制工具,主要活跃在UNIX世界。CVS我使用不多,一般而言好像功能比较偏向于命令行方式(UNIX下开发很多人也都使用着命令行方式)。当然,Windows下面也实现了几个版本的CVS,也可以集成于VS,好像还有一个可以挂接在IE上的,我没试过。的开源项目管理网站sf.net也是用的CVS,如果你要和全世界的程序员一起协作开发,CVS是必须要安装的。在JAVA的世界里,也是以CVS为主。
  Rational Clearcase
  这个工具比较上档次了,Rational公司(现在是IBM)的出品,价格昂贵。我初参加工作的时候用过一小段时间,简单谈一下。这个工具的特点是复杂,安装及设置十分复杂,我的印像中客户端甚至不得不加入到NT域里面去,导致我在本机的权限都不够,安装新程序都很麻烦,很郁闷(不知道是不是我们公司的相关人员安装设置错了,想来应该是这样,但其复杂性可见一斑)。对使用而言,它有一个功能挺有用的,是它能够根据你每次check的版本号,自动生成版本树(一个树状图表),你可以清晰地看到版本的演化过程。所以严格地说,像CVS/Clearcase这样的才真正称得上“版本”控制,VSS还太勉强。Clearcase的功能十分强大,我不详述了(我还不想出书),较适于大型软件公司实施软件配置管理时采用。虽然它的名气十分之响亮,但我不知道国内有多少公司在真正使用正版的Clearcase这样的工具,想来应该是十分之少。
  OpenGL
  OpenGL至今颇有一点英雄落寞的味道,这一套标准是实现得如此之好,以至于曾经一度成为游戏界面华丽的标准。它的低落也是一个必然,毕竟在微软的强力打压下鲜有不挫败的。但它曾经能够给微软带来如此的压力,至今也依然在工业界被广泛使用,大多数游戏/显卡依然保留着对它的支持(CS里我喜欢的还是OpenGL)。而它的性能在某些方面与D3D比较,依然占着上风。不幸的是DirectX在不停地向前发展,而它,几乎止步不前了,前景并不光明。OpenGL目前在工业领域应用较为广泛,它的的矢量图的操作性能,华丽的色彩,在专业的图形图像处理领域表现突出。游戏中使用相对以前而言则是越来越少。新近听说微软的新操作系统Vista对OpenGL进行了极大的打压,不但性能上折扣,支持的版本也只到1.4(新版本好像是2.0),不知道后如何收场,拭目以待。
  DirectDraw&D3D
  大凡像样的2维Windows游戏,几乎都是采用此技术来实现显示的。DirectDraw有两种模式:全屏和窗口。其中全屏应用更多一些。在全屏下,DirectDraw有一个十分的“换页”技术,即在两个显示页面之间用“交换”来实现显示刷新,这个速度十分地快,只是一个显存内一个指针的交换,比你用BitBlt复制一屏的像素快太多太多,游戏的高效的动画效果大多源于此技术。
  DirectDraw主要用于娱乐领域和一些实时显示要求较高的场合,如医疗图像。D3D是目前大多三维游戏的标准采用,我没钻研过,不敢多言。它的效果嘛,玩玩游戏知道了:)
  UML:Unified Modeling Language,多译为统一建模语言
  这个语言是一种图形语言,主要是作为设计时建模的一种标准的图形模型,便于程序员与程序员、程序员与客户、设计员与代码员之间的沟通,同时它也帮助设计人员将头脑中的基于程序代码的对程序功能的理解形成文档,便于理清头绪,进行下一步编码的工作。换言之,设计过程的产品,可以表现为一些文本文档,或者一些框架代码,或者一些伪代码,但比较标准通用的,是表现为一堆UML图。UML包括动态图和静态图两大类,其中静态图中的类图为常用。很多人初学时不知道该怎么做设计,写小软件时常常没有设计过程,其实很简单,把软件的类图画出来好了。学做设计时未必要找一个像Together或者Rational Rose一样的巨无霸。用一些简单的可以做UML图的工具好,专门用来画UML图的小工具很多,网上容易找。补充一点:画UML图不要面面俱到,不要什么都画,突出重点方便理解好,甚至使用不规范的记号也不要紧(当UML的功能是草稿的时候)。