你可以在这里找到很多信息:
http://en.wikipedia.org/wiki/Programming_语言
http://en.wikipedia.org/wiki/Comparison_的_编程_语言
我不打算在这里重写维基百科,只是简单的解释一下,这样你就能更好地理解维基百科的文章想说什么。
一件事是程序是如何构造的。有时它是关于程序员的风格,但编程语言或库可以使样式变得更容易、更难或不可能。可以在同一程序中使用多个样式。
- 命令式编程--“先做这个,然后做这个,然后再做那个”。你总是写下接下来应该发生的事情。即使有更多的选择,例如基于用户的输入,总是这样:当你想问的时候询问输入,然后根据你收到的答案选择接下来会发生什么。这种编程风格对于简短的非交互式程序是很好的,但是对于大型程序来说,它的阅读和维护变得非常困难。这也是计算机在硬件级别上的工作方式(所有其他编程语言都必须编译或解释到这一点),因此这是许多编程语言所使用的。
- 基于事件的编程--你不是在做整个程序,而是它的一部分,它必须符合给定的框架。框架告诉您“现在发生了”,您应该对事件做出反应。你不能决定以后会发生什么。当需要您的反应时,框架会调用您,而您只会对此作出反应。(例如,如果你制作一个电脑游戏,你会对“游戏开始”、“鼠标点击”、“按下键”、“屏幕需要显示”和“游戏退出”事件做出反应。例如,您可以记住宇宙飞船的坐标;按下键的反应是改变坐标,对屏幕需要显示的反应是在当前坐标上绘制宇宙飞船。)
- 面向对象的编程--你把程序分成许多较小的部分,你分别描述每个部分;从内部:它包含什么数据,从外部:它能做什么动作。(例如,你的目标飞船有数据:x坐标,y坐标,生命数。它可以:向上移动,向下移动,向左移动,向右移动,返回生命的数量,删除一个生命。)重要的是多态,这意味着多个对象可以具有相同的接口,即可以执行相同的操作。(例如,宇宙飞船、导弹和小行星都有坐标,可以在屏幕上作画。)所以程序的一部分可以用一种独特的方式来对待所有的人。(例如,重力场可以影响所有MovableObjects的坐标,而不必知道它们的细节。)
- 面向方面的编程--另一种将程序分割成较小的部分的方法,但这一次,这些部分代表了程序的功能。(对不起,我对这件事不太了解。)
- 函数式程序设计--最自然的数学计算方法。定义"f(x)“和"g(x,y)”是什么意思,然后请程序计算"g(f(3),f(5))“。每个函数只依赖于它的输入数据,没有其他的;例如,函数"f(x)“只能使用"x”的值,因此,如果您两次调用"f(7)“,则得到相同的结果。此外,函数"f(x)“不能修改"x”的值。如果您想要制作一个数据随时间变化的程序,您必须以某种方式将时间或其他事件作为函数的参数。(例如,宇宙飞船在时间T+1中的位置可以描述为飞船在时间T中的位置和键盘按钮的状态。)这些限制使避免出现错误和使并发编程(多个处理器,甚至计算机运行同一程序的部分)变得容易得多。
另一件事是如何使用数据。您是只使用函数的输入和输出值,还是也可以将这些值存储在访问它们的变量中?如果指定了一个值,以后可以更改它吗?如果你有多种类型的数据(例如文本、数字、坐标、宇宙飞船描述),那么任何类型的数据都能传递给任何类型的变量吗?或者你是否必须指定哪个变量包含哪种数据?--通常,你在这里的自由度越大,你就越有机会制造错误。
但我想,要完全理解这一点,就必须熟悉几种代表各种风格的编程语言,了解每种语言的优缺点,以及每种语言如何设法克服其特定的问题。有些语言给你更多的选择。(例如,在Java中,您可以编写命令式、基于事件的、面向对象的、甚至是类型的函数程序。语言本身是面向对象的,一些对象使用事件,没有什么可以阻止您将所有代码放在一个函数中。如果您使用不可变对象并避免副作用,则可以获得函数式编程的一些优势。)