Aprendiendo cada tipo de lenguaje de programación


24

He escuchado varias veces que cada programador debe aprender uno de cada tipo de lenguaje. Ahora, esto no es necesariamente cierto, pero creo que es una buena idea.

Aprendí un lenguaje de procedimiento (Perl), pero ¿cuáles son los otros tipos?

¿Cuáles son las diferencias entre ellos y cuáles son algunos ejemplos de cada uno?


8
Debe tener en cuenta que existen innumerables formas superpuestas para clasificar los idiomas. Lo más común es por paradigma de programación, pero incluso entonces hay distinciones mayores y menores, muchos ejes completamente separados y muchos lenguajes se dividen en varios paradigmas.

1
Me olvidaría de las categorías: si está realmente interesado en aprender de un idioma, le sugeriría Lisp y Scala, si puede manejar esas dos, ha cubierto mucho terreno.
Bill K

3
Consejo de Peter Norvig : aprenda al menos media docena de lenguajes de programación. Incluya un lenguaje que admita abstracciones de clase (como Java o C ++), uno que admita abstracción funcional (como Lisp o ML), uno que admita abstracción sintáctica (como Lisp), uno que admita especificaciones declarativas (como plantillas Prolog o C ++), uno que admite corutinas (como Icon o Scheme), y una que admite paralelismo (como Sisal).
legends2k

Respuestas:


34

Aunque la terminología está lejos de ser estandarizada, una forma común de categorizar los principales paradigmas de programación en

  • Procesal
  • Funcional
  • Lógico
  • Orientado a objetos
  • Genérico

Parece que ya sabes cómo es la programación de procedimientos.

En lenguajes funcionales , las funciones se tratan como objetos de primera clase. En otras palabras, puede pasar una función como argumento a otra función, o una función puede devolver otra función. El paradigma funcional se basa en el cálculo lambda, y ejemplos de lenguajes funcionales son LISP, Scheme y Haskel. Curiosamente, JavaScript también es compatible con la programación funcional.

En la programación lógica , usted define predicados que describen relaciones entre entidades, como president(Obama, USA)o president(Medvedev, Russia). Estos predicados pueden volverse muy complicados e involucrar variables, no solo valores literales. Una vez que haya especificado todos sus predicados, puede hacer preguntas a su sistema y obtener respuestas lógicamente consistentes.

La gran idea en la programación lógica es que en lugar de decirle a la computadora cómo calcular las cosas, le dices cuáles son las cosas. Ejemplo: PROLOG.

El paradigma orientado a objetos es de alguna manera una extensión de la programación de procedimientos. En la programación de procedimientos, tiene sus datos, que pueden ser tipos primitivos, como enteros y flotantes, tipos compuestos, como matrices o listas, y tipos definidos por el usuario, como estructuras. También tiene sus procedimientos, que operan en los datos. Por el contrario, en OO tiene objetos, que incluyen tanto datos como procedimientos. Esto le permite tener cosas buenas como encapsulación, herencia y polimorfismo. Ejemplos: Smalltalk, C ++, Java, C #.

La programación genérica se introdujo por primera vez en Ada en 1983, y se generalizó después de la introducción de plantillas en C ++. Esta es la idea de que puede escribir código sin especificar los tipos de datos reales en los que opera, y que el compilador lo descubra. Por ejemplo en lugar de escribir

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

tu escribirias

void swap(T, T);

una vez, y que el compilador genere un código específico para lo Tque sea, cuando swap()realmente se usa en el código

La programación genérica es compatible en diversos grados con C ++, Java y C #.

Es importante tener en cuenta que muchos lenguajes, como C ++, admiten múltiples paradigmas. También es cierto que incluso cuando se dice que un lenguaje admite un paradigma particular, puede no admitir todas las características del paradigma. Sin mencionar que hay un gran desacuerdo sobre qué características se requieren para un paradigma particular.


2
¿En qué categoría caería SQL?
Kirk Kuykendall el

@KirkKuykendall SQL sería un lenguaje especializado o "pequeño".
Kevin Lacquement

