sábado, 2 de junho de 2012

Python como ambiente de desenvolvimento científico

Cada vez mais recorro ao Python para resolver problemas relacionados à engenharia ou mesmo que aparecem no dia-a-dia. Por que?
  1. Custo, disponibilidade, licença etc...: nem preciso falar disso, se considerarmos que uma licença do MATLAB ou do Mathematica com algumas toolboxes pode custar tanto quanto um carro usado.

    Sem falar que recentemente precisei fazer um trabalho com o MATLAB, e tive diversos problemas: simplesmente dava erro irrecuperável durante a execução, fazendo com que eu perdesse todo meu trabalho, além de alguns problemas com plotagens (o mesmo comando que funcionava no Windows simplesmente falhava no Linux, sem explicação aparente).

    Python e suas bibliotecas encontram-se facilmente disponíveis nos repositórios de qualquer distro Linux. E para instalação de pacotes pode-se facilmente utilizar o easy_install, parte do setuptools.

    No que toca as licenças, já dei minha opinião sobre formatos proprietários aqui no blog, e o mesmo vale para as linguagens proprietárias. Ciência livre requer software livre e formatos abertos.
  2. Comunidade: a comunidade do Python é enorme! Muito maior do que a do MATLAB ou do Mathematica.  No Stack Overflow, a tag python tem mais de 100 mil perguntas, enquanto a tag MATLAB tem 9 mil.

  3. Flexibilidade: temos bibliotecas para absolutamente tudo, científico ou não. Interfaces gráficas, conexão a banco de dados etc... são tarefas simples de fazer em Python, que muitas vezes não poderiam ser realizadas nos outros programas (por exemplo, não acreditei que o MATLAB não permitia exportar gráficos em SVG, embora estejamos em 2012 e esse formato já seja amplamente aceito) de forma direta.
Além disso, muitas vezes sai mais prático escrever um programa em Python do que gambiarrar um shell script que faça a mesma coisa. (admito: não sei shell script muito bem)

Mas infelizmente, temos algumas desvantagens:
  1. Python no Windows? Haja saco para instalar todo o ambiente de desenvolvimento (aliás, haja saco para qualquer coisa no Windows). Uma das melhores soluções é o PythonXY, que já instala toda a bagaça (Python, SciPy, Qt etc...) com alguns cliques.
  2. Existe um ecossistema enorme ao redor do MATLAB e do Mathematica, principalmente para aplicações científicas, e isso é o suficiente para desmotivar muitos potenciais usuários.

    É, como eu já citei anteriormente, o círculo vicioso da ditadura da maioria: todo mundo usa, logo mais pessoas são obrigadas a utilizar.
  3. O desempenho pode ser menor, mas para isso podem-se escrever partes de programas usando C++ junto com o Cython, assim obtendo-se o melhor dos 2 mundos: a eficiência do C++ com a simplicidade e a praticidade do Python.

Ferramentas que eu uso:
  • Ambiente de desenvolvimento: Editor de texto + terminal (onde uso o IPython, o debugger etc...). Simplesmente não vejo vantagem em uma IDE completa, mas para quem gosta, a que me deu a melhor experiência foi a Spyder (que parece muito com o MATLAB).

    Um ambiente bem prático para desenvolvimento "interativo" é o Sage, sobre o qual já falei aqui no meu blog. Outra alternativa é o IPython.
  • Bibliotecas que eu uso mais frequentemente:

    • SciPy, NumPy, matplotlib, SymPy: são básicas para que o Python possa ser usado para fins científicos. Incorporam funções especiais, plotagem, resolução de integrais (numericamente e simbolicamente) etc....
    • DEAP: otimização por algoritmos genéticos.
    • PyQt: desenho de interfaces gráficas, utilizando o Qt como toolkit (ou seja, posso desenhar janelas usando o Qt Designer). Para plotagem pode-se usar a PyQwt
    • python-control: projeto de sistemas de controle. É bem similar, no que diz respeito à sintaxe, à Control Systems Toolbox do MATLAB.
Entre várias outras disponíveis (como eu já disse, existem bibliotecas para tudo, basta ver no Python Package Index).

Embora existam alternativas livres ao MATLAB, como o Octave, o Scilab etc..., depois de um tempo trabalhando com Python, essas ferramentas me parecem um enorme retrocesso, copiando alguns vícios da linguagem de "inspiração".

Para seu próximo projeto, que tal fugir das linguagens proprietárias e tentar alguma linguagem nova, que pode ser melhor e ainda por cima vir a custo zero? Pois bem, experimente o Python.

Tirinha: XKCD