Pergunta

Então, eu usei o rabisco / lp módulo para escrever o meu primeiro programa de alfabetização usando plt-scheme:

#lang scribble/lp
(require scribble/lp)

<<lp_scheme.ss>>

@chunk[<squarefunction>
        (define (f x)
         (* x x))]

Nada útil lá, é claro. Agora estou tipo de me perguntando por que eu não use comentários simples, em vez de construções de programação alfabetizados. Quaisquer opiniões bem-vindos. Seria ótimo se alguém que tem provavelmente teve mais exposição / exp. com ele para, eventualmente, dar uma explicação mais intuitiva das diferenças entre o código bem documentado e código escrito usando construções de programação alfabetizada.

Foi útil?

Solução

(eu estou supondo que você está usando a definição da programação alfabetizada de Donald Knuth.)

A principal diferença é um dos seqüência .

Ao escrever uma aplicação regular, existem restrições sobre a ordem em que você expressar as coisas.

Para ilustrar:

  • Todo o código para uma classe particular tem de ser expresso em um único lugar
    (Ou num número muito pequeno de lugares, por exemplo C # classes parciais)
  • Todo o código para um método tem de ser dada de uma só vez, na ordem correta para execução
  • As dependências devem ser declarados antes das coisas dependem deles
    (Variáveis ??declaradas antes do uso na maioria dos idiomas; procedimentos / funções declarou antes do uso em Pascal; assembleias biblioteca compilados antes de outros em .NET)

Com programação alfabetizada você se liberta desta restrição e liberado para expressar seus conceitos em qualquer ordem faz sentido para você usar ao explicar o programa para outro desenvolvedor.

Isto tem outra conseqüência - em algumas formas, você pode expressar um conceito uma vez (por exemplo, "Todas as propriedades irá acionar o evento PropertyChanged quando alterado"), e tem que tecido em toda a sua aplicação em um miríade de outros lugares.

Para programas muito simples, um programa de alfabetização e um bem comentado pode parecer o mesmo -. Mas como a complexidade do sistema cresce, os dois vão começar a aparecer muito diferente

Outras dicas

motivação principal, quanto a mim, é que cada uso programador folhas de papel / notebook à arquitetura 'design', desenvolver idéias, lá ele escreve esquemas, diagramas, tente um pouco de matemática e assim por diante. Depois de terminar o programa, todos esses cadernos folhas / papel são perdidos, então suportabilidade do programa está ficando para baixo. Eu escrevi sobre isso em WiKi do meu LP ferramenta NanoLP: http://code.google .com / p / nano-lp / wiki / AboutLP .

Segundo motivação, não tão explicitamente, é insetos menores. Mas isso não é coisa 'teórica', é experiência de fato (para mim) - Quando você está 'pensamento' no papel, desenhar diagramas, esquemas de algoritmos - o programa vai ter bugs menores. LP é tal 'papel', nada mais.

Existem muitos desenvolvedores, que nunca desenha algo, comentários até mesmo (!), Eles escrevem programa só ... Terrível!

E LP ajuda a criar uma boa documentação (não em modo formal - descrição sobre as funções, é args, eo que ele retorna, e com certeza isso é bom conhecido com assinatura de função, então por que essa documentação é necessária ??), mas ele ajuda a escrever documentação REAL REAL com semântica, com fotos, com a descrição dos bens ações ...

Muitas motivações :) E com certeza, por vezes, é melhor usar apenas LP reversa (Doxygen, por exemplo), às vezes -. LP real, depende de muitos fatores

Alfabetizado programação é baseada em três declarações simples:

  1. Os programadores devem escrever o código, que o computador possa entender
  2. Os programadores devem escrever documentação, que as pessoas possam entender
  3. Se estes são documentos separados é inevitável que eles vão estar fora de sincronia

Na verdade, na minha experiência, nº 2 geralmente recebe pouca atenção. Já perdi a conta de quantas vezes QA me disse "o doc diz isso, mas o código faz QUE; é o código incorreto ou é o doc fora-de encontro?" Eu não espero que meu trabalho é fora do comum, a esse respeito. Além disso, em um dos meus primeiros projetos, eu estava tentando manter os docs up-to-date como o vai-e-vem com as partes interessadas resultou em requisitos mudando. Este foi suficientemente demorado que me foi dito, pela administração, de parar de brincar com os docs e é só pegar o funcionamento do projeto. Temos ido para processos de documentação menos tediosas, desde então (graças a Deus!).

Temos ferramentas de revisão de código onde, quando fizermos uma alteração ao código, várias pessoas podem ver as mudanças, claramente delineados, e comentários podem ser feitas, fazendo perguntas, explicando coisas, oferecendo melhorias. Se o código foi escrito com técnicas de programação literate, grande parte dessa pergunta / resposta seria supérfluo porque a explicação seria incluído.

A maior parte da mentalidade de programação moderna é que seu código deve ser sua própria documentação. Muitos especialistas argumentam que, se você achar que precisa de explicar o seu código nos comentários, você provavelmente deve reformatar o código (alteração de nomes / função variável, etc.) de modo que os comentários são desnecessários. I acho que isso seja ótimo na teoria, menos prática na realidade. Quero dizer, quando eu estou usando bibliotecas criados / mantidos por outra pessoa, a sua escolha de nomes método / função nem sempre é intuitiva para mim. Por exemplo:

Set<String> statesWeCareABout = new HashSet<String>(Arrays.asList(new String[] { "one", "two", "three" }));
Set<String> statesWeFound = <some function>;
statesWeFound.retainAll(statesWeCareAbout);

Se você não estiver familiarizado com Set <> ou HashSet <>, você pode não saber que .retainAll () significa dar-me a intersecção dos dois, com o resultado no conjunto modificado <>.

Finalmente, Alfabetizado Programação geralmente permite que você quebrar as coisas para que você possa explicar este pedaço de código em isolamento, em seguida, em linha-lo em este outro pedaço de código. Isso é mais em linha com a forma como humano obras de compreensão. Explique-me como isso funciona, em seguida, construir sobre essa compreensão para explicar o quadro maior. Computadores realmente não me importo; você pode escrever uma única função com 1.000 linhas de código e não tem nenhum problema de compreender a coisa toda. Deus o ajude se você, como um desenvolvedor, tem que manter isso.

E isso, realmente, é o raciocínio por trás Alfabetizado programação. Código terá de ser mantida, se é insetos sendo fixo ou funcionalidades sejam adicionadas. E se ele não pode ser compreendido por alguém, mais tarde, de uma forma eficiente, ele será substituído. Não há maneira muito "write apenas" código neste mundo. Programação Alfabetizado torna mais fácil de ler e compreender, o que torna mais provável a ser mantido e utilizado, a longo prazo.

E será que realmente tem tempo para manter a re-inventar a roda?

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