Questionnement sur ma responsabilité en tant que développeur

Depuis peu, je suis un développeur. Je code depuis un moment, mais il est assez nouveau que j'ai des gens utilisant mon code. J'ai contribué au logiciel anki (à hauteur de 18 lignes de code, selon github). Mais surtout, j'ai créé 34 add-on pour Anki.

Ces add-ons ont des retours positifs quasi-unanime. L'unique retour négatif est accompagné d'une critique disant que mon add-on ne fait pas quelque chose que mon add-on disait explicitement ne pas faire. Et que d'ailleurs, depuis, il fait.

Ces add-ons ont, au total, été téléchargé 6000 fois. Dont un unique add-on qui a été téléchargé 3000 fois à lui tout seul. J'ignore combien de gens utilisent réellement ces add-ons. Est-ce que comme moi, des gens ont anki installé sur plusieurs ordis, et donc ont téléchargé plein de fois le même add-on. J'ignore si les mises à jours des add-ons sont compté comme des téléchargements. Bref, le vrai nombre de gens utilisant actuellement mon code est bien plus faible. Mais ça reste considérablement plus grand que tout ce que j'ai pu coder pour mon travail de recherche.

Ce qui fait que pour la 1ère fois, je me pose des questions sur mes responsabilités en tant que développeur. Ça ne sera jamais des questions aussi importantes qu'un dévelopeur de système embarqué dans un véhicule, où qu'un logiciel qui indique qui mettre en prison ou non. Dans le pire des cas, j'empêche l'utilisateurice d'apprendre correctement des choses. Mais bon, ça serait dommage quand même.

Add-ons innoffensif

La plus part de mes add-ons ne font absolument rien de mal. Je vais à titre d'exemple expliquer mes 3 add-ons les plus téléchargés.

Mon add-on téléchargé 2987 fois affiche des informations à côté de chaque deck dans la fenêtre principale. Certaines méta-donné ne présentent aucun intérêt selon moi, mais m'ont été demandées. Par exemple, le nombre de cates jeunes/matures (i.e. dont le délai est inférieur ou supérieur à 3 semaines). D'autres me paraissent très importantes et devrait selon moi directement être donné par anki. Par exemple le nombre de cartes qui n'ont jamais été vues une seule fois.

Le deuxième add-on, téléchargé 793 fois, permet de copier une note. D'ailleurs, l'add-on n'est pas de moi à la base. Moi je l'ai juste modifié pour que l'add-on puisse copier les méta-donné en plus des données. Et pour qu'il soit compatible avec la nouvelle version d'anki. J'ai un add-on qui, dans le log de suppression, rajoute un nouveau champ expliquant pourquoi la suppression à eu lieu. Normalement, tu essayes d'éviter de dupliquer de l'information, donc copier une note est en général une mauvaise idée. Mais de temps en temps, c'est pratique, par exemple pour séparer une note en deux notes. Tu copies d'abord. Puis une fois la copie finit, tu nettoyes les deux notes séparément.

Le 3ème add-on, téléchargé 367 fois, change la compilation du LaTeX. Plus précisément, ça change le moment où Anki compile le LaTeX. Par défaut, anki compile le LaTeX uniquement quand il a besoin de l'afficher. Le souci étant que si tu révises sur ton téléphone portable, comme celui-ci n'a pas de compilateur LaTeX, tu ne peux pas voir ta cartes. Avec mon add-on, la compilation est faite dès que la carte est crée sur l'ordinateur. Comme ça la carte est directement visible sur le portable quand tu en as envie. Par ailleurs, compiler tôt permet de prévenir rapidement si le LaTeX a une erreur, et donc de corriger l'erreur rapidement.

Un add-on maléfique.

Pour rappel, l'idée fondatrice d'anki est la suivante: tu veux apprendre quelque chose par cœur. Pour ça tu dois le réviser régulièrement. Anki planifie les révision pour qu'elles arrivent peu avant le moment où tu aurais oublié l'information. Donc tu dois surtout faire les révision quand Anki pense que c'est le moment de les faire.

