Journal Information
Title: Enfoque UTE
Abbreviated Title: Enfoque UTE
ISSN (print): 1390-9363
ISSN (electronic): 1390-6542
Publisher: Universidad UTE (Quito, Ecuador)
Actualmente los proyectos de software, especialmente los de gran tamaño, son inherentemente colaborativos (Whitehead, 2007) esto se debe precisamente a características como la dimensión del proyecto, los tiempos de entrega, e inclusive porque el trabajar en grupo puede ayudar a sobrellevar limitaciones propias de los humanos (Ej. Localización de errores). Con la ayuda del progreso de las comunicaciones e internet, barreras geográficas se han eliminado y ahora los proyectos incluyen personas distribuidas a nivel mundial, de diferentes compañías, idiomas, culturas, etc.
El tener varios colaboradores, implica que se tiene varios puntos de vista a medida que se avanza en las etapas del desarrollo de software, haciéndose necesario el llegar a converger en la realización de los diferentes artefactos dentro de cada una de ellas (Maalej & Happel, 2008).
Considerando la importancia de la colaboración, en (Whitehead, 2007) se realizó un importante estudio acerca de la colaboración en el desarrollo de software, realizando una revisión de las herramientas existentes para proveer colaboración en cada una de las etapas. Sin embargo, la evolución de las tecnologías de comunicación y para la web ha hecho que nuevas herramientas y conceptos vayan surgiendo.
La Web 2.0 fundamentada en tecnologías como JavaScript y AJAX ha hecho posible que las aplicaciones web vayan ganando interactividad casi hasta parecerse a aplicaciones de escritorio, por lo que la idea de un IDE (Entorno de Desarrollo Integrado) sobre la web se ha convertido en algo totalmente real. Recursos de la Web 2.0 como redes sociales, blogs, wikis, microblogging, y tagging han sido considerados para mejorar el aspecto colaborativo e informativo en el desarrollo de software.
Considerando el ciclo de vida de desarrollo, la etapa que ha recibido más avance en cuanto a manejar colaboración, es la etapa de codificación y pruebas. Por ende, el enfoque de este artículo es proveer de un estado actual en cuanto a IDEs existentes basadas en la web y que proveen de soporte colaborativo, indicando las tecnologías que han ayudado a la construcción de las mismas.
El resto de este documento se compone de una sección en la que se hacen explícitos los nuevos enfoques que hay en el mundo del desarrollo de software y de la colaboración; en la siguiente sección se revisan extensiones (plugins) para proveer colaboración; a continuación se describe un conjunto de herramientas web completas con soporte a la colaboración; luego se realiza una comparación entre dichas herramientas; la relevancia del uso de las herramientas colaborativas; se establecen las conclusiones; y se finaliza con la sección de trabajo futuro.
Los medios sociales se caracterizan por compartir información y se están usando masivamente. Ha servido también para que los investigadores apliquen estas tecnologías en el desarrollo de software, específicamente para dar a conocer sucesos hacia otros usuarios, bien sea dentro de un grupo o fuera de él. En (Storey, Treude, van Deursen, & Cheng, 2010), se realiza un estudio sobre como los medios sociales pueden influir sobre el desarrollo de software, principalmente basados en el hecho de que estas herramientas se caracterizan por tener una arquitectura de participación.
Otro hecho importante es la consideración de aquellos desarrolladores conocidos como End-USer; y que son los mismos medios sociales los que ayudan a mejorar su conocimiento, a ordenar su aprendizaje e inclusive a fomentar un aprendizaje en grupo.
Dentro de las herramientas de escritorio se podría mencionar Eclipse que en conjunto con determinadas extensiones, puede guardar la información de las acciones realizadas por un determinado desarrollador; y mostrar luego esta información con un esquema de microblogging.
En la web, los forges son muy populares para los proyectos de código abierto y cada vez integran más características de medios sociales. Claro ejemplo de ello es GitHub que puede trabajar dentro del ámbito de codificación social (Dabbish, Stuart, Tsay, & Herbsleb, 2012). Básicamente GitHub es una red social de desarrolladores con muchas herramientas que ayudan a mantener el trabajo colaborativo entre desarrolladores. Asimismo, ha surgido (Code Pad, 2015) como una comunidad para compartir porciones de código.
Una evolución teniendo en cuenta lo anterior y que se menciona en (Storey et al., 2010), son los Social Development Environment, que son IDEs sobre la web y que involucran además medios sociales. Aunque este entorno es viable para proveer, se debe tener en cuenta:
Los beneficios y riesgos antes de su implementación.
Cómo los medios sociales pueden tomar un rol efectivo para soportar coordinación.
Los tipos de medios sociales que pueden usar para incrementar el conocimiento en un equipo.
Los problemas inherentes respecto a la privacidad.
Cómo administrar las interrupciones que se pueden generar mientras se trabaja.
Finalmente, si su uso implica una mejora en la calidad del software.
Otro enfoque del uso de medios sociales puede ser el reunir retroalimentación de los usuarios finales, esto ayuda a probar que efectivamente el software está trabajando acorde a lo que se quiere o inclusive para llegar a diseñar un mejor producto que se acople a lo que el usuario necesita. Un estudio de este estilo se realiza en (Bajic & Lyons, 2011).
En (Ko et al., 2011) se define a un programador End-User como el rol que una persona asume cuando ella está creando un programa para conseguir algún objetivo a más de escribir un programa. Por lo general este tipo de desarrolladores pueden ir desde aquellos que crean hojas de cálculo hasta aquellos que crean aplicaciones mashup.
En (Singer & Schneider, 2011), se investiga cómo los medios sociales pueden ser usados para juntar programadores End-User para que colaboren entre ellos para intercambiar conocimiento a través de la web. Existen comunidades para estos programadores, donde se aprecia la evolución de este tipo de programadores hasta ser expertos. Incluso, estos entornos se pueden considerar como medios para propagar métodos y mejores prácticas de programación.
En la web pública, los foros pueden ser viables, pero para trabajar con conexiones entre los miembros, el microblogging sería más adecuado. En este tipo de escenarios se requiere establecer mecanismos que fomenten la colaboración de todos.
Las extensiones han servido para poder proveer a los IDEs de funcionalidad extra, en este caso orientadas hacia fomentar el trabajo colaborativo. A continuación se mencionan dos extensiones que se crearon con enfoques distintos.
En (King & Lyons, 2011) se reporta la creación de un plugin para Eclipse, a través del cual cada vez que se realizan eventos en el IDE, estos actualizan el estado un cliente de mensajería instantánea (Google Talk). El objetivo fue evitar las interrupciones que otros mecanismos, como una llamada o un mensaje instantáneo, provocarían. Esta extensión, basada en polling, se orienta a proveer información respecto de presencia, actividad, y lugar en el cual se encuentran.
En (van Deursen et al., 2010) a la par de crear su IDE Adinda, se menciona la creación de una extensión llamada James para Eclipse. La extensión se usa para enviar información hacia Twitter sobre las actividades que se realizan y además permite el realizar anotaciones a cualquier parte del código. Estas interacciones se van guardando en una traza que puede llevar a generar un esquema de pregunta respuesta en una lista.
Actualmente, hay un gran número de investigaciones que se orientan a crear herramientas que permitan el desarrollo colaborativo. En general se distinguen por la cantidad de utilidades implementadas y por el modo de controlar la colaboración de los usuarios. A continuación se presenta un grupo de herramientas y se describen sus principales características.
Respecto de los medios sociales, se puede considerar el establecer una herramienta basada en el esquema de trabajo de una wiki, debido a la sencillez de la misma. Aunque la mayoría de investigaciones en desarrollo de software usan las wikis como medio de documentación, por ejemplo AdessoWiki (Lotufo, Machado, Körbes, & Ramos, 2009); existen otras como Wikigramming (Hattori, 2011) que es la combinación de una wiki y un intérprete de lenguaje.
La motivación de Wikigramming incluye, que no se necesite instalación ni registro, que se pueda editar libremente el código, y que se puedan ver los cambios inmediatamente. Las características que la herramienta tuvo finalmente son:
Cada página es asociada a un módulo del programa.
Su uso es solo para efectos de entrenamiento en desarrolladores iniciales.
Usa Gauche (Shiro, 2014), un intérprete de scripts realizados en lenguaje Scheme, por lo que no se necesita compilación.
La manera para revisar el código es a través de unidades de prueba.
En (Nordio, Meyer, & Estler, 2011) presenta este IDE que trabaja sobre la web. CloudStudio permite el trabajo de varios desarrolladores de manera simultánea sobre un mismo proyecto y sin importar la ubicación geográfica. Esto debido a que está alojado en la web y trabaja sobre un repositorio de proyectos compartidos. Además, incluye algunas características de social media.
Las características incluyen:
Respecto a las actualizaciones, no se necesita hacer un commit explícito sino que esto se realiza en segundo plano ante acciones de edición.
Permite mantener un seguimiento de cambios del resto de colaboradores y permite compilar administrando los cambios.
Se puede diferenciar el código editado por cada colaborador.
Permite observar a los usuarios que están activos e iniciar una sesión de chat o Skype con ellos.
Usa lenguaje Eiffel.
Incluye una herramienta para hacer pruebas sobre el código.
En (Lautamäki et al., 2012) se presenta las características de CoRED, es un editor de código en tiempo real y colaborativo basado en browser para aplicaciones Java, y acorde a sus autores aún no tiene las suficientes utilidades para ser considerado un IDE. Su arquitectura es totalmente modular, lo que implica que puede ser modificado y extendido de ser necesario.
Las características que presenta son:
Chequeo de errores.
Generación de código automático.
Se pueden colocar notas sobre secciones del código a manera de hilos de comentarios.
No necesita hacer commits para la sincronización.
Permite bloqueos sobre partes del código.
Se basa en Java como lenguaje, Vaadin (Grönroos, 2011) como framework, y Ace (Ace Group, 2015) como frontend.
Vaadin confía en las facilidades de GWT que es un sistema de desarrollo para escribir aplicaciones AJAX en Java y luego compilar el código fuente a código JavaScript, el que corre en todos los navegadores. Ace es un editor de código, open source, escrito en JavaScript y que puede ser fácilmente embebido en una página web y que soporta varios lenguajes. Al usar Ace, se podrían usar otros lenguajes de desarrollo como JavaScript, HTML, XML, PHP, C++. Al basarse en Java, usa el JDK para compilar y mostrar errores.
En (Goldman, Little, & Miller, 2011) se realiza una descripción de las características de este IDE además de proponer 3 escenarios en los que realizaron las pruebas de la misma. Las características son:
Usa Eclipse en el lado del servidor, lo que le permite proveer los servicios de compilación continua de errores y warnings, formateo de código, refactoring y ejecución.
Permite la compilación de cualquier proyecto de Java Eclipse de escritorio.
El browser solo muestra la salida que procesa el servidor y por lo tanto no se puede ver programas Java con interfaz gráfica.
Usa EtherPad para soportar colaboración entre usuarios simultáneos.
Soporta cambios concurrentes.
Implementa permisos de escritura y lectura sobre proyectos, paquetes, clases y métodos, para controlar la cantidad de información entre los colaboradores.
Soporta la realización de pruebas. Así un desarrollador puede estar codificando mientras otro puede estar realizando un conjunto de pruebas.
Provee de una vista para dispositivos móviles.
Su trabajo continúa para dar soporte a otros lenguajes y para soportar el intercambio de información entre colaboradores.
Es un IDE basado que trabaja sobre la web, y se basa en un cliente conectado a una serie de servicios (van Deursen et al., 2010). Las características, que se van añadiendo a medida que surgen nuevas hipótesis, son:
Tiene servicios para editar, compilar y realizar pruebas.
Su enfoque colaborativo incluye administración de tareas, edición en grupo, etiquetado, social networking, e incluso data mining.
Los servicios centralizados recogen todo tipo de información concerniente a las actividades de todo el equipo de desarrollo y lo usa para asistir a desarrolladores individuales.
Se pueden crear workspaces, proyectos y archivos de clase.
Edición con colores y con autocompletado.
En su cliente se pueden hacer programas Java, y el servidor usa Eclipse.
Se basaron en WWWorkspace (Ryan) y usa AJAX para su interactividad. La filosofía es reutilizar al máximo los componentes.
Los autores reportan consideraciones e implicaciones que van surgiendo, estas tienen que ver con los métodos de versionamiento, estrategias de etiquetado y microblogging para trazabilidad, la participación de los desarrolladores, como identificar la información y el nivel de detalle que hay que guardar; como discernir entre las actividades que en realidad aportan información e inclusive si se puede llegar a establecer recomendaciones.
Acorde a (CodeRun), es un IDE basado en browser. Sus principales características son:
Soporta la creación de proyectos en varios lenguajes como C#/.NET (3.5), PHP (5.1), JavaScript, HTML y CSS.
Soporte de base de datos SQL Server 2005 y Amazon SimpleDB.
Creación con el uso de templates.
En la edición se tiene coloreo de sintaxis y autocompletado de código.
Para aplicaciones .NET permite compilación y depuración.
Permite despliegue del proyecto para todos los lenguajes.
Compartición de código a través de enlaces. A través de este modo se publica un enlace al cual puede acceder un colaborador para editar el código.
Garantiza la seguridad y privacidad de tu ambiente de desarrollo.
En (Daniels, 2015) se define como un IDE basado en browser y que vive en la nube, permitiendo correr, depurar y desplegar aplicaciones desde cualquier lugar y a cualquier hora.
Las características que se señalan son:
Soporte para los lenguajes JavaScript, HTML, CSS, Coffeescript, Ruby y PHP.
Su editor tiene soporte de sintaxis y manejo con colores del código.
Se puede añadir colaboradores para trabajar simultáneamente sobre el mismo proyecto, y maneja permisos sobre los mismos.
Se puede ejecutar aplicaciones NodeJS dentro de cloud9 de manera fácil.
Provee de análisis de código en tiempo real.
Tiene una completa integración con GitHub, provee así de control de versiones, y la posibilidad de compartirlo online.
Las organizaciones pueden administrar los proyectos asignando o removiendo colaboradores.
Provee un servicio de chat integrado para la comunicación con los colaboradores.
En la Tabla 1 se muestra la comparación de las principales características de las herramientas de desarrollo con soporte colaborativo previamente mencionadas. Durante la búsqueda de información, se han establecido un conjunto de criterios que pueden resultar relevantes al momento de seleccionar una determinada herramienta:
Lenguajes soportados. - Es una característica esencial para que un interesado decida usar una determinada herramienta. La experticia o el interés de un desarrollador en un determinado lenguaje se puede convertir en un requerimiento no funcional muy importante al momento de elegir una herramienta de apoyo.
Etapas cubiertas. - Se refiere a las etapas del proceso de desarrollo de software que han sido cubiertas por la herramienta, mientras más etapas, se vuelve una herramienta más robusta y útil. Hay que tener en cuenta que en fases iniciales del aprendizaje de programación, lo que se pretende dar soporte es la fase de codificación; y en etapas más formales, se da mucha importancia a las etapas de análisis, diseño y pruebas.
Sincronización de información. - Su importancia radica debido al interés de facilitar los procesos al desarrollador. La facilidad o complejidad de la sincronización pueden llevar a que se decida usar o no una herramienta. Además, asociado a esto pueden darse problemas de sincronización en la información y datos que comparten los desarrolladores.
Los módulos base se refieren a los componentes utilizados para construir la herramienta, esta información puede ser muy útil para proyectos que deseen construir herramientas análogas o que busquen por componentes orientados a una actividad en particular. Asimismo, para evitar tecnologías obsoletas o no compatibles con una eventual plataforma existente.
La comunicación entre colaboradores se vuelve esencial como forma explícita de compartir información con otros desarrolladores. Se vuelve muy importante en casos de conflictos o por dudas ante determinada sección de desarrollo.
Se distinguen dos grupos de herramientas, aquellas que proveen soporte para lenguajes de escritorio compilados y aquellos que proveen soporte para lenguajes de desarrollo web.
Ambos grupos de herramientas trabajan con una arquitectura cliente - servidor. El cliente adquiere su interactividad al usar JavaScript. Respecto al servidor, para el primer grupo, se tiene un compilador que permite detectar los errores de edición y de compilación, los resultados son enviados al cliente a través de AJAX; en el segundo grupo de herramientas, se tiene un módulo que ayuda al despliegue de la aplicación en la web.
El uso de módulos base para construir los IDEs con soporte colaborativo es común, y algunas aplicaciones han logrado obtener un esquema tan modular que inclusive se podría rediseñarlo para soporte para más lenguajes.
Además, el modo de sincronización de datos puede ser realizado en tiempo real gracias a la ayuda de AJAX, o a través de versionamiento usando herramientas como GitHub. Para escenarios donde se tiene una aplicación grande y se requieran de varios colaboradores, la segunda opción podría ser la más acertada.
La distancia agrava la posibilidad de realizar una coordinación y control efectivos durante un proceso de desarrollo de software debido a que la comunicación se podría ver afectada directa o indirectamente (Carmel, Agarwal 2001). De ahí la relevancia y la diferenciación del uso de herramientas de desarrollo con soporte colaborativo en Ingeniería de Software.
Los ambientes de desarrollo colaborativo tienen como objetivo el aportar en todas las fases de desarrollo de software, es así que empresas que requieran una estrategia confiable de gestión del ciclo de vida del producto asegurando eficiencia, consistencia, y seguridad de la información se sugiere su inversión para un desarrollo colaborativo. Su importancia resalta desde productos iniciales de colaboración como para gestión de versionamiento o gestión de requerimientos, que luego de su implementación tienden a mejorar el desarrollo de software en la empresas (Lanubile, Filippo, et al 2010). En el reporte realizado por (Linux Foundation, 2014) se presentan las tendencias en el desarrollo colaborativo en las empresas. Dichas empresas, principalmente de tecnología, se enfrentan a una presión considerable para innovar rápidamente y reducir costos. Como consecuencia de ello, se consolida cada vez más un modelo de negocio en donde las empresas, inclusive las competidoras, trabajan de manera colaborativa para compartir recursos de desarrollo y construir bases de código común. Posteriormente, cada uno diferencia sus propios productos y servicios.
En el mismo reporte se puede apreciar que de las 686 respuestas a una encuesta realizada a desarrolladores de software y administradores de negocios, en las que se incluyen a empresas como Cisco, Fujitsu, HP, IBM, Intel, Google, NEC, Oracle, Qualcomm y Samsung, un 91% reconoce la importancia del desarrollo colaborativo en su empresa, tal como se observa en la Figura 1.
Por otro lado hay que mencionar también que la tendencia de Ingeniería de Software Global se basa en el uso de metodologías de desarrollo ágiles en ambientes distribuidos que inherentemente se basan en la colaboración. La comunicación y colaboración entre desarrolladores y clientes, y la retroalimentación temprana son características esenciales en un proceso de desarrollo iterativo e incremental (Turk, France, & Rumpe, 2014). Además, el desarrollo colaborativo ha sido adoptado por sus beneficios para mejorar la comunicación, coordinación e incrementar la calidad y la productividad (Kaur, Sharma 2014). Siendo la base de esta tendencia de ingeniería de software la colaboración, las herramientas para este propósito demuestran su importancia y justificación de inversión para empresas dedicadas al desarrollo de aplicaciones.
Finalmente, al ser las herramientas de colaboración un mediador entre equipos éste ayuda a romper barreras de lenguaje, diferencia cultural, formación, o de falta de trabajo en equipo (Dorairaj, Noble, Malik, 2011), con el objetivo de no frenar el aporte de personal talentoso, mejorar la transferencia de conocimiento, reducción de tiempo de desarrollo, mejorar la calidad del software, y dar una respuesta rápida a innovación y cambios en el negocio (Hossain, Babar, Paik 2009). Hay que mencionar también que el desarrollo de aplicaciones Open Source y el desarrollo colaborativo van de la mano. La comunidad del kernel de Linux fue pionero en este enfoque de desarrollo de software, ya que involucra múltiples individuos y empresas, en muchos casos, que compiten en el mismo sector, y en donde el código base es abierto y de una inversión compartida. (Linux Foundation, 2014). Su éxito ha ayudado a inspirar la difusión de métodos de colaboración en otras industrias y tecnologías.
La colaboración en ingeniería de software se ha orientado especialmente a brindar la posibilidad de desarrollar usando herramientas que trabajan sobre la web, y de implementar elementos de social media dentro de las herramientas.
La colaboración puede ser aplicada desde ayudar a los nuevos programadores, incluyendo los End-User; hasta ser aplicada para el desarrollo de aplicaciones grandes para las cuales es necesario disponer de un IDE.
Respecto a la cantidad de herramientas de desarrollo de escritorio y con extensiones, o aquellas que trabajan sobre la web; se observa que el campo de las segundas se ha desarrollado más.
Las herramientas basadas en browser o web se orientan a poder codificar desde cualquier lugar, a cualquier hora, y soportando colaboración.
Una herramienta básica debe contener un editor que soporte colaboración. Aunque actualmente hay verdaderos IDEs que cada vez incorporan mayores funcionalidades.
El diferenciar las herramientas basadas en browser depende de características como los lenguajes que soportan, el modo de sincronización de los datos entre varios colaboradores, el manejo de versiones, y el diseño de su arquitectura.
Se pueden usar los modos de trabajo de las tecnologías de social media para acoplarlos a nuevas maneras de codificación, como por ejemplo el uso de etiquetas y actualizaciones automáticas que se pueden integrarlos dentro del mismo IDE.
La colaboración entre varios integrantes dentro de un proyecto es soportada cada vez de mejor manera dentro de los IDEs basados en browser, sin embargo, siguen planteándose cuestiones respecto a cuánta información compartir, cómo definirla, y como definir la calidad del mismo.
Muchas herramientas usan una arquitectura modular que usan herramientas producto de investigaciones realizadas previamente, esto implica la ventaja de poder modificarlas acorde a necesidades específicas, pudiendo dar soportes a más lenguajes como a extensiones que permitan colaboración.
Las herramientas que soportan lenguajes compilados distinguen entre el lado del cliente y el lado del servidor, el primero contempla el uso de JavaScript para conseguir la interactividad con el desarrollador, el segundo contempla el uso de un framework que permita compilar, depurar y desplegar la aplicación. Además AJAX tiene un papel muy importante al proveer un medio a través del cual las peticiones y respuestas del servidor se realizan de manera asincrónica permitiendo finalmente conseguir un IDE sobre browsers.
Se ha mostrado la relevancia del campo de estudio a través de reportes que consideran empresas de TI muy conocidas, y que ratifican la importancia de la aplicación de la colaboración en desarrollos globales.
En el contexto de los programadores End-User, hay otra línea de investigación relacionada y que se refiere a la Ingeniería de Software End-User (EUSE - End User Sofware Engineering), y ésta se orienta al estudio del proceso de desarrollo y de la calidad de software en el desarrollo End-User (Burnett & Myers, 2014). Los autores mencionan una propuesta acerca de romper un enfoque basado en silos, un silo se puede crear por cada etapa dentro de un proceso de desarrollo, e incluso el llegar a usar nuevos modelos de desarrollo que no sigan las etapas dentro del ciclo tradicional. Considerando esta propuesta, ya se puede empezar a pensar en nuevos modelos de desarrollo que aporten a la EUSE y con el soporte adecuado para el desarrollo colaborativo.
Asimismo, considerando que han habido estudios en los cuales se ha usado el enfoque del desarrollo de software colaborativo orientado a mejorar el aprendizaje de ingeniería de software de los estudiantes (Berenson, Williams, Slaten 2005) , y a la productividad y calidad del mismo (Layman, et al. 2005); se puede pensar en que luego de desarrollar modelos diferentes al tradicional, será necesario el determinar nuevas formas de fomentar el aprendizaje de los estudiantes, y de establecer la calidad en los desarrollos.
Considerando las nuevas tendencias que incluyen, la computación en la nube, el grid, el Open data/Linked data, Big Data, el IoT (Internet of Things), la api-ficación, entre otros; ya existen trabajos se están realizando en torno al desarrollo End-User. Así se tienen trabajos como los reportados en (Tetteroo et al., 2015) (Coutaz, Demeure, Caffiau, & Crowley, 2014) que se orientan al desarrollo End-User orientado al IoT o a las Smart Homes. Sin embargo, aún quedan el resto de tendencias en las cuales el desarrollo End-User y el EUSE pueden ser usados. Además, cada una de las nuevas tendencias puede hacer uso del desarrollo colaborativo para soportar etapas, ayudar a los desarrolladores, enseñar a los desarrolladores novatos o estudiantes, etc.
Ace Group. (2015). The high performance code editor for the web. http://ace.c9.io/.
Burnett, M. M., Myers, B. A., 2014, Future of End-User Software Engineering: Beyond the Silos, Proceedings of the on Future of Software Engineering, New York, USA, http://doi.acm.org/10.1145/2593882.2593896.
Code Pad. (2015). Code pad. http://codepad.co/.
CodeRun. (2012). CodeRun. http://www.coderun.com/;.
Coutaz, J., Demeure, A., Caffiau, S., Crowley, J. L., 2014, Early Lessons from the Development of SPOK, an End-User Development Environment for Smart Homes, Proceedings of the 2014 ACM International Joint Conference on Pervasive and Ubiquitous Computing: Adjunct Publication, UbiComp ’14 Adjunct, New York, NY, USA, ACM, http://doi.acm.org/10.1145/2638728.2641559.
Daniels, R. (2015). Cloud 9 your development environment on the cloud. https://c9.io/.
Linux Foundation. (2014). Collaborative Development Trends Report. http://go.linuxfoundation.org/l/6342/pub-collab-dev-trends-2014/2gw3ly.
Ryan, W. (2015). WWWorkspace. http://www.willryan.co.uk/WWWorkspace/.
Shiro, K. (2014). Gauche A schem implementation. http://practical-scheme.net/gauche/.
Tetteroo, D., Markopoulos, P., Valtolina, S., Paternò, F., Pipek, V., Burnett, M., 2015, End-User Development in the Internet of Things Era, Proceedings of the 33rd Annual ACM Conference Extended Abstracts on Human Factors in Computing Systems, 2405, 2408, New York, NY, USA, ACM, http://doi.acm.org/10.1145/2702613.2702643.