¿Por qué los lenguajes de programación científica son tan raros? [cerrado]


9

Me parece que los lenguajes de programación destinados a la ciencia y la ingeniería son consistentemente extraños en comparación con los lenguajes de uso general. Algunos ejemplos fuera de mi cabeza:

  • En Matlab, cada función debe colocarse en un archivo separado
  • En R, <- es el operador de asignación, a diferencia de = en casi todos los demás idiomas
  • Matlab, R, Julia y otros están indexados en 1
  • Matlab usa% para comentarios, y no el estándar # o //

Por supuesto, todas estas lenguas tienen varias características de diseño que en realidad hacen más fáciles de usar para aplicaciones científicas, como la notación matricial más natural. Aún así, todos ellos inexplicablemente toman todas estas decisiones extrañas que no hacen nada más fácil y podrían haberse evitado fácilmente si los diseñadores de idiomas hubieran elegido hacer lo que hacen el 99% de otros idiomas. ¿Es el motivo por el que el vendedor está encerrado? ¿Falta de contacto con la comunidad más amplia de desarrollo de software? ¿Algo más?

Leí este hilo y no encontré las explicaciones satisfactorias. El hecho de que R haya sido diseñado como un lenguaje científico no significa que haya que ignorar por completo las convenciones y usar <- en lugar de =.


66
Respuesta corta: porque fueron hechos para científicos, no para programadores.
Bart van Ingen Schenau

19
Respuesta corta: Debido a que cada idioma que crees que es normal fue influenciado por un ancestro común, C.
Ross Patterson

3
Creo que tendría dificultades para encontrar cualquier convenciones a través de idiomas. Depende de su herencia.
Robbie Dee

66
Nada de eso es raro. Es solo diferente . Porque no hay una razón particular para elegir una sintaxis sobre la otra, excepto a qué está acostumbrado el autor específico del idioma específico.
Jan Hudec

8
Tu 99% está mal. Si solo conoce C y sus derivados, podría pensarlo, pero más del 50% de los lenguajes que no son C usan algo diferente para asignación, indexación y / o comentarios.
david.pfx

Respuestas:


21
  • Hay diferentes convenciones. Convenciones en matemática, lógica y ciencias aplicadas y convenciones en TI. Los primeros son mucho mayores.
  • Los lenguajes científicos están hechos para hacer la vida de SUS usuarios más conveniente. El usuario es visto como un científico, que puede realizar algún algoritmo de vez en cuando o verificar alguna teoría, sin la necesidad de aprender algo realmente nuevo. Por lo tanto, los idiomas para los científicos DEBEN estar compuestos por estándares que no sean de TI. Porque no están destinados para el uso de personas de TI. Están a la altura de OTROS estándares y eso es bueno debido al objetivo auditivo. Debido a que la buena interfaz de usuario de SW y el idioma es la interfaz de usuario de SW, debe hacerse en función de las necesidades del usuario, no del codificador.
  • Nuestros estándares de TI son estándares de la industria. TI es industria. La ciencia no es industria. Los científicos están orgullosos de ello. Y de mala gana tomarían cualquier cosa de nuestra práctica en la suya. Y no les gustan los estándares en absoluto. Y a nadie le gustan los estándares extranjeros. Por lo tanto, si alguien crea un lenguaje científico que cumpla con los estándares de TI, difícilmente se vendería bien, debido a la aversión del auditorio objetivo, incluso si fuera objetivamente más conveniente.

E incluso si juzgamos solo de acuerdo con los estándares de TI ... Lo sentimos, ¿a qué estándares te refieres? ¿Has intentado escribir un programa en APL o SNOBOL? Estos dos idiomas son, en mi humilde opinión, los MÁS poderosos en los campos apropiados (conteo y cadenas). Pero la sintaxis es algo MUY extraño (y efectivo) Leer una línea de código APL podría llevar días. Por otro lado, dicha línea es una pieza seria de SW. Regresarías a Mathlab con lágrimas de alivio.

En cuanto a "=", muchas personas tienen problemas para acostumbrarse a que no se trata de igualdad, sino de asignación. Por cierto, en Pascal es la igualdad y la asignación es ": =".

