Critérios para uma linguagem de programação ser considerada "madura"

8

Recentemente, eu estava lendo uma resposta para essa pergunta e fiquei impressionado com a afirmação "A linguagem está madura".

Então, eu queria saber o que realmente queremos dizer quando dizemos que "uma linguagem de programação está madura"? Normalmente, uma linguagem de programação é desenvolvida inicialmente a partir de uma necessidade, por exemplo

  • Experimente / implemente um novo paradigma de programação ou uma nova combinação de recursos que não podem ser encontrados nas linguagens existentes.
  • Tente resolver um problema ou superar uma limitação de um idioma existente.
  • Crie um idioma para o ensino de programação.
  • Crie uma linguagem que resolva uma classe específica de problemas (por exemplo, simultaneidade).
  • Crie uma linguagem e uma API para um campo de aplicativo especial, por exemplo, a web (nesse caso, a linguagem pode reutilizar um paradigma conhecido, mas toda a API deve ser nova).
  • Crie uma linguagem para empurrar seu concorrente para fora do mercado (nesse caso, o criador pode querer que a nova linguagem seja muito semelhante à existente, para atrair desenvolvedores para a nova linguagem e plataforma de programação).

Independentemente da motivação e do cenário originais em que um idioma foi criado, eventualmente, alguns idiomas são considerados maduros . Na minha intuição, isso significa que a linguagem alcançou (pelo menos um de) seus objetivos, por exemplo: "Agora podemos usar a linguagem X como uma ferramenta confiável para escrever aplicativos da Web".

No entanto, isso é um pouco vago, então eu queria perguntar o que você considera os critérios mais importantes (se houver) aplicados ao dizer que um idioma é maduro.

NOTA IMPORTANTE

Esta questão é agnóstica (de propósito), porque eu só estou interessada em critérios gerais. Por favor, escreva apenas respostas e comentários independentes de idioma! Não estou perguntando se alguma "linguagem X está madura" ou "quais linguagens de programação podem ser consideradas maduras" ou se "a linguagem X é mais madura que a linguagem Y": evite postar opiniões ou referências sobre linguagens específicas, porque essas estão fora do escopo desta questão.

EDITAR

Para tornar a pergunta mais precisa, por critérios quero dizer coisas como "suporte a ferramentas", "adoção pelo setor", "estabilidade", "API rica", "grande comunidade de usuários", "registro de aplicativos bem-sucedido", "padronização" , "semântica limpa e uniforme" e assim por diante.

Giorgio
fonte
Com relação à votação para encerrar (não é uma pergunta real): O ponto principal da pergunta é: "O que você considera os critérios mais importantes (se houver) aplicados ao dizer que um idioma é maduro". Os possíveis critérios que me vêm à mente são: grande comunidade de usuários, API rica, estabilidade de idioma, suporte a ferramentas. Mas realmente não tenho certeza de quais critérios são normalmente aplicados e quais são considerados menos importantes para a definição de maturidade da linguagem. Quaisquer sugestões sobre como formular melhor minha pergunta são bem-vindas.
Giorgio

Respostas:

7

Fatores de aceitação

Eu diria uma combinação de várias coisas, mas acho que não são todas necessárias. Alguns idiomas considerados maduros hoje em dia claramente não satisfazem alguns deles.

Eu diria uma combinação de:

  • Ferramentas:
    • mainline: Pelo menos um conjunto de ferramentas estável "oficial" ou amplamente aceito (de fato ou recomendado / recomendado pelo fornecedor) (compilador, intérprete, VM, editor).
    • alternativa : algumas alternativas estáveis ​​e não tão estáveis ​​das ferramentas acima (variantes de código aberto ou fechado, variantes gratuitas ou comerciais, extensões, etc ...).
  • Comunidade: um grupo ativo , mas não necessariamente grande , de seguidores e colaboradores.
  • Reconhecimento:
    • Algum grau de reconhecimento e uso por alguns atores industriais (mesmo que em um nicho).
    • Algum grau de reconhecimento na cultura popular (mesmo que em um nicho).

