Linguagens menos populares

Eu estava navegando (explorando) pela Github, e acabei pensando em procurar linguagens de programação bem menos conhecidas e recentes. Encontrei algumas bem maneiras como: https://github.com/simplyYan/Blackpard, https://github.com/AnyDSL/impala, https://github.com/ML-KULeuven/problog e outras. Me interessei pela Blackpard, parece ser bem documentada e tem uma landpage decente. Será que vale a pena aprender linguagens que estão emergindo? Existem varias dessas linguagens, e algumas parecem ser extremamente promissoras e atraentes. Qual é a vantagem de dominar uma linguagem assim?

Eu gosto disso. Vou fazer uma lista, aos poucos (work in progress), mas como traçar uma linha do que é popular ou não? Rust é popular? Poucas pessoas usam ou usarão, muitas falam dela. Zig é popular? COBOL é popular? Lisp? Qual? BASIC hoje é popular? Vale dialeto? Tem que estar ativa? Excel conta? Ela é popular, mas as pessoas acham que não é PL.

Quer ajudar completar a lista?

A maioria dessas linguagens serve para aprender novos mecanismos e formas de pensar, nunca serão usadas de fato. Algumas tem coisas boas, outras não, só é o gosto do criador. Não que isso deva ser menosprezado, mas muitas delas não tem nada inovador, só o mix de features é diferente. E a maioria não serão popualres porque falta uma feature importante, a popularidade. É difícil quebrar esse ciclo.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Comentar tudo é muita coisa. Algumas considerações: - Lisp : [SBCL](http://sbcl.org/) Se for para algo mais sério. Estranho que todo mundo cria um [interpertador/compilador](https://github.com/dundalek/awesome-lisp-languages) Lisp na sua linguagem mas ninguém usa. :D - Ring : Pô, [testei](https://fotomix.wordpress.com/2018/07/26/senhor-dos-aneis/) em 2018. Como ainda está em desenvolvimento, deve ter melhorado. - Mozart(1) : Foi essa droga que me fez utilizar o Emacs. Era o único editor que funcionava legal. Restrições, domínios, etc [Send + More = Money](http://mozart2.org/mozart-v1/doc-1.4.0/fdt/node15.html#section.problem.money) - Rebol : Aquelas linguagens que são desenvolvidas muito cedo. Considero muito o [Carl Sassenrath](https://en.wikipedia.org/wiki/Carl_Sassenrath). Pena que agora ele só que saber dos venhedos e dos vinhos. Tem diversos forks depois da abertura do código. Pessoalmente, acho Red bem legal (pena que o desenvolvimento é lento). O exemplo abaixo é em Red. ![image](https://fotomix.files.wordpress.com/2016/08/blue-clock2.gif)
Legal, Maniero, sua lista é bem completa. Nunca tinha ouvido falar em muitas dessas linguagens; outras já usei, mas a maioria só ouvi falar e tenho pouco interesse. Outras poucas tenho interesse em experimentar. Uma destas é a Ballerina. Já tinha ouvido falar, e ao vê-la na lista, cliquei para saber mais - muito interessante. Não tentarei completar a lista, mas é notável que ela não faz distinção entre as linguagens. Como você mencionou, muitas dessas linguagens são mais experimentais, fruto da paixão e da curiosidade de seus criadores. Nesse sentido, a lista poderia ser quase infinita. No entanto, outras linguagens da lista têm uma história diferente. Embora não sejam muito populares, seu legado vive nas linguagens que usamos no dia a dia e influenciou muitas outras menos conhecidas. Gostaria de destacar especialmente o Smalltalk e o Eiffel, que ironicamente popularizaram o que viria a ser paradigma orientado a objetos, assim como OCaml e Haskell fizeram o mesmo para o funcional. E, claro, [o Lisp, cujo o JavaScript é 'baseado'](https://stackoverflow.com/questions/5030285/is-ecmascript-really-a-dialect-of-lisp). No entanto, essas afirmações são simplificações. Prolog e AWK também merecem uma menção especial; apesar de serem nichados, oferecem seus próprios paradigmas e são simplesmente imbativeis em cenários específicos. Não podemos esquecer de Erlang, que tem um nicho próprio. Portanto, vou apenas adicionar duas dessas 'linguagens fundamentais' que, não vi na lista. Uma seria 'APL' ou simplesmente 'A Programming Language' e também ada. Seu conhecimento e entusiasmo sobre o assunto é evidente, qual outras linguagens dessa lista considera 'fundamentais' e quais que realmente tem potencial evidente?
Não me interessa também a maioria, dou uma olhada e vejo quais quero entender um pouco mais. Trabalhar mesmo, talvez nenhuma :D Ainda mais agora que já fiz tudo o que queria estou me retirando. Eu até queria que postassem mais coisas, vira e mexe descubro algo novo assim. JS ter vindo de Lisp é bem forçado :D Só mais um erro da linguagem, pra ver como ela não podia ter sido bem definida, o erro já existia antes de começar criá-la. Eu acho que botei Ada. APL não lembro, mas posso colocar :) Depois eu respondo o final. Defina "fundamental". E potencial para que? Para ser a nova Rust? Nova Python? Nova Haskell? :D
Sobre a relação entre JS e Lisp. Embora a conexão pareça forçada à primeira vista, há mais verdade do que parece. Brendan Eich, já mencionou em várias ocasiões que o Scheme foi uma das suas principais inspirações ao criar o JS. E quanto à forte ligação deste primeiro com Lisp não existe dúvidas! Quanto à sua pergunta sobre 'fundamental', não pensei em uma definição estrita ou formal. Mas, para mim, 'fundamental' se refere a linguagens que ou 1) tiveram um impacto significativo nas linguagens e paradigmas contemporâneos de programação – como Smalltalk e Haskell – ou 2) foram usadas para construir infraestruturas massivas das quais dependemos, como Erlang e Ada. Claro, ambos são subjetivas. E sobre 'potencial', vamos pensar em termos de 1) potencial para se tornar popular ou 2) potencial para impactar significativamente o 'futuro' das linguagens de programação. Enfim o que quero mesmo saber é quais linguagens ainda desconhecidas você acredita que serão 'importantes' no futuro? E quais as 'joias' desconhecidas do passado que ainda têm muito a nos ensinar?
Maniero, tive uma ideia para um experimento de pensamento interessante. Imagine se classificássemos as linguagens não pela popularidade ou uso, mas pelo impacto sua súbita completa desaparição teria no mundo. Por exemplo: Tier S+ (Impacto Apocalíptico): A linguagem C estaria neste nível. Se ela desaparecesse, seria um caos: aviões caindo do céu, carros parados. Todos os smartphones e computadores completamente apagados. Sem falar nos blackouts maciços. A distribuição de eletricidade e água totalmente interrompida. Seria um cenário apocalíptico. Tier A (Impacto Catastrófico): Poderíamos incluir aqui linguagens como Java e Python. Embora a desaparição delas não cause um caos imediato como a do C, o impacto ainda seria devastador. Tier B (Impacto Significativo): Aqui colocaríamos o JavaScript. A web como conhecemos iria embora. Embora terrível, longe de ser apocalíptico. Seria interessante pensar nessa escala para essas outras linguagens desconhecidas, como Ada, que foi usada para construir o complexo militar dos EUA. Earlang para os sistemas de comunicação, ou as macros do Excel para o mundo financeiro, que, se desaparecessem, poderiam ter um impacto pior que a quebra da web, mas ainda assim, sobreviveríamos. (Tier A) - Qual dessas linguagems desconhecidas você colocaria nessa categoria?
Que estranho, está aparecendo que você é o autor da postagem :D Méé, não gostei muito dessa ideia, deixemos o que você já classificou. Eu quero achar tempo um dia para estudar mais profundamente toda história da computação, mas vou começar aposentar e já vou entrar em algo na vida que provavelmente vai me tomar tempo. Mas vamos lá ao que é mais importante, não é algo tão pensado. Lisp deveria ter um lugar especial na mente das pessoas, elas mudou tudo. Ela criou as 3 balas de prata da computação. O alto nível, a modularização e o gerenciamento de memória automático. E inventou quase tudo que usamos hoje, ou que poucas linguagens usam, inclusive a orientação a objeto definida pelo Alan Kay. Até a VM ela inventou. Algumas pessoas considewram que o alto nível veio do Fortran porque ela foi implemntada antes de Lisp, mas não foi a inventora disso. Se formos a fundo não foi nenhuma das duas. Fortran foi responsável por várias "boas práticas" que ainda algumas pessoas usam e não faz mais sentido, fazia nos anos 50. COBOL deu boas contribuições e consolidou o uso de estrutura de dados. Na época tiveram outras que eu não conhecço bem. Pra mim vejo mais um salto para Algol que é a base do que a maioria das linguagens são e BASIC ajudou popularizar a programação, em certo momento era a lingfuagem dominante. ML veio com uma forma mais fácil e que formou a base de todas as linguagens funcionais que Lisp não conseguiu tanto. Ambas tem uma quantidade enorme de descendentes. E muita coisa que usamos hoje em todas as alinguagens, não só funcionais, veio de todos esses descendentes. OCaml e F# (tem que ver se gosta de .NET) são destaques de uso. Na lista tem várias linguagens experimentais da Microsoft, algumas trouxeram ou podem trazer contribuições interessantes. Curiosamente falam que a Microsoft não inova. Até C# trouxe inovação real. E java que alguns falam que inovou, só usou coisas já existentes. É o pronblema da pessoa não conhecer a história. Esses dias vi um cara falando que Minecraft criou a gereção procedural nos jogos, tadinho. E acho que deveriam ver algumas linguagens que roda(da)m no .NET que te mcoisas interessantes, como Boo e Nemerle. CLU trouxe muitas inovações interessantes. Claro que temos que falar de Simula, mas C++ é mais interessante para explicar como OOP é hoje. ALgumas linguagens ajudam mostrar isso. Mas linguagens modernas mostram que isso não é tão necessário. Go, Rust, Zig, etc. Rust tem inovação forte. Zig talvez seja a melhor linguagem para substituir C. Por falar nisso C parece que mudou de postura de ser tão estável assim. De certa forma deveria ter dias Cs, a C89 (ou C99) que muitos fazem questão de seguir (não vou entrar no mérito aqui), e [C moderna](https://en.cppreference.com/w/c/23) que quase ninguém usa. Então a moderna deveria parar com essas coisas de não mudar muito, porque ou a pessoa quer zero mudanças desde 40 anos atrás ou ela não se importa com isso. Tem linguagens que usam gerenciamento de memória por regiões, que é interessantíssimo, mas não conseguiram tornar universal. Tem gente tentando. Eu tenho uma ideia para isso, mas não é universal. Cyclone é das primeiras, mas muitas estão tentando agora. Eu não me lembro bem como outras linguagens adotaram *stack* e *heap* depois de Lisp e popularizaram essa ideia. Sem funções não tinha porque usar pilha, e o *heap* "demorou" para popularizar. Pode ser interessante ver as linguagens ditas xBase porque foram muito importante, especialmente no Brasil, que ainda é um pouco. Eiffel tem uma pegada vem interessante, e muitas copiaram coisas delas. Seria bom ver sua filha Sather junto. V é interessante ver como algum bem empacotado atrai muita gente mesmo sendo um engodo, que pode mudar um dia. Eu precisso arrumar tempo para estudar Prolog, Oberon, etc. Estou espeando muito por Jai. Forth é imperdível para aprender paradigmas novos. Esses dias Austral tem me chamado a atenção. Julia, Elixir e outras são exemplos que unem bem imperativo com funcional, mas são bem nichados. E claro, Erlang é um exemplo de algo muito diferente. E acho que a grande vantagem e diferencial de Go, Erlang entrega melhor, mas não é tão "comercial". Acho que as pessoas deveria olhar mais para Lua. Tem lições não só na linguagem, mas o todo que envolve sua implmentação. Se o mundo fosse justo ela estaria rodando por padrão nos navegadores, seria usada pra DS, ML, etc. E seria indicada por todos que falam para começar aprender programar pela linguagem mais fácil. Bem, falei das brasileiras de maior sucesso, embora duas não citei nominalmente, até porque tá morta e outra é dialeto mal feito. Nem falei de linguagens que mal foram para o papel e não tem *link*, por exemplo Merd. É sério, não é linguagem maluca (alguns acham que é um pouco). Tipo a minha, quem sabe um dia rola. Certamente esqueci de alguma. Tem outras que trouxeram inovações, mas eu teria que pesquisar para lembrar.
Mas é mais um passarinho que ele conta. Tem alguma coisa que ele pegou de Scheme? Tem. Pronto, só isso, o resto é tudo diferente. Por isso ele foi enterrado na história das linguagens :) Já o criador de Scheme é reverenciado pelos criadores de linguagem. Até o Anders. Eu acho que não foge muito disso, você sabe as que mudaram algo mais fortemente. ALgumas poucas introduziram alguma coisa nova, mas nada muito profundamente. Smalltalk é um engodo :D Sobre furturo eu não falo muito não, é 99,99% que vou errar. Eu não costumo errar sobre o futuro, porque eu raramente prevejo. Eu prevejo o que eu tenho controle ou é uma obviedade. O mercado não é óbvio. Caso contrário arrumavam desktop em vez de investir em web :D Eu sei que eu falava de Python há 15 anos e todo mundo tirava sarro de mim. Agora eu falo que ela não é tudo o que alguns acham e falam que eu sou maluco :D Ah, as pessoas, o mercado... Eu não previ op futuro, mas é uma anedota interessante para mostras como as pessoas são malucas. È raro achar gente com equílibrio. Mas vou fazer uma listinha, depois você volta aqui.

