Documenter un langage de programmation: Manuel de référence

12

Nous examinons la refonte de la documentation sur notre gamme de produits. Une partie de cela comprend des manuels de référence pour un langage de programmation utilisé dans le cadre du système.

Lors de la rédaction d'un manuel de référence pour un langage de programmation, quelle est la meilleure façon de le structurer pour une utilisation maximale pour les nouveaux utilisateurs du langage?

Quels sont les aspects clés pour chaque mot clé documenté?

  • Syntaxe
  • La description
  • Arguments - le cas échéant
  • Valeurs de retour - le cas échéant
  • Exemple d'utilisation?
  • En manque-t-il d'autres?

Les concepts (tels que les stratégies de verrouillage, les détails liés aux performances) devraient-ils également être documentés dans ce manuel de référence, ou s'agit-il d'un document distinct?


C'est pour la consommation externe. Nous avons déjà des ensembles de documents complets (voir: http://www.rocketsoftware.com/u2/resources/technical-resources ). Déterminer ce que nous devons faire différemment - j'ai déjà mes idées, mais comme toujours, j'essaie de ne pas me fier uniquement à mon opinion.

Public: développeurs techniques utilisant nos bases de données et nos outils pour produire des logiciels dans de nombreuses industries.

Dan McGrath
la source
Pourquoi auriez-vous besoin de documenter la langue? Est-ce une langue ésotérique ou sur mesure? N'a-t-il pas déjà de documentation? Et sinon, pourquoi l'avez-vous choisi en premier lieu?
yannis
@YannisRizos - Je pense que vous pouvez supposer que c'est un langage de script / macro personnalisé, pas qu'ils aient l'intention de documenter C ++. Généralement, les documents pour une telle langue sont la source de l'analyseur - puisque l'implémenteur de la langue est souvent l'utilisateur principal
Martin Beckett
2
@DanMcGrath Eh bien, oui, connaître l'audience et le niveau / volume de la documentation existante affecterait la façon dont j'écrirais un manuel de référence. Sera-ce uniquement pour un usage interne?
yannis
1
@Telastyn - Oui, c'est public. Nous avons bien plus que de simples manuels de référence, mais cette question portait spécifiquement sur cet aspect: rocketsoftware.com/u2/resources/technical-resources
Dan McGrath
1
Jetez un oeil aux documents de Lua pour un excellent exemple d'un manuel de référence bien écrit et ciblé. L'introduction de la langue est le travail d'un livre séparé, Programming in Lua. La répartition des responsabilités fonctionne bien, du moins pour moi.
yamad

Réponses:

16

Organisez la documentation en fonction des besoins du public cible.

Dans votre cas, le public principal est apparemment des développeurs de logiciels. Les parties à considérer ici sont destinées aux différents "sous-publics" de celui-ci:

  1. Bonjour le monde.
    Ceux qui veulent en avoir rapidement le goût, il suffit de créer et d'exécuter un exemple d'application pour voir à quoi il ressemble.
    Pensez à l'audience comme celle abordée par MySQL "règle des 15 minutes" :

    ... un utilisateur pour que MySQL soit opérationnel 15 minutes après avoir fini de le télécharger.

  2. Fondamentaux.
    Pour les gars désireux d'apprendre rapidement les choses nécessaires pour commencer à produire des logiciels qui fonctionnent.
  3. Sujets avancés.
    Pour les développeurs déjà bien familiarisés et habitués aux fondamentaux, intéressés à savoir ce qu'il y a au-delà. Sujets courants qui n'ont pas été traités dans les fondamentaux .
  4. Guide de style / pratiques recommandées.
    Des conseils et des conseils subjectifs pour ceux qui s'intéressent à la façon dont vous recommandez de faire les choses.
    La question n'indique pas si cela pourrait avoir un public important dans votre cas, donc les options à considérer sont de l'inclure en tant que partie / annexe de sujets avancés ou même de le supprimer complètement.
  5. Quirks.
    Sujets obscurs, en dehors du courant dominant, qui pourraient intéresser une fraction assez limitée de votre public. Par exemple, si vous avez une ligne héritée, ou des choses comme la mise à niveau / la migration / l'interopérabilité avec l'héritage - mettez-la ici. S'il y a des effets secondaires pour certaines fonctions dans un environnement "exotique" particulier, cela va dans cette partie.
Votre public secondaire est responsable du manuel. Ces gars-là peuvent faire ou défaire la façon dont les choses fonctionnent pour votre public principal, alors vous feriez mieux de prendre soin de leurs besoins et de leurs problèmes.

Que faire si quelque chose dans le manuel est discutable / ambigu? Que se passe-t-il s'il s'avère qu'une explication approfondie de concepts particuliers rendrait ce manuel trop difficile à lire? Et s'il s'avère que cette version particulière du manuel contient des erreurs?

Deux choses à considérer pour les responsables sont:

  1. Spécifications techniques / formelles.
    Chaque fois qu'il y a un sujet discutable / ambigu / difficile à expliquer dans le manuel, le lecteur peut être renvoyé à un paragraphe particulier de la spécification pour une déclaration "officielle" stricte et claire à ce sujet. Une description stricte et complète (et probablement ennuyeuse) de la syntaxe du langage ferait mieux d'y aller.
    Les considérations primordiales pour la spécification sont la précision technique et l'exhaustivité, même si elles se font au détriment de la lisibilité.
  2. Supplément en ligne.
    Il suffit de réserver une URL et de la mettre au début de chaque document que vous publiez, afin que les gars qui se demandent ce qu'ils viennent de lire puissent y aller (au lieu de harceler les mainteneurs manuels) et trouver l'erreur expliquée.

    Errata> Principes fondamentaux> Version 2.2> Faute de frappe à la page 28, la deuxième phrase commence par la chance , lisez plutôt le verrou .

