domingo, maio 22, 2016

Crítica: Automate the Boring Stuff with Python

Continuando o meu esforço para aprender e usar Python, li "Automate the Boring Stuff with Python" de Al Sweigart. A proposta do livro é ensinar Python para não programadores automatizarem tarefas repetitivas. Vejam abaixo o que eu achei.


Um primeiro ponto a destacar é que este livro utiliza Python 3. Uma das coisas que me surpreendeu ao estudar Python é a existência de diferenças entre as versões 2 e 3 que exigem alterações na maioria dos programas antigos para rodar corretamente nas versões mais novas. Escrever programas compatíveis com as duas versões é possível, mas poucos se dão ao trabalho. Portanto, se você está acostumado a usar o Python 2 e pretende seguir este livro, confira que você tem o Python 3 instalado e se prepare para rever alguns costumes (estou olhando para você, print).

A primeira parte do livro se dedica a ensinar o básico da programação em Python. Seguindo a proposta do livro, a abordagem é prática e simplificada, dispensando considerações mais conceituais. Uma frase que aparece com frequência no livro todo é "isto não faz parte do escopo deste livro". Uma decisão polêmica foi não tratar de classes e orientação a objeto. Por um lado estes assuntos envolvem uma boa dose de teoria, o que levaria a um alongamento desta primeira parte e talvez alienasse os não programadores. Por outro lado, isto deixa algumas explicações meio esquisitas no curto prazo e limita a complexidade de programas no médio prazo.

A segunda parte trata especificamente da automação de tarefas.

O primeiro capítulo desta parte trata de expressões regulares, algo talvez um pouco pesado comparado com o resto do livro. Os três capítulos seguintes tratam da manipulação de arquivos e de depuração, assuntos que poderiam estar na primeira parte.

Chegamos finalmente a um capítulo mais encorpado, tratando de "web scrapping" (acesso a páginas web e retirada de informações). Como nos capítulos seguintes, módulos adicionais (isto é, que não fazem parte da instalação padrão do Python 3) são a base dos programas. Eu já tinha estudado este assunto no curso "Using Python to Access Web Data" do Coursera; o material do livro me pareceu bom. Só achei esquisito o exemplo ser fazer um download em massa da tirinhas do xkcd (já o curso insiste bastante nos cuidados ao explorar sites de forma intensa).

O capítulo seguinte é sobre a manipulação de planilhas do Excel com o módulo openpyxl, e estabelece um padrão que será seguido nos capítulos seguintes. O primeiro ponto é que bibliotecas que acessam arquivos em formatos proprietários (ou muito complexos) costumam ter limitações importantes. O segundo é que o livro foca na parte prática, não entrando muito na teoria e examinando apenas uma parte das funcionalidades do módulo. Por último, os exemplos são muito detalhados, mas as vezes o objetivo me parecia meio forçado. No caso deste capítulo, o exemplo é calcular subtotais em uma planilha, o que pode ser feito no Excel com um punhado de clicks.

Em seguida são apresentados módulos para manipular arquivos PDF e Word. Ambos os módulos utilizados tem limitações fortes. O tema seguinte são arquivos CSV e JSON. Eu tenho uma longa experiência com arquivos CSV, que (entre outras coisas) são um denominador comum para intercambiar dados com planilhas. O exemplo desta parte, entretanto, consiste em retirar a primeira linha de um arquivo CSV, situação em que o parse do CSV é pura perda de tempo. Um exemplo mais interessante seria retirar uma coluna do arquivo.

O capítulo seguinte mistura o tratamento de tempo, agendamento de tarefas, disparo de programas e multithreading. Assuntos interessantes, mas abordados de uma forma superficial. A ideia de um programa Python ficar repetindo dormidas de 1 segundo até chegar a uma data futura não me pareceu realista.

Em seguida o livro fala no envio e leitura de emails e no envio de mensagens SMS. Uma piada no tempo do Unix é que todo programa tenderia a ficar mais complexo até chegar ao ponto de ler email. Na prática esta tendência não se concretizou (felizmente), porem o envio de emails é uma solicitação comum, principalmente para programas que não interagem diretamente com o usuário. Infelizmente a abordagem do livro é muito sucinta, ficando restrita a uns poucos métodos da smtplib e não mencionando o módulo email, o que resulta em uma baixa abstração (por exemplo, o assunto e o corpo do email precisam estar em na mesma string e um formato rígido deve ser observado). Uma busca rápida por "python send email" trás informações bem melhores (como a documentação oficial).  A parte de SMS é (inevitavelmente) restrita a um provedor deste tipo de serviço e portanto não se aplica diretamente ao Brasil.

O assunto seguinte foi a manipulação de imagens. O módulo pyllow parece ser muito poderoso e de fácil uso, certamente pretendo olhar com mais profundidade.

Fechando o livro, temos a "automação da GUI" - a simulação de mouse e teclado sob o comando de um programa Python. Eu tenho sérias restrições sobre isto, principalmente por ter que ser feito às cegas. Fiquei feliz em ver que o livro compartilha esta minha preocupação e até apresenta algumas mitigações para isto.

Veredito

Se tudo que você deseja é aprender o suficiente de Python para escrever programas curtos para fazer alguma das automações que o livro aborda, este livro será útil.


Entretanto, se você pretende algum dia escrever programas maiores ou mais sofisticados, invista o tempo em uma descrição mais completa de Python, que entre mais a fundo na teoria. Este aprendizado não apenas o ajudará a programar melhor, como facilitará procurar e entender os inúmeros módulos Python disponíveis na internet.



Nenhum comentário: