19 pontos por darjeeling 2025-09-23 | 3 comentários | Compartilhar no WhatsApp

Este é um resumo da keynote "O verdadeiro superpoder do Python", apresentada por Hynek Schlawack na PYCON UK 2025.

Antes de iniciar a apresentação, o palestrante apresentou brevemente sua trajetória, mencionando em especial a "amizade odiosa" que viveu ao longo de 14 anos de atuação na comunidade PyCon.


A transição do Python 2 para o 3 (The Python 2 to 3 Migration)

  • Contexto: o Python 3.0 foi lançado pela primeira vez em 2008 e não era destinado ao uso geral, mas sim a mostrar os objetivos do Python e coletar feedback. Seu uso passou a ser recomendado a partir do Python 3.2.
  • Principais mudanças:
    • Tratamento de strings: no Python 3, o tipo padrão de string mudou de bytes, mais amigável à máquina, para Unicode, mais amigável às pessoas.
    • Remoção de comportamentos implícitos: muitos comportamentos implícitos dos quais desenvolvedores dependiam sem querer no Python 2, como comparar strings com números, foram removidos. Isso causava bugs difíceis de depurar.
    • Melhoria na internacionalização: bases de código em Python 2 estavam cheias de erros de decodificação Unicode, e o Python 3 melhorou isso, tornando-se uma linguagem mais internacionalizada.
  • Dificuldades da transição:
    • Custo para a comunidade: portar todo o ecossistema para o Python 3 teve um custo enorme. Era preciso portar muito software, e cobertura de testes ainda não era algo comum na época.
    • Desenvolvimento de codebases híbridas: só em 2012, com o lançamento do Python 3.3, surgiu um consenso sobre como escrever codebases híbridas que rodassem tanto no Python 2 quanto no Python 3.
    • Moratória da linguagem: entre o Python 3.0 e o 3.3, quase nenhum recurso novo foi adicionado, o que reduziu o incentivo para os desenvolvedores migrarem para o Python 3.
    • Incerteza: não estava claro se o Python 3 se tornaria a versão dominante, e havia a possibilidade de fracassar, como aconteceu em casos como o Perl 6.
  • Por que o Python sobreviveu:
    • Entrada de novos usuários: o Python recebia mais novos usuários do que perdia, mesmo enquanto outras linguagens cresciam, como Go e Rust.
    • Comunidades científica e de engenharia: cientistas e engenheiros usam Python há muito tempo, e a partir de meados da década de 2010 sua popularidade explodiu em ciência de dados. Hoje, mais da metade dos usuários de Python o utilizam para exploração e processamento de dados.
    • Ecossistema existente: já existia um ecossistema forte de bibliotecas para computação científica, como NumPy.
    • Facilidade de interação com outras linguagens compiladas: o Python interage facilmente com outras linguagens compiladas e pode atuar como uma "cola" para conectar componentes de alto desempenho escritos em C, C++, Fortran e Rust.
    • Programação exploratória: o Python é muito adequado para programação exploratória, por meio do shell interativo (REPL) e de ferramentas como Jupyter Notebook.
    • Gradualidade (Graduality): o Python oferece diferentes níveis de rigor. O desenvolvedor pode trabalhar com flexibilidade na fase de experimentação e aumentar o rigor na produção usando ferramentas como type hints, linters e testes. Também é possível começar em um Jupyter Notebook e evoluir até um serviço web, por exemplo.

O verdadeiro superpoder do Python: gradualidade (Graduality)

  • O Python não apenas tem baixa barreira de entrada, como também oferece vários tetos altos, permitindo que os usuários o aproveitem com flexibilidade conforme a necessidade.
  • Os dois lados da gradualidade:
    • Lado positivo: o usuário pode escolher o nível de rigor e complexidade que deseja. Por exemplo, ao escrever scripts, pode programar livremente sem type hints; em aplicações grandes, pode aplicar checagem de tipos rigorosa.
    • Lado negativo: quando se adicionam casos especiais ou exceções a um sistema, isso pode trazer conveniência no curto prazo para usuários individuais, mas no longo prazo aumenta a complexidade geral do sistema. O ponto enfatizado é que "fácil nem sempre é simples", e isso aparece na forma como o Python faz packaging.

