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.