¿Podría un lenguaje de programación ser considerado como un lenguaje? [cerrado]

Puede parecer que esta pregunta se responde sola, pero le insto a que considere las posibilidades y el impacto que esto podría tener en la sociedad.

Como ingeniero de sistemas, la programación es más común para mí que mi idioma "nativo": el inglés.

Tengo entendido que su idioma nativo es con el que se siente más cómodo, incluso si la sociedad que lo rodea no lo habla. ¿Significa esto que debo poner ensamblador en los documentos cuando pido mi idioma principal y luego el inglés como idioma secundario?

En los países que tienen derechos a los intérpretes en los procedimientos judiciales, ¿cómo cree que afectaría esto?

Esta es más una pregunta "divertida", pero tiene algunas posibilidades que pueden alterar la vida. ¿Es hora de que consideremos los lenguajes digitales como lenguajes reales?

Idioma

el método de comunicación humana, ya sea hablado o escrito, que consiste en el uso de palabras de forma estructurada y convencional.

"un estudio de la forma en que los niños aprenden el lenguaje"

el sistema de comunicación utilizado por una comunidad o país en particular.

"el libro fue traducido a veinticinco idiomas"

Puedo ver por qué esta es una pregunta divertida e interesante, pero esto parece depender de lo que quiere decir con qué es un idioma, y ​​las respuestas caen inmediatamente de cómo se define eso.
Actualizaré la publicación con una definición de idioma para agregar claridad. Se asumió que se usarían las definiciones del término del diccionario (manteniéndolo simple). He visto algunas respuestas realmente buenas sobre esto hasta ahora, por lo que es difícil "votar" por una correcta. Supongo que ese es el peligro inherente de publicar en un sistema filosófico;)
If(usted.entiende(esto)) entonces languages.add(this.programminglanguage)
De hecho, es un problema de definición, pero hay algunos adecuados. Ver lenguaje formal y/o jerarquía de Chomsky en Wikipedia.
El lenguaje de programación son solo comandos unidireccionales, el procesador no responde. Y necesitamos agregar comentarios, tener documentos sobre el lenguaje de programación para que otro humano lo entienda. El idioma nativo es aquel con el que naciste .
En mi humilde opinión, esta es una pregunta lingüística: una respuesta viable podría abordar si los lenguajes informáticos modelan el concepto de gramática generativa propuesto por Chomsky (o alguna otra definición propuesta/característica esencial del lenguaje natural); pero ese es un problema para los lingüistas, no para los filósofos.
Si es una gama completa de semántica, y no solo la semántica performativa y la sintaxis lo que hace un lenguaje, entonces esta es una pregunta filosófica, simplemente una tontería, y la respuesta tiene que ser 'no'. Los lenguajes informáticos son estructuras matemáticas, no depósitos de significado.
¿Cómo se dice "árbol" en asamblea? Me parece que la comparación falla en la primera etapa.
Lamento decirlo así. Para mí, personalmente, ni siquiera necesitamos cuestionarnos . Los seres humanos hemos estado fabricando máquinas durante siglos, y si consideras el lenguaje de programación como un dispositivo puro o partes de máquinas , entonces la pregunta en sí perecerá.
Me gustaría decir que esta no es una pregunta lingüística en absoluto, sino más bien un problema de cómo lidiar con la entrada o salida de datos . Si vemos las PC, etc, etc, una máquina, o el espejo de nosotros mismos, entonces, el lenguaje de programación puede estar en la categoría de la lingüística si los consideramos como dispositivos de entrada y salida .
Esto no está fuera de tema. Cualquier cosa puede ser considerada como cualquier cosa. Dicho esto, estoy pensando en el concepto de comunicación, también en el concepto de algoritmo. A primera vista, creo que un lenguaje de programación tiene como objetivo construir algoritmos, mientras que el lenguaje natural tiene como objetivo permitir la comunicación.
Estoy de acuerdo si esta pregunta está fuera de tema o no. Pero la respuesta es bastante simple. Para que el lenguaje de programación se convierta en "Lenguaje", entonces se requiere que la máquina que maneja el lenguaje de programación piense por sí misma Por la razón que hasta ahora el lenguaje pertenece a los seres humanos. Por lo tanto, se requiere que la máquina funcione como los seres humanos utilizando el lenguaje de programación.
@KentaroTomono Tengo que estar en desacuerdo, existe un lenguaje de programación para que los humanos se comuniquen sobre problemas específicos de la máquina/sistema , convirtiéndolo así en un lenguaje.
@iphigenie --- Siento que debería reconsiderarlo fuertemente ya que esto no se basa en una "opinión", sino simplemente en mirar la evidencia de cada lado y determinar lógicamente dónde cae este concepto.
@JamesKingsbery --- Siento que debe reconsiderarlo enérgicamente, ya que esto no se basa en "opiniones", sino simplemente en mirar la evidencia de cada lado y determinar lógicamente dónde cae este concepto.
@Keelan --- Siento que debería reconsiderarlo fuertemente ya que esto no se basa en una "opinión", sino simplemente en mirar la evidencia de cada lado y determinar lógicamente dónde cae este concepto.
@HunanRostomyan --- Siento que debe reconsiderarlo fuertemente ya que esto no se basa en una "opinión", sino simplemente en mirar la evidencia de cada lado y determinar lógicamente dónde cae este concepto.
@Dave --- Siento que debería reconsiderarlo fuertemente ya que esto no se basa en una "opinión", sino simplemente en mirar la evidencia de cada lado y determinar lógicamente dónde cae este concepto.
Es una cuestión de opinión porque, habiendo examinado la evidencia de cada lado, no hay forma de adjudicar entre las dos posiciones que no sea en función de la opinión de uno sobre lo que cuenta como un "lenguaje".
@JamesKingsbery: ¿no es así con todo, especialmente en filosofía o teología? Hasta que se habla de algo. Secundario a su declaración, qué "evidencia". Esto estuvo abierto solo unos pocos días cuando cerró, por lo que posiblemente no pudo haber mirado todas las pruebas. Además, la popularidad de esta pregunta muestra que no soy el único que ha reflexionado sobre esta pregunta.
@JamesKingsbery - Además, sin responder a mi propia pregunta, este documento apunta hacia la dirección de que SÍ VIRGINIA -- HAY UNA RESPUESTA DEFINITIVA --- byte-notes.com/generation-programming-languages

Respuestas (9)

Comunicación

Compara tu pregunta:

Tengo entendido que su idioma nativo es con el que se siente más cómodo, incluso si la sociedad que lo rodea no lo habla.

y http://en.wikipedia.org/wiki/Language :

El lenguaje es la habilidad de adquirir y usar sistemas complejos de comunicación, particularmente la habilidad humana para hacerlo, y un lenguaje es cualquier ejemplo específico de tal sistema.

Un punto clave en la noción generalmente aceptada de 'lenguaje' es la comunicación. Así que realmente no puedes decir que no importa si la sociedad que te rodea habla el mismo idioma o no.

Imperativo vs informativo

La familia de lenguajes que usó como ejemplo, Assembly, es un lenguaje imperativo: da instrucciones a un procesador. No es capaz de contener información, incluso en la forma muy simple de lógica proposicional. Es cierto que puede establecer o borrar bits dependiendo de la veracidad de una declaración, pero el lenguaje aún no transmite información: se necesita interpretación.

En los lenguajes naturales, la información es muy importante. El intercambio de información es una de las principales funciones del lenguaje.

Otros lenguajes de programación como prolog o lenguajes funcionales pueden ser más adecuados para transmitir información, sin embargo, es complicado trabajar con incertidumbre en estos lenguajes (por ejemplo, "Puede estar lloviendo").

No subestimes tu habilidad para hablar un lenguaje natural

Está diciendo que también puede poner Asamblea como su idioma nativo. Considere por un momento escribir su pregunta anterior en Asamblea. Entonces reconsidere afirmar que Asamblea podría haber sido su lengua materna.

