Python – meu plano de estudos para imersão

loboweissmann

Henrique Lobo Weissmann (Kico)

Posted on June 15, 2021

Python – meu plano de estudos para imersão

Meu último post aqui foi sobre como planejo meus estudos. Este aqui já é mostrando a aplicação de todos aqueles conceitos na prática. E como brega também exponho aqui as fontes e ferramentas que tenho usado, os resultados obtidos e minhas maiores dificuldades.

Este post ainda não é um review sobre a linguagem, mas sim meu plano de estudos que, acredito, pode ser útil a outras pessoas que estejam em situação similar.

(mas já tenho um review engatilhado, aguardem)

Motivação e projeto prático

Meu objetivo final desta imersão em Python é aprender TensorFlow. Já tive algumas experiências bem tangenciais com a tecnologia (como gestor, não como programador) e gostei muito do que vi, mas é necessário que eu ponha mais a mão na massa e tenha um conhecimento profundo da ferramenta. Do conceitual já conheço alguma coisa, mas não há como fugir do Python que é a linguagem de facto aqui.

Sendo assim Python é um meio para chegar ao TensorFlow, e não um fim em si. Isto trás uma série de consequências para este plano de estudo:

Isto quer dizer que sei o meu ponto de parada e o que devo aprender:

  • A cultura do Python - minha grande dificuldade, dado que Java/Groovy ainda respondem a 80% do que faço no dia a dia me deixam com uma visão bastante enviesada. Entram aqui questões importantes: quais padrões de codificação devo seguir? O que resolve esta linguagem? O que ganho com ela? Qual o idioma falado por quem programa em Python?
  • O essencial da linguagem - como é a sua sintaxe (aquele lance estranho pra mim da indentação do código), como o código é organizado, quais as estruturas de controle e de dados? Como testo meu código?
  • O ferramental básico e sua relação com o que já conheço. Exemplos: como gerencio dependências? Existe alguma IDE melhor que as outras? Onde encontro documentação de qualidade? Como implanto meu código? Como escrevo meus testes?
  • Bibliotecas e frameworks essenciais - como me conecto a um banco de dados relacional? Como interajo com APIs REST/SOAP, etc? Como lido com o sistema de arquivos? Como interajo com outros serviços usando outros protocolos de rede?
  • Dado que Python 2 é história, o foco será Python 3.

Resumindo: meu objetivo não é me tornar um expert em Python: é saber o básico para que possa caminhar bem no meu aprendizado de Tensorflow. Precisava então de um projeto prático pra isto, que foi o...

Projeto prático - o Feed Hunter do /dev/All

Para quem não conhece, o /dev/All é um projeto mantido pela itexto composto por três componentes:

  • Um agregador de blogs relacionados a desenvolvimento de software e tecnologia.
  • Comunidades de discussão sob a forma da Taverna e também nosso Discord.
  • A Revista na qual publicamos artigos técnicos mais aprofundados.

O agregador do /dev/All tem três componentes:

  • Sua API (que iremos abrir em breve)
  • Seu front-end (que estamos (eu) reescrevendo do zero)
  • O Feed Hunter, que é o responsável por ler os feeds dos sites cadastrados e disponibilizá-los aos visitantes do site.

Meu alvo é a reescrita do Feed Hunter. É um código de excelente qualidade, sua última manutenção foi três anos atrás e desde então está em execução sem interrupções (sim, você leu certo: ele não parou nestes últimos anos). É implementado em Spring Boot usando Apache Camel como base para as suas integrações.

Se o código é tão bom, por que substituir este componente? Há algumas razões pra isto. Bom: após todos estes anos percebo que o Feed Hunter é na realidade um canhão pra matar formiga.

  • Mencionei que é baseado em Camel, né? Há uma única rota nele composta por apenas três processadores (obter o RSS do site, parsear este conteúdo, persistir e validar no banco de dados).(se o Feed Hunter tiver umas 1000 linhas de código é muito)
  • Há recursos que precisamos incluir neste componente faz tempo: categorização de posts, extração de imagens, melhorias na indexação de conteúdo, remoção de posts que não estão mais disponíveis e, futuramente, detecção de alguns padrões que darão à toda a comunidade brasileira de software um insight muito interessante sobre o que é ou não hype (aí entra o TensorFlow ;) ).
  • O projeto é simples o suficiente para que eu possa atender todos os objetivos que coloquei a mim no início deste post.

