Por que alguém se daria ao trabalho de aprender idiomas fora de demanda. Um estudo de caso da comunidade F #



Todos nós ouvimos falar de filmes, jogos, livros ou composições musicais icônicos que são elogiados com veemência pela comunidade de sofisticados, profissionais e críticos, mas nunca parecem atrair sucesso comercial tangível ou a atenção do público em geral. Tais situações me deixam profundamente frustrado.

Quando se trata de desenvolvimento, a boa tecnologia também às vezes nunca chega ao centro das atenções. Tome F # por exemplo. Tudo o que sei é que é uma linguagem super bacana, mas totalmente impopular, que dificulta aos desenvolvedores - ao conhecê-la - voltar às linguagens com as quais estão acostumados.

Eu tentei descobrir qual é a história por trás disso. De fato, quem são as pessoas que o usam e por que estão fazendo isso se o idioma está fora de demanda nos negócios? Para encontrar respostas, entrei para a comunidade F # de língua russa no Telegram - nossa mesa redonda para a discussão.

Como você começou a aprender F #?


Ayrat Hudaygulov ( Szer ): Eu originalmente migrei aqui do C #. Certa vez, tivemos um trabalho que tinha a ver com o Akka.NET - um porto Scala de Akka. A porta em si estava bem, mas faltou exemplos para casos raros no manual do usuário, embora eles sempre fossem fornecidos no manual Scala. Enquanto lia esse manual, fiquei pensando - por que são necessárias algumas linhas para escrevê-lo no Scala, enquanto estou lutando tanto para fazer o mesmo em C #?

Eu vi a solução ao mudar para F #. Nunca mais pensei duas vezes desde então.

Roman Liman ( kagetoki ): Na verdade, era uma ferramenta poderosa para resolver problemas reais do dia a dia que qualquer desenvolvedor pode enfrentar. Os obstáculos que costumavam ser vistos como a norma inevitável do OOP no mundo de C # e Java, na verdade não são tão inevitáveis ​​e podem ser facilmente evitados em vez de superados.

Phil Ranzhin ( fillpackart ): Uma vez eu li uma longa entrevista com Vagif Abilov no Habr. Naquela época, eu simplesmente não conseguia entender o paradigma da programação funcional, para que qualquer informação relacionada me irritasse seriamente. Essa entrevista não foi exceção.

Vagif Abilov ( VagifAbilov ): Aqui está o link para o artigo em questão . Fiz isso logo após dar uma palestra na conferência DotNext em Moscou. Para resumir, comecei a aprender F # como uma tentativa de tornar meu código mais conciso (menos código igual a menos mal) e utilizar estruturas de dados persistentes. Certamente, nada impede que um desenvolvedor de C # ou Java declare suas estruturas de dados como persistentes, mas a capacidade de alterar estruturas de dados é um recurso fundamental das linguagens OOP e que sempre será inerente a elas. A programação funcional poupa o esforço normalmente gasto na proteção dos dados contra mutações inapropriadas em um ambiente multithread - os dados cuidam de si mesmos, pois são imutáveis.

Phil Ranzhin : Vagif continuou dizendo que, depois do C # e do Java estritamente formais, o F # parecia algo muito mais favorável ao desenvolvimento. Eu não sabia quem era Vagif, mas naturalmente pensei que o cara não tinha a menor idéia. C # não é excessivamente formal, C # é exatamente do jeito que deveria ser. É poderoso e bonito. Decidi escrever um artigo sobre o quão absurda era a programação funcional. Peguei um problema simples e comecei a implementá-lo em C # e F # para provar meu argumento. Mas, enquanto eu trabalhava nisso, gostei tanto do F # que abandonei o artigo. Em vez disso, comecei a me aprofundar na tecnologia.

Roman Liman : Muitas das coisas que o C # verifica em tempo de execução agora são resolvidas no momento da compilação, por isso parece que você está tocando com digitação estática pela primeira vez - uma verdadeira revelação.

