计算机科学

来自中文百科,文化平台
跳转至: 导航搜索
超级电脑-走鹃(Roadrunner),是一套由IBM为美国能源部(Department of Energy)所属的国家核能安全管理部(NNSA)创建的超级电脑
天河二号超级计算机,国防科技大学研制,中国

  计算机科学英语:Computer Science,有时缩写为CS),是对计算机进行科学研究的传统称谓,是系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科。主要研究计算技术和执行特定任务的高效算法,是一门包含各种各样与计算和信息处理相关主题的系统学科。从抽象的算法分析、形式化语法等,到更具体的主题如编程语言程序设计软件硬件等。

  计算机科学是在20世纪最后的三十年间兴起成为一门独立的学科,根植于电子工程数学语言学,是科学工程艺术的结晶。至今,在计算机科学内已经衍生了许多分支,每一个分支都针对不同类别的问题进行深入研究。其中一些,比如计算机图形学强调特定结果的计算,而另外一些,比如计算复杂性理论是学习计算问题的性质。还有一些领域专注于挑战怎样实现计算。比如编程语言理论学习描述计算的方法,而程序设计是应用特定的编程语言解决特定的计算问题,人机交互则是专注于挑战怎样使计算机和计算变得有用、可用,以及随时随地为人所用。

历史

  早期计算机科学创建的基础得追溯到现代电子计算机的发明。那些计算固定数值任务的机器,比如算盘,自古希腊时期即已存在。Wilhelm Schickard在1623年设计了世界上第一台机械计算器,但没有完成它的建造。布莱兹·帕斯卡在1642年设计并且建造了世界上第一台可以工作的机械计算器Pascaline。Ada Lovelace协助查尔斯·巴贝奇维多利亚时代设计了差分机。1900年左右,打孔机问世。然而以上这些机器都局限在只能完成单个任务,或者充其量是所有可能任务的子集。

  到了20世纪40年代,随着更新更强大的计算机器被发明,术语“计算机”开始用于指代那些机器而不是它们的祖先。计算机的概念变得更加清晰,它不仅仅用于数学运算,总的来说计算机科学的领域也扩展到了对于计算的研究。20世纪50年代至20世纪60年代早期,计算机科学开始被确立为不同种类的学术学科。世界上第一个计算机科学学位点由普渡大学在1962年设立。随着实用计算机的出现,很多计算的应用都以它们自己的方式逐渐转变成了研究的不同领域。

  虽然最初很多人并不相信计算机可能成为科学研究的领域,但是随后的50年里也逐渐被学术界认可。IBM公司(International Business Machines的缩写)是那段时期计算机科学革命的参与者之一。在那段探索时期,IBM发布的IBM 704以及之后的IBM 709计算机被广泛使用。“不过,使用IBM电脑工作仍然是一件很沮丧的事情。如果你弄错了一条指令中的一个字母,程序将会崩溃,而你也得从头再来。”

  到了20世纪60年代后期,计算机科学学科得到了长足发展,这在当时是一件很寻常的事情。

  随着时间的推移,计算机科学技术在可用性和有效性上都有显著提升。现代社会见证了计算机从仅仅由专业人士使用到被广大用户接受的重大转变。最初,计算机非常昂贵,要有效利用它们,某种程度上必须得由专业的计算机操作员来完成。然而,随着计算机变得普及和低廉,已经几乎不需要专人的协助,虽然某些时候援助依旧存在。

20世纪30年代中期

  英国数学家艾伦·麦席森·图灵(Alan Mathison Turing)和美国数学家E.L.波斯特几乎同时提出了理想计算机的概念(图灵提出的那种理想机在后来的文献中称为图灵机)。

40年代