¿No es esto cierto para cualquier idioma? Se necesita interpretación. En inglés, por ejemplo, unimos caracteres y luego les damos significado. Al comunicarse con estas declaraciones, luego se interpretan y son más propensos a la mala interpretación del significado combinado o del término individual. Usar un lenguaje que se basa en mover direcciones de memoria puede llevar mucho más tiempo, pero el significado transmitido es preciso, lo que creo que es uno de los principales factores que definen a un lenguaje. Además, consideré escribir la Q en ASM, pero este es un sitio solo en inglés ^^
@SanuelJackson hay una diferencia entre la cantidad de interpretación necesaria para entender "El rey vive" y " 10010011". Para el primero, necesitamos saber el significado de las palabras solo. El segundo puede tener diferentes significados en diferentes lugares de la memoria, bajo diferentes programas. También estoy muy interesado en ver una traducción de "El rey vive" en asamblea.
@Keelan: se puede decir exactamente lo mismo para "El rey vive". Necesita saber qué significan esas palabras exactas en su contexto exacto. Tiene la misma información que "034 084 104 101 032 107 105 110 103 032 108 105 118 101 115 034".
@Davor, necesita saber qué significan las palabras, pero el contexto es irrelevante. Solo con el significado de las palabras puedes entender el significado de las palabras en el contexto. En el código de máquina, las 'palabras' no tienen significado fuera de su contexto.
@Keelan: de nuevo, eso literalmente no tiene sentido. No hay diferencia entre palabras "naturales" o palabras binarias. Ni siquiera entiendo cómo te lo imaginas posible. Ambos son simplemente símbolos que comunican algún significado.
@Davor es común decir que la palabra 'rey' tiene un significado, pero 1001no tiene un significado. Por eso podemos hacer diccionarios para inglés, pero no para cadenas de bits.
El contexto de Davor es extremadamente importante en todo el procesamiento del lenguaje, ya sea lenguajes informáticos o "lenguaje natural". Hay enormes diferencias entre los dos en cómo se evalúa y aplica el contexto. Cuando los humanos (u otras criaturas) se comunican a través de procesos lingüísticos naturales, hay una gran cantidad de contexto implícito que conlleva una gran incertidumbre. Hay muchas maneras de leer una declaración, y muchas veces se pretenden múltiples significados. A menudo están presentes significados que no fueron calculados originalmente por el hablante, pero que son válidos. Los lenguajes informáticos tienden hacia la claridad y la no ambigüedad.
Para continuar con el ejemplo del rey, podría decir "el rey vive" y referirse a mil reyes diferentes en mil castillos diferentes. La persona a la que estás escuchando podría incluso imaginar un rey completamente diferente al que estabas hablando. Si esto es o no una "comunicación efectiva" no es obvio, y con frecuencia no se sabe durante mucho tiempo, si es que alguna vez se sabe. Con una computadora, los símbolos significan exactamente lo que se requiere que signifiquen cuando se requiere que lo signifiquen, o de lo contrario se consideran basura/irrelevantes. En el lenguaje humano, esto sería como si todos compartieran un punto de vista.
@Sanuel Jackson Me encantaría ver una sola oración básica traducida del inglés al ensamblado. Hasta ahora, no proporcionó ningún ejemplo para respaldar su afirmación de que la pregunta podría haberse escrito en ASM.
Si bien las diferencias entre los dos paradigmas (lenguaje natural y 'máquina') todavía son bastante amplias, aquí hay un artículo interesante sobre los intentos de interpretar el lenguaje natural bajo un marco lógico. Creo que esto es bastante posible tal como se presenta en el documento, pero simplemente enfatiza (en mi opinión) las diferencias en el PROPÓSITO de tales idiomas. Si en sus casos extremos los dos son indiferenciables no es el problema principal para mí: web.stanford.edu/class/linguist236/materials/…

Creo que es la diferencia pedante entre "lenguaje humano" y "lenguaje de computadora". En este momento, probablemente no haya una distinción en la mayoría de las definiciones legales relacionadas con los derechos de traducción, pero sería una solución rápida si alguien quisiera cuestionarla. Las leyes suelen contener una sección de "definiciones" donde definen las palabras que utilizan. Las definiciones que usan no tienen que ser de uso común, es solo el uso que pretenden en esa ley. Rápidamente modificarían la definición para que signifique "lenguaje humano" (cuidadosamente elaborado para ser preciso y cerrar el problema).

Sin embargo, si tuviera que conseguir una colonia de ingenieros de sistemas con ideas afines para usar un lenguaje informático como su comunicación diaria, entonces es posible que deba comenzar a capacitar a un traductor :)

Esto es interesante y conciso. Considere si tuviéramos que considerar las computadoras como una población. En un escenario de persona a computadora, los programadores se comunican en uno o más dialectos o idiomas que la computadora puede entender o interpretar. ¿Crees que es viable considerar esto como una especie de colonia? Los programadores también se comunican entre sí a menudo usando código de computadora (ensamblador, vb, etc.), y fuera del trabajo, cuando hacen esto, la gente mira con ojos brillantes que los no programadores no entienden el lenguaje.
Ha mencionado varias veces que usa ASM para comunicarse. Tengo curiosidad por saber cómo funciona esto cuando haces esto con tus compañeros. ¿Estás hablando de ASM? ¿Lo estás usando para complementar el inglés? ¿Realmente tendrá una conversación completa usando solo ASM? Si es así, por favor dé un ejemplo, eso sería increíble
Por cierto, esto no cuenta.
No hay problema. En una conversación, generalmente se limita a discutir cómo hacer algo en el programa donde la mayor parte de la conversación (como puede suponer) es mover registros. Estas conversaciones suelen tener muy poco inglés y se limitan a frases como "abre esto" y "mira esto", seguidas de fragmentos de comunicación en dicho idioma si la información es más extensa; por ejemplo, tardaría 3 horas en leerla. . La comunicación, aunque no siempre verbal, sigue siendo mayoritariamente en el idioma que comúnmente compartimos.

El término "idioma nativo" no tiene una definición legal estándar. En los EE. UU., tiene una definición legal para fines educativos federales (relacionados con la financiación), como "el idioma que normalmente usa dicha persona; o en el caso de un niño o joven, el idioma que normalmente usan los padres del niño o juventud". La comodidad es irrelevante. Dado que no habla ensamblador (ningún dialecto), no es su idioma nativo y ningún humano habla ningún lenguaje de programación, el resto de sus preguntas son discutibles.

Suponiendo que alguien inventa computadoras sensibles que se consideran legalmente equivalentes a los humanos, entonces es posible que los códigos de operación binarios (no los lenguajes de programación de nivel superior, que son dispositivos de interfaz humana) puedan considerarse legalmente "el idioma nativo" de tales objetos. . O bien, podría considerarse que todas las computadoras deben estar programadas para entender inglés. Dado que las computadoras no usan lenguaje de todos modos, no se puede predecir cuál sería el resultado legal.

Cuando estoy con otros programadores, tendemos a comunicarnos mucho más a menudo en esos idiomas que en inglés. Si alguien que no es codificador escuchara, podría entender algunos términos en inglés a medida que se mezclan, pero en general, la conversación se desarrollaría en gran medida sin comprensión. Es común que los hablantes nativos de un idioma mezclen términos de otro idioma (alguna vez escuche estaciones de radio chinas, como ejemplo).
Esto no niega la posibilidad/probabilidad de que, tras una prueba en un tribunal, el idioma pueda fallar, sin embargo, incluso se sabe que el klingon y los antiguos idiomas "muertos" están permitidos como idioma a pesar de que no alcanzan a transmitir ningún significado. definitivamente En esto, los lenguajes de programación transmitirán la misma interpretación de computadora a computadora, y de codificador experimentado a codificador experimentado.
Hay una forma sencilla de ver que Assembler no es en realidad un lenguaje. Dame la expresión de Ensamblador que traduce "Todos los leones son mamíferos", "Creo que todos los leones son mamíferos" y "Niego que todos los leones son mamíferos". Estas proposiciones se pueden transmitir en klingon, también en cualquier lengua muerta antigua que se conozca (por lo tanto, no en etrusco).
@ user6726: ¿sabe que hay millones de palabras de varios idiomas que no tienen una traducción equivalente en otros idiomas? Tu argumento es directamente ridículo.
@Davor, el punto no es que haya una laguna menor, sino que el ensamblador es, en principio, incapaz de expresar tales proposiciones. En el lenguaje natural, existe un medio simple de llenar el vacío: tomar prestada la palabra para el nuevo concepto. Eso no significa nada cuando se aplica al ensamblador.

Diría que lo es en el sentido de que contiene una forma explícita de comunicarse. Sin embargo, para que realmente hable utilizando un lenguaje de programación, su mensaje (a falta de un término mejor) debería poder interpretarse sin el uso de ningún otro lenguaje existente.

Echa un vistazo a este comentario que hiciste a otra respuesta:

lista privada _Idiomas = nueva lista ();
Idiomas de la lista pública { get { return _Languages; } establecer { _Idiomas = valor; } };
Idiomas.Add("C#");
Idiomas.Add("ASM");
Idiomas.Add("Inglés");

Usando esto como ejemplo, diría que realmente no se está comunicando a través de un lenguaje de programación. Lo que estás haciendo es comunicarte en una forma ofuscada de inglés usando un lenguaje de programación. La razón por la que digo esto es por el uso de cadenas como "English". La única razón por la que esto funciona para la comunicación es porque ya está definido en otro lenguaje implícito.

Aunque no estoy seguro de cómo está utilizando el ensamblado para comunicarse con sus compañeros, mi intuición es que lo está utilizando esencialmente para cifrar un mensaje en inglés que luego puede ser descifrado por otra persona que entienda el ensamblado.