Sem exagerar, onde você precisa de sete linhas de código em F #, precisará de 200 a 300 linhas para escrever o código equivalente em C # (para considerar apenas o código útil). O compilador fará toda a geração de clichê para você, como igualdade estrutural.

Phil Ranzhin : Eu nunca depurei meu código F # porque, no meu código F #, todos os erros são cortados durante a compilação. Eu não estou brincando.

É difícil aprender F #?


Roman Liman : Quão difícil é aprender? Eu diria, nada difícil. Pode ser difícil resolvê-lo no início, se você nunca lidou com o paradigma funcional e os tipos imutáveis ​​antes. Mas esse problema tem a ver com a alternância entre paradigmas, não linguagens.

A sintaxe não é óbvia no começo, portanto, domine sua arrogância e leia sobre essa linguagem. Não espere que você se dê bem com o conhecimento de C #.

Ayrat Hudaygulov : O F # suporta tudo o que o C # faz, exceto goto (como a linguagem é completamente baseada em expressões, parece estranho dar um salto imperativo em uma expressão computável) e a palavra-chave protegida (foi por design, como aparentemente adicionando seria um acéfalo). O resto de tudo o que amamos no OOP - as classes abstratas, interfaces, propriedades implementadas automaticamente, usando, try-catch, etc. - está tudo lá, é claro. Os entusiastas da contagem de bytes também serão satisfeitos, com os parâmetros ref / out, mutabilidade, extensões, não gerenciados, ponteiros, stackalloc.

Todos os recursos do C # são adicionados com um atraso de alguns anos em comparação com o F # (genéricos, assíncrono / espera + tarefa, LINQ, correspondência de padrões e muitos outros). Além disso, muitos recursos provavelmente nunca chegarão ao idioma (tipos de soma como uniões discriminadas, função nativa currying). Espera-se que o próximo C # 8.0 seja aprimorado com registros e correspondência recursiva de padrões. A questão é: por que esperar?

Outra pergunta é: por que aprender um novo idioma para usá-lo da maneira antiga? Para realmente abraçar as vantagens do F # que estão faltando no C #, você terá que compreender o outro lado da Força. Ninguém disse que era fácil.

John Doe : Como desenvolvedor de C #, sou grato aos criadores do F # pela programação genérica e assíncrona com um rosto humano em C #. Para quem não sabia, esses mega-recursos chegaram ao C # graças ao F #.

Vagif Abilov : O autor do popular Desenvolvimento Pragmático recomenda que os desenvolvedores aprendam uma nova linguagem de programação a cada ano. Não posso dizer que aderi religiosamente a esse conselho, mas acho que os autores realmente queriam dizer que os desenvolvedores sempre devem estar preparados para revisar os princípios nos quais eles escrevem seu código.

Muitas pessoas reverenciam linguagens de programação como suas crenças. Alguns tratam a mudança de Java para Clojure como uma conversão do cristianismo para o islã. Por que diabos isso seria tão importante? Aprender novas linguagens de programação geralmente nos dará a oportunidade de reconsiderar nossas antigas formas de trabalhar com as linguagens que já conhecemos. Familiarizar-se com o F # faz as pessoas escreverem código C # de uma nova maneira.

Roman Melnikov ( neftedollar ): A parte OOP do F # é mais adequada (embora seja completamente compatível com a versão C # do OOP), pois incentiva você a programar usando interfaces abstratas em vez de classes explícitas.

O que você acha dos designers dessa linguagem?


Nikolay Matyushin : Certa vez, ajudei a introduzir o suporte de provedores de tipos de dados no .NET Core. Eles não funcionaram por um bom tempo, então, tendo alistado outro membro da nossa comunidade de língua russa, decidi descobrir o que exatamente estava errado. Após algumas pesquisas, descobrimos que o .NET Core não possui uma função para salvar o objeto de montagem em um arquivo - essa função era necessária pelos provedores de tipos.

Passamos uma semana ou duas desenvolvendo um protótipo que seria capaz de fazê-lo. Montamos um hack confuso, mas funcionou (pelo menos até certo ponto). Durante todo esse tempo, continuamos postando as edições do Github até Don Syme aparecer, dizer que eram "algumas horas de trabalho" e consertar os fornecedores de tipos.