1946年2月14日,世界上第一台电脑ENIAC在美国宾夕法尼亚大学诞生

  数字计算机产生后,计算技术(即计算机设计技术与程序设计技术)和有关计算机的理论研究开始得到发展。这方面构成了现在所说的理论计算机科学。至于图灵机理论,则可以看作是这一学科形成前的阶段。至于“计算机科学”一词则到60年代初才出现,此后各国始在大学中设置计算机科学系。学科内容 计算机科学是一门年轻的科学,它究竟包括哪些内容,还没有一致公认的看法。一般认为,计算机科学主要包括理论计算机科学、计算机系统结构、软件工程的一部分和人工智能。理论计算机科学 理论计算机科学是在20世纪30年代发展起来的。40年代机电的与电子的计算机出现后,关于现实计算机及其程序的数学模型性质的研究以及计算复杂性(早期称作计算难度)的研究迅速发展起来,形成自动机论、形式语言理论、程序设计理论、算法设计与分析和计算复杂性理论几个领域。

50年代

  50年代以来,计算机的性能在计算速度和编址空间方面已提高了几个数量级。但大部分是通过元件更新而获得的。在系统结构方面基本上仍是属于40年代后期形成的存储程序型,即所谓诺伊曼型机器。这种结构的主要特点是它属于控制流型。在这种结构中,一项计算先做什么后做什么是事先确定了的,程序中指令的顺序是事先确定了的。为了在计算机的性能方面取得大的进展,需要突破这种旧的形式。计算机系统结构方面的重要课题之一,是探索非诺伊曼型机器的设计思想。在非诺伊曼型机器中,有一种是70年代初提出的数据流机器(又名数据驱动机器)。美国、苏联和英国都已制成这种机器。这种机器的特点是,在一项计算中先做什么后做什么不是事先确定,所执行的指令是动态排序的。排序的原则是操作数已准备就绪的先做,因而称作数据驱动机器。这种类型的机器更便于实现并行计算。软件工程 程序设计在相当长的时间内是一种类似“手艺”而不是类似现代工程的技术。

60年代

  60年代以来出现了大程序。这些大程序的可靠性很难保证。到60年代后期,西方国家出现了“软件危机”。这是指有些程序过于庞大(包含几十万条以至几百万条指令),成本过高而可靠性则比较差。于是提出了软件工程概念,目的在于使软件开发遵守严格的规范,使用一套可靠的方法,从而保证质量。

  现代软件工程的方向是形式化和自动化,而形式化的目的在于自动化。这里所说的自动化就是将程序设计中可以由机器来完成的工作,尽量交给机器去做。中心课题之一是程序工具和环境的研究。程序工具是指辅助人编程序的程序,如编译程序、编辑程序、排错程序等;程序环境则是指一套结合起来使用的用来辅助人编程序的程序工具。

  人工智能 用计算机模拟人的智能,特别是模拟思维活动的技术及其有关理论。由于人的思维活动离不开语言,而且人对于某一类问题进行思索和探索解法时,总是需要以关于这一类问题的基本知识(专业知识或常识)作为出发点。于是,知识表示和机器对自然语言的理解就构成人工智能的两个重要领域。

  在计算机出现的初期,人们曾寄希望于机器的高速度,以为在模拟人的思维时,机器可能用它的高速度来换取它所不具有的创造性思维。但通过“组合性爆炸”问题(“组合性爆炸”是指一些组合数学中的问题,在参数增大时,计算时间的增长率时常是指数的,甚至高于指数),人们认识到,单纯靠速度不能绕过组合性爆炸所产生的障碍。有无办法来克服这种困难,尚有待于进一步研究。

  计算机是由物理元件构成的,迄今主要是由电子元件构成的。因此,物理学的一些分支和电子工程便构成计算机科学的基础。同时,计算机科学在一定意义上是算法的科学,而算法是一个数学概念。因此,数学的某些分支如算法理论(即可算性理论,又名递归函数论)也构成计算机科学的基础。但计算机科学已发展成为一门独立的技术科学,既不是电子学的一个分支,也不是数学的一个分支。这是就这个学科的整体而言。

  至于理论计算机科学,由于它可以看作是计算机科学的数学基础,在一定意义上,可以看作是数学的一个分支。另一个与计算机科学有密切关系的学科是控制论。控制论作为应用数学方法来研究机械系统和生命系统中的控制和通信现象的学科,同计算机科学有内容上的交叉,但后者不是它的一部分。自从40年代制成数字计算机以来,计算机的性能有了很大的提高。但在系统结构方面变化不大。一些计算技术发达国家正在研制新一代的计算机。这种计算机的系统结构将与过去40年的机器很不相同,所用的程序设计语言也将是新型的。计算机科学将研究由此出现的新问题,如有关并行计算的问题。

  对计算的数学性质的研究大都还是关于串行计算的,对并行计算性质的研究自70年代才发展起来,预计将成为计算机科学的中心课题之一。另一个问题是程序设计的自动化问题。在程序设计方面,明显的趋势是将机器能做的尽量交给机器去做。程序环境的研究构成了软件工程的一个中心课题。形式化方法越来越受到重视,因为它是提高自动化程度所必需的。

  早期,虽然英国的剑桥大学和其他大学已经开始教授计算机科学课程,但它只被视为数学或工程学的一个分支,并非独立的学科。剑桥大学声称有世界上第一个传授计算的资格。世界上第一个计算机科学系是由美国的普渡大学在1962年设立,第一个计算机学院于1980年由美国的东北大学设立。现在,多数大学都把计算机科学系列为独立的部门,一部分将它与工程系、应用数学系或其他学科联合。

