学习每种编程语言


24

我多次听说,每个程序员都应该学习每种语言中的一种。现在,这不一定是正确的,但我认为这是一个好主意。

我学到了程序语言(Perl的),但什么其他类型的?

它们之间有什么区别,每个都有哪些示例?


8
您应该意识到,有无数种重叠的语言分类方法。最常见的是通过编程范例进行编程,但是即使那样,仍存在主要和次要区别,许多完全独立的轴,并且许多语言都属于几种范例。

1
我会忘记类别-如果您真的对从一种语言中学习感兴趣,我建议Lisp和Scala都可以,如果您能处理这两种语言,那么您已经了解了很多。
比尔K

3
彼得·诺维格(Peter Norvig)的建议:学习至少六种编程语言。包括一种支持类抽象的语言(如Java或C ++),一种支持功能抽象的语言(如Lisp或ML),一种支持语法抽象的语言(如Lisp),一种支持声明性规范的语言(如Prolog或C ++模板),一种支持协程(例如Icon或Scheme),和一种支持并行性(例如Sisal)。
legends2k 2014年

Answers:


34

尽管术语远非标准化,但一种常见的方法是将主要的编程范式分类为

  • 程序
  • 功能性
  • 逻辑上
  • 面向对象
  • 泛型

您似乎已经知道过程编程是什么样的。

功能上语言中,功能被视为一流的对象。换句话说,您可以将一个函数作为参数传递给另一个函数,或者一个函数可以返回另一个函数。功能范例基于lambda演算,功能语言的示例包括LISP,Scheme和Haskel。有趣的是,JavaScript还支持函数式编程。

逻辑编程中,您定义了描述实体之间关系的谓词,例如president(Obama, USA)president(Medvedev, Russia)。这些谓词可能变得非常复杂,并且涉及变量,而不仅仅是文字值。指定所有谓词后,您可以提出系统问题,并获得逻辑上一致的答案。

逻辑编程的主要思想是,您无需告诉计算机如何计算事物,而可以告诉它什么是事物。示例:PROLOG。

在某些方面,面向对象范例是过程编程的扩展。在过程编程中,您拥有数据,这些数据可以是原始类型(例如整数和浮点数),复合类型(例如数组或列表)以及用户定义的类型(例如结构)。您还具有对数据进行操作的过程。相反,在OO中,您具有对象,其中包括数据和过程。这使您拥有诸如封装,继承和多态之类的美好东西。示例:Smalltalk,C ++,Java,C#。

泛型编程于1983年在Ada首次引入,并在C ++模板引入后得到广泛应用。这样的想法是,您可以在不指定实际操作数据类型的情况下编写代码,并让编译器将其弄清楚。例如代替写作

void swap(int, int);
void swap(float, float);
....

你会写

void swap(T, T);

一次,并让编译器为实际使用的代码生成T可能生成的特定swap()代码。

C ++,Java和C#在不同程度上支持通用编程。

重要的是要注意,许多语言(例如C ++)都支持多种范例。的确,即使说一种语言支持特定的范例,它也可能不支持所有范例的功能。更不用说在特定范例需要哪些功能方面存在很多分歧。


2
SQL属于哪一类?
Kirk Kuykendall

@KirkKuykendall SQL将是一种专门的语言,或者说是“小”语言。
凯文·漆

17
SQL是一种声明性语言。您告诉它想要的东西,它弄清楚如何得到它。(像Prolog这样的“逻辑”语言是声明性语言的不同子集)
Izkata 2011年

3
我们可以对程序进行描述,以便使答案更完整吗?
deworde 2011年

3
@Dima不错的总结。然而,一个相对较小的选择:“通用编程”并不是由C ++中的模板使用引起的,并且在功能语言(例如Haskell )中也经常使用。
安德列斯·F

11

编程语言具有许多正交特性。最突出的一个就是他们支持的一种或多种范式。在维基百科的文章涵盖了范例详尽; 最重要的范例可能是:

  • 程序/结构化
  • 功能性
  • 面向对象
  • 事件驱动和面向方面
  • 泛型
  • 逻辑

但是语言在其他方面也有所不同:

  • 键入系统(动态类型与静态类型,强类型与弱类型)
  • 构建过程和运行时环境(解释,字节码编译,完全编译)
  • 内存管理(像C / C ++这样的手动,像Java这样的强制性自动垃圾回收,像D这样的可选GC等)
  • 评估学科(渴望与懒惰;默认情况下,大多数语言渴望,但是许多提供懒惰的构造)
  • 范围规则(比较范围在PHP,Javascript和C,三种在语法方面非常相似的语言)的工作方式)

2

当前正在流行几种不同的编程范例:

  • 面向对象-VB.NET,C#,Java属于此类。代码围绕具有行为和相关数据并通过传递消息相互通信的对象排列。
  • 功能-Haskel,Scheme,Lisp和F#属于此类。没有副作用的纯函数。像数学一样思考函数。通常,人们可以通过其构造来扩展语言本身。

这些是仅有的其他类型吗?
动态

@ perl.j-不,但是这些是近来使用广泛的主要方法。参见Wikipedia- 编程范例
Oded

@ perl.j也基于堆栈:例如Forth和Postscript。逻辑:例如Prolog。
杰蒂2011年

2
第零个类型是C;)
yati sagade 2011年

真正的问题是开发人员需要多少个才能有效地编码大多数编程问题。
JeffO 2014年

0

Prolog是一种逻辑编程语言,相对容易上手。它需要与过程编程完全不同的思维,因此最好在尝试伸展大脑时进行探索。

如果您上大学,则应该学习一门编程语言课程,因为它旨在介绍不同类型的编程语言以及它们的最佳用途。


0

大多数主流语言混合了命令性,功能性和声明性编程的各个方面。利基语言趋向于更具异国情调或引入有趣的新思想,出于某种原因,这些思想不适合通用编程。某些例子(并非详尽无遗):

  • 电子表格语言(Excel,Google表单):用于处理表格数据。
  • 数组语言(APL,J):设计用于快速处理多维数组。在J中,(+/ % #)&.:*:计算数组的RMS。以简洁而闻名,以不可读而臭名昭著。
  • 自动化语言(AutoHotkey,Bash):旨在简化常见任务,例如填写表格,上传文件等。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.