Executando verificação de segurança...
4

Falar q não presta é forte demais, mas tb não gosto.

Sobre ponto de performance em específico: Concordo, geralmente na maioria dos casos de uso, não são os milhões de TPS a mais q um .net da vida tem nos benchmarks que farão a diferença real.

Geralmente a maior parte das lentidão de software corporativo estão no tempo de espera de serviços externos (dbs, cache, apis, arquivos, etc), do q em processamento bruto. Embora performance de Python me incomode, não uso isso como muleta pra não usar.

Sobre "capacidade de se conectar com tudo que você precisa para construir soluções completas."
Isso é o básico, qualquer linguagem q se preze oferece isso. Sem isso já estariam mortas de verdade. Não considero isso um ponto positivo válido na análise.

Sobre popularidade
Popular sim, mas popularidade não siginifica ser bom, significa apenas que caiu no gosto popular - se as pessoas são qualificadas pra analisar se é bom, ou se estão apenas seguindo a manada, é outra história. Muita coisa ruim é popular - músicas, filmes, programas de tv, e tecnologias tb.

Mas acho q a simplicidade de criar um script, instalar pacotes e executar; aliado a baixa verbosidade de codificação, foram fatores importantes, válidos e realmente bons para o aumento da popularidade.

Issi colaborou pra ser uma porta de entrada no ensino de programação, e contribuiu muito pra popularidade.

