ti-enxame.com

Por que a programação alfabetizada não é mainstream?

Programação alfabética tem bons ideais. Por que você acha que isso não é popular? É porque não conseguiu entregar?

32
Casebash

Eu o vi pela primeira vez em um livro dos escritos de Knuth e achei que parecia arrumado. Depois, tentei usar a tela de programação literária para compreender o que estava acontecendo no programa e achei mais difícil do que parecia. Pode ter sido que eu estava muito acostumado a passar por listagens de programas, mas parecia confuso.

Então eu olhei para o código fonte, e isso me desligou de vez em quando. Eu teria que aprender a escrever programas de uma maneira totalmente nova, com menos correspondência entre o texto do programa e o que o compilador viu e não viu nenhum benefício correspondente.

Além disso, as pessoas podem escrever argumentos longos e convincentes de que o código está fazendo X quando está realmente fazendo Y, e eu me deparei com minha parte de comentários enganosos. Eu desenvolvi uma predileção por ler o código para ver o que ele está fazendo bastante cedo. A programação alfabetizada é a antítese disso.

35
David Thornley

Eu culparia o efeito de rede . Para que outras pessoas editem seu código e documentação, eles devem ser capazes de entendê-lo.

Isso afasta as pessoas de algo como cweb/noweb, porque usá-las exigiria que você aprendesse o TeX e a sintaxe específica do programa sobre a linguagem de programação que você está usando para o projeto. Isso pode ser visto como uma enorme perda de tempo, especialmente se eles não precisarem de nenhuma composição matemática que seja um grande atrativo para o TeX. (E para muitos programadores de aplicativos, eles realmente não precisam disso.) Em vez disso, preferem algo como os comentários XML do Visual Studio, porque isso já é popular e bem estabelecido.

Os lugares onde eu vi a programação alfabetizada decolar são na computação científica/estatística, onde a maioria dos programadores tem treinamento significativo (também conhecido como PhDs) em matemática, CS ou estatística e, portanto, já conhece o LaTeX. A documentação que eles escrevem tem mais probabilidade de incluir muitas fórmulas complicadas que são melhor escritas em TeX, e é mais provável que estejam programando em R. A proporção de programadores R que conhecem o SWeave é definitivamente muito maior do que, digamos, o proporção de programadores C que conhecem cweb.

13
Larry Wang

Fiquei fascinado com o conceito de programação alfabetizada no final dos anos 90, enquanto estudava, e ainda estou intrigado com a abordagem de Knuths sobre programação e composição tipográfica. Nada além do melhor fará.

O sistema de programação alfabetizada que Knuth projetou fez muito, muito mais do que imediatamente aparece, ou seja, supera muitas deficiências na linguagem de programação subjacente que a ferramenta de geração de código gerada a partir do documento fonte de Knuths, o Pascal padrão.

Para aqueles que tiveram a sorte de não ter experimentado o Standard Pascal, aqui estão alguns dos destaques.

  • Para tornar mais fácil ter um compilador de passagem única, a especificação da linguagem dizia que todas as declarações tinham que vir em uma determinada ordem. Na página da wikipedia: "Cada procedimento ou função pode ter suas próprias declarações de rótulos, constantes, tipos, variáveis ​​e outros procedimentos e funções, que devem estar todos nessa ordem". Isso significava que você não agrupa suas coisas logicamente no arquivo de origem.
  • O manuseio de cordas era mais tedioso do que o simples C.
  • Os identificadores não podem ter comprimento arbitrário.
  • Muitas outras coisas que não consigo mais lembrar.

Todas essas coisas basicamente significavam que Knuth precisava de uma linguagem de programação melhor (então ele inventou uma) e usou Pascal como linguagem Assembly.

A maioria das linguagens modernas pode fazer essas coisas sem muito esforço, removendo, portanto, uma GRANDE parte do trabalho que a programação alfabetizada deveria resolver.

As linguagens modernas também são mais expressivas, permitindo que mais pensamento seja inserido no próprio código.