Resumindo: eu percebi que um script simples poderia substituir nossa aplicação Spring Boot / Camel com tranquilidade neste momento. Dado que o feriado do dia 12 de outubro estava pensando, por que não uma imersão neste projeto?

Spoiler: deu certo?

File:خطر اسپویل.png - Wikimedia Commons

Como resultado final temos todas estas implementações (com exceção da detecção de padrões) implementadas em um script Python que tem 250 linhas e é acionado pelo CRON de hora em hora no servidor. Isto mostra que sim, o plano de estudos funcionou BEM e já posso começar a jornada ao TensorFlow.

Minhas fontes

Com meu objetivo bem definido parti para a busca das fontes que iria usar. Segue então aqui um comentário sobre estas.

Fontes primárias

Site oficial - https://python.org

Na seção de documentação do site há um link chamado "Beginners Guide". Dado que minha visão enviesada é um desafio, parti deste ponto. Não foi uma boa escolha. Isto por que no conteúdo deste link você encontrará duas opções:

O problema é que nas duas fontes você enfrentará o seguinte problema: elas te levam para listas de recursos: outros sites contendo tutoriais que você pode usar para se dar os primeiros passos na linguagem. Qual o problema de uma escolha te dar escolhas? Você precisa avaliar as escolhas, e isto requer tempo e, não raro, sorte também.

Mas isto não é tão ruim assim: pois pelo menos estas listas vão te dar uma base mínima para que você possa minerar uma bibliografia interessante. A questão é: você, como eu, teve a sorte de ter sido treinado para realizar levantamentos bibliográficos?

Nota sobre tutoriais interativos - EVITE

É interessante observar que há diversos links que te levarão a tutoriais interativos na Internet, tal como este, e este. A vantagem destes tutoriais é que você não precisa ter nada instalado no seu computador. A desvantagem é que você não precisa ter nada instalado no seu computador.

O problema é que nestes tutoriais você não tem uma visão REAL da coisa. É importante você sofrer um pouco pra entender como funciona parte do ferramental que irá usar. Estes tutoriais te mostram um mundo em condições ideais de temperatura e pressão que não será a sua realidade.

Site oficial como referência (não como guia)

É excelente. Você encontra descrições completas sobre todos os módulos da linguagem. Então fiquei um bom tempo escaneando os principais módulos que precisava (os, sys, json, elementtree, etc).

Porém, como um guia para o iniciante, pelas razões que dei acima, não é tão legal.

PEPs - Python Enhancement Proposals - https://www.python.org/dev/peps/

Se você tiver muita paciência, as PEPs (que equivalem às JSRs do Java) podem ser uma fonte valiosa também. Trata-se de propostas de melhoria para a linguagem (seu alvo principal são as pessoas que irão evoluir o Python). Para lidar com meu enviesamento sem sombra de dúvidas a mais importante foi a 8, que trata de padrões de codificação que você deve adotar.

É lá que você entende que não deve usar tabs, nome de variáveis, etc. No caso de outras linguagens, devo confessar, acho purismo. Já quando o assunto é Python, no qual a formatação do código faz parte da sua sintaxe, é leitura importante. Leia a PEP 8.

Livros

Use a Cabeça! Python - Paul Barry

Dado que a fonte primária não me atendeu como esperava, parti pra livros. E dois me ajudaram bastante. Se você está começando, como eu, o melhor que encontrei foi o "Use a Cabeça! Python", de Paul Barry.


Já temos alguns livros da série e acompanho faz anos. É um excelente tutorial. Atende quase todos os objetivos iniciais que me propus. E mais: ainda apresenta algumas ferramentas importantes, como o venv, por exemplo.

