Eterna dúvida sobre linguagens para back-end
Olá, eu tenho uma dúvida que por muito tempo fiquei tentando achar uma resposta definitiva.
Vou apresentar um pouco do meu background. Sou formado em Engenharia Elétrica e atuo desde 2020 como Gerente de Projetos em uma empresa de P&D (Pesquisa e Desenvolvimento) na área de Inteligência Artificial.
Na graduação eu aprendi o básico do básico de C++ e Python. No meu trabalho consegui aprender bem mais sobre C++ e Python. Nós éramos muito bons em desenvolver o software "bruto", digo nós porque a empresa é formada por 2 sócios que são meus amigos e todo o pessoal mais antigo é amigo também (embora certas horas a gente quer matar um ao outro rsrs).
Por software "bruto" eu me refiro ao software sem estar conectado a um banco de dados, não havia interface gráfica e nem nada do tipo. Basicamente era um executável que abria uma janela da OpenCV rodando o que o cliente queria com alguns desenhos que a gente fazia. A gente focava bastante em desenvolver para hardwares de baixo poder computacional, celulares, AI-Box (computadores dedicados) da Qualcomm e NVIDIA.
Mais pra frente, a gente pegou um projeto que forçou a gente a fazer esse software "bruto" se comunicar com um back-end e este back-end se comunicar com um front-end. Não sabia de nada, mas eu sabia que a linguagem para ambas as partes era basicamente JavaScript. Posteriormente descobri que Python possui uma "Micro-Framework" chamada Flask e, mais recentemente, descobrimos o FastAPI que é uma Framework bem bacana para trabalhar com back-end.
Durante essa etapa de aprendizagem, eu fui ler sobre o que era usado na indústria por grandes players. Eis que eu descobri outras linguagens, Go e Rust, além do JavaScript.
Percebi que existiam diversos pacotes para trabalhar com Web em cada linguagem:
- GoLang: Gin-Gonic
- Rust: Rocket
- Ruby: Rails
- Python: Flask/FastAPI
- C++: Crown e Drogon
- JavaScript: Express/Fastify, não tenho certeza mas talvez Next.js?
- Java com SpringBoot.
E diante de tudo isso eu fiz a famosa pergunta:
- O que é melhor usar?
Eu fui em busca da resposta para essa pergunta em diversos lugares, mas nunca havia algo muito conclusivo, pois cada um falava uma coisa diferente.
O que eu percebi, vendo principalmente os vídeos do Fabio Akita, é que tudo depende do contexto em que seu projeto se encontra e, além disso, como você estrutura seu back-end.
Atualmente, na onde eu trabalho desde 2019, a gente utiliza FastAPI por dois motivos:
- Facilidade de uso, teste e deploy no Heroku.
- Facilidade de desenvolver, pois 100% da empresa trabalha com Python.
Mas ainda não tivemos casos em que:
- há um grande número de usuários acessando simultaneamente.
- o processamento do back-end é bem intenso.
- há uma junção dos dois itens acima.
Embora eu não seja tão fã de Python devido ao Global Interpreter Lock (GIL), eu vejo que, talvez, uma possibilidade fosse utilizar Go/Rust/C++ para desenvolver um back-end onde eu precise usar de multi-threading para lidar com as várias requisições e meu processamento é intenso.
Mas uma das minhas perguntas são: será que só isso resolve? Eu acredito que deva existir alguma coisa que está faltando no meu conhecimento que eu não entenda ainda. Por exemplo: o que aconteceria se eu receber 30 requests simultâneos e meu back-end só processar 10, onde os outros 20 vão parar? Eu acredito que no lixo e meu back-end não vai processar eles. Ai vendo por esse lado, eu precisaria de um sistema de fila? Usar o Kafka/SQS da AWS?
Dado todo esse texto, minha pergunta é:
Em qual momento que a escolha da linguagem de programação se torna um diferencial na minha aplicação?