Protected: Por que eu provavelmente não usaria Haskell em um projeto profissional

You are viewing an old revision of this post, from December 12, 2021 @ 23:23:38. See below for differences between this version and the current revision.

Esses dias, recebi essa mensagem de um amigo:

Uma das questões que estão sendo discutidas no meu trabalho é sobre essa aposta no Haskell.
Depois da nossa conversa anterior, você poderia elaborar qual é o sua opinião sobre isso? Ou porque você considerou arriscado uma escolha como essa?

É só por curiosidade minha mesmo. Quero conversar com alguns desenvolvedores que conheço e entender melhor outras perspectivas sobre o assunto.

De fato, quando ele comentou que o time adotara Haskell, eu demonstrei ceticismo.

O que é curioso, porque adoro Haskell. É uma das linguagens mais bem desenhadas que conheço. Pessoalmente, acho muito prazeroso programar em Haskell, e frequentemente uso padrões da linguagem em outras—como, por exemplo, esta classe Java que é basicamente um newtype de string. Também acredito em todas as vantagens tão comumente associadas à linguagem: o poder do sistema de tipos, a confiança da tipagem estática, a segurança da imutabilidade etc.

O problema é que estes não são os meus problemas.

Por exemplo, hoje eu trabalho na Liferay Cloud. Praticamente nenhum problema com que tive de lidar foi causado por falhas de lógica dentro do código. Quase sempre, nossos bugs resultam de problemas em serviços de GCP, usos ineficazes de APIs, comportamentos de borda de Kubernetes, bancos de dados inadequadamente configurados… Vários pull requests consistem em adicionar um parâmetro a uma chamada de construtor e um teste de 20 linhas garantindo o comportamento esperado. Haskell nos ajudaria com isso?

Talvez, mas há alternativas. No nosso caso, estamos usando TypeScript, que tem um sistema de tipos bem poderoso. Antes eu programava em Java, cujo sistema de tipagem é simples e seguro. Nestas linguagens, imutabilidade e funções como valores, se não obrigatórias, vêm se tornando o padrão. Naturalmente, como funcionalidades que apareceram tardiamente, estas características não são tão elegantes quanto em Haskell—nem de longe! Mas são efetivas.

Por outro lado, Haskell também traz um custo. Não é tão difícil quanto muitos apregoam, mas também não é tão trivial. Experiência de desenvolvimento prévia pode até atrapalhar a aprendizagem. E os padrões podem ser bastante abstratos. Por exemplo, exatamente como no clichê, levei um tempão para entender as mônadas. Quando entendi, criaram as lentes, que ainda me confundem profundamente. Já com outras linguagens, é mais rápido se tornar produtivo.

Some-se a isso o ambiente. A comunidade Haskell é significativa, mas não tão grande quanto as outras. Onde encontrar desenvolvedores? Ou bibliotecas? Existem, claro, mas não tanto quanto para outras linguagens.

Confesso, porém, que todos esses motivos me parecem menores, ou contingentes. O maior problema, creio, é que linguagens de programação não são mais tão centrais. Os sistemas modernos têm tantas partes que as vantagens das linguagens—que Haskell tem, muitas—vão se tornando menos relevantes. Como profissional, hoje, eu buscaria muito mais entender do negócio que estou apoiando como desenvolvedor, das necessidades dos usuários e stakeholders, do que de questões de linguagem. Mesmo como técnico, é mais interessante saber como trabalhar com ferramentas como bancos de dados, Kubernetes, provedores de cloud etc. do que se aprofundar em outras linguagens. Há anos não faço, como engenheiro de software experimentado, uma entrevista em que alguém se importe como as linguagens que conheço!

Isso é ruim para Haskell, porque fica difícil valorizar as excelentes qualidades da linguagem. Mas, paradoxalmente, também é bom, e acaba revertendo a premissa desse post. Se a linguagem é menos relevante, por que não Haskell? Há desvantagens, mas todas as alternativas as têm.

Meu amigo mantém um sistema em Haskell, lidando com vários serviços, rodando em AWS. Ele está preocupado de que uma linguagem menos popular no currículo possa lhe prejudicar. Como poderia? Até essa breve descrição mostra que ele é excepcionalmente competente: um sistema desses não é para qualquer um!