90年代

集群式超级计算机的复杂布线

  集群结构的超级计算机在上世纪九十年代末才出现,但是发展非常迅速。目前TOP500的统计中,排名前列的相当大一部分都是集群结构的超级计算机。此次排名超级计算机世界第一的"天河二号"超级计算机也是集群结构的超级计算机。而我国研制的超级计算机上一次名列榜首还是两年半之前的"天河一号A"超级计算机。

  至此,大概可以看出超级计算机发展至今一个追求,那就是在单个CPU性能有限的情况下,如何采用尽可能多的CPU来提高运算速度。理论上,在单个CPU性能相当的情况下,超级计算机采用越多的CPU,其运算速度越快。但实际情况并不是1+1=2,集群结构的超级计算机基于网络进行分布式计算,每个CPU的效能并不是100%发挥出来的,存在一个效率的问题。这就是为什么我们介绍"天河二号"运算速度时,会有两个速度,一个是峰值计算速度,另外一个是持续计算速度,后者才是实测性能。

  由于现在的集群结构超级计算机采用的都是大批量生产的通用CPU,如"天河二号"使用的CPU就是英特尔Xeon E5 2692,其姐妹版Xeon E5 2690的市场报价是1.2万元人民币。研制一款超级计算机,真正的核心技术,是其架构设计,即网络系统和软件系统,如何让所安装的上万枚CPU的性能尽可能发挥出来。

