# Développement par l'utilisateur final

Le développement par l'utilisateur final ou informatique de l'utilisateur fait référence aux activités et aux outils permettant aux utilisateurs — personnes qui ne sont pas des développeurs professionnels — d'utiliser l'informatique, et notamment les outils de l'informatique de l'utilisateur, afin de créer ou de modifier des artéfacts de logiciel (description de comportements automatisés), ainsi que des objets de données sans connaissance significative des langages de programmation.
En 2005, d'après les statistiques du Bureau of Labor Statistics des États-Unis, on comptait plus de 55 millions de développeurs de l'informatique de l'utilisateur aux États-Unis, alors que l'on compte moins de 3 millions de programmeurs professionnels. L'informatique de l'utilisateur est une discipline du domaine de l'informatique et des interactions homme-machine.
Il existe diverses approches de l'informatique de l'utilisateur. Par exemple, la programmation en langage naturel$^,$, les tableurs, les langages de script — particulièrement dans une suite bureautique ou une application artistique —, la programmation visuelle, la programmation par actions déclencheuses et la programmation par l'exemple (en).
Les tableurs constituent l'outil le plus utilisé de l'informatique de l'utilisateur. Peu sophistiqués, ils permettent aux utilisateurs d'écrire des programmes avec des données plus ou moins complexes, sans nécessité d'apprendre des langages de programmation de niveau inférieur. En raison de leur utilisation relativement courante, ils permettent d'écrire des programmes qui représentent des modèles de données complexes, tout en les protégeant de la nécessité d'apprendre des langages de programmation de niveau inférieur. Aux États-Unis, on compte seulement 13 millions de programmeurs de l'informatique de l'utilisateur qui utilisent des feuilles de calcul.
La programmation par l'exemple (PBE) réduit la nécessité d'apprendre les abstractions d'un langage de programmation classique, en permettant à l'utilisateur d'introduire des exemples de résultats ou d'opérations à effectuer sur les données. Le système PBE en déduit les abstractions correspondant à un programme qui produit cette sortie. L'utilisateur peut alors introduire de nouvelles données dans le programme créé automatiquement, et corriger les erreurs commises par le programme, afin d'améliorer sa définition.
Les plateformes de développement à faible code sont également une approche de l'informatique de l'utilisateur.

## Définition

Lieberman et coll. proposent la définition suivante : « L'informatique de l'utilisateur peut être définie comme un ensemble de méthodes, de techniques, et d'outils, qui permettent aux utilisateurs de systèmes logiciels — agissant en tant que développeur de logiciels non professionnels —, à un moment donné, de créer, modifier ou étendre un artéfact logiciel. »
Ko et coll. proposent cette définition : « L'informatique de l'utilisateur est une programmation visant à obtenir le résultat d'un programme principalement à usage personnel plutôt qu'à usage public. »
Les artéfacts définis par les utilisateurs finaux peuvent être des objets décrivant un comportement ou une séquence de contrôle (telles que des demandes de bases de données ou des règles de grammaire), qui peuvent être décrits par certains paradigmes, tels que la programmation par la démonstration, la programmation par l'exemple, la programmation visuelle, ou encore la génération macro-définition. Ils peuvent également être des paramètres qui choisissent entre les comportements prédéfinit alternatifs d'une application. D'autres artefacts du développement de l'utilisateur final peuvent également se référer à la création de contenu généré par l'utilisateur final, comme des annotations pouvant être interprétables ou non par calcul.

## Exemples