Sobre Fama, Reconhecimento e Maturidade

Observe que o diferencial aqui é ter validadores de critérios fortes e ativos, não grandes ou numerosos. Para esclarecer, considere estes exemplos muito diferentes:

  • Por muito tempo, Ruby era uma linguagem com um grande apoio da comunidade, uma implementação de referência oficial e assim por diante, mas dificilmente poderia ser considerada madura até que resolvesse algumas de suas arestas. Era famoso antes de ser maduro.

  • Por outro lado, algumas linguagens outrora muito usadas (COBOL, FORTRAN ...) agora são menos visíveis, mas ainda maduras em todos os sentidos possíveis. Eles já foram famosos e maduros.

  • Além disso, algumas linguagens de nicho estão definitivamente maduras, apesar de sua pequena (mas estabelecida) penetração no mercado. Considere Oberon ou Limbo. Eles são maduros, mas nunca ficaram famosos. Outros, como R, são relativamente famosos porque seus "nichos" não são realmente nichos (me incomoda quando as pessoas chamam coisas como Scala ou Clojure de "línguas de nicho", que definitivamente não são), embora seu campo de aplicações não seja exatamente o que você chamaria de mainstream.

Sobre estabilidade

O que é estável de qualquer maneira? É bastante relativo ...

  • Conformidade?
    • Para o padrão (se houver um)?
    • Para uma implementação de referência (se houver)?
  • Número de bugs? (dificilmente uma boa medida)
  • Use em ambientes críticos?

Em geral, estabilidade significa simplesmente que não me surpreendo diariamente ao realizar meu trabalho comum usando o kit de ferramentas do idioma, e posso obter respostas definitivas sobre o que deve ou não acontecer quando tento fazer algo com o idioma e seu kit de ferramentas, seja no tempo de compilação ou no tempo de execução dos meus programas.

Mas a estabilidade para quem escreve aplicativos para smartphone e a estabilidade para quem escreve sistemas médicos ou aviônicos é um tipo diferente de pássaro.

haylem
fonte
+1 (não apenas mas também) porque você está tocando no fator de código aberto. Existem muitos exemplos nos quais as soluções de código fechado (e geralmente comercial) são melhores que as alternativas de código aberto. No entanto, ter ferramentas de código aberto, bibliotecas etc. para um idioma conta até sua maturidade, pois (para mim, pelo menos) significa mais do que apenas as pessoas que têm interesse financeiro no idioma que adotaram esse idioma e, portanto, o fizeram por mais razões práticas.
Shivan Dragon
@haylem: Eu concordo com você que famosos e maduros não são os mesmos. Bom ponto. Em relação à estabilidade, acho uma boa idéia relacioná-la ao nível de "surpresa" ao usar a linguagem.
Giorgio
@haylem: Já existem dois votos para encerrar a pergunta (eu gostaria que esses votos fossem acompanhados de alguma explicação, porque isso me ajudaria a melhorar minha pergunta). Uma razão pode ser que as comparações de idiomas sejam um tópico delicado que possa iniciar um debate (mesmo que eu não esteja vendo muito debate até agora). Você acha que seria possível formular sua resposta sem referência a idiomas específicos? Eu acho que todo mundo entenderia o seu ponto de vista sobre ser maduro e disseminar-se sem mencionar exemplos específicos.
Giorgio
@ Giorgio: minha resposta já é independente de idioma, a segunda seção está apenas esclarecendo com exemplos. Vou tentar reescrever / expandir um pouco amanhã, se tiver tempo.
haylem
5

Na verdade, tive a mesma dúvida há alguns anos. Naquela época, decidi que um idioma era maduro (ou seja, bom para resolver problemas do tipo x) se tivesse a maioria dos recursos necessários para solucionar esse problema. Em outras palavras, quanto das ferramentas específicas de resolução de problemas que tenho para me criar versus quantas já vêm com o idioma. Conforme seu comentário, estou removendo o exemplo específico do idioma e substituindo-o por um independente de idioma:

Eu basicamente pensei que uma linguagem com muitas bibliotecas "auxiliares" e "utilitárias" incorporadas é mais madura do que aquela em que algumas delas não existiam (e na qual eu teria que escrevê-las - ou algo semelhante a eles - eu)

Eu estou falando sobre tudo isso no passado, porque hoje em dia eu me esquivei desse modo de pensar e penso na maturidade de uma linguagem mais ou menos assim:

  • quão forte é a comunidade para esse idioma. Quantos documentos, livros, exemplos pertinentes existem. Isso é importante, porque você pode ter idiomas muito agradáveis ​​e que podem ser mais adequados para uma tarefa específica do que outros, mas que são mal documentados, para que você nunca veja suas vantagens.

  • desempenho. Para uma determinada tarefa e uma determinada implementação x, o idioma em que essa implementação será executada mais rapidamente é mais maduro. Sim, essa é uma área muito cinzenta e, para a maioria dos idiomas e plataformas, é difícil fazer a comparação. No entanto, para certos idiomas e plataformas, é bastante simples ver qual deles supera qual. Para certos tipos de problemas, isso é muito importante.

  • insetos. Ai sim. Eu nunca teria pensado nisso até ver com meus próprios olhos. Não vou dar exemplos, porque não quero parecer que estou usando um idioma ou outro, mas existem idiomas por aí (bem, mais precisamente, ambientes de compilação e tempo de execução para determinados idiomas) que são muito buggy, ao ponto em que você não pode mais confiar e estimar como algo funcionará. Para mim, a maturidade de uma língua cai pesadamente quando esse é o caso.

As razões pelas quais mudei a maneira como considero uma linguagem mais madura são:

  • primeiro, o fato de uma linguagem ter uma tonelada de bibliotecas e utilitários auxiliares nem sempre significa que são realmente úteis. Essas bibliotecas ainda são genéricas e podem estar muito distantes de alguma necessidade específica que você tenha, de modo que, no final, tento me reescrever parte delas para ter uma solução mais eficiente e específica de problemas.

  • além disso, coisas como linguagem e desempenho de plataforma e documentação são coisas pelas quais é mais difícil compensar do que com falta de bibliotecas. Se o código que você escreveu no idioma x e na plataforma y for lento, otimizá-lo sozinho nunca será tão bom quanto substituí-lo pelo idioma x2 e pela plataforma y2, para os quais uma coorte de pessoas (provavelmente mais inteligentes) do que eu fez otimizações. O mesmo vale para a documentação, a falta dela se traduz em mais tempo gasto na realização de provas de conceitos, tentativas e erros, exploração de código de teste de origem e de unidade para ver como algo deve ser feito. E mesmo se você passar por tudo isso, ainda não sabe se a solução que você escolheu é a mais adequada, pois os criadores de idiomas pretendiam que ela funcionasse.

Shivan Dragon
fonte
Obrigado pela resposta, mas evite mencionar idiomas específicos, pois isso pode levar a um debate fora do escopo da pergunta.
Giorgio
Gostei mais com um exemplo concreto do mundo real.
Blrfl
@ Blrfl: Pode ser mais fácil ler, mas as pessoas podem começar a debater sobre diferentes linguagens de programação e a pergunta é encerrada como "não construtiva".
Giorgio
1
@ Shivan Dragon: Obrigado por remover as referências específicas e obrigado pela resposta interessante. +1.
Giorgio
2
@Blrfl: Costumo concordar mais com Giorgio aqui, sempre que comparações específicas são feitas entre idiomas, geralmente são seguidas por debates intermináveis ​​e, como afirma a lei de Godwin, pode até se referir às referências de Hitler :). Melhor deixar agnóstico.
Shivan Dragão