Exemplo do problema de packaging (Packaging Problem Example)

  • Há duas formas de estruturar aplicações Python: a abordagem 'ad hoc' e a abordagem de 'pacote'. A abordagem de pacote é mais bem definida e tem ferramentas embutidas, mas, por razões históricas, a abordagem ad hoc continua sendo suportada.
  • Isso dificulta entender problemas como sys.path, e recursos como pip install --user causam problemas no namespace global, tornando a depuração mais difícil.
  • Ferramentas novas como UV inicialmente suportavam apenas a abordagem de pacote, mas acabaram passando a suportar também projetos ad hoc, o que aumentou a complexidade.
  • Essas "armadilhas sedutoras" (attractive nuisance) oferecem conveniência no curto prazo, mas no longo prazo geram custos significativos para a comunidade.

Arquitetura de software (Software Architecture)

  • Ele aponta a falta de discussão sobre arquitetura de software na comunidade Python e diz que isso se deve à aversão a "padrões enterprise" e ao "medo de virar Java".
  • Necessidade: para construir e manter sistemas de software complexos, é importante discutir arquitetura de software para organizar e gerenciar módulos, camadas e interações.
  • Soluções:
    • A comunidade Python deve evitar encerrar conversas com termos como "pythonic" ou "unpythonic".
    • Deve aprender e aplicar boas práticas de outras comunidades de linguagem, como Domain-Driven Design.
    • Mais pessoas devem compartilhar conhecimento sobre arquitetura de software, criar conteúdo relacionado e focar em soluções.

Conclusão (Conclusion)

  • Não devemos ficar ansiosos em relação ao Python, e sim abraçar as várias formas de escrever Python.
  • Devemos experimentar novos estilos e ferramentas para expandir nossa forma de pensar.
  • Opções têm custo, então é preciso considerar com cuidado o impacto de certos recursos sobre toda a comunidade.
  • Junto com o trabalho de tornar o simples fácil, também devemos nos esforçar mais para tornar o complexo possível.
  • Precisamos conversar mais sobre arquitetura de software e questionar mentalidades dogmáticas para conduzir o Python a um futuro melhor.

Esta apresentação abrange o passado, o presente e o futuro da comunidade Python, destaca a verdadeira força da linguagem, a "gradualidade", e oferece insights profundos sobre os desafios enfrentados pela comunidade e as barreiras culturais que ela precisa superar.

Para assistir ao vídeo, consulte o link a seguir: https://youtu.be/gDvwRpl9erE

3 comentários

 
3ae3ae 2025-09-23

Se um gerenciador de pacotes moderno no estilo do uv virasse o padrão, parece que muita coisa ficaria bem mais prática, mas acho que vai ser difícil mesmo..

 
click 2025-09-23

No começo da graduação, por pouco o Python 2 ainda era mais dominante, mas lembro que, quando eu estava para me formar, todo mundo já tinha migrado para o Python 3.

 
meteorizer 2025-09-25

Se a pessoa trabalha com programação, mesmo que use principalmente Python, na maioria dos casos ela também lida com pelo menos uma outra linguagem.
Não consigo entender essa insistência em trazer recursos e características de outras linguagens, dizendo que o Python precisa melhorar.
Parece que ignoram o fato de que justamente essas limitações do Python também são parte do motivo pelo qual ele se tornou popular.
Aos poucos, o Python está ficando estranhamente mais complexo e mais exigente.
Parece que as vantagens de usar Python estão desaparecendo.
Em vez de tentar transformar Python em Java, não seria melhor simplesmente usar Java quando houver necessidade?
Se não for Java, ainda tem Kotlin e Scala.
Mesmo assim, acho que o Python não vai desaparecer.
Porque, na prática, quase não existe outra linguagem que permita programar de forma tão simples.