Existem muito mais linguagens de programação do que os programadores normalmente pensam. O HOPL (https://hopl.info/) por exemplo indexa quase 9 mil linguagens de programação, e não são todas as que existem.

Agora falando sobre "vantagens" e se "vale a pena" depende do motivo do porque você estuda: você estuda para aprender ou para trabalhar?

Porque se você for do tipo que estuda para trabalhar então não vale a pena sair aprendendo qualquer linguagem que você nunca vai usar na vida.


Agora se você estuda para aprender, se você tá interessado no lado intelectual e não apenas profissional, então vale muito a pena e existem várias vantagens em estudar qualquer linguagem de programação. Não importa qual seja, não importa quantas pessoas usem.

Se você for esse tipo de pessoa eu tenho certeza que não preciso dizer isso para você, mas vale escrever mesmo assim: não adianta de absolutamente nada ficar decorando a sintaxe da linguagem e como usar suas funções/bibliotecas. O que tem de útil de estudar uma linguagem é realmente entender ela, então estude a especificação da linguagem e estude Programming Language Theory.

Com isso você entende os conceitos teóricos e os resultados práticos da linguagem, o que te dá insights sobre como a linguagem resolve determinados problemas, como a solução é ruim, como poderia ser melhor, vantagens e desvantagens desta solução e de outras alternativas, entender os pontos fracos e o que tem de ruim na linguagem etc.

Programadores que conhecem poucas linguagens, ou que já usaram muitas linguagens mas só sabem a sintaxe e funções/bibliotecas da linguagem (ou seja, só um conhecimento superficial), não costumam ter essa visão analítica sobre linguagens de programação.

É como a frase de Newton:

Se vi mais longe, foi por estar sobre ombros de gigantes

Entender como os outros resolveram problemas e entender os problemas em si, é a escalada até os ombros do gigante. É necessário esse embasamento para ser capaz de resolver problemas novos, pensar analiticamente e ser capaz de desenvolver algo a partir das suas ideias ou ter ideias inéditas. Ou seja, "ver mais longe".

Essa é a vantagem do ponto de vista intelectual. Se isso é vantajoso para o seu trabalho ou não, não sei. Para o meu é, mas por acaso. Nunca foi meu objetivo.


Enfim, intelectualmente falando existem inúmeras vantagens de estudar como linguagens diferentes funcionam (mas como falei estudar a spec da linguagem, só decorar sintaxe e como usar funções/bibliotecas não serve de nada).

E entender os defeitos e pontos fracos da linguagem que usa é muito importante. Porque não dá para evitar ou corrigir problemas que a gente não sabe que existem.

Tem programador que entra em negação (ou fica magoadinho) quando disparam críticas para à linguagem(ns) que ele usa/gosta. Não seja assim, pelo contrário: seja o maior crítico da linguagem que você usa/gosta. E para ser capaz disso você precisa do embasamento que eu mencionei acima.

Por exemplo: eu uso e gosto de C e sou a pessoa que mais critica a linguagem dentre as que eu conheço.

E isso é um pensamento científico, a premissa de tentar provar que sua hipótese está errada ao invés de fazer o contrário. Pois isso evita cair no viés de confirmação.

Não vejo vantagem em dominar essas linguagens. Sem contar que existem milhares de linguagens. No Rosetta Code existem diversos problemas resolvidos em diversas linguagens (mais de 900). É um bom local para dar uma olhada na sintaxe e como ela resolveu o problema.

Mas conhecer mais de uma linguagem é interessante para abrires um leque maior de ideias para a resoluação de problemas. Mesmo usando outra linguagem, podes usar o que foi aprendido.