Fluent Python - Luciano Ramalho

E como complemento, o livro que você não deve ter como única fonte se estiver iniciando, mas me oferece uma visão bem mais aprofundada da linguagem (e cultura) foi o "Fluent Python", do Luciano Ramalho.

Fluent Python: Clear, Concise, and Effective Programming - Matt Blatt

O Fluent Python já possui tradução para o português, mas minha edição é a em língua inglesa (dado que o autor é brasileiro apesar da primeira edição ter sido em inglês não acredito que haja problemas com a tradução). Mas o bacana deste livro é que ele vai bem além do tutorial básico (ele NÃO É UM TUTORIAL). São expostos diversos aspectos da linguagem que te dão uma compreensão muito mais profunda a seu respeito e que muitas vezes não são mencionados.

(o primeiro capítulo - The Python Data Model - sozinho já valeria à pena a compra)

Mas como disse, não é um livro para principiantes. Ele não vai te mostrar como dar os primeiros passos na linguagem pois seu objetivo não é este (o próprio autor não recomenda). Mas como leitura... que livro!

The Hitchhiker's Guide to Python - Kenneth Reitz e Tanya Schlusser

Este me ajudou horrores, é gratuito e possui uma tradução para o português (que tem alguns erros até onde pude ler, mas já é alguma coisa). Você pode acessá-lo neste link.

Python Guide Book Cover

É maravilhoso e me foi uma mão na roda. Isto por que ele também não é um tutorial, mas sim um livro de ambientação. Nele você lerá bastante coisa sobre como é a cultura Python e, ainda mais interessante, ele te oferece uma série de referências para tipos de aplicação que você irá construir, tal como pode ser visto na seção "Scenario Guide for Python Applications". Lá você encontra referências para bibliotecas que você pode aproveitar em seus projetos, tais como HTML scrapping (meu caso), acessar banco de dados, parsear XML, JSON e muito mais.

Há também um capítulo neste livro chamado Structuring your Project que me foi muito útil. Basicamente te mostra como organizar os arquivos que compõem o seu projeto.

Sites

Real Python - https://realpython.com/

Há uma boa quantidade de tutoriais gratuitos e pagos neste site. Me ajudou bastante com alguns dos tutoriais que aqui li, dentre eles, destaco:

Python Virtual Environments - A primer - https://realpython.com/python-virtual-environments-a-primer/

Após ter lido a respeito no Use a Cabeça, este texto me ajudou bastante a entender como funciona o conceito de "Virtual Environment" no Python.

(pessoalmente achei uma gambiarra muito interessante o virtual environment)

Common Python Data Structures - https://realpython.com/python-data-structures/

É um resumão das estruturas de dados que o Python oferece. Me foi útil também pra reforçar o que li no Use a Cabeça.

Read the Docs - https://readthedocs.org/

Como pude viver tanto tempo sem conhecer este site? Pense nele como uma espécie de "Google pra Documentação". Meu fluxo com este site era essencialmente este:

  • Eu lia sobre a ferramenta que precisava no The Hitchhiker's Guide to Python. Lá há alguns links, mas eu só havia passado olho pelas opções.
  • Aí me lembrava da lib e ia neste site pra buscar a documentação daquela lib. Boom: encontrava.

É uma mão na roda sem sombra de dúvidas.

Tutorialspoint - Python - https://www.tutorialspoint.com/python/index.htm

O momento em que paguei língua. Por muito tempo caía neste site e não o levava muito a sério, até que precisei dele de verdade. Foi aqui que aprendi a como interagir com o MySQL, por exemplo.

Você não vai encontrar material profundo aqui nem muitas referências, mas pra resolver problemas pontuais: como conecto no banco de dados? como mando um e-mail? como parseio um XML? é bem direto ao ponto.

Ferramentas

assorted, hand tools, making, tools word, tools, logo, work equipment,  pictorial, letters, image letters | Pxfuel

