Big Data é um campo no qual um simples milissegundo perdido pode ser significante considerando bilhões de eventos. E ainda, linguagens comumente consideradas lentas como Python ganharam muita popularidade no ano passado. Artigos recentes e discussões na comunidade de Big Data reascenderam um debate sobre a escolha de uma linguagem de programação para a ciência de dados e Big Data.
De acordo com Ville Tuulos engenheiro principal na AdRoll, o desempenho bruto de uma linguagem não importa. Este assunto foi apresentado por Ville no encontro realizado em São Francisco em Setembro de 2013, na ocasião Ville mostrou toda a estrutura do backend da AdRoll que foi construído em Python, e mostrou como eles são capazes de superar em desempenho até mesmo gigantes como o Amazon's Redshift. O ponto chave aqui é que eles construíram todo o seu sistema baseados em um caso de uso muito específico deles próprios, o que os permitiu realizar diversas otimizações. Como Ville disse:
É possível usar uma linguagem de alto nível para implementar rapidamente soluções para domínios específicos que superam em performance soluções mais genéricas, independente da linguagem utilizada.
Isso não significa que a linguagem realmente não importe. Tem havido muitas controvérsias recentes sobre qual linguagem é a melhor escolha para a ciência de dados e Big Data, e alguns ousam dizer recorrentemente que são Python e R. Alguns até mesmo falam da guerra da ciência de dados. Uma discussão interessante se iniciou com um tópico no Linkedln, e o consenso geral parece ser de que R é uma linguagem acadêmica e "o que faz o R ser a melhor para o cientista de dados é a quantidade de pacotes e a diversidade destes que esta linguagem oferece".
Mas Python tem um apelo mais global para os programadores quando estes estão lidando com uma grande quantidade de dados, como Tom Rampley, cientista de dados na Dish Network disse:
Uso R extensivamente para funcionalidades estatísticas que vêem em vários pacotes, também uso esta linguagem para manipulação de dados com pequenos conjuntos de dados. Entretanto, para análise de textos, manipulação de grandes quantidades de conjuntos de dados e codificar meu próprio algoritmo prefiro muito mais o Python combinado com os pacotes Numpy, Scipy, e Pandas.
Nos últimos meses, Python parece estar vencendo na maioria das frentes, como descrito por Karissa McKelvey que escreveu em Outubro de 2013 o post "Meu dado é grande porque ele não é carregado no R" ou Matt Asay que afirma que "O R continua popular entre os PhDs da ciência de dados, mas a medida que os dados se tornam mainstream, Python vai ganhando terreno."
Desempenho para uma dada linguagem é muitas vezes um fator importante quando se está decidindo qual utilizar em uma arquitetura complexa, e isto é na maiorias das vezes um exagero. O que realmente importa é como se utiliza esta linguagem; como Linus Torvalds colocou: "Maus programadores se preocupam com o código. Bons programadores se preocupam com a estrutura dos dados e seus relacionamentos."
Tome como exemplo o recente projeto de código aberto chamado Impala construído pela Cloudera, o qual foi proposto como um substituto ao Hive para realizar pesquisas em uma ordem de magnitude muito mais rápida. Eles escolheram escrever o Impala em C++ enquanto o resto da arquitetura do Hadoop foi escrito em Java, e a razão desta troca foi vendida como sendo por razões de desempenho. Mas o ganho em desempenho não vem simplesmente da troca de Java para C++. O Impala nem sequer utiliza MapReduce e realiza cache dos dados em memória, por isso é óbvio que o desempenho é melhor primeiramente por que ele utiliza um paradigma totalmente diferente com estruturas de dados diferentes e diferentes limitações. Trocando de Java para C++ é uma boa opção para ir ainda mais longe, mas provavelmente não é o responsável pela maior parte do aumento de desempenho.