También tenga en cuenta que su ejemplo no es sintácticamente correcto en C#. Incluso suponiendo que las variables se declaran fuera de un método que contiene las otras tres declaraciones, el punto y coma después de la declaración get/set aún generaría un error.

Buen ojo, lo siento, se fue punto y coma feliz ;)

Considere que un lenguaje de programación, como se usa hoy en día, es un lenguaje que tiene una semántica operativa, y que un lenguaje natural es un lenguaje con el que, digamos, podría configurar la prueba de Turing. Ya ves a dónde va esto: la posibilidad de usarlos indistintamente sería una refutación concreta de la prueba de Turing.

Dicho esto, el argumento de Pierre Lévy es que es posible crear un lenguaje con el que se pueda expresar tanto el significado como la computación (que es algo diferente a usarlo para esos dos propósitos indistintamente o simultáneamente). Si tiene éxito, podría ser un cambio de juego, y en realidad está destinado de esa manera.

Una preocupación más fundamental es que el término "lenguaje" en "lenguaje de programación" tiene una connotación muy estricta que casi no tiene relación con el fenómeno que estudian los lingüistas. Además, el término "natural" en "lenguaje natural" es filosóficamente problemático, lejos de ser consensuado. Se puede defender fácilmente que el lenguaje humano, en su manifestación, es enteramente artificial.

Lo que falla en la prueba de Turing es determinar si una computadora es sensible o no, esto no es relevante cuando se usa un lenguaje para transmitir información de manera confiable. Común para los desarrolladores es "hablar" o transmitir información en el lenguaje común que elijan para comunicarse: C++, ASM, etc. Para aquellos que escuchan, sonaría más como una transmisión en una estación de radio extranjera donde solo algunas palabras aquí y allí podría entenderse. Siento que, aunque puede llevar más tiempo transmitir el significado, el resultado final es más preciso que en idiomas como el inglés, etc.
Curiosamente, su comentario me hizo pensar en el intento que hace un psicoterapeuta por comprender el lenguaje de un paciente psicótico.
Si los lingüistas usan el término lenguaje natural, esto parece conducir naturalmente a preguntarse qué lenguajes no son naturales; ¿Un ejemplo sería el esperanto o estaban pensando en algo completamente diferente?
La parte sobre la prueba de Turing no tiene absolutamente ningún sentido.
Y espero que me diga exactamente por qué, de una manera que tenga sentido. La carga de dar sentido recae sobre todos nosotros.

Los lingüistas están capacitados profesionalmente para manejar idiomas; ninguno de ellos, que yo sepa, trata con ensamblador o incluso con un lenguaje informático como C++ o Java; todos los idiomas que estudian se hablan o se han hablado; puede haber tenido una forma escrita; puede ser una lengua cortesana sofisticada o un criollo o un pidgin.

Un lenguaje informático tiene que ser exacto y preciso para que funcione; puede hacer frente a la ambigüedad, es decir, la sobrecarga o el cambio contextual por alcance; pero estos son reinterpretados para hacerlos precisos.

Los lenguajes humanos tienen un alto nivel de ambigüedad, que cuando se contrasta con los lenguajes informáticos se considera problemático; y es siempre y cuando quieras programar en lenguaje natural o si fetichizas la precisión; pero rápidamente se comprendió que un lenguaje muy truncado y modificado era más efectivo; en el nivel básico el idioma de Turing; a nivel de chip, código de máquina; luego lenguajes de alto nivel como COBOL, Smalltalk o Java; esto podría llamarse una pila de lenguaje.

La ambigüedad es importante en los lenguajes humanos porque el mundo es: ¿qué es una silla? Algo para sentarse; tanto un tronco como un sillón o un banco; y tal vez también el suelo si uno se siente cómodo sentado con las piernas cruzadas; ¿y no sería insoportablemente engorroso nombrar cada tono de rojo con un nombre diferente , porque era un tono diferente ? ¿Y podría funcionar una metáfora como 'su rostro de granito' si el granito solo pudiera pertenecer a un cierto tipo de roca ígnea? ¿Y se enfrenta sólo a los humanos, o incluso a los mamíferos?

Así que no; Los lenguajes informáticos están más cerca de cosas como los planos arquitectónicos de casas o edificios (simplemente están escritos de manera serial, y curiosamente uno oye hablar de 'arquitectura de hardware y arquitectos de software') que los lenguajes reales, vivos o muertos, criollo o estatal.

