Pesquisa de site

Ruby vs Python [Infográfico + Atualizado para 2023]


Python e Ruby são dois dos melhores exemplos da nova geração de linguagens de alto nível que se concentram na simplicidade e dão ao programador a capacidade de fazer as coisas rapidamente, em vez de correção de sintaxe e hierarquia rígida (insira tosse que soa como "Java!" aqui).

Primeiro as semelhanças. Ambas são linguagens orientadas a objetos de alto nível. Ambos fornecem um shell interativo, bibliotecas padrão, suporte multiplataforma em Linux, Unix, Windows e outros sistemas operacionais, bem como suporte de persistência. Eles também são excelentes para desenvolvimento web, ainda mais quando você aproveita os frameworks web criados especificamente para cada linguagem - Django para Python e Rails para Ruby. Dito isso, Ruby on Rails é um pouco mais popular como ferramenta de desenvolvimento web do que Django-Python. Python é mais favorecido nas arenas acadêmica e científica.

Mas, além disso, eles também têm algumas diferenças importantes. Eles também, surpreendentemente, têm seus adeptos apaixonados e detratores igualmente apaixonados, o que resultou em mais de uma guerra de chamas que degenerou em insultos e ataques ad hominem, e até mesmo na lei de Godwin. Nada disso aqui; Vamos nos aprofundar em avaliações objetivas e nos ater ao que cada idioma pode ou não fazer.

Rubi

Ruby foi criado em 1995 pelo renomado Yukihiro "Matz" Matsumoto e foi influenciado por C, Perl, Java e C++. É descaradamente orientado a objetos; em Ruby tudo é um objeto. Alguns sites famosos construídos usando Ruby (on Rails) são Twitter, Hulu, Shopify e Groupon.

Desde o início, o ethos de Ruby sempre foi expressividade, poder e elegância. Seus seguidores dedicados o adoram por seu 'princípio do menor espanto' - a crença de que o código de uma linguagem deve sempre causar o mínimo de confusão possível para o desenvolvedor. Veja este artigo para alguns excelentes exemplos de como a elegância e expressividade de Ruby se comparam à maneira antiga de fazer as coisas do Java.

Este princípio orientador naturalmente leva à herança de Ruby da filosofia Perl de ter mais de uma maneira de fazer a mesma coisa. Essa é a principal diferença entre ele e o Python, como veremos mais adiante. Isso, por sua vez, significa que um método pode ter vários nomes, e isso pode causar confusão para iniciantes.

Uma característica superior frequentemente elogiada do Ruby's é o uso de blocos. Um bloco é um objeto de primeira classe tratado como uma unidade dentro do programa. Essa habilidade torna a linguagem muito poderosa, especialmente quando combinada com seu outro forte embutido - programação funcional e uso de lambdas. Além disso, Ruby leva o conceito de OOP ao seu limite. Em Ruby, absolutamente tudo é um objeto; até mesmo variáveis globais são realmente representadas dentro do objeto ObjectSpace. Classes e módulos são eles próprios objetos, e funções e operadores são métodos de objetos.

Uma lista rápida de recursos que funcionam bem em Ruby, mas não em Python, está listada abaixo e descrita com mais detalhes aqui.

  • Uso de blocos
  • Programação funcional
  • Fragmentação
  • Tipos hashable/unhashable
  • Strings mutáveis

Pitão

O Python foi criado em 1991 por Guido van Rossum, inspirado em uma infinidade de linguagens - C/C++, java, Lisp, Perl e ICON. Alguns sites famosos construídos em Python são Google, Dropbox, Reddit e Youtube.