“天河二号”超级计算机

  “天河二号”采用了384000颗12核的Intel Xeon E5-2692处理器,48000颗Intel Xeon Phi 31S1P协处理器,4096颗国产Galaxy FT-1500前端节点处理器。处理器数量规模比起第二名的"Titan"、以及上一代的"天河一号A"高出了一个数量级,这可见"天河二号"在架构设计方面的难度。

  超级计算机的水平,在不同的CPU/GPU的品种和数量的情况下,从效率的角度来看无疑是一个体现水平的指标。“天河二号”的峰值速度为54902.4TFlop/s(每秒万亿次浮点运算),持续速度为33862.7 TFlop/s,可以算出,其效率约为61.7%,而"Titan"的这两个数值分别为27112.5和17590,计算下来,效率约为64.9%,再和"天河一号A"的53.3%与"Jaguar"的75.5%相比,我们可以看出,无论是横向比较还是纵向比较,"天河二号"的效率相比有了较大幅度的提高,与国外先进超级计算比相比,差距已经大为缩小。

  同时,还必须指出的是,“天河二号”采用的Intel Xeon Phi 31S1P协处理器的一个特点是浮点运算效率较低,其在运行浮点运算基准测试linpack时,实际性能只相当于理论最大运算性能的60%左右。从这样的角度来看,"天河二号"的网络系统和软件系统的水平是相当的高,能够在300多万颗核心组成的庞大系统,在协处理器本身效率较低的情况下达到了这样的效率。要知道,在使用了比起"Titan"多出一个数量级的核心的情况下,核心越多,系统会越复杂,相互之间的协作就会越困难,瓶颈也会越多。

  在单位运算能力功耗上,以"天河二号"的峰值速度54902.4TFlop/s和最大运行功耗17808kW,可以算出其单位运算能力功耗为3.1 TFlop/skW,而"Titan"的这两个数值分别为27112.5和8209,计算下来为3.3 TFlop/skW。从这两个数值来看,“天河二号”比起"Titan"还是略有差距的。

  总的来说,“天河二号”在CPU核心数量达到百万数量级的情况下,还可以在实际运算效率、功耗效率两个指标上,达到国外先进超级计算机的水平。这说明我国超级计算机的核心技术已迈入世界领先行列。"天河二号"并不仅仅在于运算速度世界第一。

  最后需要再强调一下,集群式超级计算机的核心技术是架构设计,是如何安装尽可能多的CPU,并让所有CPU的工作效率尽可能地高;CPU本身并不是超级计算机的核心技术。如果真有必要,当然也可以采用国产CPU,付出的代价不外乎是CPU安装数量更多、效率、经济性和稳定性降低,并不会达不到所需的运算速度。其实,国内在去年就已经研制成功采用全国产CPU的"神威蓝光"超级计算机。


计算机科学研究的课题

  计算机科学研究的课题是:

    计算机程序能做什么和不能做什么(可计算性理论);

    如何使程序更高效的执行特定任务(算法和复杂性理论);

    程序如何存取不同类型的数据(数据结构和数据库);

    程序如何显得更具有智能(人工智能);

    人类如何与程序沟通(人机互动和人机界面)。

  计算机科学的大部分研究是基于“冯·诺伊曼计算机”和“图灵机”的,它们是绝大多数实际机器的计算模型。作为此模型的开山鼻祖,邱奇—图灵论题(Church-Turing Thesis)表明,尽管在计算的时间,空间效率上可能有所差异,现有的各种计算设备在计算的能力上是等同的。尽管这个理论通常被认为是计算机科学的基础,可是科学家也研究其它种类的机器,如在实际层面上的并行计算机和在理论层面上概率计算机、oracle 计算机和量子计算机。在这个意义上来讲,计算机只是一种计算的工具:著名的计算机科学家艾茲格·迪杰斯特拉(Edsger Wybe Dijkstra)有一句名言“计算机科学之关注于计算机并不甚于天文学之关注于望远镜。”

  计算机科学根植于电子工程、数学和语言学,是科学、工程和艺术的结晶。它在20世纪最后的三十年间兴起成为一门独立的学科,并发展出自己的方法与术语。

  早期,虽然英国的剑桥大学和其他大学已经开始教授计算机科学课程,但它只被视为数学或工程学的一个分支,并非独立的学科。剑桥大学声称有世界上第一个传授计算的资格。世界上第一个计算机科学系是由美国的普渡大学在1962年设立,第一个计算机学院于1980年由美国的东北大学设立。现在,多数大学都把计算机科学系列为独立的部门,一部分将它与工程系、应用数学系或其他学科联合。

  计算机科学领域的最高荣誉是ACM设立的图灵奖,被誉为是计算机科学的诺贝尔奖。它的获得者都是本领域最为出色的科学家和先驱。华人中首获图灵奖的是姚期智博士。他于2000年以其对计算理论做出的诸多“根本性的、意义重大的”贡献而获得这一崇高荣誉。

