È difficile sviluppare un linguaggio di programmazione strettamente correlato al linguaggio umano? [chiuso]

2

Sarà difficile sviluppare un linguaggio di programmazione molto più vicino alla nostra lingua?

Era solo per conoscere il punto di vista dei programmatori in tutto il mondo verso il linguaggio di programmazione naturale. Grazie per avermi dato il tuo parere su questo.

    
posta CodeIt 28.12.2014 - 08:48
fonte

5 risposte

15

Che cosa intendi per "strettamente correlato"? Che problema sta andando a risolvere questo langugae?

Credi che rendendo un linguaggio di programmazione simile a un linguaggio umano, cioè utilizzando molte parole chiave e una piccola interpunzione nella sua sintassi, la programmazione sarà più facile? Non è difficile da fare, ma futile. È stato provato molte volte , in particolare con SQL e COBOL. Tali linguaggi sono spesso non graditi dai programmatori per la loro prolissità e non aiutano le persone a imparare più facilmente la programmazione.

Ciò che rende difficile la programmazione non è la sintassi composta da simboli bizzarri, ma il compito di tradurre i requisiti in istruzioni chiare e dettagliate e di trattare quali sono i casi speciali a cui nessuno ha pensato durante la formulazione dei requisiti.

O prevedi la possibilità di usare un linguaggio naturale in forma libera per istruire un computer? Anche questo, è stato provato per un lungo periodo , ed è uno dei più difficili problemi irrisolti nell'intelligenza artificiale, perché non sarebbe affatto un linguaggio di programmazione, privo di sintassi formale e semantica. Fondamentalmente, hai bisogno di un compilatore o di un interprete intelligente come un essere umano. In effetti, questo è praticamente il compito dei programmatori umani.

    
risposta data 28.12.2014 - 09:51
fonte
11

Supponendo di avere l'essenza della tua domanda (qualcosa con l'effetto di "perché i linguaggi di programmazione non sono più simili ai linguaggi naturali"):

Sì, ma è un argomento molto complicato, ben oltre lo scopo di una domanda a una riga.

Ma ti indicherò:

  • AppleScript (cosa succede quando un linguaggio di programmazione cerca di essere più "naturale").

E,

  • Legalese (cosa succede quando un linguaggio naturale cerca di essere più "programmatico").
risposta data 28.12.2014 - 09:32
fonte
6