Vagif Abilov : O designer de idiomas Don Syme é acessível e de mente aberta. Espero que um dia ele se aventure em alguma conferência russa para conhecer pessoalmente os desenvolvedores russos.

Roman Liman : Syme é um gênio. É incrível que ele estivesse praticamente sozinho por trás desse belo design.

Pavel Smirnov : Ele é meu modelo no mundo da programação.

Ayrat Hudaygulov : Aliás, Don Syme foi quem introduziu os genéricos no .NET; caso contrário, ainda estaríamos lançando tudo a partir de e objetando em C #, como era (e é parcialmente) o caso em Java. A Syme amplia o idioma com uma retrospectiva do C #, a compatibilidade com seus novos recursos, o que provavelmente é a coisa certa a fazer do ponto de vista estratégico. No entanto, isso significa que o sabor residual de decisões ruins em C # também pode vazar em F #. Ele também se opõe à introdução de recursos nerds de FP (olá Scala!) E à complicação excessiva da linguagem, pois tudo isso pode assustar outras pessoas e inchar a biblioteca padrão (olá C ++!).

Eu acho que Syme é um herói. Eu aposto com ele em sua visão da linguagem como multiparadigma, no entanto, eu provavelmente adicionaria mais recursos à linguagem.

Por que o idioma não é muito popular?


Roman Liman : Eu diria que o idioma não é popular porque FP é geralmente menos popular que OOP. Além disso, existe a curva de aprendizado acentuada. O resto é uma situação Catch 22. Poucos projetos são codificados em F # porque o mercado carece de programadores F #, enquanto programadores não aprendem esse idioma porque o mercado carece de projeto relevante.

Phil Ranzhin : Não conheço ninguém que pratique programação funcional e, ao mesmo tempo, prefira o modelo orientado a objetos. Nesse sentido, o F # é especialmente azarado, pois funciona bem apenas para quem acredita na união simbiótica de ambos os paradigmas.

Pavel Smirnov : Muitos o consideraram um filho ainda nato por causa da política da Microsoft de tornar o F # apenas uma plataforma para brincar com os recursos destinados ao C #. No entanto, o idioma era originalmente destinado à ciência de dados e não ao desenvolvimento industrial.

Roman Melnikov : ReSharper. É essencial para o C #, e muitas pessoas já investiram nele. Escrever código C # sem ReSharper é um trabalho árduo, considerando a quantidade de configuração manual, como para destacar alocações. Assim, o ReSharper alivia muita dor de cabeça para os desenvolvedores de C #. O F # não causa essa dor em primeiro lugar, mas quem usa o ReSharper não pode realmente apreciar toda a beleza de uma linguagem que não depende de ferramentas.

Vagif Abilov : Na minha opinião, a razão pela qual fica atrás do sucesso da Scala está na posição dominante da Microsoft, que ainda dita as prioridades na plataforma Windows. Apesar do fato de o F # ter sido desenvolvido na Microsoft Research, a empresa sempre o posicionou como um idioma para entusiastas. A Microsoft tem suas próprias métricas para viabilidade econômica de desenvolver uma tecnologia específica com base no desempenho atual de vendas; portanto, de acordo com essas métricas, projetos como o SharePoint parecem muito mais sexy que o F #. No entanto, pequenos golpes caíram grandes carvalhos.

Phil Ranzhin : Estou confiante de que vai decolar. O poder do .NET combinado com a sintaxe mais moderna e o conceito idiomático sem precedentes estão prestes a decolar.

Roman Melnikov : O futuro parece incrivelmente promissor. O F # está abrindo caminho para a análise de dados, graças a fornecedores de tipos, por exemplo. Também existem compiladores js e a biblioteca magic elmish (que é de fato o Elm for .NET).

Miguel de Icaza é um ávido defensor do F #, então o Xamarin sempre teve o mesmo nível de suporte ao F # que o C #. Há também um compilador no ErlangCore, que também é incrível. O F # pode ser usado para codificar o back-end e o front-end. O SAFE-Stack é uma coisa alucinante, com chamadas de API digitadas, invólucros legais de soquetes da web (Elmish. Bridge) e toneladas de outras coisas.