Algumas ferramentas me ajudaram muito no processo. Segue então uma rápida descrição do que usei e que pode lhe ajudar bastante no aprendizado.

O próprio Python

Eu experimento muito com o REPL do Python. É lá que escrevo meus códigos rápidos para ver se funciona mesmo aquilo que quero fazer.

Isto tira o tempo que seria gasto em possíveis especulações motivadas por preguiça do fluxo escrever-compilar-executar.

Visual Studio Code

De forma automática minha primeira opção foi o Visual Studio Code. E me atendeu muito bem, por que tem suporte a depuração muito bom pro Python além do recurso de auto completar. Mas não foi minha IDE por muito tempo...

PyCharm

Baixar PyCharm: o IDE Python da JetBrains para desenvolvedores profissionais

Que coisa linda! PyCharm (o IntelliJ da JetBrains pra Python) tá me ajudando a aprender Python: especialmente no que diz respeito aos padrões de codificação, por que me expõe alertas na hora em que estou fugindo deste (nomes de variáveis, espaçamentos, etc).

Eu sei que existem plug-ins para o VS Code que te dão isto, mas o PyCharm já vêm com todos os recursos do Python prontos pra usar, como o próprio suporte ao venv e pip.

Vêm em duas versões: a gratuita (Community, a que estou usando) e a Professional (paga).

Virtual Environment (venv) e PIP

Logo que comecei a ler sobre como funcionava o carregamento de bibliotecas do Python ficou nítido pra mim que meu PC iria se tornar um caos em breve. O venv é a ferramenta que te permite isolar configurações de bibliotecas do Python, enquanto o pip é o responsável por baixar estas dependências.

Não são nem de longe soluções tão sofisticadas quanto as que temos no Java. Bem longe disto inclusive, o que torna a implantação de projetos (aviso: esta é a visão de um iniciante) algo mais complexo e com maior risco do que o que estamos acostumados com Java. Mas é o que tem pra hoje, e você precisa entender como eles operam pra não cair num inferno.

Resultados "finais"

python programming language | Learning logo, Python, Language logo

Este foi o planejamento desta minha imersão em Python. Como resultado final estou muito bem impressionado. Há bibliotecas pra tudo o que precisei, e muitas das coisas que escrevi na raça no projeto anterior do /dev/All encontrei pronto aqui, o que me fez entender (mais uma vez) por que tantas pessoas adoram a linguagem.

Minha produtividade com Python foi imensa, porém é importante lembrar que produtividade e qualidade são coisas diferentes, especialmente levando em consideração o fato de que sou um iniciante aqui. Em um dia estava pronto o novo Feed Hunter do /dev/All com quase todos os recursos que queríamos e com desempenho muito similar ao da primeira versão (é uma aplicação altamente concorrente, o que consegui fazer em Python sem problemas).

É importante um aviso sobre o tempo desta minha imersão: foi de dois dias e meio. Este curto tempo pra se tornar produtivo em Python acredito que esteja diretamente relacionado ao fato de eu ser um desenvolvedor experiente (mais de 20 anos), mas pode ser que em uma semana alguém com menos experiência consiga se tornar produtivo também.

Nem todos os livros foram lidos de cabo a rabo. Não li o Fluent Python inteiro, apenas algumas partes, pois o objetivo do livro é justamente te dar aprofundamento nos tópicos que apresenta.

Sobre o código que escrevi: me senti bastante aliviado por duas coisas:

  • Não estar escrevendo código orientado a objetos, mas algo mais funcional, mais simples e menos burocrático.
  • Ter me afastado um pouco da JVM, com a qual convivo desde 1996 (Java 1.1) :)

Por enquanto tenho apenas uma visão inicial sobre o ambiente de desenvolvimento e a linguagem, então diria que não passam de impressões. Passado um mês com mais experiência no meu caminho com Tensorflow e outros pequenos projetos que vou implementar conto a vocês o que achei. Até lá!

💖 💪 🙅 🚩
loboweissmann
Henrique Lobo Weissmann (Kico)

Posted on June 15, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related