Então, o que resta? A capacidade de gerar uma forma de documentação tipográfica a partir do código fonte e [~ # ~] que [~ # ~] existe hoje.

Imagine o JavaDoc - a API de tempo de execução Java é talvez a maior parte da programação alfabética disponível atualmente (exceto que o código não é realmente apresentado, mas poderia ter sido se Java estivesse aberto desde o início). Veja, por exemplo, a apresentação da estrutura de coleções em http://download.Oracle.com/javase/6/docs/api/Java/util/Collection.html

Acredito que existem sistemas semelhantes para .NET e outros programas convencionais.

12
user1249

Uma coisa que eu descobri quando comecei a programar com alfabetização nos anos 90 foi que atraiu pessoas muito apaixonadas que queriam fazer exatamente a coisa certa - e isso envolveu escrever seu próprio sistema de programação alfabetizado porque nenhum existente era bom o suficiente para eles. noweb foi uma boa tentativa de cortar isso, fornecendo um denominador menos comum o suficiente para todos, embora mesmo assim, eu passasse a maior parte do tempo do meu LP desenvolvendo uma bonita impressora para ele ...

Outra questão é que é realmente anti-ágil. De certa forma, desacelerar é bom porque obriga a pensar com mais antecedência e a acertar as coisas da primeira vez. Por outro lado, documentar meticulosamente à medida que você avança significa que há uma grande barreira para refatorar seu código. E se você esperar até que seu código seja fortalecido antes de liberá-lo, você terminará com uma tarefa de documentação de vários dias, que poderá realmente impedi-lo.

5
dfan

Na minha humilde opinião, muitas empresas têm uma cultura oposta aos objetivos da programação alfabetizada: desejam resultados mais rápidos (só choram por qualidade quando o aplicativo está em produção). De acordo com minha própria experiência, meus chefes se recusaram a entender que resultados mais rápidos não significam "um programa executável no dia seguinte ao pedido". Para eles, se um desenvolvedor não está ocupado digitando no teclado, ele não está trabalhando, está "desperdiçando seu tempo no design, sem sentido". Sim, eu sei, meu chefe é um idiota.

3
Nisanio

Codificadores escrevem código não em inglês.

Os codificadores não gostam de escrever documentação, porque isso não ajuda a execução do código.

Os codificadores não são bons em escrever documentação porque é um meio ruim para expressar suas idéias.

A programação alfabética parece ser a idéia de levar a documentação para o próximo nível em que o código é mais uma reflexão tardia. Talvez funcionasse, mas para a maioria dos codificadores parece uma documentação desagradável.

2
Winston Ewert

Principalmente porque as pessoas são MUITO ESTÚPIDAS. Um testemunho óbvio do qual é um fluxo interminável de suposições e mal-entendidos expressados ​​pelos jovens sobre a natureza dessa técnica simples.

As pessoas consideram o LP como: (a) um método de documentação (b) um método de redação de alguns ensaios polidos que exigem habilidades ou talentos especiais (c) simplesmente não têm idéia - como criador do editor de programação Leo, por sua própria admissão etc etc. etc.

O LP, no entanto, é simplesmente: (1) escrever programas em uma mistura de código e frases em uma (= qualquer) linguagem humana, onde este último representa outros blocos de código e/ou frases incluídas. É exatamente isso que os autores de inúmeros livros didáticos de programação fazem .. e (2) é um pré-processador simples que expande essas frases em humano (que se tornou como se fossem nomes de sub-rotinas incluídas) para desvendar o resultado NA ORDEM EXIGIDA PELO COMPILADOR (ou intérprete). Caso contrário, pode-se expandir o texto escrito com outro pequeno utilitário para incluir símbolos de formatação para transformar a "fonte alfabetizada" em um texto legível e bem formatado.

Os jovens nunca tentam essa idéia extremamente simples - e fantasiam ou imaginam razões falsas pelas quais nunca tentam ou fazem.

Basicamente, a idéia principal de programar "em pseudocódigo" escrita em uma linguagem humana e depois expandi-la com um simples utilitário de pré-processador em funções/sub-rotinas, necessárias para você não se perder nos detalhes, mas totalmente desnecessário para a execução da máquina.

2
user19562

Eu vim para alfabetizar programação ao contrário - eu sonhava ter o código organizado conforme ele se encaixa na minha mente, não como o compilador exige. Achei Leo quase ideal para esse fim. Ele também suporta acompanhar os arquivos alterados fora. Esses arquivos não precisam conter nenhuma marcação especial, para que eu possa usar o Leo sozinho, sem a necessidade de outros membros da equipe. Esse recurso - "@shadow trees" - é muito promissor, embora ainda seja um buggy, precisa de mais olhos. E também corrige o problema "oh não, tudo em um arquivo grande", organizando tudo no contorno da árvore e apoiando arquivos externos.

Para mim, ao contrário do nome, a "programação alfabetizada" não é sobre documentação. Não tenho mais documentação do que antes. É sobre ter uma estrutura que me ajuda a não me perder . Eu juro por ele, especialmente ao gerenciar arquivos JSP gigantescos (e que, apesar de o Leo ter sido originalmente destinado principalmente a Python e não possuir suporte para a linguagem JSP - eu tenho que dividir o arquivo manualmente na árvore do Leo) !).

1
Juraj

Existem 2 aspectos da programação alfabetizada que eu gostaria desejavam que fossem incorporados à programação convencional - imagens incorporadas (por exemplo, diagramas de design) e ponteiros para tentativas anteriores e alternativas (por exemplo, "O motivo é que isso é porque tentei de outra maneira e não funcionou porque ... "). Ambos os aspectos podem ser tratados com comentários de documentos e URIs.

1
Larry OBrien

Porque a lógica dos programas não funciona da mesma maneira que falamos. Um programa tem um fluxo, condições e loops bem especificados.

Depois de ter codificado no lote, EU PENSO nesses termos. Meu cérebro transforma problemas no domínio de destino do código executável. E é muito mais eficiente escrever isso em uma linguagem de programação geralmente do que ter que fazer a etapa extra de transformação para tornar meus programas alfabetizados.

Na verdade, eu acredito que meus programas já são alfabetizados ... identificadores falantes, bons nomes de funções, comentários onde eu fiz alguma invasão que eu não compreenderia imediatamente depois de alguns meses.

Para concluir: Meu código Java é mais alfabetizado por si só, como toda programação "alfabetizada" deseja.

1
Daniel

Eu o vejo como uma valiosa ferramenta de ensino, onde uma dissertação sobre código pode ser escrita e, em seguida, trechos de código de trabalho intercalados nele para instruir os leitores sobre como, o que e o porquê do código.

Fora de um ambiente puramente educacional, acho que apenas Knuth realmente entende a melhor maneira de usá-lo.

0
greyfade