Muy buena respuesta, y tiene razón en que (si se hace una segregación) el lenguaje "humano" es más ambiguo y, por lo tanto, propenso a errores o malas interpretaciones. Para que un lenguaje informático funcione como un sistema de comunicación, se necesitarían definiciones (p. ej., constantes predefinidas). La ambigüedad del rostro “granito”, es más creatividad y sátira, que descripción precisa. Aunque el ensamblaje puede ser una gran exageración en cuanto a lo que puede ser factible para una comunicación efectiva, también lo son las formas más antiguas de lenguaje "humano" como el inglés antiguo que usa un alfabeto muy limitado.
@jackson: de nada; aunque creo que puede haber entendido mal cuáles eran mis intenciones al centrarme en la ambigüedad como un marcador de lo que separa estas dos nociones de lenguajes. Un lenguaje natural simplemente no es funcional como lenguaje de computadora debido a la ambigüedad; como dijiste introduce errores; pero la ambigüedad es natural en los lenguajes naturales y se usa allí de muchas maneras diferentes; uno de los que sugerí es la construcción de metáforas; aunque mi ejemplo específico podría verse como satírico, recuerdo haber leído en alguna parte que se considera una característica fundamental de los lenguajes naturales
En cómo interpreta el mundo que nos rodea: considere la etimología de la palabra lenguaje ; proviene del latín lingue que significa lengua ; ¿No es esto una forma de metáfora cuando se entiende en sentido amplio? Probablemente haya un término más específico desde el punto de vista lingüístico que dé cuenta de esto; pero lamentablemente no lo se.
En una nota personal, cuando era adolescente, una vez escribí un diario en código ASCII porque se volvió natural para mí como consecuencia de codificar a mano el ensamblador para el procesador 6502 :)

Voy a decir que no, con una salvedad.

Al igual que los lenguajes naturales, los lenguajes de programación se describen mediante gramáticas. Sin embargo, en el caso de un lenguaje de programación, la gramática debe estar restringida de manera que permita que una máquina lea cualquier programa arbitrario y determine (de una manera completamente práctica y determinista) 1) que no es un programa válido declaración en el idioma, o 2) que es válida y tiene un significado claro e inequívoco en el idioma.

Esto significa que, en la práctica, los lenguajes de programación son menos expresivos que los lenguajes naturales y, por diseño , no permiten el tipo de significados matizados que los lenguajes naturales aprovechan para comunicar humor, ironía o doble sentido (entre otros). Hay conceptos que se pueden comunicar utilizando lenguajes naturales que no se pueden asignar a un programa/declaración equivalente en los lenguajes de programación actuales .

Entonces, sobre esa base, diría que no, un lenguaje de programación no es equivalente a un lenguaje natural, porque no es lo suficientemente expresivo o flexible para comunicar todo lo que puede comunicar un lenguaje natural.

Sin embargo, la advertencia es que si tiene un lenguaje de programación cuya gramática es equivalente a (o un superconjunto de) la gramática asociada con un lenguaje natural como el inglés, entonces ese lenguaje de programación también podría contar como un lenguaje natural. Lo mismo se aplica si alguien crea un lenguaje de programación cuya sintaxis es un lenguaje natural (es decir, poder ingresar programas como prosa en inglés de forma libre). Sin embargo, de manera realista, no creo que ninguno de los dos pueda suceder pronto.

Editar

Y aquí hay una buena discusión de cómo califica la gramática asociada con un lenguaje natural, en el sentido formal/programático:

https://stackoverflow.com/questions/4197751/is-there-a-formal-grammar-for-english-language

Las palabras "ambiguo" y "enorme" se lanzan, con razón.

Ni siquiera un lenguaje informático con la sintaxis de un lenguaje natural podría adoptar la semántica humana . Hay humanos entre nosotros que tienen problemas con la semántica humana, los profundamente autistas y los incesantemente esquizofrénicos, y notamos que tienen dificultades para evitar que su propio lenguaje se convierta en algo que ni siquiera ellos mismos entienden. Entonces, cualquier computadora que 'hablara' este idioma probablemente perdería su comprensión a menos que le diera una semántica muy restringida. Y la capacidad de capturar una gama completa de semánticas es lo que constituye un lenguaje para mucha gente.
También una buena respuesta. En programación, si desea capturar emociones, siempre puede poner un emoticón ascii en los comentarios. La emoción humana se transmite por algo más que verbos, lo que se puede hacer de manera programática, pero más aún por el tono de voz, así como por la expresión y otras señales/lenguaje corporal. La elección del idioma no elimina la posibilidad de seguir usando esas señales como esta :)
¿No estarían los comentarios exentos de consideración (a menos que el contenido de los comentarios esté escrito en el mismo lenguaje de programación, a diferencia de otro idioma como inglés o emoji)? Eso parece más un caso de anotar un idioma con otro que de imbuir un idioma con las cualidades de otro. Como nota al margen, creo que comentar el código con comentarios que están escritos en el código suena muy divertido, en realidad.

