Los términos desarrollo de usuarios (Desarrollo de usuarios finales - EUD ) o programación de usuarios (Programación de usuarios finales - EUP ) denotan un conjunto de técnicas y herramientas que permiten la programación por parte de usuarios finales , personas que no son desarrolladores de software profesionales . Las personas que no son desarrolladores profesionales pueden utilizar las herramientas de EUD para crear o modificar artefactos de software (descripciones de acciones automáticas) y objetos de datos complejos sin conocimientos de lenguajes de programación .
Existen varios enfoques para el problema de la programación del usuario: este tema se explora activamente en la informática y la ciencia de la interacción humano-computadora . Los ejemplos incluyen sistemas de programación de lenguaje natural [1] [2] , hojas de cálculo [3] , lenguajes de secuencias de comandos (especialmente en suites ofimáticas o aplicaciones para artistas), programación visual, programación de acción desencadenante y programación de ejemplo .
La herramienta de programación de usuario más popular son las hojas de cálculo [3] [4] Debido a su naturaleza no restrictiva, permiten a los usuarios con poca experiencia escribir programas que representan modelos de datos complejos mientras los protegen de tener que aprender lenguajes de programación de bajo nivel. [5] Las habilidades con hojas de cálculo se consideran unas de las más útiles para los graduados universitarios debido al uso generalizado de hojas de cálculo para resolver problemas comerciales . [6] A partir de 2005, el número de usuarios que usan hojas de cálculo en los Estados Unidos se estimó en 13 millones de personas. [7]
El uso de la programación de ejemplo la necesidad de que el usuario aprenda las abstracciones de los lenguajes de programación clásicos. En cambio, el usuario especifica ejemplos de los resultados deseados u operaciones que se realizarán en los datos, y el sistema de programación del ejemplo sí mismo deriva abstracciones de esto, correspondientes al programa que genera el resultado deseado. Se pueden ingresar nuevos datos en el programa creado automáticamente de esta manera, y el usuario puede corregir errores en la salida para corregir el programa. Las plataformas de desarrollo con un mínimo de código también son una opción para la programación del usuario.
Un área de desarrollo en esta área es el uso de dispositivos móviles para apoyar el desarrollo de software personalizado. La especificidad de los dispositivos móviles no permite aplicar los mismos enfoques que funcionaron para las aplicaciones de escritorio. Los entornos de escritorio de EUD carecen de los beneficios de permitir que los usuarios finales creen aplicaciones siempre que sea posible. [ocho]
Recientemente, también ha aumentado el interés en cómo utilizar las técnicas de EUD para desarrollar aplicaciones de Internet de las cosas . En esta área, la programación de acciones desencadenantes se considera un enfoque prometedor. [9]
Las decisiones de la EUD pueden tener un impacto significativo en áreas tales como el ciclo de vida del software para productos de software comerciales, el desarrollo web doméstico y la implementación de aplicaciones empresariales .
Actualmente hay aproximadamente 40 proveedores que ofrecen soluciones a los usuarios finales para reducir el esfuerzo de programación. Crear programas en ellos no requiere conocimientos de programación tradicional, sin embargo, están diseñados para crear sistemas bastante especializados, como sistemas de gestión de contratos, sistemas de gestión de relaciones con clientes , sistemas de seguimiento de fallos y errores . Dichos sistemas de desarrollo a menudo se denominan plataformas de desarrollo con un mínimo de código . Por regla general, son una guía interactiva que permite al usuario desarrollar una aplicación en tan solo 40-80 horas (1,7-3,3 días).
Lieberman y otros ofrecen la siguiente definición: [10]
El desarrollo de usuarios se puede definir como un conjunto de métodos, técnicas y herramientas que permiten a los usuarios de software que no son desarrolladores de software profesionales crear, modificar o ampliar artefactos de software hasta cierto punto.
Ko et al., ofrecen la siguiente definición: [11]
La programación del usuario es la programación para lograr el resultado de un programa principalmente para uso personal en lugar de público.
Los artefactos de software creados por los usuarios finales pueden ser descripciones de comportamientos automatizados o secuencias de control, como consultas de bases de datos o reglas gramaticales [12], que se pueden crear utilizando paradigmas de programación como programación por demostración , programación por ejemplos , programación visual o crear macros . [13] Ellos (artefactos) también pueden ser un conjunto de parámetros que apuntan a una de las formas predefinidas en que funciona el programa. [14] Otros artefactos generados por el usuario final pueden ser formas de contenido generado por el usuario, como anotaciones, que pueden o no ser interpretables mediante programación (es decir, pueden ser procesadas por funciones automatizadas apropiadas). [quince]
Los ejemplos de desarrollo personalizado incluyen:
Según Sutcliff , [21] EUD es esencialmente subcontratar el desarrollo al usuario final. Aprender las herramientas de EUD siempre requiere un poco de esfuerzo, por lo que la motivación de los usuarios depende de su creencia de que ayudarán a facilitar el trabajo, ahorrar tiempo o aumentar la productividad. En este modelo, los beneficios para el usuario se basan en marketing, demostraciones y el boca a boca. Una vez que la tecnología se usa activamente, la experiencia real y los beneficios se convierten en un motivador clave.
El estudio anterior define costos como la suma de lo siguiente:
Los costos del primer y segundo punto son únicos, y los costos del tercero y cuarto surgen cada vez durante el desarrollo. Los beneficios (reales o percibidos) en este caso son los siguientes:
La mayoría de las actividades de desarrollo de usuarios, por su propia naturaleza, requieren colaboración, ya sea entre los propios desarrolladores de usuarios o entre los usuarios y los desarrolladores profesionales.
El desarrollo mutuo [22] es una técnica en la que los desarrolladores profesionales y usuarios intentan conjuntamente crear un producto de software. Los desarrolladores profesionales suelen crear la columna vertebral del sistema y proporcionan herramientas que los "propietarios de tareas [23] " pueden usar cuando sea necesario para crear soluciones adecuadas que tengan en cuenta los objetivos y contextos de un problema particular [24] . Como resultado de la comunicación entre los desarrolladores profesionales y los usuarios, las modificaciones específicas de estos últimos pueden transformarse en artefactos de software y convertirse en una funcionalidad comercial completa que afecta globalmente al producto.
Se han propuesto varios enfoques para cerrar la brecha de comunicación entre los desarrolladores profesionales y los usuarios, como los talleres de moldeado de software [25] . Estos enfoques tratan de proporcionar transparencia (de acuerdo con el modelo de transparencia social [26] ), para que cada participante en el proceso sea consciente de los cambios realizados por otros participantes y pueda ser responsable de sus acciones debido a esta conciencia.
Mientras que los desarrolladores profesionales usan plataformas de colaboración especializadas (como GitHub), los desarrolladores de usuarios prefieren usar sistemas wiki donde comparten sus artefactos de software creados. El desarrollo personalizado también se usa a menudo para crear scripts de automatización o tutoriales interactivos para compartir conocimientos prácticos. Los ejemplos incluyen los programas CoScripter [27] y HILC [28] . En dichas aplicaciones, el usuario puede crear scripts utilizando un lenguaje seminatural o programando mediante demostración. Al mismo tiempo, los usuarios pueden compartir el script creado cargándolo en un repositorio especial en línea organizado en estilo wiki. En esta página wiki, los usuarios no solo pueden buscar scripts disponibles, sino también mejorarlos agregando parámetros adicionales para adaptarlos a diferentes condiciones o trabajar con otros objetos.
Además, existen comunidades en línea y fuera de línea de desarrolladores de usuarios, donde pueden resolver problemas de desarrollo de manera conjunta sobre una base de beneficio mutuo. En tales comunidades, los expertos locales comparten sus conocimientos y brindan asesoramiento. Los miembros de la comunidad a menudo se apoyan socialmente entre sí, lo que ayuda al desarrollo de software público [29] .
A los investigadores les preocupa que los usuarios finales a menudo no entiendan cómo probar o asegurar sus aplicaciones. Warren Harrison, profesor de informática en la Universidad Estatal de Portland, escribió [30] :
Es alucinante que estemos tratando de esperar algún tipo de seguridad... de la gran mayoría de las aplicaciones si están escritas con poco o ningún conocimiento de las buenas prácticas generalmente aceptadas (como una definición clara del problema antes de codificar, pruebas sistemáticas , etc.) ... ¿Cuántos libros "X for Dummies" hay (donde "X" es tu lenguaje de programación favorito)? Al principio me divirtió esta tendencia, pero últimamente me inquieta pensar en dónde estos diletantes pueden aplicar sus nuevos conocimientos.
Desde este punto de vista, se supone que todos los usuarios finales son igualmente malos en el desarrollo de software, pero Pliskin y Shoval argumentan que no es cierto que los usuarios avanzados sean capaces de desarrollar un desarrollo de calidad. [31] . Sin embargo, a diferencia de los profesionales, los programadores de usuarios rara vez tienen el tiempo o la motivación para dominar sistemática y disciplinadamente el arte del desarrollo [32] , lo que hace que sea muy difícil garantizar la calidad de los productos de software de usuario.
La investigación sistemática sobre el desarrollo de software de usuario ha sido una respuesta a esto. Se ocupan de cuestiones que van más allá del propio desarrollo, en particular, la motivación de los usuarios-desarrolladores para garantizar que sus productos sean seguros, verificables o reutilizables [33] .
Una solución alternativa es que los usuarios finales o sus asesores utilicen herramientas declarativas que brinden seguridad y reglas comerciales sólidas a expensas del rendimiento y la escalabilidad; por regla general, los productos creados con EUD son menos eficientes que los creados con entornos de programación profesionales. Sin embargo, la separación de la funcionalidad y la eficiencia es un principio aceptable : puede conducir a una situación en la que los usuarios desarrolladores realicen análisis de requisitos y creación de prototipos de herramientas sin la participación de analistas comerciales . Por lo tanto, los usuarios determinarán por sí mismos la funcionalidad requerida incluso antes de que estos expertos puedan evaluar las limitaciones impuestas por una determinada tendrán la oportunidad de considerar las limitaciones de una aplicación o plataforma de software en particular . Dichas iniciativas de los usuarios pueden contar con el respaldo de la gerencia, según las afiliaciones existentes o potenciales con los proveedores de software.