¿Y realmente crees que == para la igualdad es más natural? Por el contrario, mezclar = y == es el error MÁS común en la programación en C, ocurre muy a menudo incluso en IDEs contemporáneos, con su control automático.

Acerca de la indexación desde 1: es la única natural. Cuando eras niño, habías aprendido poemas y canciones, donde contabas: uno, dos, tres ... Y no 0,1,2 ... En matemáticas escolares estudiamos que el conteo comienza desde 1, y que 0 no pertenece a números naturales / contables. Solo con la definición de funciones vienen los índices no naturales. Después de todo, el 0 fue inventado muchos miles de años después de que nuestro antepasado levantó un dedo.

0-start fue más sencillo de realizar e inmediatamente se metió en la práctica de TI después de la aparición de C. Pero en Fortran, el primer idioma, se usa la indexación 1. Lo mismo con otros idiomas de la época preindustrial.

Y sí, había leído el artículo de Dyjkstra sobre la naturalidad del conteo basado en 0. Y totalmente en desacuerdo con su argumentación. Es natural para los músicos solo. E incluso 0 entusiastas que crean los compiladores de C y Java, ¡cuenten las líneas del código que COMENZAN DE 1!


1
": =" para la asignación y la indexación basada en 1 también se usan en Smalltalk.
Rory Hunter

1
No creo que la indexación basada en 0 se deba a la facilidad de implementación (FORTRAN refuta esto). cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html da algunas razones por las que uno podría preferir la indexación basada en 0, pero tenga en cuenta que la elección es bastante arbitraria.
jk.

2
FORTRAN tenía indexación basada en 1. PASCAL permitió la indexación basada en arbitrariedad: puede declarar una matriz cuyo índice varió, por ejemplo, de -42 a +57. (Ver en.wikipedia.org/wiki/… para ver un ejemplo donde esto es útil.)
John R. Strohm

1
@Gangnus Creo que es un error comparar los lenguajes modernos con C y considero que es intencionalmente difícil de leer. Fue diseñado para ser una alternativa de alto nivel a los idiomas de nivel inferior.
Robbie Dee

1
FORTH es un lenguaje basado en pila. Piensa en la calculadora HP. Era muy compacto y rápido, pero era difícil escribir código que no fuera impenetrable. En FORTH, rara vez usas variables, sino que empujas cosas a la pila y usas operadores que actúan en la pila.
Gort the Robot

16

La indexación desde 1 no es extraña, es completamente normal y esperada, excepto para los programadores , porque han sido condicionados a esperar un conteo basado en 0 por C (que estaba condicionado por las propiedades de la arquitectura del procesador).

Los comentarios se indican de muchas, muchas maneras diferentes en diferentes idiomas; no existe una forma estándar, cada idioma elige un símbolo o un dígrafo que aún no se ha tomado.

La asignación también es un concepto extraño e incomprensible, excepto para los programadores ; la mayoría de la gente no le importa si se trata de =o :=, o <-, en su lucha por comprender el significado (y para ellos, de hecho es mejor no usar =, ya que esto hace hincapié en que la asignación no es la igualdad - el obstáculo más común para los no programadores entender el código)

En resumen, los lenguajes de programación destinados a personas que no sean programadores profesionales se ven diferentes porque las personas que más los usan lo quieren así.


44
No estoy de acuerdo con que indexar desde 1 no sea extraño. La indexación 0 es al menos tan común como la indexación 1 en matemáticas, y obviamente había sido la norma en la programación durante años antes de la llegada de Matlab o S / R.
haroba

99
@Aqwis Oh, sí, ya veo al bebé contando cero, uno, dos ... La forma más natural, de verdad.
Gangnus

44
Los bebés no escriben código. Hay buenas razones para usar la indexación cero (ver: Dijkstra), y cuando la indexación cero también es común en matemáticas, no puedo ver muchas razones para usar la indexación 1.
haroba

1
@Aqwis Responde por tus propias palabras. Lo que es raro y no. Una cosa que se establece desde la infancia y por las matemáticas (los números naturales no incluyen cero), no puede ser extraño desde ningún lado. Y lo que contradice con eso, ES extraño. Y que te hayas acostumbrado a otra cosa, es irrelevante. Estos idiomas simplemente no están hechos para ti o para mí.
Gangnus