Une demande régulière des utilisateurice est de pouvoir partir en vacance une semaine sans avoir une semaine entière de révision à faire en revenant. Donc repousser toutes les cartes d'une semaine. C'est une super mauvaise idée, parce que si tu fais ça, tu casses tout le principe de base d'anki. Et d'ailleurs, c'est pas grave, si tu as du retard, anki en tient compte, et s'adapte. Peut-être qu'il te faudra 3 ou 4 jours pour rattraper tout ton retard lié à la semaine que tu n'as pas faites, mais après ces 4 jours, tout sera redevenu normal.

Eh bien, j'ai créé un add-on qui reporte les cartes d'une semaine (ou d'autant de jours que tu veux, même un nombre négatif de jours). J'ai aidé les gens à saborder le principe fondateur d'anki. Ils ont l'impression d'avoir une tâche plus simple. Mais en réalité, ils se bousillent le processus d'apprentissage. Par conséquent, j'ai pas mal hésiter à créer cet add-on.

Ma rationalisation, c'est que des témoignages concordant indiquent que, quand, en revenant de vacances, des utilisateurices voient qu'ils ont plusieurs centaines ou milliers cartes à revoir, ça leur fait peur. Ils repoussent anki, prennent plus de retard et finalement abandonnent. J'ai donc estimé - et c'est ce que j'explique dans la description de l'add-on, que cet add-on était un moindre mal. Qu'il corrigeait un comportement irrational humain et évitait l'abandon total.

Un add-on dangereux

La base de donnée d'anki est horrible. Toute la configuration d'anki est stocké dans une table, comprenant une unique ligne. Chaque colomne correspondant à la configuration d'un paramètre, stocké en json.

Comme j'utilise beaucoup anki, j'ai des configurations assez complexe. Le json est stocké de façon «condensé» sur une seule ligne. Si j'essaye de copier ce json et de le mettre dans emacs, emacs plante. Visiblement, il n'aime pas les lignes qui font plus d'un million de caractère.

J'ai donc créé un add-on qui explose le json et créé une base de donnée digne de ce nom. Comme ça on peut enfin lire la base de données avec des outils standard. Et je suis en train de créer l'outil inverse. Qui recrée une base de donnée exploitable par anki à partir de ma base de donnée lisible. L'idée de base étant que la base de données lisible serve à ce que tu puisse faire des modifications simplement à la main ou à l'aide de requête sql. Et que ces modifications soient ensuite prise en compte par anki.

Il y a deux types de soucis. Le premier, c'est une erreur immédiate. Si la personne utilisant l'add-on n'a pas crée de copie de sauvegarde d'anki, puis qu'il synchronise sa base de données vers le serveur, il peut rapidement perdre pas mal de chose. C'est un risque assez faible, puisqu'anki créé, à chaque fois qu'il est éteint, une copie de sauvegarde. Donc l'utilisaterice devrait, au pire, perdre les modifications faites depuis la dernière fois qu'anki a été allumé ou synchronisé. J'ai moi même été victime de cette erreur. J'ai testé la synchronization avec une base de donnée dans un état étrange. Et bien, laissez moi vous dire que mon téléphone n'a pas aimé. Heureusement, j'avais des back-up et j'ai pu tout réparer.

Le second souci arrive si en plus l'erreur porte sur une unique note, ou sur un type de note peu utilisé, l'erreur peut ne pas être détecté avant très longtemps. Voir ne pas être détecté du tout, si quelque chose disparaît sans laisser de trace, ça peut prendre du temps de réaliser qu'il y a un manque. Je suis donc en train d'aider des gens, potentiellement moi, à ce tirer une balle dans le pieds.

Tout ça arrivera certainement un jour, et ça m'inquiète d'en être partiellement responsable. Bien sûr, l'étape où la base anki est recréée vérifie les erreurs les plus évidentes. Ainsi, la base de donnée vérifie l'unicité des champs qui doivent être unique. Et je vérifie aussi que les listes qui contiennent un élément numéro 4 contiennent aussi un élément numéro 3. Mais je ne peux pas tout vérifier, puisque je ne sais pas à l'avance ce que les utilisateurice voudront faire, et donc quels changements seront normaux ou non.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : http://www.milchior.fr/blog/index.php?trackback/728

Fil des commentaires de ce billet