Les exemples de l'informatique de l'utilisateur incluent la création et la modification :
* des scripts d'animation, utilisés par les graphistes afin de décrire les personnages, les environnements et le déplacement des personnages pour produire une animation ;
* des fichiers de configuration, qui brouillent la ligne entre les programmes et les données (par exemple, les filtres de messagerie sont des listes séquencées de critères et d'actions à entreprendre) ;
* des outils de programmation centrés sur l'exemple ;
* des jeux utilisant à présenter le personnage de l'utilisateur, l'environnement, etc. Récemment, plusieurs jeux sont distribués modifiés ;
* des scripts d'interaction, utilisés dans les centres d'appels CRM ;
* des outils de développement via applications mobiles, telles que App Inventor ;
* de prototypages logiciel et des programmes spécifiques à un domaine rédigés par des hommes d'affaires, des ingénieurs et des scientifiques pour démontrer ou tester des théories spécifiques ;
* du comportement du robot ;
* des modèles scientifiques, utilisés en simulation sur ordinateur ;
* des scripts et macros ajoutés pour étendre ou automatiser les logiciels graphiques ;
* des simulations, créées à l'aide d'un prototypage logiciel ;
* de l'édition simultanée de nombreux articles liés, soit par un traitement par lots spécifié par l'utilisateur final soit par manipulation directe, comme ceux disponibles dans l'éditeur de texte Lapis et multi edit ;
* des modèles de tableur, utilisés pour la budgétisation, l'analyse de risque ;
* l'apprentissage automatique, pour la conception de circuits électroniques ;
* de la programmation visuelle sous forme de langage graphique tels que AgentSheets, LabVIEW, Scratch (langage de programmation) ou LEGO Mindstorms ;
* des pages Web HTML brut, ou HTML et script ;
* des wikis pour les processus de développement collaboratif pour les utilisateurs finaux ;
* de web Mashups sous la forme de langages visuels ;
* des modèles 3D créés à l'aide des outils et des applications orientés utilisateur, tels que SketchUp.

## Évolutions

L'utilisation des appareils mobiles est venue soutenir les activités de développement des utilisateurs finaux. De plus, les applications bureaux ne peuvent être proposées à nouveau du fait des caractéristiques spécifiques des appareils mobiles. On s'interroge sur le fait que l'environnement ne permette pas aux utilisateurs de créer des applications de manière opportuniste, lorsqu'ils sont en déplacement.
Plus récemment, l'intérêt pour l'exploitation de l'UDA permettant de soutenir le développement des applications Internet des objets s'est accru. Dans ce domaine, la programmation d'actions déclencheuses semble être une approche prometteuse.
Les leçons qui ont pu être retirées des solutions émanant de l'UDA peuvent avoir une influence significative sur les cycles de vie des logiciels commerciaux, sur les développements internes de l'intranet et l'extranet, et sur les déploiements de progiciels de gestion intégrés (PGI).

## Application spécifique des plateformes de développement à code faible

Une quarantaine de fournisseurs offrent aujourd'hui des solutions destinées aux utilisateurs finaux pour réduire les efforts de programmation. Ces solutions ne nécessitent pas de programmation traditionnelle, et peuvent être basées sur des fonctionnalités relativement étroites, telles que la gestion de contrat, la gestion de relation-client, ou encore le suivi des problèmes et des bogues. Souvent appelées plateformes de développement à faible code, les interactions web guident l'utilisateur dans le développement d'une application entre 40 et 80 heures. Les développeurs peuvent ainsi échafauder des parties génériques d'une application et fournir un code modifiable de qualité, pouvant être inséré, modifié et personnalisé, pour répondre aux besoins des utilisateurs finaux. On les qualifie surtout de plateformes de développement à code faible. Les interactions basées sur le web guident un utilisateur pour développer une application de façon relativement rapide.

## Modélisation de l'avantage-coûts

Selon Alistair Sutcliffe (en), l'UDA externalise essentiellement ses services de développement à l'utilisateur final. Puisque cela demande des efforts d'apprendre un outil de l'UDA, la motivation des utilisateurs dépend de leur confiance qui va valoriser leur travail, leur permettre de gagner du temps sur leur travail ou d'augmenter leur productivité. Dans ce modèle, les bénéfices apportés aux utilisateurs sont initialement basés sur le marketing, des démonstrations, ainsi que le bouche-à-oreilles. Une fois que la technologie est mise en utilisation, l'expérience vécue grâce aux avantages procurés devient la motivation clé.
Cette étude définit les coûts comme étant des sommes de coûts :
* techniques : le prix et la technologie de son installation ;
* de formation : le temps pris pour comprendre la technologie ;
* de développement : les frais de développement liés à l'utilisation de la technologie ;
* d'essais et de corrections : le temps pris pour vérifier le système.
Les deux premiers coûts sont encourus lors de l'acquisition, alors que les deux derniers sont encourus chaque fois que l'application est développée. Les bénéfices (qui peuvent être perçus ou réels) sont vus comme :
* la fonctionnalité développée par la technologie ;
* la flexibilité dans les réponses aux besoins ;
* la facilité d'utilisation ou utilisabilité des applications produites ;
* la qualité générale des applications produites.

## Collaborations au sein de l'informatique de l'utilisateur

Beaucoup d'activités de développement de l'informatique de l'utilisateur sont collaboratives par nature, incluant la collaboration entre développeurs professionnels et utilisateurs finaux Le développement mutuel est une technique par laquelle des développeurs professionnels et des développeurs de l'informatique de l'utilisateur travaillent ensemble dans la création de solutions logicielles. Dans le développement mutuel, les développeurs professionnels "conceptualisent" souvent le système, et procurent les outils permettant à ceux ayant des problèmes, de créer une solution convenable à tout moment pour leurs besoins et objectifs, et pour ceux de l'informatique peuvent souvent stimuler la formalisation ad hoc des modifications par les utilisateurs dans les artéfacts du logiciel, transformant les solutions développées par l'utilisateur en produit aux caractéristiques commerciales, ayant un impact incontestable sur les solutions locales.
Au sein de ces collaborations, de nombreuses approches telles que Software Shaping Workshop, sont proposées pour faire un pont entre les développeurs professionnels et ceux de l'informatique de l'utilisateur. Ces approches fournissent souvent une certaine translucidité selon le modèle de translucidité sociale, permettant à chaque collaborateur d'être averti par des changements effectués par les autres, et d'être tenus responsables de ses actions, pour des raisons de sensibilisation.
Outre les collaborations sur le paramétrage des plateformes telles que GitHub, qui sont principalement utilisées par des développeurs experts, en raison de la significativité de leur apprentissage. Les collaborations du DUF se déroulent souvent sur des plateformes Wiki, où les artéfacts des logiciels créés sont partagés. L'UDA est aussi souvent utilisé pour créer des scripts automatiques ou des tutoriels interactifs, afin de partager la connaissance technique. Dans de telles applications, l'utilisateur peut créer des scripts pour les tâches utilisant un langage pseudo-naturel où vient une programmation de la démonstration. Les utilisateurs peuvent choisir de mettre en ligne le script dans un référentiel de script, type Wiki. Sur ce Wiki, les utilisateurs peuvent consulter les scripts disponibles, et étendre ceux déjà existants pour assister les paramètres additionnels, pour manier les conditions additionnelles, ou pour opérer sur des objets additionnels.
Les communautés en ligne et hors ligne des développeurs de l'utilisateur final ont également été formés, de manière qu'ils puissent résoudre, de façon collaborative, les problèmes de développement relatifs aux intérêts partagés ou aux bénéfices mutuels. Dans de tels communiqués, les experts locaux apportent leur expérience, et leurs conseils. Les membres de la communauté fournissent également un appui social à chacun dans la construction collaborative du logiciel.

## Critiques

Les commentateurs ont été préoccupés par le fait que les utilisateurs finaux ne comprennent pas comment tester et sécuriser leurs applications. Carren Harrison, professeur de sciences informatiques à l'université d'État de Portland, a écrit (traduction libre) :
   « C'est tout bonnement incompréhensible que nous nous attendions à de la sécurité… de la plus grande majorité des applications logicielles diffusées, quand elle est écrite en petit et s'il y'en a une, connaissance de l'acceptation des conditions générales d'utilisation, telles qu'une précision avant de chiffrer, un test systématique, etc. Combien de X, pour des livres destinés à des idiots finis (où « X » est le langage de chiffrage favori), sont en vente actuellement ? Au départ, cette tendance m'amusait, mais récemment, je suis devenu gêné en pensant aux endroits où les amateurs appliquaient cette toute nouvelle connaissance. »
Ce point de vue suppose que tous les utilisateurs soient également naïfs lorsqu'il en vient à comprendre le logiciel, bien que Pilskin et Shoval clament que ce n'est pas le cas. Ces utilisateurs sophistiqués sont capables de contribuer au succès de l'informatique de l'utilisateur. Toutefois, comparés à des programmeurs experts, les programmeurs de l'informatique de l'utilisateur ont rarement le temps ou un intérêt pour la systématicité et la discipline dans le développement des logiciels d'ingénierie, ce qui assure la qualité particulièrement « challengeante » de l'artéfact du logiciel, produit par l'informatique de l'utilisateur.
En réponse à cela, l'étude de l'ingénierie logiciel de l'informatique de l'utilisateur a émergé . Elle est touchée par des problèmes au-delà de l'informatique de l'utilisateur, puisque les utilisateurs sont devenus motivés à considérer les problèmes tels que la réutilisabilité, la sécurité, la vérifiabilité, lors du développement des solutions.
Un scénario alternatif serait que les utilisateurs finaux ou leurs consultants emploient des outils de programmation déclarative qui aident rigoureusement à la gestion et à la sécurité des règles à la charge de la performance et de la flexibilité; les outils créés par l'informatique de l'utilisateur vont typiquement avoir des efficiences moins bonnes que celles créées par les programmeurs professionnels, qui sont, elles, réglementaires. Toutefois, ce qui sépare la fonctionnalité de l'efficience est la séparation des préoccupations, qui peut amener à une situation où les utilisateurs vont compléter l'analyse des exigences et le prototypage logiciel, sans intervention des analystes opérationnels. Ainsi, les utilisateurs vont définir les fonctions requises avant que ces experts n'aient l'occasion de considérer les limites d'une application ou d'une framework. L'appui de la haute direction pour les initiatives de l'utilisateur final dépend de son attitude, existante ou potentielle, vis-à-vis des vendeurs uniques (enfermement propriétaire).