应用计算机科学

  尽管计算机科学(computer science)的名字里包含计算机这几个字,但实际上计算机科学相当数量的领域都不涉及计算机本身的研究。因此,一些新的名字被提议出来。某些重点大学的院系倾向于术语计算科学(computing science),以精确强调两者之间的不同。丹麦科学家Peter Naur建议使用术语"datalogy",以反映这一事实,即科学学科是围绕着数据和数据处理,而不一定要涉及计算机。第一个使用这个术语的科学机构是哥本哈根大学Datalogy学院,该学院成立于1969年,Peter Naur便是第一任教授。这个术语主要被用于北欧国家。同时,在计算技术发展初期,《ACM通讯》建议了一些针对计算领域从业人员的术语:turingineer,turologist,flow-charts-man,applied meta-mathematician及applied epistemologist。三个月后在同样的期刊上,comptologist被提出,第二年又变成了hypologist。术语computics也曾经被提议过。在欧洲大陆,起源于信息(information)和数学或者自动(automatic)的名字比起源于计算机或者计算(computation)更常见,如informatique(法语),Informatik(德语),informatika(斯拉夫语族)。

  著名计算机科学家Edsger Dijkstra曾经指出:“计算机科学并不只是关于计算机,就像天文学并不只是关于望远镜一样。”("Computer science is no more about computers than astronomy is about telescopes.")设计、部署计算机和计算机系统通常被认为是非计算机科学学科的领域。例如,研究计算机硬件被看作是计算机工程的一部分,而对于商业计算机系统的研究和部署被称为信息技术或者信息系统。然而,现如今也越来越多地融合了各类计算机相关学科的思想。计算机科学研究也经常与其它学科交叉,比如心理学,认知科学,语言学,数学,物理学,统计学和经济学。

  计算机科学被认为比其它科学学科与数学的联系更加密切,一些观察者说计算就是一门数学科学。早期计算机科学受数学研究成果的影响很大,如Kurt Gödel和Alan Turing,这两个领域在某些学科,例如数理逻辑、范畴论、域理论和代数,也不断有有益的思想交流。

  计算机科学和软件工程的关系是一个有争议的话题,随后关于什么是“软件工程”,计算机科学又该如何定义的争论使得情况更加混乱。David Parnas从其它工程和科学学科之间的关系得到启示,宣称计算机科学的主要重点总的来说是研究计算的性质,而软件工程的主要重点是具体的计算设计,以达到实用的目的,这样便构成了两个独立但又互补的学科。

人工智能

  这个计算机科学分支旨在创造可以解决计算问题,以及像动物和人类一样思考与交流的人造系统。无论是在理论还是应用上,都要求研究者在多个学科领域具备细致的、综合的专长,比如应用数学,逻辑,符号学,电机工程学,精神哲学,神经生理学和社会智力,用于推动智能研究领域,或者被应用到其它需要计算理解与建模的学科领域,如金融或是物理科学。人工智能领域开始变得正式源于Alan Turing这位人工智能先驱提出了图灵试验,以回答这样一个终极问题:“计算机能够思考吗?”

计算机体系结构

  抽象来说,计算机体系结构是一个系统在其所处环境中最高层次的概念;它确定一台计算机硬件和软件之间的衔接。具体地说计算机体系结构指的是计算机系统设计的观念与架构,描述计算机在实做的设计原则。它确定一个计算机设计的:部件、部件功能、部件间接口。

  并且计算机体系结构着重于“负责了计算机架构的中心功能:计算”的中央处理器(CPU)内部的执行动作与内存的存取。

  注意,不要与处理器领域的微体系结构/微架构(Microarchitecture)相混淆。

计算机工程

  计算机工程(英语:Computer Engineering,简称CE),全称电子和计算机工程。计算机工程师受电机工程学、软件设计、软硬件整合的教育,而不是仅局限于软件或硬件。计算机工程主要包括所有电子计算机的项目,透过计算机科学和电子科学进行一些计算机项目的工程学科。计算机工程为包括所有电子计算机项目的工程,融合计算机科学与电子科学,与电子工程有直接连系。其涵括内容广泛,主要围绕计算机的硬件和软件项目,排解其中的困难、建立项目等。

  计算机工程用途不少,主要为利用计算机化的解困方法来排解一些计算机制造、计算机系统、计算机控制和计算机研究的各种问题。通常软件开发、系统配置、硬件问题等都需要计算机工程。于软件中,计算机工程能够建立软件、更改内容、协助编程等。而于硬件中,计算机工程能够协助进行配置、修复各种硬件。

