La codificación emergente es un paradigma de desarrollo de software descentralizado que emplea un tipo de componente de software que no se puede copiar ni reutilizar, con el objetivo de lograr tanto una especialización funcional del desarrollador como un mercado práctico de componentes de software. [ 1 ] [ 2 ]
Descripción
La codificación emergente es un paradigma de desarrollo de software descentralizado que emplea un nuevo tipo de componente de software que no se puede copiar ni reutilizar. [ 1 ] El método garantiza que los desarrolladores puedan publicar sus componentes de software para la venta pública de forma segura sin poner en peligro las perspectivas de negocios recurrentes , [ 3 ] una característica esencial tanto para la especialización viable de los desarrolladores como para la realización de la visión de Douglas McIlroy de 1968 sobre un mercado de componentes de software. [ 2 ]
El cambio supone una inversión de la responsabilidad de integración, de modo que, en lugar de obtener un componente en el sentido tradicional, el desarrollador proporciona al proveedor un entorno de construcción del proyecto, y este integra ahora su componente en el proyecto. Esta inversión transforma la visión de los componentes, pasando de ser una biblioteca de rutinas a un catálogo de servicios de diseño. [ 1 ]
La inversión permite que este nuevo tipo de componente se escale adecuadamente, ya que el sitio de construcción se puede dividir fácilmente para contratar subcontratistas, lo que permite desplegar componentes como un conjunto de otros más pequeños que hacen lo mismo. La reducción de escala permite que los componentes pequeños absorban el rol del compilador tradicional , eliminando su centralidad en el desarrollo de software, mientras que la ampliación de escala da como resultado componentes específicos del dominio para expresar los requisitos del proyecto . [ 1 ]
Historia
En una conferencia de la OTAN en 1968, Douglas McIlroy observó: «La industria del software no está industrializada» [ 2 ] y propuso un mercado de componentes de software con «distribución de componentes mediante enlace de comunicación », mediante el cual «incluso los componentes más pequeños podrían comercializarse de forma rentable». McIlroy imaginó un catálogo al estilo de Sears-Roebuck para tenerlo a su disposición si compraba componentes. La propuesta de McIlroy no abordó cómo podría surgir una especialización viable de los desarrolladores si queremos convertir a nuestros « agricultores » en « industriales ». En concreto, si bien es fácil para un desarrollador especializarse, es prácticamente imposible que construya un negocio viable como especialista.
A finales de 1994, Noel Lovisa propuso invertir la responsabilidad de la integración como medio para proteger la propiedad intelectual de los proveedores , preservando así las perspectivas de negocios recurrentes y estableciendo una base viable para la especialización de los desarrolladores. Lovisa fundó Code Valley Corp Pty Ltd [ 4 ] en mayo de 2000 para crear y desplegar un mercado práctico de componentes de software basado en este principio, publicando un libro blanco en 2016 [ 1 ] y realizando pruebas de un mercado centralizado de componentes de software ese mismo año. En junio de 2018, Lovisa pronunció un discurso de apertura en ICSE 2018 en Gotemburgo , Suecia [ 5 ] [ 6 ] que, al ser el 50 aniversario de la Conferencia de Ingeniería de Software de la OTAN de 1968 [ 7 ] [ 8 ] [ 2 ], contó con la asistencia de McIlroy y otros líderes de la industria. En septiembre de 2023, McIlroy extendió una invitación a Lovisa para presentar Emergent Coding en Dartmouth College , New Hampshire. [ 9 ]
A finales de 2023, Code Valley comenzó las pruebas de un mercado descentralizado y totalmente descentralizado de componentes de software que incluía un entorno de desarrollo integrado (IDE) personalizado, más de 5000 componentes de software que ocupaban 4 niveles de abstracción (comportamiento, sistemas, datos, byte), un sistema de rastreo de fallos distribuido (DFT), un sistema de pago electrónico entre pares y un catálogo interactivo de precios de componentes, hojas de datos, especificaciones de contratos y diseños de referencia.
Se prevé que la implementación, desarrollada mediante codificación emergente, se lance públicamente a finales de 2026.
Desarrollo de software de codificación emergente
El desarrollo de software basado en componentes comienza con la redacción de una expresión que contiene una serie de cláusulas contractuales para la contratación de los proveedores de componentes deseados, con la ayuda de las especificaciones contractuales publicadas en el catálogo de componentes. Dado que todos los componentes del catálogo tienen un precio, el coste total del proyecto puede determinarse con precisión a partir de la expresión antes de iniciar la construcción. Una vez que la expresión se considera correcta y los costes aceptables, se puede construir el proyecto. Durante el proceso de construcción, el IDE analiza la expresión y contrata a los proveedores, enviándoles los contratos y los pagos correspondientes. Estos proveedores reciben una parte de sus requisitos directamente a través de los términos de su contrato, y el resto se determina mediante la colaboración entre ellos, según lo autorizado por dichos términos. Cada proveedor de componentes finaliza su contrato devolviendo un fragmento de código y datos que, al concatenarse, forman el binario del proyecto resultante. [ 1 ]
Cada contratista contratado verifica el pago y asigna un trabajo al contrato, asegurándose de devolver el número de trabajo al cliente para que este pueda enviar las autorizaciones de comunicación para las colaboraciones entre contratistas, tal como se detalla en la expresión. Estos contratistas reciben una parte de sus requisitos directamente a través de los términos de su contrato, y el saldo se determina mediante la colaboración con sus pares, según lo autorizado por los términos del contrato. Una vez que tienen en su poder los requisitos del proyecto, cada uno subcontrata componentes más pequeños según lo indique su conocimiento especializado , quienes hacen lo mismo. Cada subcontratista de componentes devuelve un fragmento de código y datos que, al concatenarse, forman fragmentos únicos de código y datos que se entregan al cliente, concluyendo así el contrato. [ 1 ]
Los contratistas hoja en el árbol de contratación del proyecto verifican de manera similar el pago y asignan un trabajo al contrato, asegurándose de devolver el número de trabajo al cliente para que este pueda enviar las autorizaciones de comunicación para las colaboraciones entre contratistas según lo detallado por su conocimiento especializado. Como antes, estos contratistas reciben una parte de sus requisitos directamente a través de los términos de su contrato, y el saldo se determina mediante la colaboración con sus pares según lo autorizado por los términos del contrato; sin embargo, como resultado de obtener una comprensión suficiente de su contexto de tiempo de diseño, entregan su código y fragmentos de datos directamente para que el cliente los reciba, concluyendo así el contrato. [ 1 ]
Véase también
Notas
Referencias
- 1 2 3 4 5 6 7 8 "Documento técnico sobre codificación emergente, disponible en el sitio web" . Code Valley . Consultado el 6 de agosto de 2024 .
- 1 2 3 4 McIlroy, Douglas (11 de octubre de 1968). "COMPONENTES DE SOFTWARE DE PRODUCCIÓN EN MASA" . Ingeniería de software, Informe de una conferencia patrocinada por el Comité Científico de la OTAN, Garmisch, Alemania . Recuperado el 6 de agosto de 2024 .
- ↑ Vitharana, Padmal. "Riesgos y desafíos del desarrollo de software basado en componentes" . ACM.org . Communications of the ACM . Consultado el 30 de septiembre de 2024 .
- ↑ "Registro Mercantil Australiano" .
- ↑ "En directo desde ICSE: Foro de la industria - Noel Lovisa" . Consultado el 19 de septiembre de 2024 .
- ↑ "ICSE 2018" . 40.ª Conferencia Internacional sobre Ingeniería de Software, del 27 de mayo al 3 de junio de 2018, Gotemburgo, Suecia .
- ↑ "Ingeniería de Software" (PDF) .
- ↑ "Técnicas de ingeniería de software" (PDF)
- ↑ "Codificación emergente: un modelo radical de desarrollo de software" . 15 de septiembre de 2023. Consultado el 19 de septiembre de 2024 .
- Lenguajes de programación basados en prototipos
- Software multiplataforma
