Documentando uma linguagem de programação: Manual de Referência

11

Estamos procurando reformular a documentação em toda a nossa linha de produtos. Parte disso inclui manuais de referência para uma linguagem de programação usada como parte do sistema.

Ao escrever um manual de referência para uma linguagem de programação, qual é a melhor maneira de estruturá-lo para maximizar a usabilidade daqueles que são novos na linguagem?

Quais são os principais aspectos de cada palavra-chave documentada?

  • Sintaxe
  • Descrição
  • Argumentos - se aplicável
  • Valores de retorno - se aplicável
  • Exemplo de uso?
  • Falta algum outro?

Os conceitos (como estratégias de bloqueio, detalhes relacionados ao desempenho) também devem ser documentados neste manual de referência ou é um documento separado?


Isto é para consumo externo. Já temos conjuntos de documentos completos (consulte: http://www.rocketsoftware.com/u2/resources/technical-resources ). Descobrir o que devemos fazer de diferente - eu já tenho minhas idéias, mas como sempre, tento não confiar apenas na minha opinião.

Público-alvo: desenvolvedores técnicos que usam nossos bancos de dados e ferramentas para produzir software em vários setores.

Dan McGrath
fonte
Por que você precisaria documentar o idioma? É uma linguagem esotérica ou personalizada? Já não tem documentação? E se não, por que você escolheu em primeiro lugar?
Yannis 14/05
@ YannisRizos - Eu acho que você pode assumir que é uma linguagem de script / macro personalizada, não que eles pretendam documentar C ++. Geralmente a documentação para esse tipo de linguagem um é a fonte analisador - desde o implementador da linguagem é muitas vezes o usuário principal
Martin Beckett
2
@DanMcGrath Bem, sim, conhecer o público e o nível / volume da documentação existente afetaria como eu escreveria um manual de referência. Será apenas para uso interno?
Yannis 14/05
1
@Telastyn - Sim, é público. Nós temos muito mais do que os manuais de referência apenas, mas esta pergunta era especificamente sobre esse aspecto: rocketsoftware.com/u2/resources/technical-resources
Dan McGrath
1
Dê uma olhada nos documentos de Lua para um ótimo exemplo de um manual de referência bem escrito e focado. Introduzir a linguagem é o trabalho de um livro separado, Programação em Lua. A divisão de responsabilidade funciona bem, pelo menos para mim.
Yamad 14/05

Respostas:

15

Organize a documentação de acordo com as necessidades do público-alvo.

No seu caso, o público principal são aparentemente desenvolvedores de software. As partes a considerar aqui devem abordar diferentes "sub-audiências" desta:

  1. Olá Mundo.
    Para aqueles que desejam experimentar rapidamente, basta criar e executar um aplicativo de amostra para ver como ele se parece.
    Pense no público como aquele abordado pelo MySQL "15 minutes rule" :

    ... um usuário para poder ter o MySQL em funcionamento 15 minutos depois de terminar o download.

  2. Fundamentos.
    Para os caras dispostos a aprender rapidamente as coisas necessárias para começar a produzir software de trabalho.
  3. Tópicos avançados.
    Para desenvolvedores já bem familiarizados e praticados com fundamentos, interessados ​​em saber o que há além. Tópicos principais que não foram abordados nos Fundamentos .
  4. Guia de Estilo / Práticas Recomendadas.
    Aconselhamento e orientação subjetiva para os interessados ​​na maneira como você recomenda fazer as coisas.
    A pergunta não indica se isso poderia ter um público substancial no seu caso; portanto, as opções a serem consideradas são incluí-lo como parte / apêndice de tópicos avançados ou até mesmo descartá-lo completamente.
  5. Peculiaridades.
    Tópicos obscuros, fora do mainstream, que podem interessar uma fração bastante limitada do seu público. Por exemplo, se você tem uma linha herdada, ou coisas como atualização / migração / interoperabilidade com o herdado - coloque aqui. Se houver alguns efeitos colaterais para alguma função em um ambiente "exótico" específico, isso ocorre nesta parte.
Seu público secundário é o mantenedor do manual. Esses caras podem criar ou quebrar a maneira como as coisas funcionam para o seu público principal, para que você cuide melhor de suas necessidades e problemas.

E se algo no manual for questionável / ambíguo? E se a explicação completa de conceitos particulares dificultar a leitura do manual? E se a versão específica do manual apresentar erros?

Duas coisas a considerar para os mantenedores são:

  1. Especificação técnica / formal.
    Sempre que houver um tópico questionável / ambíguo / difícil de explicar no manual, o leitor pode ser referido a um parágrafo específico da especificação para uma declaração "oficial" estrita e clara sobre isso. Uma descrição rigorosa e completa (e provavelmente muito chata) da sintaxe da linguagem seria melhor.
    As considerações fundamentais para a Especificação são a precisão e a completude técnicas, mesmo que elas ocorram à custa da legibilidade.
  2. Suplemento online.
    Basta reservar um URL e colocá-lo no início de cada documento que você liberar, para que os caras que estão se perguntando o que diabos acabaram de ler possam ir lá (em vez de incomodar os mantenedores manuais) e encontrar o erro explicado.

    Errata> Fundamentos> Release 2.2> Typo na página 28, segunda começa frase com sorte , leia bloqueio em seu lugar.

Conceitos como estratégias de bloqueio, detalhes relacionados ao desempenho devem ser incluídos (possível parcialmente) nos locais em que você espera que o público-alvo precise.

Por exemplo, os mantenedores manuais aparentemente estariam interessados ​​em uma descrição completa e precisa da concorrência e do bloqueio na especificação formal - coloque-a lá. Os leitores de tópicos Fundamentos ou Avançados podem estar interessados ​​em uma visão geral / introdução / guia extraída da especificação e adaptada às suas necessidades, etc.


Pode ser útil organizar um estudo comparativo da documentação de referência fornecida para outros idiomas como o seu. Aponte este estudo para aproveitar a experiência adquirida por aqueles que o fizeram antes e aprender a evitar erros que cometeram.

O último, mas não menos importante, considere configurar o desenvolvimento da documentação de maneira semelhante ao desenvolvimento de software. Quero dizer coisas como controle de versão, lançamentos regulares, rastreamento de problemas, garantia de qualidade, etc. Você pode fazer alguns compromissos, se for constatado que o (s) seu (s) escritor (es) técnico (s) não estão realmente confortáveis ​​com coisas assim. Não queremos obter conteúdo de baixa qualidade "em troca" de um processo de desenvolvimento perfeito, não é?

mosquito
fonte
@DanMcGrath mais uma dica para o processo de desenvolvimento de documentos: considere a abordagem push-track-backout-repeat . 1) empurre os escritores de tecnologia para um processo mais rigoroso 2) acompanhe a qualidade dos documentos enquanto pressiona 3) se houver queda na qualidade, retorne ao processo "mais suave" 4) algum tempo depois - depois de se acostumar com o nível atual - repita o push para um mais rígido. E assim por diante, até que você esteja 100% lá. :)
gnat
1
Eu tenho uma queixa. O que você descreveu é um tutorial ou um conjunto de tutoriais. Um tutorial não é um guia de referência. Um tutorial descreve como o idioma funciona, enquanto um guia de referência cataloga os elementos do idioma. Um tutorial e um guia de referência são importantes, mas são complementares.
Gilbert Le Blanc
Pergunta @GilbertLeBlanc era sobre "manual de referência", que eu (e eu acho Wikipedia ) considerar grande o suficiente para o material de cobertura na minha resposta
mosquito
5