Agora, meus pontos sobre não gostar
Venho de paradigmas orientado a objetos e tipagens fortes (C# como principal lang). Meu primeiro contato com Python foi por volta de 2010 pra aprendizado, fiz uns cursos, e na época não gostei. Depois no decorrer da vida, só pra coisas simples, como lambas, pequenas automações e pipelines. Agora recentemente começei um projeto Python devido a frameworks de Gen IA onde ele está realmente a frente das outras langs. Dessa vez criando um sistema corporativo, com perspectiva de uso por 5k de users únicos por dia, e 20k mensal em média. Minha opinião atualizada: Achei uma experiência de desenvolvimento horrível.

Meus pontos:

  • Tipagem fraca pode ser bom pra início, mas se torna facilmente um incômodo (mesma treta do js). Problemas q pegariamos em tempo de build, só aparecem em tempo de execução ou no teste automatizado se cobrir tudo (q é muito trampo). Isso força mais nossa cognição no dia a dia.
  • Intellisense infere muita coisa q não funciona devido ao problema de tipagem, e novamente, só vemos em tempo de execução.
    • Exemplo: Um método q recebe um argumento tipado, mas um dos locais q chama manda um dict por engano, e outro local manda o objeto. Isso funciona, mas dependendo das funções utilizadas internamente, pode dar erro.
  • Mutação da estrutura de classes: Isso de permitir definir/excluir atributos dinamicamente no objetos além dos definidos na classe é um ponto periogoso para desorganização.
  • Lentidão para startup de projeto em debug: lentidão pra iniciar o projeto FastAPI em modo debug é irritante no dia a dia - Não sei se é coisa do meu setup, mas percebi a lentidão a partir do momento q começei a usar fastapi.
  • Muito dos benefícios q muita gente exalta, não passam de wrappers em cima de outros projetos compilados nativamente para o SO; e, q na maioria dos casos tb possuem wrappers para outras linguagens (ex.: tesseract para ocr, opencv para imagens, sphinix para audio, etc..). Sendo, os ports das langs fortemente tipadas mais intuivos de usar.
  • Muito sobre a baixa verbosidade tb exaltada como benefício, no fim são design de classes e libraries, não méritos sintático da linguagem.
  • Embora performance bruta não seja meu principal fator, o mal suporte a mutli-tread, não aproveitando arquitetura de cpu multi-core de hoje em dia, é um forte ponto contra. Nao digo nem pra um processamento bruto de um job pesado em cpu, mas para performace várias pequenas coisas paralelas em ambientes de alta concorrência. Isso pode afetar bem o workload.
  • Outra coisa q me incomoda bastante é o gerenciador de dependências muito fraco. O pip install adiciona pacotes ao ambiente global, e não ao projeto. Então o dev desavisado atualiza um pacote em outro projeto, e tem impacto global. Depois esquece de atualizar o requerements.txt. Tb não há uma boa experiência para salvar novos pacotes no requerements.txt. Sei dos ambientes virtuais do pyenv/venv pra resolver conflitos, mas em geral, é uma estrutura arcaica, e que demanda outro aprendizado extra (aqui aquela facilidade inicial do contato com a linguagem, começa a se complicar). Outros gerenciadores de pacotes e build como nuget, mavem, gradle já resolvem de forma melhor e intuitiva.
  • Mal planejamento de retrocompatibilidade: Quem é mais velho provavelmente tem um rancor guardado das breaking changes das versões 2.7 pra 3.x kkkk.
  • Também senti falta de "syntax sugars" como:
    • operadores ternários (fáceis de concatenar várias operações)
    • colaescing operator
    • pattern match um pouco verboso pra condições complexas.

E, pra falar uma coisa boa q gostei: Curti o conceito de "union" pra informar que um argumento pode assumir N tipos de dados diferentes. E, estou pensando se considero falta de overload de métodos como algo ruim, ou se union vai me fazer não achar isso incômodo.

Pra finalizar: Como dev, gosto de contratos fortes, explícitos, q deixam claro o propósito do desenvolvimento, e evitam desvios acidentais. Digitar mais código por isso não é um malefício na minha filosofia - e, apenas se muletar em cima de verbosidade de código pra dar hate na lang, tb é apenas uma visão míope da situação.

#paz kkkk

Carregando publicação patrocinada...
1

o pattern matching do python é absurdamente poderoso, você consegue validar absolutamente qualquer coisa que você pode imaginar.

o python possui operador ternário: x if condition else y. Se tu tá usando ternário pra algo além de uma coisa ou outra, você está errado e não deveria estar fazendo isso.

colaescing operator realmente faz falta.

Mal planejamento de retrocompatibilidade: É isso que se chama breaking changes. quando você evolui da 2.x.x para 3.x.x as mudanças quebram a compatibilidade, manja? é assim que funciona kkkkk, qual a surpresa?

Sobre o gerenciador de pacotes. Se te incomoda use outro gerenciador, o python tem vários. pip serve tranquilamente pra projetos pequenos/médios. Só saber usar.

Sobre o python não ser verdadeiramente multi-thread, esse assunto ja é antigo e o python está mudando, o problema é que as libs foram criadas usando esse bloqueio do interpretador para deixar seguro o acesso à shared states. Se fosse simples só desligar o bloqueio, isso teria sido feito à anos.

baixa verbosidade: não entendi se isso é uma critica ou um elogio

Ninguém, absolutamente ninguém está surpreso que o python é um frontend de outras linguagens.

Lentidão de startup, tu vai ter isso em absolutamente qualquer projeto de qualquer linguagem. Compila um projeto em rust, go, etc. Vai ser lento igual ou até mais. A gente até pode discutir sobre o startup em ambientes produtivos, mas se tu precisa construir e destruir o ambiente na sua maquina, tu vai ter um baita trabalho com qualquer linguagem. Até pode ser mais rápido em alguma linguagem compilada, porém eu duvido que no mesmo tempo gasto, tu consiga ser mais produtivo do que em python.(A não ser que tu seja um idoso com 50 anos de C).

O python tem varios type checkers pra você usar, tu deveria dar uma estudada. O sistema de tipagens do python está ficando cada vez mais robusto. Se tu precisa daquelas mensagens visuais que um lsp mostra no editor quando há incompatibilidade de tipos, tu consegue isso facilmente em python.

Mutação da estrutura de classes: ou você sabe o que está fazendo ou você não sabe. É assim que o python pensa.

pra finalizar a questão da tipagem: tu quer fazer um script simples? não coloque tipos. quer fazer um sistema mais complexos? coloque tipos. Simples assim.

1

Muito dos benefícios q muita gente exalta, não passam de wrappers em cima de outros projetos compilados nativamente para o SO; e, q na maioria dos casos tb possuem wrappers para outras linguagens (ex.: tesseract para ocr, opencv para imagens, sphinix para audio, etc..). Sendo, os ports das langs fortemente tipadas mais intuivos de usar.

Muito obrigado, eu esta procurando por isso!

Python é magnitudes de diferença em questão de desempenho comparado a linguagens compiladas, a velocidade do Python é na verdade c/c++ com bindings para o CPython.

A minha visão sobre Python é:
Desenvolvedores C/C++ cansaram da verbosidade e complexidade para atividades simples.
Eles criaram uma casca sobre toda essa complexidade, o Python.
Agora eles continuam programando em C/C++ e portam suas libs para Python.
Assim o código cliente é menos tedioso e a lógica negocial complexa é escrita e compreendida muito mais facilmente.
O desempenho está em C/C++, a regra negocial em Python e todos viveram felizes para sempre.

Dito isso quem usa Python achando que é o santo graal e quer fazer um sistema completo nele tá dando um tiro no próprio pé.

1