Domanda

Durante la mia folle lettura, mi sono imbattuto in qualcosa chiamato Programmazione intenzionale . L'ho capito un po ', ma non completamente. Se qualcuno può spiegarlo in modo più dettagliato, per favore fallo. Viene utilizzato in qualche vera applicazione?

È stato utile?

Soluzione

Mi hai iniziato con questo ...
Sembra che C. Simonyi volesse passare al livello successivo di astrazione dalle lingue di alto livello. Ridurre la dipendenza dei clienti dagli sviluppatori per apportare ogni modifica al codice (criptico per le persone non in fase di sviluppo). Quindi inventa questo nuovo prodotto chiamato IP, che ha un editor GUI di tipo WYSIWYG per creare un modello specifico di dominio. (ovvero IP ha una GUI per creare i blocchi predefiniti per la tua app. LISP ti ha permesso di creare i meta / blocchi predefiniti, ma non in modo che gli esperti del dominio possano farlo facilmente.)
Come i modelli in UML, la promessa è che puoi generare automaticamente il codice sorgente corrispondente premendo " un pulsante " ;. In questo modo gli esperti del dominio potranno modificare il modello in futuro e premere il pulsante Cuocia per fornire la versione successiva dell'app. Sembra però utilizzare i DSL con l'ulteriore vantaggio che più DSL creati dagli utenti possono dialogare tra loro tramite un meccanismo IP incorporato ... il che significa che il modello finanziario e il modello di vendita possono interagire e riutilizzare blocchi secondo necessità. Come per le DSL, ottieni il vantaggio del codice che trasmette l'intenzione degli sviluppatori piuttosto che placare i vincoli del linguaggio di implementazione.

L'idea è quella di dare un maggiore controllo ai BA e agli esperti di dominio che sanno effettivamente cosa è necessario ...

Aggiorna : L'uso del mondo reale sembra 'non ancora' .. sebbene Simonyi creda ' assolutamente nel lungo termine '.
Breve storia : MS ha schiacciato l'IP a favore del framework .Net, Simonyi ha lasciato la MS e ha formato la propria compagnia ' Software intenzionale '.. con il contratto che avrebbe potuto usare le idee IP ma che avrebbe dovuto riscrivere il suo proto funzionante da zero ... (che dovrebbe rallentarlo). Penso che sia ancora un work-in-progress ... ed essere scritto in C # (per l'avvio)

Fonti:

Pensare fino a ieri .. Non ne sapevo nulla. Annullamento del reporter investigativo. Tornando al lavoro quotidiano :)

Altri suggerimenti

È l'opposto di quello che succede quando torno a casa alle 2 del mattino dopo che un pub striscia e accende il laptop " solo per controllare la mia e-mail molto velocemente, tesoro. "

Quindi, il giorno successivo, quando apro un occhio e trovo la strada per il bagno alla spaccatura di mezzogiorno , inizio a lavarmi i denti e mi rendo conto, dentifricio che gocciolava dalla mia bocca, quella notte scorsa ho fatto 4 commit SVN, chiuso 3 bug e ho capito come risolvere il problema della fame sul nostro protocollo di blocco distribuito. E non ho nessuna idea come diavolo funziona,

O forse è quello che ha detto workmad3.

Sembra essere un metodo di programmazione che consente al programmatore di espandere ciò che è effettivamente nella lingua per seguire più da vicino il loro intento originale, piuttosto che forzare gli intenti del programmatore nella sintassi vincolata del linguaggio.

Indica esplicitamente LISP come una lingua che supporta questo, quindi ti suggerisco di leggere su questa grande lingua :) Le macro LISP sono esattamente ciò che sono descritte nell'articolo, permettendoti di espandere indefinitamente la lingua per coprire quasi tutto ti piacerebbe esprimere. (Un risultato abbastanza comune di grandi sistemi LISP è che si finisce con un linguaggio specifico di dominio che è molto buono per scrivere applicazioni specifiche, cioè scrivere un elaboratore di testi finisce con un linguaggio specifico di elaboratore di testi).

Per la tua ultima parte, sì LISP (e quindi Programmazione intenzionale) viene utilizzato in alcuni progetti. Paul Graham è un grande sostenitore di LISP, e altri esempi includono l'originale Crash Bandicoot (un sistema di creazione di oggetti di gioco è stato creato in LISP per questo, incluso un compilatore LISP PlayStation)

Ho una comprensione leggermente diversa della Programmazione intenzionale (come termine più generale, non solo quello che sta facendo Charles Simonyi). È strettamente collegato a interfacce fluenti e può essere raggiunto, con vari gradi di difficoltà, nelle moderne lingue orientate agli oggetti.

Alcuni di questi concetti provengono da Domain Driven Design (in effetti il ??termine "interfaccia fluida" è stato reso popolare da Eric Evans, autore del "libro blu" - Domain Driven Design: Tacking Complexity in the Cuore del software ).

L'obiettivo è rendere il codice del livello aziendale leggibile da un non programmatore (cioè un uomo d'affari). Ciò può essere ottenuto con nomi di classi e metodi che dichiarano esplicitamente l ' intento dell'operazione. Secondo me, essere espliciti ed intenzionali produce un codice altamente leggibile e mantenibile.

Considera i due esempi seguenti che ottengono la stessa cosa: creare un ordine per un cliente con uno sconto del 10% e aggiungere un paio di prodotti ad esso.

//C#, Normal version
Customer customer = CustomerService.Get(23);

Order order = new Order();
//What is 0.1? Need to look at Discount property to understand
order.Discount = 0.1; 
order.Customer = customer;

//What's 34?
Product product = ProductService.Get(34); 
//Do we really care about Order stores OrderLines?
order.OrderLines.Add(new OrderLine(product, 1)); 

Product product2 = ProductService.Get(54);
order.OrderLines.Add(new OrderLine(product2, 2)); //What's 2?

Order.Submit();

//C#, Fluent version
//byId is named parameter, states that this method looks up customer by Id
ICustomerForOrderCreation customer = 
  CustomerService.GetCustomerForOrderCreation(byId: 23); 
//Explicit method to create a discount order and explicit percentage
Order order = customer.CreateDiscountOrder(10.Percent()) 
  .WithProduct(ProductService.Get(byId: 34))
  .WithProduct(ProductService.Get(byId: 54))
  .WithQuantity(2); //Explicit quantity

Order.Submit();

Modificando leggermente il tuo stile di programmazione, sei in grado di comunicare più chiaramente le tue intenzioni e ridurre la quantità di dover consultare il codice altrove per capire cosa sta succedendo.

Mi sembra l'ennesima mania dell'ingegneria del software. Ne abbiamo già visti migliaia: meta-programmazione, programmazione generativa, programmazione visiva e così via. Per un breve periodo diventano molto alla moda, le persone lo usano ovunque, e poi invariabilmente tornano ai vecchi modi di creare software.

Perché? Frederick Brooks ha già risposto a questa domanda oltre 20 anni fa: c'è Nessun singolo proiettile d'argento per uccidere il lupo mannaro ...

La programmazione intenzionale sta codificando il tuo intento o obiettivi . Quindi si tratta di programmazione o pianificazione orientata agli obiettivi. Passa alla gestione.

È dove intendi programmare, non lo fai solo per caso. ;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top