Ao contrário de Ruby, com sua natureza ousada e um tanto aventureira, Python é um tanto conservador. Python abomina a escola de pensamento 'muitas maneiras de fazer algo' de Ruby, que Ruby tem em comum com linguagens como Perl e PHP; em vez disso, o Python sempre enfatizou que existe apenas uma melhor maneira de fazer algo, e a linguagem deve fazê-lo dessa maneira. Isso resulta em uma linguagem rígida no layout e recuo e até mesmo na quantidade de espaço em branco a ser usada (!), o que obviamente parece sufocante para os proponentes do Ruby. No entanto, essa filosofia regimentada faz com que o Python seja extremamente legível e fácil de aprender - na verdade, um bom número de escolas e faculdades usa o Python como auxílio de ensino. Sua sintaxe é muito simples, há pouco a lembrar e, portanto, é ótimo para iniciantes.

O Python também possui bibliotecas extensas e uma natureza OO, embora isso não seja tão "puro" quanto o Ruby e seja semelhante à orientação a objetos em C++. Mais alguns recursos em que o Python é superior ao Ruby estão listados abaixo e também expandidos aqui.

  • Melhor manipulação de namespace e uso de módulos
  • Uso central de iteradores
  • Funções internas
  • Um conjunto mais rico de estruturas de dados

Aplicativos da Web: Ruby tem a vantagem

O desenvolvimento web continua sendo uma das principais arenas em que Ruby e Python competem. Claro, há scripts de servidor, aplicativos corporativos, aplicativos móveis e agora aprendizado de máquina, mas o usuário tradicional dessas linguagens era o desenvolvedor web. Na arena de aplicativos da web, para o bem ou para o mal, Ruby tem sido o jogador muito mais dominante, graças ao Ruby On Rails. A flexibilidade do Ruby, totalmente promovida por sua filosofia que permite várias maneiras de realizar a mesma coisa, é uma bênção para os desenvolvedores da web. É tentador pensar que uma maneira simples de fazer as coisas funcionará para todos, mas quando os casos de uso em que os desenvolvedores da Web divergem tão amplamente quanto eles, é prático deixar várias abordagens florescerem. Nesse caso, o sucesso do Ruby é uma reminiscência do C++, uma linguagem muito difamada que teve tanto sucesso porque permite que qualquer equipe escolha qualquer subconjunto específico da linguagem que deseja usar.

Ruby On Rails é como Ruby com esteróides, completo com extensa geração de código nos bastidores e metaprogramação do lado do servidor que faria os codificadores em uma comunidade de linguagem mais séria levantarem as sobrancelhas. De fato, este foi o caso quando o Django, na terra do Python, emulou a abordagem Rails MVC e imediatamente enfrentou resistência dos Pythonistas que achavam que o framework estava fazendo muito e ficando muito complexo, fora de linha com a ênfase Python na legibilidade. Onde os programadores Python e o Django foram com simplicidade, o Ruby On Rails foi com poder e flexibilidade. É verdade que pode ser complexo, mas a flexibilidade provou ser valiosa para os desenvolvedores da Web. Isso fez com que o Rails fosse quase um rito de passagem para startups "de ponta", especialmente aquelas que desenvolvem plataformas B2C, com uma infinidade de grandes sucessos como Airbnb, Twitter, Github e outros demais para contar. O desenvolvimento do Rails é incrivelmente rápido, hiperprodutivo e permite que uma startup em estágio inicial itere de forma flexível com quase nenhuma equipe técnica além de alguns desenvolvedores principais de ROR. Ruby também se saiu bem em DevOps, com ferramentas como o Chef aproveitando ao máximo o poder expressivo da linguagem de script.

Tudo isso não significa que o Python seja um desleixo no desenvolvimento web. Ele tem alguns truques únicos: velocidade e um ecossistema super grande. Há uma percepção de que o Python é mais rápido que o Ruby, e isso muitas vezes levou as equipes a preferi-lo ao Ruby para desenvolvimento web. A comunidade Ruby está dolorosamente ciente disso, e Ruby ficou muito mais rápido ao longo dos anos. Agora, em benchmarks, Ruby tem um desempenho tão bom quanto o Python, se não melhor. Ainda assim, isso não é suficiente para a comunidade Ruby, cujo Ruby Versão 3 foi especificamente planejado para ser muito mais rápido que o Ruby 2 e, especificamente, pretende ser muito mais rápido que o Python3. De qualquer forma, a batalha começou.

