Comme tout développeur de logiciels, il m'est arrivé, en relisant le code d'un autre ou même mon propre code, de me demander ce que l'auteur a voulu faire, quelle était son intention, ce que fait ce code ou plus précisément ce qu'il est supposé faire.
Il y a bien sûr les commentaires, censés aider à la compréhension, mais ils peuvent manquer, ou bien être présents et ne pas être à jour, sans bien sûr aucune indication sur ce décalage potentiel.
Idéalement, j'aimerais donc assister à la création du code et aux pensées qui ont présidé à son écriture. Le sens de lecture (par la machine) d'un code est relativement linéaire, alors que son écriture (par l'humain) est faite d'allers et retours incessants pour ajouter ici une variable, ici découper une fonction, ...
Une solution intéressante serait donc que le développeur, en même temps qu'il développe, fasse une captation de son écran et parle pour exprimer ce qu'il fait, les pensées qui lui viennent, pourquoi il fait tel choix, etc. bref tout ce qui devrait figurer dans les commentaires mais qui n'y figure pas car le développeur ne peut prendre le risque de perdre le fil de sa pensée en passant sans cesse du code au commentaire. Enregistrer simultanément l'écran et la voix du développeur permettrait d'enregistrer et de conserver de façon synchronisée le code et ses explications.
La vidéo ne devrait pas comporter seulement l'édition du code mais également par exemple le terminal dans lequel le développeur lance des commandes pour tester son logiciel, les résultats obtenus et les réactions par rapport à ces résultats, qui se traduisent par des modifications du code.
Evidemment, accumuler ces vidéos de développement serait inutile sans méta-données permettant de retrouver l'information nécessaire, par exemple: Que signifie cette partie du code dans tel fichier ? Quelles parties du code implémentent ou concernent tel concept ?
L'annotation de vidéo étant plutôt fastidieuse, l'éditeur de code devrait générer automatiquement certaines annotations, comme les plages de temps correspondant à l'édition d'un certain fichier. Il resterait à la charge du développeur d'annoter les vidéos par les informations de concepts, idées, algorithmes, parties du logiciel correspondant à chaque vidéo. Cela pourrait se faire au moment du commit, dans le commentaire. Le développeur pourrait faire une vidéo par révision.
Ainsi, lorsque je ne comprendrais pas un morceau de code, le gestionnaire de versions m'indiquerait à quelle révision il a été écrit et je pourrais alors regarder la vidéo correspondant à cette révision.
Ces vidéos pourraient être vues comme de précieuses traces d'individuation.
D'un point de vue technique, ces vidéos pourraient être créées à l'aide de n'importe quel outil d'enregistrement vidéo et audio, à condition qu'il puisse être contrôlé par un autre programme, notamment le gestionnaire de fenêtres.
En effet, il ne faudrait enregistrer que certains fenêtres ou bureaux virtuels, car il ne faut pas que la lecture d'un mail, la recherche d'une information sur le net ou autre activité autre que le développement apparaissent dans la vidéo. Plutôt que forcer le développeur à explicitement suspendre et reprendre l'enregistrement, il serait plus commode par exemple que le gestionnaire de fenêtres suspende l'enregistrement lorsque je change de bureau virtuel. Ceci correspond à ma pratique d'avoir un bureau pour le développement, un pour la messagerie, un pour le navigateur, ..
L'éditeur de code devrait aussi être au courant des suspensions et reprises d'enregistrement, pour générer les informations associant plages de temps et fichiers édités.
Je ne connais pas les formats vidéos et donc s'il est possible de mettre ces plages de temps dans le fichier vidéo ou bien dans un fichier à côté, utilisable par un autre logiciel (je pense au logiciel Lignes de temps).
Un point de départ pourrait être l'utilisation de l'outil "recordmydesktop" qui permet notamment à d'autres programmes de demander la suspension et la reprise de l'enregistrement.
Si quelqu'un connaît un ou des outils permettant de faire ces vidéos de développement, surtout sous Linux, je suis preneur.
Mise à jour (23/06/2O11): L'outil Advene semblerait pouvoir faire l'affaire. Reste à générer automatiquement le fichier d'annotations depuis l'éditeur de code.