programming-languages intentional-programming

programming languages - ¿Qué es exactamente la Programación Intencional?



programming-languages intentional-programming (7)

En mi juerga de lectura, me topé con algo llamado Programación intencional . Lo entendí un poco, pero no completamente. Si alguien puede explicarlo en más detalle, por favor hazlo. ¿Está siendo utilizado en cualquier aplicación real?


Es lo contrario de lo que sucede cuando llego a casa a las 2 de la madrugada después de un rastreo de pubs y enciendo la computadora portátil " solo para revisar mi correo electrónico muy rápido, cariño " .

Luego, al día siguiente, cuando abro un ojo y me dirijo al baño al romper el mediodía , comienzo a cepillarme los dientes y me doy cuenta, la pasta de dientes gotea de mi boca, que anoche hice 4 commits de SVN, cerrados 3 errores, y descubrió cómo resolver el problema de inanición en nuestro protocolo de bloqueo distribuido. Y no tengo idea de cómo diablos funciona, nunca más.

O tal vez es lo que dijo workmad3.


Es donde pretendes programar, no solo lo haces accidentalmente. ;)


Parece ser un método de programación que permite al programador expandir lo que realmente está en el idioma para seguir más de cerca su intención original, en lugar de forzar la intención del programador a la sintaxis restringida del idioma.

Menciona explícitamente a LISP como un lenguaje que admite esto, por lo que le sugiero que lea este excelente lenguaje :) LISP Macros son exactamente las que se describen en el artículo, lo que le permite ampliar indefinidamente el idioma para cubrir casi cualquier cosa que le interese para expresar. (Un resultado bastante común de los grandes sistemas LISP es que terminas con un lenguaje específico de dominio que es muy bueno para escribir aplicaciones específicas, es decir, escribir un procesador de texto termina en un lenguaje específico de procesador de textos).

Para su última parte, sí LISP (y, por lo tanto, la Programación Intencional) se utiliza en algunos proyectos. Paul Graham es un gran defensor de LISP, y otros ejemplos incluyen el Crash Bandicoot original (se creó un sistema de creación de objetos de juego en LISP para esto, incluido un compilador de PlayStation LISP)


Tengo una comprensión ligeramente diferente de la Programación intencional (como un término más general, no solo lo que Charles Simonyi está haciendo). Está estrechamente relacionado con las interfaces fluidas y puede lograrse, con diversos grados de dificultad, en los modernos lenguajes orientados a objetos.

Algunos de estos conceptos provienen del Diseño Dirigido por Dominio (de hecho, el término "interfaz fluida" ha sido popularizado por Eric Evans, el autor del libro azul "El diseño impulsado por el dominio: Complejidad en el corazón del software" ).

El objetivo es hacer que el código de la capa empresarial sea legible por un programador no profesional (es decir, una persona de negocios). Esto se puede lograr por nombres de clase y método que indiquen explícitamente la intención de la operación. En mi opinión, ser explícito y ser intencional produce código altamente legible y mantenible.

Considere los dos ejemplos a continuación que logran lo mismo: crear un pedido para un cliente con un descuento del 10% y agregarle un par de productos.

//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();

Al cambiar ligeramente su estilo de programación, puede comunicar su intención más claramente y reducir la cantidad de tener que mirar el código en otro lugar para comprender lo que está sucediendo.


La Programación intencional es la codificación de su intención o metas . Por lo tanto, es Programación o Planificación Orientada a Objetivos. Paso a manangement.


Me has empezado en este ...
Parece que C. Simonyi quería pasar al siguiente nivel de abstracción de los lenguajes de alto nivel. Reduzca la dependencia de los clientes en los desarrolladores para hacer que cada cambio ... en el código (críptico para las personas que no están en desarrollo). Así que inventa este nuevo producto llamado IP, que tiene un editor de GUI de tipo WYSIWYG para crear un modelo específico de dominio. (es decir, IP tiene una GUI para crear los bloques de construcción para su aplicación. LISP le permitió crear los meta / bloques de construcción pero no de una manera que los expertos de dominio pudieran hacerlo fácilmente).
Al igual que los modelos en UML, la promesa es que usted puede generar automáticamente el código fuente correspondiente con solo presionar un botón. Por lo tanto, los expertos del dominio pueden ajustar el modelo en el futuro y presionar el botón Bake para entregar la próxima versión de la aplicación. Sin embargo, parece utilizar DSL con el beneficio adicional de que múltiples DSL creadas por el usuario pueden comunicarse entre sí a través de un mecanismo de IP incorporado ... lo que significa que el modelo de finanzas y el modelo de ventas pueden interactuar y reutilizar bloques según sea necesario. Al igual que con las DSL, usted obtiene el beneficio de un código que transmite la intención del desarrollador en lugar de apaciguar las limitaciones del lenguaje de implementación.

La idea es dar un mayor control a los expertos en BA y dominio que realmente saben lo que se necesita ...

Actualización : el uso en el mundo real parece ''todavía no'' ... aunque Simonyi cree '' absolutamente en el largo plazo ''.
Relato breve : MS aplastó IP a favor de .Net framework, Simonyi dejó MS y formó su propia compañía '' Intentional Software '' ... con el contrato de que podría usar las ideas de IP pero tendría que reescribir su proto de trabajo desde cero .. (eso debería retrasarlo). Todavía es Work-In-Progress, creo ... y está escrito en C # (para arrancar)

Fuentes:

Pensar hasta ayer ... No sabía nada de esto. Periodista de investigación despidiéndose. Volviendo al trabajo diario :)


Me parece una nueva moda de ingeniería de software. Ya hemos visto miles de ellos: programación meta, programación generativa, programación visual, etc. Durante un tiempo corto se ponen muy de moda, la gente lo usa en todas partes, y luego invariablemente vuelven a las viejas formas de crear software.

¿Por qué? Frederick Brooks ya respondió esta pregunta hace más de 20 años: no hay una bala de plata para matar al hombre lobo ...