计算机图形学

  计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。是计算机科学的一个分支领域,主要关注数字合成与操作视觉的图形内容。虽然这个词通常被认为是指三维图形,事实上同时包括了二维图形以及图像处理。计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。

  计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。

  计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。为此,必须创建图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机辅助几何设计有着密切的关系。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。同时,真实感图形计算的结果是以数字图象的方式提供的,计算机图形学也就和图像处理有着密切的关系。

  图形与图像两个概念间的区别越来越模糊,但还是有区别的:图像纯指计算机内以位图形式存在的灰度信息,而图形含有几何属性,或者说更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的。

计算机安全

  计算机安全(computer security)是计算机与网络领域的信息安全(information security)的一个分支。其目的是在保证信息和财产可被受权用户正常获取和使用的情况下,保护此信息和财产不受偷窃,污染,自然灾害等的损坏。计算机系统安全是指一系列包含敏感和有价值的信息和服务的进程和机制,不被未得到授权和不被信任的个人,团体或事件公开,修改或损坏。由于它的目的在于防止不需要的行为发生而非使得某些行为发生,其策略和方法常常与其他大多数的计算机技术不同。

密码学

  密码学(Cryptography)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。

计算科学

  计算科学,又称科学计算,是一个与数学模型构建、定量分析方法以及利用计算机来分析和解决科学问题相关的研究领域。在实际应用中,计算科学主要应用于:对各个科学学科中的问题,进行计算机模拟和其他形式的计算。这一领域不同于计算机科学(对于计算、计算机以及信息处理的研究),同时也异于科学和工程学的传统形式——理论与实验。科学计算技术要想获得理解,主要需要通过在计算机上实现的数学模型进行分析。数值分析是计算科学中使用的技法的重要基础。

  科学家和工程师发展了计算机程序和应用软件,来为被研究的系统创建模型,并以多种输入参数运行这些程序。一般来说,这些模型需要大量的计算(通常为浮点计算),常在超级计算机或分布式计算平台上执行。

软件工程

  软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公包、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,提高人们的工作效率,同时提升了生活质量。

发展趋势

计算机学科新研究领域

  体系结构与软件

  系统芯片设计与测试

  程序设计理论与方法学

  自然语言处理与知识处理

  人机交互与虚拟现实

  新一代互联网络与信息安全

  移动计算与网络通讯软件

计算机科学系该教些什么

  Dan Zambonini 作为技术总监服务于Box(一家英国Internet开发和咨询公司),作为语义web和XML技术的倡导者,他的工作领域包括XML, XSL, RDF, SVG, P3P, OWL, XHTML, CSS, XForms和其它一大堆缩写的技术,哪些内容应当包含在当代计算机科学/软件开发专业的课程中呢? 他提出:

  编程基础(变量,数据类型,引用,指针,作用域,错误处理,迭代,核心算法-搜索,排序等)

  基础数学,基础统计学

  模式和反模式(真实世界的例子,不只是理论)

  现实世界中的数据库(正规化和反向规格化, SQL,索引)

  良好的代码架构基础:松耦合等

  面向对象的设计,接口等

  规划的重要性和工具: Spec'ing,UML等

  架构:C/S,SOA,P2P等

  一两个'大'语言(Java, C#,C/C++)

  一两个'脚本语言或'敏捷'的语言( PHP,Perl, Python,Ruby)

  XML (DOM/SAX, XSLT/XPath, 等)

  经济学,商学,成本项目,商业压力

  版权,隐私,数据保护

  项目管理/时间管理

  国际化,本地化,编码, Unicode

  语法,标点符号,简洁和明确的书写

  界面设计,易用性,可获取性,人机交互

  安全

  代码阅读

  常见协议( TCP/IP,HTTP,SMTP,FTP )

  测试,调试,性能,重构

  问题分析

  代码控制,变更管理

  典型的软件生命周期

  元数据,信息架构等

  地理信息系统基础

  触摸输入

  健康和安全(营养?)

参见