Diría que no: si me acercara a alguien que entendiera Java (o Python o algún otro idioma) y comenzara a hablarle, entonces podría entenderlo, pero solo después de ponerlo en contexto.

Depende de su definición de "lenguaje". Usted citó las definiciones. Empecemos con el primero:

el método de comunicación humana, ya sea hablado o escrito, que consiste en el uso de palabras de forma estructurada y convencional.

El lenguaje de programación tiene estructura y convenciones, y tiene palabras que tienen significados. Si bien los lenguajes de programación generalmente se escriben, no es inconcebible hablar un lenguaje de programación. El concepto principal en esta definición es que el lenguaje de programación es un "método de comunicación", y un lenguaje de programación ciertamente es un método de comunicación, aunque el objetivo principal suelen ser las computadoras. El lenguaje de programación también se usa para comunicarse con otros programadores sobre los pasos que se deben realizar para realizar las tareas.

La segunda definición:

"un estudio de la forma en que los niños aprenden el lenguaje"

es incoherente en este contexto. No existe una definición coherente de lo que significa "niños" en términos de lenguaje de programación.

Por último,

el sistema de comunicación utilizado por una comunidad o país en particular.

Esta definición ciertamente se ajusta al lenguaje de programación, que es utilizado por una comunidad de programadores para comunicarse con las máquinas y entre sí.

Creo que estas son definiciones poco interesantes, realmente no resaltan la diferencia y similitud entre el lenguaje natural y el de programación. Probemos otra cosa.


Definición A:

El lenguaje es un sistema de comunicación.

¿Qué significa "comunicación"? Para las computadoras, la comunicación gira en torno a dar instrucciones, hacer preguntas y dar respuestas. En realidad, estas funciones las cumplen diferentes lenguajes informáticos, los lenguajes de programación sobresalen en la primera, un lenguaje de consulta de datos como SQL o Google Cards para la segunda, y la entrada a la computadora se realiza a través de lenguajes de datos como XML.

La definición A es insatisfactoria porque necesariamente incluye muchas cosas que tradicionalmente no podríamos definir como lenguajes, como lenguajes corporales, expresiones faciales o feromonas.

Definición B:

El lenguaje es un sistema estructurado utilizado para la comunicación.

¿Qué significa "estructurado"? Para esto, definiremos "estructurado" como la propiedad de que el sistema tiene reglas consistentes para combinar elementos en el lenguaje para construir compuestos más grandes para expresar conceptos arbitrariamente complicados.

¿Qué estructuras tiene un lenguaje ensamblador? El lenguaje ensamblador consiste únicamente en declaraciones imperativas con un conjunto fijo de registros y direcciones de memoria. Una instrucción como mov %eax, %edxo int 21hindica al procesador que realice ciertas operaciones.

¿Dónde se queda corto el lenguaje imperativo? La asamblea tiene un conjunto fijo de verbos, que generalmente se cuentan por cientos. No es posible definir nuevas instrucciones en lenguaje máquina puro (dejemos de lado las instrucciones sintéticas creadas por macros).

¿Qué tipo de lenguajes de programación pueden definir y expresar verbos arbitrarios? Los lenguajes procedimentales son lenguajes en los que puede definir nuevos verbos combinando verbos existentes. Sin embargo, los lenguajes procesales siguen siendo inherentemente imperativos, ya que todavía solo tienen verbos.

¿Dónde se queda corto el lenguaje procesal? Los lenguajes de procedimiento, como C, no pueden expresar sustantivos de forma nativa (ignoremos el uso de struct con convenciones de nomenclatura de prefijos).

¿Qué tipo de lenguajes de programación pueden definir y usar sustantivos para expresar un concepto coherente? Los lenguajes orientados a objetos tienen sustantivos. Y los objetos se pueden usar como sujeto y como objeto. En lenguaje orientado a objetos, puedes expresar conceptos como:

Sustantivos comunes/de clase: "Un humano"

class Human {}

Relación es-A: "Una realeza es un humano":

class Royalty : Human {}

Propiedades simples: "Un humano puede o no estar vivo"

class Human {
    Boolean alive;
}

Propiedades complejas: "Un humano tiene color de piel"

class Human {
    Color skin;
}

Propiedades conductuales: "Un humano puede hablar con otro humano sobre algún tema"

class Human {
    void talkTo(Human another, Topic topic);
}

Cuando se combina con características del lenguaje imperativo y procedimental, también puede expresar conceptos como:

Sustantivo propio/específico: "Que el rey sea una realeza"

king = new Royalty();

Propiedades Específicas: "Que el Príncipe Heredero sea una realeza con piel oscura"

crown_prince = new Royalty(skin=dark);

Actores y verbos imperativos: "¡Príncipe heredero, habla con la reina sobre el clima!"

crown_prince.talkTo(queen, weather);

¿Qué le falta a un lenguaje orientado a objetos? Una gran omisión es la declaración de los hechos. Un lenguaje orientado a objetos tiene que usar soluciones alternativas como las cláusulas "Let..be" para establecer un hecho, y esto no es satisfactorio.

¿Qué tipo de lenguajes tienen una declaración de hecho? Un lenguaje de programación lógica como Prolog o los DSL utilizados para programar un sistema experto tienen una forma nativa de exponer hechos, sin los circunloquios necesarios en lenguajes menos expresivos.

Por ejemplo, podemos expresar en un lenguaje de programación lógica:

Declaración de hecho: "El león tiene glándula mamaria"

has_mammary_gland(lion).
has_mammary_gland(human).
mammal(X) :- has_mammary_gland(X).

Y estas declaraciones y reglas pueden ser utilizadas por un solucionador de consultas para inferir soluciones a las preguntas:

Sí/No Pregunta: "¿Es un león un mamífero?"

?- mammal(lion).
true

WH Pregunta: "¿Qué mamíferos conoces?"

?- mammal(Animal).
Animal = lion
Animal = human
Puede reemplazar los nombres de las clases con cadenas arbitrarias (Hgyj en lugar de Human, agkg en lugar de living). Estrictamente hablando, el programa es el mismo. ¿Cómo dirías que el programa es realmente sobre humanos sin depender del inglés? La estructura no es suficiente, necesita una referencia al mundo real, del que carecen los lenguajes de programación.
@quen_tin: Buena pregunta. Sí, en realidad no importa cuál sea la cadena que coloques como nombres de clase (muchos lenguajes informáticos los descartarían de todos modos); más bien, la forma en que sabe que la clase Hgyj se refiere a humanos del mundo real es por la estructura y las relaciones entre las definiciones de clase y método que se crean a partir de las funciones integradas en la biblioteca estándar. El ser humano, por ejemplo, es la única criatura en el mundo conocido de la computadora que puede unirse entre sí. Cuando proporciona la definición del método para Hgyj.agkg, entonces queda claro para la computadora que solo los humanos del mundo real se ajustan a eso.
@quen_tin: una gran diferencia entre los lenguajes informáticos y los lenguajes humanos es que los lenguajes informáticos comienzan con un diccionario bastante vacío, mientras que el lenguaje humano casi siempre comienza con un diccionario bastante pesado de palabras existentes que se programan lentamente en usted una por una desde que eres un niño pequeño que apenas puede hablar. Es por eso que necesita definir sus propias palabras y conceptos desde cero, pero no sintió la necesidad de hacerlo con los lenguajes naturales.
@quen_tin: también, para ponerlo en perspectiva, deberías hacerte la misma pregunta con los lenguajes naturales. ¿Por qué sabrías que la cadena "humano" en inglés se refiere a cierto grupo de criaturas en el mundo 3D? Tus maestros o padres probablemente te programaron la definición de esa palabra cuando eras pequeño. Las computadoras también deben hacer lo mismo, los identificadores a menudo, pero no siempre, están relacionados con conceptos del mundo real, pero las computadoras están felices de trabajar con una definición mínima.
el punto es que aprendemos palabras interactuando con el mundo, y esto es posible porque tenemos un "hardware" similar pero los lenguajes de programación son independientes del hardware y las computadoras no son criaturas vivientes autónomas. + no aprendemos palabras a través de definiciones explícitas.
La cuestión de la referencia de los términos es compleja, pero dudo que la estructura sea suficiente para fijar la referencia.