O que pode prejudicar é ter um currículo centrado na linguagem. Programadores de linguagens mais usadas (como Java, PHP, JavaScript) conseguem sobreviver porque a demanda é vasta, mas esta é, em minha opinião, uma configuração anormal. O desenvolvedor experiente não está amarrado a uma linguagem. Este meu amigo, por exemplo, já trabalho com Ruby, Java, JavaScript, até C. Seu único descuido está sendo se preocupar por trabalhar com Haskell ao invés de focar nas outras tecnologias. Talvez nem devesse chamar a si mesmo de programador—mas não o condeno, também sou orgulhoso demais do que faço para não me rotular assim.

Enfim, Haskell não é uma má linguagem para se trabalhar. Apresenta desafios, mas toda escolha tem tradeoffs. A pergunta a ser feita é: vou conseguir prover valor com essa ferramenta? Se sim, pode-se programar na linguagem que for, e o resultado será positivo de qualquer forma.

Post Revisions:

Changes:

December 12, 2021 @ 23:23:38Current Revision
Content
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
 Added: <p>Haskell é uma das linguagens mais bem desenhadas que conheço. Adoro programar em Haskell, e uso padrões da linguagem em outos conextos —como, por exemplo, <a href="https:/ /github.com/liferay/liferay- portal/blob/master/modules/ dxp/apps/portal- search-tuning/ portal-search- tuning-synonyms- api/src/main/ java/com/liferay/ portal/search/ tuning/synonyms/ index/name/SynonymSetIndexName.java">esta classe Java que é basicamente um <kbd>newtype</kbd> de string</a>. O poder das funções de primeira classe, a confiança do sistema de tipos, a segurança da imutabilidade... tudo me fascina.</p>
 Added: <!-- /wp:paragraph -->
 Added: <!-- wp:paragraph -->