Vagif Abilov : Fico feliz em saber que o F # é usado na prática. Trabalho em um projeto de uma empresa de transmissão norueguesa na qual o sistema carrega arquivos de mídia de televisão e rádio na nuvem para disponibilizá-los para reprodução em computadores e dispositivos móveis. O sistema é escrito em F # e utiliza o Akka.NET. Esse não é o único projeto da nossa organização em F #, e o que é ainda mais promissor é que o número de projetos aumenta, assim como o número de desenvolvedores que desejam mudar para esse idioma.

Para que serve o F #?


Phil Ranzhin : F # é perfeito para o desenvolvimento de IA. Essa linguagem é literalmente projetada para separar minha mente de qualquer aborrecimento e focar nas coisas importantes. Quando você está trabalhando em IA, sua tarefa é ajustar sua mentalidade ao comportamento da máquina. Nesses casos, seu código é sua linguagem intermediária, incapaz de descrever idéias muito complicadas. Mas o F # é capaz de ser abstrato o suficiente para permitir que você e sua máquina façam história.

Vagif Abilov : Ele pode ser usado para resolver qualquer problema e é especialmente bom para o design orientado a domínio. Na entrevista do ano passado sobre o Habr, fui tolo ao afirmar que as linguagens funcionais eram aplicáveis ​​aos algoritmos e ao back-end em maior extensão do que à programação de interfaces de usuário e páginas da web.

Alguém então mencionou na seção de comentários que havia uma linguagem funcional Elm, projetada especificamente para a programação de páginas da web. A pessoa que deixou o comentário estava absolutamente certa. Desde então, comecei a usar o Fable, que permite escrever aplicativos da Web em F # e compilá-los em JavaScript. O efeito foi notável: a combinação de F # mais Fable (e a biblioteca Fable-Elmish) abre acesso à programação da Web para desenvolvedores desafiados por CSS como eu.

Pavel Smirnov : Desenvolvimento orientado a dados - é uma linguagem FP concisa com o suporte do tipo. Seu modelo de ator MailboxProcessor, como parte da biblioteca padrão, é uma delícia!

Roman Melnikov : Resolve perfeitamente os problemas da Web e se integra bem aos componentes de reação. Ele resolve problemas de análise de dados e aprendizado de máquina (fslab.org), problemas de ETL, problemas de design de lógica de negócios - seu sistema de tipos permite codificar de maneira a evitar estados incorretos.
Funciona lindamente para analisar (Fparsec). É ótimo para projetar e interpretar seus próprios idiomas. Pegue o TypeScript - ele foi originalmente escrito em F #. Pode ser usado para escrever código GPU.
Eu mesmo uso F # em vez de bash e Python para codificar scripts fsx para o meu computador.

É verdade que você não pode usá-lo para programar microcontroladores. Mas acho que muitas pessoas podem ficar sem isso.

Onde obter informações


Livros




Internet



Telegram


fsharp_news
fsharp_chat

Uma breve descrição da comunidade


Roman Liman : A comunidade é fabulosa: é impulsionada pelo desejo de codificar comercialmente em F #, para que os novatos sejam bem-vindos e ofereçam um tremendo apoio em uma tentativa de aumentar a comunidade e aumentar as chances dos membros de encontrar emprego.

Phil Ranzhin : Esses seguidores perigosos do culto! Mas eles estão certos.

Pavel Smirnov : A comunidade F # de língua russa é um lugar agradável. O que eu mais gosto é que eles realmente se importam com seu idioma favorito, assim como as pessoas em outros ecossistemas mais conhecidos.

Nikolay Matyushin : Isso é provavelmente porque o idioma não é muito popular, então as pessoas tóxicas não ficam.

Roman Melnikov : A comunidade tem sua parcela de dramas que não afetam o idioma em si, mas tornam a vida mais emocionante.

Source: https://habr.com/ru/post/pt432048/


All Articles