Existem estudos feitos sobre a eficácia de linguagens estaticamente versus dinâmicas?
Em particular:
- Medições da produtividade do programador
- Taxa de defeito
Incluindo também os efeitos de se ou não o teste de unidade é empregado.
Eu já vi muita discussão sobre os méritos de ambos os lados, mas estou me perguntando se alguém fez um estudo sobre isso.
productivity
comparison
type-systems
dynamic-typing
static-typing
Winston Ewert
fonte
fonte
Respostas:
Algumas sugestões de leitura:
Não exatamente na digitação estática, mas relacionada:
Alguns artigos ou ensaios interessantes sobre o assunto ou sobre a análise estática de programas em geral:
E para aqueles que se perguntariam do que se trata:
No entanto, duvido que qualquer uma dessas respostas lhe dê uma resposta direta, pois elas não fazem exatamente o estudo que você está procurando. Eles serão leituras interessantes embora.
Pessoalmente, Considero firmemente que a digitação estática sobre a digitação dinâmica facilita a detecção de erros. Eu gasto muito tipo procurando erros de digitação e pequenos erros como esses em JavaScript ou mesmo código Ruby. E quando se trata de entender que a Digitação dinâmica oferece um aumento na produtividade, acho que isso se resume principalmente às ferramentas. Se linguagens de tipo estaticamente tiverem as ferramentas certas para permitir a recompilação em segundo plano e fornecer uma interface REPL, você obterá os benefícios dos dois mundos. O Scala fornece isso, por exemplo, o que facilita muito a aprendizagem e o protótipo no console interativo, mas oferece os benefícios da digitação estática (e de um sistema de tipos mais forte do que muitos outros idiomas, exceto os idiomas ML). Da mesma forma, acho que não tenho perda de produtividade usando Java ou C ++ (por causa da digitação estática), desde que eu use um IDE que me ajude. Quando eu reverto para a codificação apenas com configurações simples (editor + compilador / intérprete), parece que linguagens mais complexas e dinâmicas parecem mais fáceis de usar. Mas você ainda procura por bugs. Eu acho que as pessoas diriam que a questão das ferramentas é um argumento reversível, como se as ferramentas fossem melhores para linguagens dinâmicas, então a maioria dos erros e erros de digitação seriam apontados no tempo de codificação, mas isso reflete a falha no sistema na minha opinião. Ainda assim, eu normalmente protótipo no JRuby e codificarei em Java mais tarde na maioria das coisas que faço. como se as ferramentas fossem melhores para linguagens dinâmicas, a maioria dos erros e erros de digitação seriam apontados no tempo de codificação, mas isso reflete a falha no sistema na minha opinião. Ainda assim, eu normalmente protótipo no JRuby e codificarei em Java mais tarde na maioria das coisas que faço. como se as ferramentas fossem melhores para linguagens dinâmicas, a maioria dos erros e erros de digitação seriam apontados no tempo de codificação, mas isso reflete a falha no sistema na minha opinião. Ainda assim, eu normalmente protótipo no JRuby e codificarei em Java mais tarde na maioria das coisas que faço.
AVISO: Alguns desses links não são confiáveis e alguns passam por portais de várias sociedades de computação usando acessos com taxas para os membros. Desculpe por isso, tentei encontrar vários links para cada um deles, mas não é tão bom quanto gostaria.
fonte
Ainda ontem encontrei este estudo: o teste de unidade não é suficiente. Você precisa de digitação estática também.
Basicamente, o autor usou uma ferramenta capaz de converter automaticamente um projeto de uma linguagem de digitação não estática em uma linguagem de digitação estática (python para haskell)
Em seguida, ele selecionou vários projetos Python de código aberto que também incluíam uma quantidade razoável de unidades de teste e os converteu automaticamente em haskell.
A tradução para Haskell revelou uma série de erros relacionados ao tipo das variáveis: os erros não foram descobertos pelas unidades de teste.
fonte
Minha opinião. Embora haja pouca evidência de que as linguagens dinamicamente digitadas sejam mais produtivas, isso não é conclusivo. (1) Existem muitos fatores que não foram controlados; (2) existem poucos estudos; (3) houve pouca ou nenhuma discussão sobre o que constitui um método de teste apropriado.
fonte
Aqui está um ponto de partida:
O artigo está desafiando a sabedoria comum de que, sendo todos os demais iguais, os programadores escrevem o mesmo número de linhas de código por tempo, independentemente da linguagem. Em outras palavras, o artigo deve servir como evidência empírica de apoio de que a produtividade mecânica (linhas de código escritas) não é uma boa medida da produtividade funcional e deve, pelo menos, ser normalizada pela linguagem.
fonte
Eu encontrei uma linguagem estática versus dinâmica: uma revisão de literatura , que lista alguns estudos sobre o assunto e fornece um bom resumo de cada estudo.
Aqui está o resumo executivo:
fonte
Sinceramente, não acho que a digitação estática vs dinâmica seja a verdadeira questão.
Eu acho que existem dois parâmetros que devem vir primeiro:
Se você se sentir confortável no idioma, escreverá código e rastreará os erros com facilidade.
Se você escrever código dissociado e testar cada funcionalidade extensivamente, produzirá um código bem aprimorado e, portanto, será produtivo (porque não pode ser qualificado como produtivo se não avaliar a qualidade do produto, pode? )
Eu consideraria, portanto, que o debate estático versus dinâmico em relação à produtividade é bastante discutível, ou pelo menos amplamente substituído por outras considerações.
fonte
Aqui estão alguns:
Stefan Hanenberg. 2010. Um experimento sobre sistemas do tipo estático e dinâmico: dúvidas sobre o impacto positivo dos sistemas do tipo estático no tempo de desenvolvimento. Em Anais da conferência internacional ACM sobre linguagens e aplicativos de sistemas de programação orientada a objetos (OOPSLA '10). ACM, Nova York, NY, EUA, 22-35. DOI = 10.1145 / 1869459.1869462 http://doi.acm.org/10.1145/1869459.1869462
Daniel P. Delorey, Charles D. Knutson, Scott Chun, "As linguagens de programação afetam a produtividade? Um estudo de caso usando dados de projetos de código aberto", floss, pp.8, Primeiro Workshop Internacional sobre Tendências Emergentes na Pesquisa e Desenvolvimento do FLOSS (FLOSS '07: Workshops ICSE 2007), 2007
Daly, M .; Sazawal, V., Foster, J .: Trabalho em Progresso: um Estudo Empírico de Digitação Estática em Ruby, Workshop sobre Avaliação e Usabilidade de Linguagens e Ferramentas de Programação (PLATEAU) no ON-WARD 2009.
Lutz Prechelt e Walter F. Tichy. 1998. Uma experiência controlada para avaliar os benefícios da verificação de tipo de argumento de procedimento. IEEE Trans. Softw. Eng. 24, 4 (abril de 1998), 302-312. DOI = 10.1109 / 32.677186 http://dx.doi.org/10.1109/32.677186
fonte