17
SQL es un lenguaje declarativo. Le dices lo que quieres, descubre cómo conseguirlo. (Los lenguajes "lógicos" como Prolog son un subconjunto diferente de lenguajes declarativos)
Izkata

3
¿Podríamos tener una descripción de procedimiento, para que la respuesta sea más completa?
Deworde

3
@Dima Bonito resumen. Sin embargo, un problema relativamente menor: la "programación genérica" ​​no surgió del uso de plantillas en C ++, y también se usa con mucha frecuencia en lenguajes funcionales como Haskell.
Andres F.

11

Los lenguajes de programación tienen una serie de características mayormente ortogonales; el más destacado radica en el paradigma o paradigmas que apoyan. El artículo de wikipedia cubre paradigmas exhaustivamente; Los paradigmas más importantes son probablemente estos:

  • Procesal / Estructurado
  • Funcional
  • Orientado a objetos
  • Orientado a eventos y orientado a aspectos
  • Genérico
  • Lógica

Pero los idiomas también difieren en otros aspectos:

  • Sistema de mecanografía (mecanografía dinámica frente a estática y tipos fuertes frente a débiles)
  • Proceso de compilación y entorno de tiempo de ejecución (interpretado, compilado por bytecode, totalmente compilado)
  • Gestión de memoria (manual como C / C ++, recolección de basura automática obligatoria como Java, GC opcional como D, ...)
  • Disciplina de evaluación (ansioso versus perezoso; la mayoría de los idiomas lo son por defecto, pero muchos proporcionan construcciones perezosas)
  • Reglas de alcance (compare cómo funciona el alcance en PHP, Javascript y C, tres lenguajes que, de lo contrario, son bastante similares en términos de sintaxis)

2

Hay varios paradigmas de programación diferentes que están actualmente de moda:

  • Orientado a objetos: VB.NET, C #, Java entran en esta categoría. El código se organiza en torno a objetos que tienen comportamiento y datos relacionados y que se comunican entre sí pasando mensajes.
  • Funcional: Haskel, Scheme, Lisp y F # entran en esta categoría. Funciones puras que no tienen efectos secundarios. Piensa funciones como en matemáticas. A menudo se puede extender el lenguaje en sí a través de sus construcciones.

¿Son estos los únicos otros tipos?
Dinámico

@ perl.j - No, pero estos son los principales que se usan ampliamente en estos días. Ver wikipedia - paradigma de programación .
Finalizado el

@ perl.j también está basado en Stack: como Forth y Postscript. Lógica: como Prolog.
Jetti

2
Y el tipo zeroth es C;)
yati sagade

La verdadera pregunta es cuántos de estos necesita un desarrollador para codificar efectivamente la mayoría de los problemas de programación.
JeffO

0

Prolog es un lenguaje de programación lógico y es relativamente fácil comenzar con él. Requiere un pensamiento completamente diferente a la programación de procedimientos, por lo tanto, es bueno explorar cuando estás tratando de estirar tu cerebro.

Si va a la universidad, debe tomar un curso sobre Lenguajes de programación, ya que está orientado a introducir los diferentes tipos de lenguajes de programación y para qué se utilizan mejor.


0

La mayoría de los lenguajes principales combinan aspectos de programación imperativa, funcional y declarativa. Los lenguajes de nicho tienden a ser más exóticos o introducen nuevas ideas interesantes que, por una razón u otra, no son adecuadas para la programación de propósito general. Algunos, de ninguna manera exhaustivos, ejemplos:

  • Lenguajes de hoja de cálculo (Excel, Formularios de Google): Diseñados para manejar datos tabulares.
  • Lenguajes de matriz (APL, J): diseñados para procesar rápidamente matrices multidimensionales. En J, (+/ % #)&.:*:calcula el RMS de una matriz. Famoso por ser conciso, conocido por ser ilegible.
  • Idiomas de automatización (AutoHotkey, Bash): diseñado para agilizar tareas comunes, como llenar formularios, cargar archivos, etc.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.