Ruby Vs Python: Comunidade de código aberto

Em números, o Python tem uma vantagem impressionante, mas isso é de se esperar, dada a versatilidade do Python como linguagem de programação de uso geral. Sua simplicidade e semântica amigável para iniciantes fizeram com que ele fizesse incursões profundas em praticamente qualquer área da computação imaginável. Os números falam por si. O Python tem cerca de 8,2 milhões de desenvolvedores em todo o mundo, quase quatro vezes os 1,8 milhão de desenvolvedores estimados que o Ruby possui. A comunidade de Python supera Ruby nesse aspecto.

No entanto, é bom estar ciente de como a comunidade Ruby é apaixonada. Isso conta muito mais do que parece na superfície. Nos círculos técnicos, o mero tamanho de uma comunidade pode ser ofuscado pela paixão da comunidade. Idiomas com características únicas que são valorizados por suas comunidades de nicho podem ter devotos muito apaixonados. A família funcional de linguagens como Haskell, O'Caml e Elixir são bons exemplos. Eles têm comunidades minúsculas há anos, mas essas línguas não desapareceram, ou suas comunidades se desencantaram com elas. Em vez disso, seja nos bancos de Wall Street fazendo cálculos esotéricos de derivativos ou na academia, seus adeptos se aprofundaram ainda mais e há muito dinamismo nessas comunidades muito menores. A comunidade de Ruby se parece muito com eles nesse aspecto.

Ainda assim, os números são importantes, e se você deseja o maior e mais diversificado tipo de comunidade que abrange computação científica, desenvolvimento de jogos, desenvolvimento web e tudo mais, o Python supera o Ruby. No Github, o Python tem mais de 29.000 estrelas, 13.000 bifurcações e 1.100 observadores de repositório. Para Ruby, esses números são 16.500 estrelas, 4.400 bifurcações e 1.200 observadores. Ainda mais importante, o Python tem 1.133 colaboradores contra 182 do Ruby. Novamente, a comunidade menor de Ruby é muito unida e super apaixonada, então você os descarta por sua própria conta e risco. A comunidade do Python se beneficia da polinização cruzada de diferentes áreas de foco técnico e permite uma maior diversidade de funções e áreas em que a linguagem é aplicada. Naturalmente, o Python tem uma grande vantagem sobre o Ruby no interesse geral do desenvolvedor amplamente definido, bem como empregos, equipes que o usam e outras estatísticas de uso.

Aprendizado de máquina: Python tem vantagem

A ciência de dados e o aprendizado de máquina estão apenas começando, mas o mundo agora está percebendo o poder presságio da ciência de dados, abrangendo desde big data até inteligência artificial (IA) e aprendizado profundo. A ciência de dados, e o aprendizado de máquina em particular, permite que as máquinas tomem decisões semelhantes às humanas e "aprendam" com os dados para melhorar com o tempo na solução de uma variedade estonteante de problemas. Muito valor foi desbloqueado e, naturalmente, empresas de gigantes da tecnologia como o Google a pequenas startups estão se preparando e avançando nesse campo lucrativo. Esta provou ser a área de realização mais portentosa do Python.

Uma comparação de aprendizado de máquina é um cenário de pesadelo para praticamente qualquer linguagem quando comparada com o Python. De fato, nos círculos de ciência de dados, especialmente aqueles na academia, a comparação entre Ruby e Python nessa esfera não justificaria muito além de uma rejeição superficial de Ruby. Se Ruby brilha no desenvolvimento web, o Python possui os campos de ciência de dados e aprendizado de máquina. Ruby não está nem entre as 5 principais linguagens de programação para aprendizado de máquina. Python lidera o faturamento aqui, com as 5 principais linguagens de máquina da seguinte forma:

  • Python - primeiro lugar com 57% dos cientistas de dados usando-o, outras estimativas no setor o colocam muito mais perto de 70%.
  • C++ - ocupa o segundo lugar com 44% dos cientistas de dados usando-o de alguma forma
  • Java - terceiro lugar
  • R - quarto lugar
  • JavaScript - 5º lugar, com 31% dos cientistas de dados usando a linguagem