Cose come sono state provate, ma è probabile che anche se risolverai il difficile problema di analizzare il linguaggio naturale e di interpretarlo in qualcosa di significativo (c'è un walth of reading in NLP - elaborazione del linguaggio naturale), avrai un altro problema se sarà utile programmare con.

Il linguaggio naturale ha lo scopo di coprire un dominio molto ampio (tutta l'esperienza umana) trasmettendo sottigliezza di significato. Per fare ciò, si basa molto sul contesto: punti di riferimento condivisi tra interlocutori, salti logici e risoluzioni di ambiguità che entrambe le parti sono sicure che l'altro possa fare.

Considera il seguente scambio:

A: It's French Onion soup today.

B: Oh, dear! Would you like one of my sandwiches?

L'altoparlante B deduce che "It" significa "la zuppa in offerta", presumibilmente presso l'unica fonte di cibo nelle vicinanze; B sa che l'oratore A non ama o non può mangiare zuppa di cipolle e sa che A sarà quindi affamato, quindi esprime simpatia. B ha ed è disposto a rinunciare a un panino per evitare che A abbia fame e pensa che A apprezzerà questa offerta.

Questo funziona per il linguaggio umano conversazionale in cui stiamo cercando di esprimere il nostro contributo in modo colloquiale e ascoltare ciò che l'altra parte ha da dire, ma per la programmazione vogliamo essere molto specifici. La programmazione è l'arte di dare istruzioni dettagliate che in determinate circostanze daranno risultati noti. In questo caso, è più difficile correggere un computer a livello di conversazione in fase di esecuzione. Non vuoi che il tuo software business-critical prenda la decisione sbagliata perché ha fatto l'ipotesi sbagliata quando risolveva il linguaggio naturale. È anche probabile che sia inefficiente in termini di prestazioni non elaborate.

In sostanza, il dominio problematico della programmazione (al contrario delle applicazioni che accettano input dell'utente come "Prenota un appuntamento con il dottore il martedì") è un problema molto specifico che il linguaggio umano naturale è relativamente povero nell'indirizzamento.

Gli umani sono perfettamente in grado di scrivere in linguaggi che le macchine possono comprendere, almeno ora abbiamo linguaggi come C, Perl, ecc. I computer non sono bravi a capire i linguaggi che vengono naturalmente agli umani. In genere arriviamo a un compromesso sulle lingue con sintassi parseable e significato non ambiguo. Sebbene possiamo usare lo zucchero sintattico (noto anche come DWIM o "Fai quello che voglio dire") per sfumare sugli aspetti più delicati di una lingua, dobbiamo fare attenzione a garantire che questo sia governato da regole trasparenti sia per il computer che per il programmatore . La lingua significativamente più "umana" ci farà perdere tempo a indovinare "OK, ma cosa farà il computer con queste informazioni?".

Un eccellente esempio del confine tra utile e frustrante è this in JS. Da un lato this ti consente di fare le cose rapidamente senza preoccuparti troppo dei parametri. Dall'altro, è una calamita per l'azione a distanza bug che sono davvero difficili da rintracciare quando pensate che this si riferisca a una cosa ma in realtà si riferisce a qualcos'altro.

In realtà, dare istruzioni chiare a volte può essere difficile tra gli umani, e parole reali come "questo" sono spesso fraintese - non siamo bravi a comunicare le nostre aspettative prima volta e la disciplina di tradurla in univoco è vitale parte della programmazione.

    
risposta data 28.12.2014 - 12:39
fonte
4

Non solo sarebbe difficile svilupparlo, dato che fare ciò richiederebbe fondamentalmente un'intelligenza artificiale, sarebbe anche più difficile da usare rispetto ai linguaggi di programmazione correnti. Un linguaggio di programmazione richiede oggi un investimento di tempo per apprendere la sintassi e le funzioni di libreria disponibili, ma in cambio di tale investimento si ottiene un profitto in termini di un linguaggio chiaro e non ambiguo che ha un significato definito e (solitamente) facile da comprendere per programmi ben formati. Le lingue umane sono imprecise e ambigue, il che le rende inadatte per le attività di programmazione.

    
risposta data 28.12.2014 - 09:35
fonte
1

Sì e No.

Se intendi solo che è come chiedere a Siri di fare cose, rimarrai deluso.

Dopotutto, le persone hanno cercato di rendere linguaggi informatici simili a umani per molto tempo. Guarda Cobol.

D'altra parte, se hai qualcosa nella tua testa e stai cercando di insegnare al computer come farlo, ci deve essere una buona corrispondenza tra i concetti a cui stai pensando, e nomi e verbi disponibili nel linguaggio di programmazione.

In realtà, non c'è altro modo di scrivere qualsiasi programma. La prima cosa che fai è definire variabili, strutture dati, funzioni / metodi, che corrispondono a ciò a cui stai pensando, in modo da poter dire al computer cosa fare. Non stai più lavorando in Java, Python, Fortran o in qualsiasi altra cosa hai iniziato. Questa è solo la lingua di base. Stai lavorando nella particolare lingua che hai insegnato.

Questo non significa che qualsiasi Joe Schmoe possa camminare e capire il tuo codice. Proprio come c'era una curva di apprendimento da parte della macchina, c'è anche una curva di apprendimento da parte sua. Le persone che pensano di non dover spendere tempo a imparare (per ottenere la ricompensa di una maggiore produttività) non sono solo seri.

Allo stesso tempo, devi essere un insegnante. Proprio come hai insegnato al computer di cosa stai parlando, devi anche insegnare ad altre persone.

    
risposta data 28.12.2014 - 22:05
fonte

Leggi altre domande sui tag