1
@phresnel Parafraseando la respuesta: la indexación desde 1 es normal. Excepto para los programadores, porque han sido condicionados para esperarlo [indexación desde 0] de C
Robbie Dee

5

Hay tres problemas:

  1. Usted no conoce ciertas tradiciones y las buenas razones para ciertas elecciones.
  2. Pones demasiado énfasis en la sintaxis, demasiado poco en la semántica.
  3. Los ingenieros y científicos no tienen experiencia en el diseño del lenguaje, lo que lleva a una sintaxis cuestionable.

Ahora a sus puntos específicos:

  • No conozco a Matlab, así que no puedo comentar sobre los requisitos de la organización de archivos. Tenga en cuenta que Java quiere que use un archivo por clase pública.

  • En R, también =se puede usar como operador de asignación. Tenga en cuenta que necesita múltiples operadores de asignación <-y <<-para lidiar con su concepto de alcance ( <<-asigna a un símbolo en un ámbito externo en lugar de crear un nuevo símbolo dentro de una función). Las flechas se pueden utilizar en la otra dirección también, potencialmente hacer el código más limpio: complex_calculation() -> x.

  • La indexación basada en 1 es el estándar en matemáticas, que es con lo que los usuarios de Matlab y R se sienten más cómodos que C. Julia sigue a Matlab para tener una mejor curva de aprendizaje.

  • %para comentarios también se usa en TeX / LaTeX. La #es solo una convención de los lenguajes de script Unix y sus descendientes.

También ignora que los lenguajes de programación "reales" tienen muchas partes extrañas. ¿Por qué no utiliza Scheme =? En lugar:

(define foo 5)

¿Por qué usa C *para desreferenciar, cuando obviamente un caret ^xes más común en otras tradiciones?


"No conozco a Matlab, así que no puedo comentar sobre los requisitos de la organización de archivos. Tenga en cuenta que Java quiere que use un archivo por clase pública". Creo que es perfectamente razonable que el lenguaje espere que divida su proyecto en varios archivos. Sin embargo, una clase suele ser una cantidad relativamente grande de código. Las funciones no tienen que serlo. Al forzar un archivo separado para cada función, Matlab lo desalienta de crear funciones pequeñas y en su lugar promueve funciones grandes y monolíticas.
haroba

1
Estoy casi de acuerdo con todo, excepto la p.3. Los científicos no hacen sus idiomas, los ORDENAN. Son clientes, usuarios, pero no sus creadores. Si alguien lo es, él / ella ya es un geek de TI. Y la sintaxis de cualquier idioma es cuestionable, nadie es ideal para todas las tareas.
Gangnus

Matlab compila funciones / archivos justo a tiempo según sea necesario. No tiene un concepto real de un programa, solo un montón de funciones. Si estoy ejecutando una función que realiza una llamada a foo (), buscará en su ruta un archivo llamado foo.m, lo compilará y lo ejecutará. No hay necesidad de decirle a Matlab de antemano qué conjunto de archivos pretendo usar.
Simon B

1

Supongo que depende de tu exposición a otros idiomas. La parte superior de mi cabeza:

  • C / C ++ tiene archivos fuente separados (.c / .cpp & .h)
  • Los caracteres -> se usan en C # para expresiones lambda
  • Las versiones anteriores de VB usaban 1 como índice predeterminado (aunque esto podría cambiarse con la Base de opciones)

1
En C y C ++, puede definir tantas funciones como desee en un archivo.
haroba

Solo estoy señalando que no es inusual que los módulos se dividan en varios archivos. Si lo desea, puede poner todas sus funciones en archivos separados usando lenguajes .NET con la construcción de clase parcial .
Robbie Dee

1
Por supuesto, no es inusual que los módulos se dividan en varios archivos, y en muchos casos es deseable. Pero en Matlab debe poner cada función en su propio archivo, lo que significa que si tiene mil funciones, necesita mil archivos .
haroba

3
Los comentarios en HTML se parecen <!-- ... -->. El signo de porcentaje se utiliza para codificar URL: se http://example.com/()convierte en http://example.com/%28%29.
amon

Perdón mi error.
Robbie Dee
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.