O quanto realmente importa a escolha de uma linguagem?

Há alguns meses perguntaram ao Rich Hickey:

“How much does a choice of language really matter? Are there good reasons to choose one language over another or does it all come down to taste?”

E sua resposta foi:

“I think it matters quite a bit. A good language is opinionated, and strives to make a particular style of programming easy and idiomatic. It only seems a matter of taste when you are comparing languages that are more similar than they are different, like Java/C# or Python/Ruby. Try something really different like Clojure, Haskell, or Erlang and the fact that it matters becomes readily apparent.”

Eu acho que concordo bastante com sua opinião. Discutir se Java é melhor do que C#, por exemplo, é inútil, porque as duas linguagens são muito semelhantes. Nesse caso, o que acaba pesando mais na hora da escolha é o ecosistema no qual cada linguagem está inserida, que pode agradar mais a um ou a outro programador. É puro gosto.

O mesmo vale para Ruby e Python, como ele mesmo cita.

Mundos diferentes

Mas e se a comparação for entre Java e Ruby, por exemplo, como é que fica? Na minha humilde opinião, fica no sense. Porque Java e Ruby não são liguagens de mesma proposta; e mesmo sendo ambas de propósito geral, ambas tem objetivos claramente diferentes.

Comparação entre mundos diferentes

Agora vou, propositalmente, contradizer um pouco o que eu disse à cima: faz sentido, sim, você comparar Ruby com Java; Erlang com Python; F# com PHP. Sim, faz sentido.

Faz sentido quando você está escolhendo a linguagem que oferece a melhor solução para um dado domínio de problema.

Super CRUD com Erlang? Não, acho que não.

Precisar de concorrência massiva, tolerância a falhas, processos distribuídos, downtime mínimo? Humm, não sei não, mas será que não é de Erlang que você precisa?

Entende? É nessa hora que a escolha de uma linguagem começa a pesar de verdade. Isso realmente importa.

Mundos diferentes se complementam

Tempos atrás, escrevendo programas Erlang/OTP, senti falta de uma ferramenta que me ajudasse a criar rapidamente a estrutura inicial do projeto e umas coisas mais. O que fiz? Criei uma ferramenta que faz isso: otp_kickoff. Em Erlang? Não, em Ruby. Fiz isso em poucas horas, usando Thor.

Pouco tempo depois, senti falta de uma ferramenta de build amigável. Novamente, o que fiz? Criei o ebuilder, usando Ruby/Thor.

Um outro exemplo de mundos diferentes que se complementam é o JSparrow, um cliente de JMS bem fluente, que fiz usando JRuby.

Essa é a ideia de tirar o melhor de cada linguagem!

Mesmo porque, dificilmente, você constroi um sistema de verdade – que não seja um super CRUD – com apenas uma única linguagem de programação. Na minha equipe mesmo, há sistemas desenvolvidos em C# .NET, que são buildados, testados e deployados com Ruby/Rake/Cucumber e usam Java/Ivy como repositório de assemblies. Isso sem falar em JavaScript, que também tem de monte.

Esse é o mundo real dos sistemas de verdade.

Moral da história

Isso me faz pensar que brigas de fanboys de linguagens – em frenéticas buscas por prosélitos – são uma verdadeira piada.

{ 4 comments to read ... please submit one more! }

  1. Falae Leandro,

    Bacana o Post!

    Outra questão que também acho pertinente nesse tema é:

    “Quem na sua empresa está fazendo a escolha tecnológica?”

    Acredito que existam muitos casos onde essa escolha é feita pela gerencia ou até mesmo pela diretoria da empresa. Nesses casos, muitas vezes, são outras questões que motivam a escolha tecnológica como:

    “Qual é a oferta de profissionais na tecnologia
    X em relação à tecnologia Y?”

    “O que é mais interessante para a minha empresa? Ser parceira Oracle ou ser parceira Microsoft? NDA?”

    Nem quero entrar no mérito se esse tipo de decisão é melhor ou pior do que a decisão da equipe técnica pois sou adepto da teoria de que o que é bom para um não necessariamente seja bom para outro.

    Particularmente, acho bem interessante e gosto bastante desse “mix” de tecnologias para te dar suporte ao próprio desenvolvimento como você citou.

    abs,
    -LeoLuz-

  2. Opa, Léo!

    Essas questões de “oferta de profissional”, “parcerias”, “preço”, etc, são algumas das quais fazem parte do que chamamos de ecosistema [no qual cada linguagem está inserida]. São questões importantes, sim, mas não do ponto de vista de se comparar se uma linguagem é melhor do que outra.

    Por exemplo: não dá pra dizer que ASP é melhor do que Haskell, porque você sai na rua e tropeça em programadores ASP, enquanto que programadores Haskell são uma raridade.

    Mas, sim, questões de ecosistema, que agradam mais a um programador do que a outro, por puro gosto, podem ser bem cruciais para caras que estão mais ligados ao negócio da empresa (digamos assim), que estão pensando em coisas como:

    – quanto tempo vamos levar para por essas aplicação no ar?
    – quanto tempo vamos conseguir sobreviver “crescendo” com essa aplicação?
    – quão dificil é manter uma aplicação “crescendo” nessa linguagem?
    – quão caro são as ferramentas para se trabalhar com essa linguagem?
    – etc, etc.

    Por isso é importante que caras técnicos e de negócio estejam sempre bem alinhados. Para que os caras de negócio digam onde querem chegar e os técnicos mostrem o caminho.

    Abraço!

  3. Olá Leandro,

    Muito bacana seu post. Escrevi algo relacionado no começo do ano. Se puder dê uma lida, acho que vai se interessar.

    http://codificando.com/2010/02/nao-se-apaixone-pela-sua-tecnologia/

    []s

  4. artigo muito bom esse eim, eu nunca fui de comparar linguagens sempre achei que você tem que escolher a linguagem de acordo com o seu projeto

{ 0 Pingbacks/Trackbacks }

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>