As 3 principais linguagens em aprendizado de máquina, Python, C++ e Java, respondem pela maior parte de todo o aprendizado de máquina sério e são usadas por concentrações ligeiramente diferentes de cientistas de dados, com muita sobreposição entre elas. Outras linguagens importantes de aprendizado de máquina no top 10 são Julia, Scala, Ruby, Octave e MATLAB. No entanto, essas linguagens têm menos de 5% de aceitação entre os cientistas de dados cada. Isso não quer dizer que essas linguagens sejam inadequadas para aprendizado de máquina. Essa seria uma noção quase indiscutivelmente estranha, como os cientistas de dados de Julia ou Octave apontariam, quando essas linguagens, ainda mais do que o Python, são construídas especificamente para resolver cálculos de ciência de dados hardcore. O Python, no entanto, teve uma liderança inicial em ciência de dados, uma comunidade enorme, incrível compatibilidade de uso geral, simplicidade e funcionalidade em grandes equipes. Esses fatores tornaram especialmente difícil desalojar no aprendizado de máquina. Nem é preciso dizer que, se você e sua equipe vão fazer aprendizado de máquina pesado, o Python deve ser o favorito em relação ao Ruby.

Ruby Vs Python: Frameworks e Bibliotecas

Como linguagens de programação de código aberto com comunidades particularmente vibrantes, Ruby e Python têm ecossistemas incrivelmente completos, com bibliotecas que mostram o poder do ethos de código aberto. Praticamente qualquer coisa que você possa imaginar pode ser realizada com pacotes de código aberto disponíveis gratuitamente em qualquer linguagem de programação. Para Ruby, os programas são amplamente distribuídos via RubyGems e para Python via Python Package Index (PyPI).

Existem outros sistemas de distribuição de software para complementá-los, e há excelentes ferramentas em ambos os lados. Essa é uma semelhança entre Ruby e Python que torna as comunidades, tão diferentes em muitos aspectos, muito mais próximas em sua abordagem ao código aberto.

Aqui está uma olhada em algumas das principais bibliotecas do ecossistema Ruby:

  • Frameworks de Aplicativos Web - rails, sinatra, rack
  • Servidores Web - puma, unicórnio
  • Adaptadores de banco de dados - pg, mysql2
  • Extensões do núcleo Ruby - activesupport, hashie
  • Processamento simultâneo - eventmachine, concurrent-ruby
  • Ferramentas de teste - rspec, capivara, minitest

Para o Python, um quem é quem das principais bibliotecas mostra as áreas mais amplas de foco em que a linguagem de programação Python fez incursões sérias, com um foco pronunciado em áreas relacionadas à ciência de dados:

  • Django (framework web)
  • Numpy (ciência de dados)
  • Pandas (ciência de dados)
  • Matplotlib (ciência de dados)
  • Scipy (ciência de dados)
  • Flask (estrutura da Web)
  • Keras (aprendizado de máquina, aprendizado profundo)
  • Theano (ciência de dados)
  • TensorFlow (aprendizado de máquina, redes neurais)
  • Scikit-learn (aprendizado de máquina)
  • PyQT (interface gráfica do usuário, desenvolvimento de GUI)
  • wxPython (desenvolvimento de GUI)
  • Pygame (desenvolvimento de jogos eletrônicos)
  • Tkinter (pacote GUI)

A vasta pegada de ciência de dados do Python continua a crescer, e suas bibliotecas de ciência de dados, em muitos aspectos as bibliotecas líderes nesse aspecto, estão crescendo na adoção do usuário entre os desenvolvedores do Python.