A primeira coisa que você precisa fazer é avaliar o público. É o seu público-alvo hackers de kernel Linux ou eles são designers de hardware que usam ferramentas de software para fazer um trabalho, mas não estão interessados ​​em software por si só e não têm experiência em CS. É provável que os engenheiros elétricos não sejam totalmente claros sobre as diferenças entre argumentos const e não const, ponteiros para objetos versus referências etc. Se suas primitivas sobrecarregaram nomes, é melhor você explicar esse conceito em um nível apropriado para o seu público, o que pode não ser nada se forem programadores em C ++.

A segunda coisa que você precisa avaliar é a granularidade das primitivas da linguagem. Quanto mais fina a granularidade, mais você precisará fornecer exemplos de uso nas proximidades das especificações de sintaxe de cada primitivo. Ou seja, se você tem uma primitiva de baixo nível que instancia algum contexto e precisa operar com outras três primitivas de baixo nível antes de poder fazer algo útil, é melhor ter um exemplo completo de algumas funções úteis por no manual. Veja a documentação do openssl online para um excelente contra-exemplo de documentação quase inutilizável.

Certifique-se de incluir uma explicação dos efeitos colaterais de suas funções.

De qualquer forma, se você não quiser que os programadores de seus clientes o amaldiçoem todas as noites antes de dormir, inclua vários códigos de exemplo testados que executam algumas primitivas funcionais de alto nível. Certifique-se de que os exemplos não sejam apenas trechos de código, mas completos e compiláveis ​​ou executáveis ​​prontos para o uso.

Tradicionalmente, os escritores de tecnologia distinguem entre manuais de referência e guias do usuário . O manual de referência geralmente inclui as especificações de sintaxe, uma definição inteligível das funções ou primitivas, discussão de pegadinhas, desempenho e efeitos colaterais e um breve exemplo de uso. O guia do usuário inclui exemplos de uso mais estendidos e discussão de problemas de engenharia mais amplos. A "Linguagem de programação C" de Kernigan e Ritchie é um excelente contra-exemplo para esta convenção, mas essa abordagem funciona apenas quando o idioma que você está documentando é relativamente simples.

O autor foi gerente da Divisão de Serviços de Engenharia no centro de desenvolvimento da Ready Systems Inc entre 1987 e 1991, com a responsabilidade de gerenciar uma equipe de cinco redatores de tecnologia.

Eli Rosencruft
fonte