Des concepts tels que les stratégies de verrouillage, les détails liés aux performances devraient être inclus (éventuellement partiellement) là où vous vous attendez à ce que le public cible en ait besoin.

Par exemple, les mainteneurs manuels seraient apparemment intéressés par une description complète et précise de la concurrence et du verrouillage dans la spécification formelle - mettez-la là. Les lecteurs de sujets fondamentaux ou avancés pourraient être intéressés par une vue d'ensemble / introduction / guide extrait des spécifications et adapté à leurs besoins, etc.


Il pourrait être utile d'organiser une étude comparative de la documentation de référence fournie pour d'autres langues comme la vôtre. Cette étude vise à tirer parti de l'expérience acquise par ceux qui l'ont déjà fait et à apprendre à éviter les erreurs qu'ils ont commises.

Le dernier mais non le moindre, envisagez de configurer le développement de la documentation d'une manière similaire au développement logiciel. Je veux dire des choses comme le contrôle de version, les versions régulières, le suivi des problèmes, l'assurance de la qualité, etc. Nous ne voulons pas obtenir du contenu merdique "en échange" d'un processus de développement parfait, n'est-ce pas?

moucheron
la source
@DanMcGrath une autre astuce pour le processus de développement de documents: envisagez l' approche push-track-backout-repeat . 1) pousser les rédacteurs techniques vers un processus plus strict 2) suivre la qualité des documents tout en poussant 3) s'il y a une baisse de qualité, revenir au processus "plus doux" 4) quelque temps plus tard - après s'être habitués au niveau actuel - répéter la poussée vers un niveau plus strict. Et ainsi de suite, et ainsi de suite jusqu'à ce que vous y soyez à 100%. :)
moucher
1
J'ai un petit problème. Ce que vous avez décrit est un didacticiel ou un ensemble de didacticiels. Un tutoriel n'est pas un guide de référence. Un didacticiel décrit le fonctionnement de la langue, tandis qu'un guide de référence répertorie les éléments de la langue. Un didacticiel et un guide de référence sont importants, mais ils sont complémentaires.
Gilbert Le Blanc
Question @GilbertLeBlanc était sur le « manuel de référence » que je (et je pense que Wikipedia ) considère assez large pour des trucs de couverture dans ma réponse
moucheron
5

La première chose que vous devez faire est d'évaluer le public. Votre public est-il des hackers du noyau Linux ou sont-ils des concepteurs de matériel qui utilisent des outils logiciels pour faire un travail mais ne sont pas intéressés par les logiciels en eux-mêmes et n'ont pas d'expérience en CS. Les ingénieurs électriciens ne sont probablement pas complètement clairs sur les différences entre les arguments const et non const, les pointeurs vers les objets par rapport aux références, etc. Si vos primitives ont des noms surchargés, vous feriez mieux d'expliquer ce concept à un niveau approprié pour votre public, ce qui pourrait ne rien être s'ils sont des programmeurs C ++.

La deuxième chose que vous devez évaluer est la granularité des primitives du langage. Plus la granularité est fine, plus vous devrez fournir des exemples d'utilisation à proximité des spécifications de syntaxe de chaque primitive. Autrement dit, si vous avez une primitive de bas niveau qui instancie un certain contexte, et que vous devez opérer dessus avec trois autres primitives de bas niveau avant de pouvoir faire quoi que ce soit d'utile, alors vous feriez mieux d'avoir un exemple complet de quelque fonction utile close- par dans le manuel. Voir la documentation openssl en ligne pour un excellent contre-exemple de documentation presque inutilisable.

Assurez-vous d'inclure une explication des effets secondaires de vos fonctions.

Dans tous les cas, si vous ne voulez pas que les programmeurs de votre client vous maudissent chaque nuit avant de vous coucher, incluez beaucoup d'exemples de code testés qui exécutent des primitives fonctionnelles de haut niveau. Assurez-vous que les exemples ne sont pas uniquement des extraits de code, mais qu'ils sont complets et compilables ou exécutables prêts à l'emploi.

Traditionnellement, les rédacteurs technologiques ont fait la distinction entre les manuels de référence et les guides d'utilisation . Le manuel de référence comprend généralement les spécifications de syntaxe, une définition intelligible des fonctions ou des primitives, une discussion sur le gotcha, les performances et les effets secondaires, et un court exemple d'utilisation. Le guide de l'utilisateur comprend des exemples d'utilisation plus étendus et une discussion sur des problèmes d'ingénierie plus larges. Le «langage de programmation C» de Kernigan et Ritchie est un excellent contre-exemple à cette convention, mais cette approche ne fonctionne que lorsque le langage que vous documentez est relativement simple.

L'auteur a été directeur de la division des services d'ingénierie au centre de développement de Ready Systems Inc entre 1987 et 1991, chargé de gérer une équipe de cinq rédacteurs technologiques.

Eli Rosencruft
la source