Ruby Vs Python: Código Lado a Lado

>

O código Ruby e o código Python têm muito em comum, mas existem diferenças mais sutis, especialmente em linguagens de codificação impulsionadas em grande parte por diferenças filosóficas. Ambas são linguagens dinâmicas e interpretadas. Ambos usam espaço em branco e não têm as chaves popularizadas por C, C++ e Java, entre outras linguagens. Essas linguagens são verdadeiramente versáteis, no entanto, como revelado pelos paradigmas que suportam: processual, imperativo, funcional e orientado a objetos. Sim, certos códigos de estilo super funcional são muito mais fáceis de escrever em Ruby do que em Python, mas o Python, apesar de sua simplicidade, pode ser usado de maneiras bastante semelhantes ao Ruby. Ruby, no entanto, tende a ser mais expressivo e se aproxima um pouco mais de linguagens funcionais como Lisp ou Scheme do que de Python. Sintaticamente, e de muitas outras maneiras, o código Ruby se parece muito mais com o Python.

Aqui está um exemplo simples que ilustra o quão próximos esses dois realmente são, embora estejam longe dos clones que podem parecer na superfície:

Função de Fibonacci em Ruby

def fib(n)

n < 2 ? n : fib(n-1) + fib(n-2)

fim

alias :fibonacci :fib

Função de Fibonacci em Python

def fib(n):

Se n < 2:

retorno m—

mais:

return fib(n-1) + fib(n-2)

O código Python é um pouco mais simples, enquanto o código Ruby prefere poder à simplicidade. Ainda assim, ambos estão muito mais próximos do que seriam exemplos em Java, C++ e outras linguagens. O que isso significa é que, se sua equipe tiver que mudar de linguagem, passando de Ruby para Python ou vice-versa, embora muitas vezes considerado inconcebível por entusiastas profundos em qualquer campo de desenvolvimento de software, o céu não cairia exatamente. A curva de aprendizado é muito mais fácil de dimensionar para desenvolvedores e equipes que mudam de um para o outro do que seria mudar para uma linguagem como C, C# ou mesmo Erlang.

Conclusão

Apesar dos argumentos barulhentos dos campos de ambas as línguas, é impossível dizer se uma língua é globalmente "melhor" do que a outra. É claro que cada um tem algumas áreas para as quais é mais adequado, por causa de seus recursos e suporte de outros usuários na mesma área. Para Ruby, isso é desenvolvimento web via framework Rails, e para Python é programação científica e acadêmica. E cada um tem alguns recursos ou capacidades que o outro não tem ou não faz bem.

As duas línguas também adotam filosofias radicalmente diferentes. Ruby se concentra em dar aos desenvolvedores a liberdade de fazer o que quiserem e ficar fora de seu caminho. O Python insiste na facilidade de aprendizado e uso, concentrando-se apenas na maneira certa de fazer algo. Isso produz uma cultura interessante dividida entre os campos - os desenvolvedores Python são um pouco conservadores e valorizam a estabilidade em vez de mudanças, desenvolvimentos e novos recursos são adicionados lentamente. Os adeptos do Ruby parecem prosperar na mudança e na liberdade. Por exemplo, o framework Rails está mudando constantemente e, de fato, muitas das mudanças e novos recursos em Python são testados primeiro em Ruby. Leia mais sobre essas diferentes mentalidades aqui.

Infográfico Ruby vs Python

Referências

  • https://www.columnfivemedia.com/work-items/infographic-code-wars-php-vs-ruby-vs-python-who-reigns-supreme
  • http://dpk.io/pyvsrb
  • https://bitboxer.de/2012/10/03/ruby-vs-python/
  • http://www.senktec.com/2013/06/ruby-vs-python/
  • https://stackoverflow.com/questions/1113611/what-does-ruby-have-that-python-doesn't-and-vice-versa
  • https://wit.io/posts/ruby-is-beautiful-but-im-moving-to-python

Artigos relacionados