Pergunta

Saudações. Tenho estado a olhar para Alfabetizado Programar um pouco agora, e eu gosto da idéia por trás dele: você basicamente escrever um pequeno artigo sobre o seu código e escrever para baixo tanto das decisões de design, o código provavelmente em torno do módulo, os workins internos de o módulo, suposições e conclusões resultantes das decisões de design, potencial extensão, tudo isso pode ser escrito de uma forma agradável usando tex. Concedido, o primeiro ponto: é a documentação. Deve ser mantido up-to-date, mas que não deve ser tão ruim, porque a sua mudança deve ter uma justificativa e você pode escrever isso.

No entanto, como é que Alfabetizado Programação Scale a um grau maior? No geral, Literate Programming ainda é apenas texto. texto muito legível, é claro, mas o texto ainda e, portanto, é difícil de seguir sistemas de grande porte. Por exemplo, eu retrabalhado grandes partes do meu compilador para uso >> e um pouco de magia para as etapas da cadeia de compilação juntos, porque alguns "x.register_follower (y); y.register_follower (z); y.register_follower (a); ... "ficou muito pesado, e mudar isso para x >> y >> z >> um feito um pouco melhor, embora isso está no seu ponto de ruptura, também.

Então, como é Alfabetizado Programação escala para sistemas maiores? Alguém tentar fazer isso?

Meu pensamento seria usar LP para especificar componentes que se comunicam uns com os outros usando fluxos de eventos e cadeia de todas estas em conjunto, utilizando um subconjunto de graphviz. Esta seria uma extensão bastante natural para LP, como você pode extrair uma documentação - um diagrama de fluxo de dados - a partir da rede e também gerar o código a partir dele muito bem. O que você acha disso?

-. Teta

Foi útil?

Solução

Excelente pergunta. A motivação para a programação alfabetizada nunca vai embora, mas eu acho que deve ser tratado como fluido. Significa "dar ao leitor uma pausa, e educá-los para o que você está tentando fazer". Eu não acho que isso significa "tornar seu código muito prolixo".

Dito isto, o leitor vai ter de colocar algum esforço para isso, dependendo do que eles já sabem. Presumivelmente, o código é digno de se entender, e nada vem de graça.

Eu também acho que significa mais do que apenas tornar o código legível. Muito provavelmente, a razão que alguém está lendo o código é porque eles precisam para fazer uma mudança. Você deve antecipar as possíveis alterações que possam ser necessárias, e dizer-lhes como fazê-lo, se necessário.

Outras dicas

O livro "Fisicamente Baseado Rendering" (pbrt.org) é o melhor exemplo de grande escala programação alfabetizada que eu estou ciente. Os implementos livro um sistema de renderização completa, e tanto o texto do livro eo código raytracer são gerados a partir da mesma "fonte".

Na prática, descobri que apenas usando um sistema como Doxygen e realmente cavar e fazer uso de todos os seus recursos é melhor do que a programação "alfabetizados" full-blown, exceto para coisas como esta, ou seja, livros, educacional materiais.

Eu fiz alguma programação alfabetizada com WEB cerca de 15 anos atrás. Mais recentemente eu tentei extrair o código de um wiki e geração de documentação de um ambiente Squeak Smalltalk.

A parte de baixo para cima podem ser tratadas relativamente bem ao gerar documentos a partir de estruturas TDD / BDD, mas LP concentra-se em explicar o código para o leitor.

Existem algumas questões:

  • a história para contar é diferente para diferentes partes interessadas / os leitores;
  • a estrutura do projeto na maioria dos ambientes não é a estrutura necessária para contar histórias;
  • apoio a sucessiva refinamento / divulgação está faltando;
  • , além de suporte de texto para fotos é necessário;
  • a partir dos comentários em um sistema de controle de origem pode derivar como o sistema foi construído. A história deve ser como o sistema poderia ter sido de construção (com perfeita retrospectiva).

Para LP ao trabalho para sistemas maiores, você precisa de um melhor suporte IDE do que um wiki ou um navegador de objeto.

"No geral, Alfabetizado programação é ainda apenas texto "

False.

Os diagramas são muito bem.

Meu pensamento seria usar LP para especificar componentes que se comunicam uns com os outros usando o evento córregos

Isso é apenas a arquitetura, e isso é bom.

Você pode extrair uma documentação - um diagrama de fluxo de dados - a partir da rede e também gerar o código a partir dele muito bem. O que você acha disso?

diagramas de fluxo de dados não são realmente tudo o que útil para gerar código detalhado. Eles são um resumo prático, não uma fonte precisa de informações.

Uma ferramenta boa escrita (como látex) pode codificar o diagrama no documento. Você provavelmente poderia descobrir uma maneira do diagrama de outras partes da documentação.

Bottom Line

No longo prazo, é melhor gerar o diagrama como um resumo do texto.

Por quê?

Diagramas detalhes intencionalmente Elide. Um diagrama que representa um resumo ou uma visão geral. Mas como uma fonte para o código, diagramas são terríveis. A fim de fornecer todas os detalhes, os diagramas de se tornar muito desordenado.

Mas um resumo esquemático de algum outro marcação LP vai dar certo.

PBRT é um traçador ray baseado fisicamente escrito no estilo alfabetizados para a educação de graduados em ciência da computação ( e eu), é um sistema moderadamente grande escala. Como um programador não-especialista este nível de documentação é muito essencial para compreender o que o programa faz e por que ele faz isso.

Eu também tenho acesso a uma pesquisa-processador, em Java, que é bem escrito, mas relativamente em situação irregular, mas para alguns papéis SIGGRAPH. Isso também é relativamente compreensível, mas eu tenho acesso aos autores também.

Eu também usei ImageJ bastante, e olhou sob o capô na subjacente Java -. é muito difícil de seguir sem uma idéia da filosofia subjacente

Em suma, minha opinião é que a programação alfabetizada é ótimo se alguém pode encontrar o tempo para fazê-lo bem e isso é provável que seja em ambientes educacionais. É difícil vê-lo sendo feito na produção de código comercial. Eu sou cético quanto à idéia de que o código pode ser inteiramente auto-documentado.

A idéia por trás da programação alfabetizada é ênfase na documentação, com código de aspergido através da documentação, em vez de comentários polvilhados através de código.

Esta é uma filosofia essencialmente diferente, e as diferenças de gosto nomes mais variáveis, namespaces e classes não afetar a filosofia. programação alfabetizada defende nomes de variáveis ??significativas.

É escalas até sistemas maiores, porque a relação básica de documentação para escalas de código linearmente com o tamanho do código.

Programação Alfabetizado foi desenvolvido em uma era onde longos nomes de variáveis ??e função simplesmente não eram possíveis. Devido a isso, o código realmente não era legível.

Obviamente, muita coisa aconteceu desde então.

No mundo de hoje, o próprio código é a documentação, daí o termo "código de auto documentar." A realização é que nenhum conjunto de comentários ou documentação externa pode jamais permanecer em sincronia com o código subjacente. Assim, o objetivo de um monte de programadores de hoje é escrever o código de tal forma a que seja legível para os outros.

Tente NanoLP - LP ferramenta extensível, suporta muitos formatos de documento (Markdown, OpenOffice, crioulo, TeX, AsciiDoc e outros), a importação de outros programas LP, templates e muito mais. O usuário pode adicionar próprios comandos / macros (em Python), por exemplo, para fazer a importação especial, por exemplo, de VCS ... http://code.google.com/p/nano-lp

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top