Deleted: <p>Esses dias, recebi essa mensagem de um amigo:</p> Added: <p>Por isso, fiquei até surpreso quando recebi essa mensagem de um amigo:</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:quote -->Unchanged: <!-- wp:quote -->
Unchanged: <blockquote class="wp-block- quote"><p>Uma das questões que estão sendo discutidas no meu trabalho é sobre essa aposta no Haskell.<br>Depois da nossa conversa anterior, você poderia elaborar qual é o sua opinião sobre isso? Ou porque você considerou arriscado uma escolha como essa?</p><p>É só por curiosidade minha mesmo. Quero conversar com alguns desenvolvedores que conheço e entender melhor outras perspectivas sobre o assunto.</p>< /blockquote>Unchanged: <blockquote class="wp-block- quote"><p>Uma das questões que estão sendo discutidas no meu trabalho é sobre essa aposta no Haskell.<br>Depois da nossa conversa anterior, você poderia elaborar qual é o sua opinião sobre isso? Ou porque você considerou arriscado uma escolha como essa?</p><p>É só por curiosidade minha mesmo. Quero conversar com alguns desenvolvedores que conheço e entender melhor outras perspectivas sobre o assunto.</p>< /blockquote>
Unchanged: <!-- /wp:quote -->Unchanged: <!-- /wp:quote -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Deleted: <p>De fato, quando ele comentou que o time adotara Haskell, eu demonstrei ceticismo.</p> Added: <p>Não deveria. De fato, quando ele comentou que o time adotara Haskell, eu demonstrei ceticismo.</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Deleted: <p>O que é curioso, porque adoro Haskell. É uma das linguagens mais bem desenhadas que conheço. Pessoalmente, acho muito prazeroso programar em Haskell, e frequentemente uso padrões da linguagem em outras—como, por exemplo, <a href="https:/ /github.com/liferay/liferay- portal/blob/master/modules/ dxp/apps/portal- search-tuning/ portal-search- tuning-synonyms- api/src/main/ java/com/liferay/ portal/search/ tuning/synonyms/ index/name/SynonymSetIndexName.java">esta classe Java que é basicamente um <kbd>newtype</kbd> de string</a>. Também acredito em todas as vantagens tão comumente associadas à linguagem: o poder do sistema de tipos, a confiança da tipagem estática, a segurança da imutabilidade etc.</p>Added: <p>Por quê?</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p>O problema é que estes não são os meus problemas.</p>Unchanged: <p>O problema é que estes não são os meus problemas.</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p>Por exemplo, hoje eu trabalho na Liferay Cloud. Praticamente nenhum problema com que tive de lidar foi causado por falhas de lógica dentro do código. Quase sempre, nossos bugs resultam de problemas em serviços de GCP, usos ineficazes de APIs, comportamentos de borda de Kubernetes, bancos de dados inadequadamente configurados... Vários <em>pull requests</em> consistem em adicionar um parâmetro a uma chamada de construtor e um teste de 20 linhas garantindo o comportamento esperado. Haskell nos ajudaria com isso?</p>Unchanged: <p>Por exemplo, hoje eu trabalho na Liferay Cloud. Praticamente nenhum problema com que tive de lidar foi causado por falhas de lógica dentro do código. Quase sempre, nossos bugs resultam de problemas em serviços de GCP, usos ineficazes de APIs, comportamentos de borda de Kubernetes, bancos de dados inadequadamente configurados... Vários <em>pull requests</em> consistem em adicionar um parâmetro a uma chamada de construtor e um teste de 20 linhas garantindo o comportamento esperado. Haskell nos ajudaria com isso?</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p>Talvez, mas há alternativas. No nosso caso, estamos usando TypeScript, que tem um sistema de tipos bem poderoso. Antes eu programava em Java, cujo sistema de tipagem é simples e seguro. Nestas linguagens, imutabilidade e funções como valores, se não obrigatórias, vêm se tornando o padrão. Naturalmente, como funcionalidades que apareceram tardiamente, estas características não são tão elegantes quanto em Haskell—nem de longe! Mas são efetivas.</p>Unchanged: <p>Talvez, mas há alternativas. No nosso caso, estamos usando TypeScript, que tem um sistema de tipos bem poderoso. Antes eu programava em Java, cujo sistema de tipagem é simples e seguro. Nestas linguagens, imutabilidade e funções como valores, se não obrigatórias, vêm se tornando o padrão. Naturalmente, como funcionalidades que apareceram tardiamente, estas características não são tão elegantes quanto em Haskell—nem de longe! Mas são efetivas.</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p>Por outro lado, Haskell também traz um custo. Não é tão difícil quanto muitos apregoam, mas também não é tão trivial. Experiência de desenvolvimento prévia pode até atrapalhar a aprendizagem. E os padrões podem ser bastante abstratos. Por exemplo, exatamente como no clichê, levei um tempão para entender as mônadas. Quando entendi, criaram as lentes, que ainda me confundem profundamente. Já com outras linguagens, é mais rápido se tornar produtivo.</p>Unchanged: <p>Por outro lado, Haskell também traz um custo. Não é tão difícil quanto muitos apregoam, mas também não é tão trivial. Experiência de desenvolvimento prévia pode até atrapalhar a aprendizagem. E os padrões podem ser bastante abstratos. Por exemplo, exatamente como no clichê, levei um tempão para entender as mônadas. Quando entendi, criaram as lentes, que ainda me confundem profundamente. Já com outras linguagens, é mais rápido se tornar produtivo.</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p>Some-se a isso o ambiente. A comunidade Haskell é significativa, mas não tão grande quanto as outras. Onde encontrar desenvolvedores? Ou bibliotecas? Existem, claro, mas não tanto quanto para outras linguagens. </p>Unchanged: <p>Some-se a isso o ambiente. A comunidade Haskell é significativa, mas não tão grande quanto as outras. Onde encontrar desenvolvedores? Ou bibliotecas? Existem, claro, mas não tanto quanto para outras linguagens. </p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p>Confesso, porém, que todos esses motivos me parecem menores, ou contingentes. O maior problema, creio, é que linguagens de programação não são mais tão centrais. Os sistemas modernos têm tantas partes que as vantagens das linguagens—que Haskell tem, muitas—vão se tornando menos relevantes. Como profissional, hoje, eu buscaria muito mais entender do negócio que estou apoiando como desenvolvedor, das necessidades dos usuários e <em>stakeholders</em>, do que de questões de linguagem. Mesmo como técnico, é mais interessante saber como trabalhar com ferramentas como bancos de dados, Kubernetes, provedores de cloud etc. do que se aprofundar em outras linguagens. Há anos não faço, como engenheiro de software experimentado, uma entrevista em que alguém se importe como as linguagens que conheço!</p>Unchanged: <p>Confesso, porém, que todos esses motivos me parecem menores, ou contingentes. O maior problema, creio, é que linguagens de programação não são mais tão centrais. Os sistemas modernos têm tantas partes que as vantagens das linguagens—que Haskell tem, muitas—vão se tornando menos relevantes. Como profissional, hoje, eu buscaria muito mais entender do negócio que estou apoiando como desenvolvedor, das necessidades dos usuários e <em>stakeholders</em>, do que de questões de linguagem. Mesmo como técnico, é mais interessante saber como trabalhar com ferramentas como bancos de dados, Kubernetes, provedores de cloud etc. do que se aprofundar em outras linguagens. Há anos não faço, como engenheiro de software experimentado, uma entrevista em que alguém se importe como as linguagens que conheço!</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p>Isso é ruim para Haskell, porque fica difícil valorizar as excelentes qualidades da linguagem. Mas, paradoxalmente, também é bom, e acaba revertendo a premissa desse post. Se a linguagem é menos relevante, por que não Haskell? Há desvantagens, mas todas as alternativas as têm.</p>Unchanged: <p>Isso é ruim para Haskell, porque fica difícil valorizar as excelentes qualidades da linguagem. Mas, paradoxalmente, também é bom, e acaba revertendo a premissa desse post. Se a linguagem é menos relevante, por que não Haskell? Há desvantagens, mas todas as alternativas as têm.</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p>Meu amigo mantém um sistema em Haskell, lidando com vários serviços, rodando em AWS. Ele está preocupado de que uma linguagem menos popular no currículo possa lhe prejudicar. Como poderia? Até essa breve descrição mostra que ele é excepcionalmente competente: um sistema desses não é para qualquer um!</p>Unchanged: <p>Meu amigo mantém um sistema em Haskell, lidando com vários serviços, rodando em AWS. Ele está preocupado de que uma linguagem menos popular no currículo possa lhe prejudicar. Como poderia? Até essa breve descrição mostra que ele é excepcionalmente competente: um sistema desses não é para qualquer um!</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p>O que pode prejudicar é ter um currículo centrado na linguagem. Programadores de linguagens mais usadas (como Java, PHP, JavaScript) conseguem sobreviver porque a demanda é vasta, mas esta é, em minha opinião, uma configuração anormal. O desenvolvedor experiente não está amarrado a uma linguagem. Este meu amigo, por exemplo, já trabalho com Ruby, Java, JavaScript, até C. Seu único descuido está sendo se preocupar por trabalhar com Haskell ao invés de focar nas outras tecnologias. Talvez <a href="https:/ /www.kalzumeus.com/2011/10/ 28/dont-call- yourself-a-programmer/">nem devesse chamar a si mesmo de programador</a>—mas não o condeno, também sou orgulhoso demais do que faço para não me rotular assim.</p>Unchanged: <p>O que pode prejudicar é ter um currículo centrado na linguagem. Programadores de linguagens mais usadas (como Java, PHP, JavaScript) conseguem sobreviver porque a demanda é vasta, mas esta é, em minha opinião, uma configuração anormal. O desenvolvedor experiente não está amarrado a uma linguagem. Este meu amigo, por exemplo, já trabalho com Ruby, Java, JavaScript, até C. Seu único descuido está sendo se preocupar por trabalhar com Haskell ao invés de focar nas outras tecnologias. Talvez <a href="https:/ /www.kalzumeus.com/2011/10/ 28/dont-call- yourself-a-programmer/">nem devesse chamar a si mesmo de programador</a>—mas não o condeno, também sou orgulhoso demais do que faço para não me rotular assim.</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p>Enfim, Haskell não é uma má linguagem para se trabalhar. Apresenta desafios, mas toda escolha tem <em>tradeoffs</em>. A pergunta a ser feita é: vou conseguir prover valor com essa ferramenta? Se sim, pode-se programar na linguagem que for, e o resultado será positivo de qualquer forma.</p>Unchanged: <p>Enfim, Haskell não é uma má linguagem para se trabalhar. Apresenta desafios, mas toda escolha tem <em>tradeoffs</em>. A pergunta a ser feita é: vou conseguir prover valor com essa ferramenta? Se sim, pode-se programar na linguagem que for, e o resultado será positivo de qualquer forma.</p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->
Unchanged: <!-- wp:paragraph -->Unchanged: <!-- wp:paragraph -->
Unchanged: <p></p>Unchanged: <p></p>
Unchanged: <!-- /wp:paragraph -->Unchanged: <!-- /wp:paragraph -->

Note: Spaces may be added to comparison text to allow better line wrapping.

This post is protected. Enter the password to view any comments.