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

Django e o preço das mágicas

Após ter passado meses estudando Typescript e usando Node.js e Angular para construir projetos na empresa, eles me disseram: "você vai pro time de Python agora. Eles só usam Django lá, então você vai estudando aí já, porque só pretendemos usar isso daqui pra frente. Talvez eles usem um front independente com Vue, dependendo do projeto."

A stack não importa. Frameworks são só ferramentas pra realizar um trabalho complexo de forma simples. O que me pegou mesmo não foi o fato de ter que "jogar fora" meus estudos em padrão RESTful de projeto, boas práticas e sobre o ecossistema Node pra passar a usar uma linguagem diferente, em um framework diferente, com patterns diferentes. O que realmente me deixou na dúvida é: será que, visando uma carreira de fullstack, vale a pena se especializar em desenvolver projetos fullstack - isto é, não REST - com Django?


Fato é: o projeto fullstack realmente é mais simples e direto. Tudo fica mais fácil sem o REST. Há menos "burocracia". E o Django facilita tudo isso ainda mais não só por ser batteries included como por ter muitas "mágicas". Sem SQL: o lazy query por dot-lookup já faz isso AUTOMATICAMENTE por você; sem middlewares e auth: o Django já vem com tudo isso configurado AUTOMATICAMENTE por você; sem necessidade de rotas, transporte de JSON e typagem: o que você decidir exibir nos templates, o MVC vai deixar prontinho pra ser consumido, basta estar no Models. Não só isso, mas, verdade seja dita, o ecossistema python é muito mais maduro no backend que o ecossistema Node, que sempre acaba parecendo um pouco "Frankenstein" com tantas bibliotecas importadas e não tão maduras.


E a pergunta, de novo é: e isso vale a pena? Isso não é um tiro no pé ao longo prazo? Vou passar anos e me tornar sênior, mas não saber direito configurar um servidor ou fazer uma query SQL porque o Django sempre fez tudo isso por mim? Ou isso tudo é só coisa da minha cabeça?

Pergunta extra: dentro do modelo fullstack, vale mais a pena ir pra Next/Nuxt por estarem inseridos no ecossistema javascript (que, indiscutivelmente, é o rei da web), ou realmente ir pro Django, que por ser em python abre portas pra coisas fora da web?

Carregando publicação patrocinada...
2

No meu ponto de vista, você pode refletir seu raciocínio, para as linguagem de programção e seus objetivos.

Dependendo do contexto onde você esta esteja inserido no desenvolvimento de um projeto, você pode observar o que faria sentido para você ou no futuro.

Ex: Hoje estou trabalhando com desenvolvimento web.
Será que minha atual atividade está condizente com minhas atribuições?
Quero contruibuir mais?
Quero me desenvolver mais?
Pra onde o mercado está seguindo seu caminho, no que estou fazendo ou no que está se desenvolvendo.

Porque observendo seu ponto de vista, pra min, seria o mesmo que dizer que não devemos aprender linguagens de alto nível como Python, porque esta mesma linguagem já abstrai muito do trabalho de um programado na hora de trabalhar com sua principal ferramenta que seria o computador. Será que não deveriámos aprender 'C' já que é mais rápida em desempenho e nos obrigaria a conhecer mais a fundo nossa ferramenta de trabalho, o computador?

Em minha humilde opnião, seria melhor começar com ferramentas facilitadoras como Django para você se tornar minimamente produtivo o mais rápido possível, pois ele já é uma ferramenta de alto nível para desenvolvimento web, mas com o tempo aumentando meu nível de conhecimento indo para níveis mais avançados de conhecimento como ir montando e endendo o funcionamento de um software web como podemos fazer com o Node.js.

Claro, tomando cuidado para não se viciar nessa facilidade, onde por exemplo Laravel é tão alto nível que pode-se dizer que o programador pode até ser considerado um programador laravel, não um programador PHP com laravel. No entanto seguindo este caminho mais cedo ou mais tarde esse nível de conhecimento considerado razo cobrará seu preço. Quando as coisas apertarem quem se sobresairá será aquele que domina níveis mais baixos no quesito desenvolvimento de software.

1

Concordo plenamente com a analogia com C. Sempre fui da opinião de que se uma linguagem me permite fazer em 5 linhas o que outra faz em 15, eu vou dar prioridade pra primeira. A tecnologia avança com o tempo e sempre avança na direção da praticidade.

A questão é que aprendendo uma linguagem de alto nível você é capaz de usar QUALQUER outra linguagem de alto nível sem muito esforço. Paralelamente, aprendendo Node, sou capaz de usar qualquer framework e tech (dentro ou fora de javascript), porque o Node em si não faz nada por mim. Porém, aprendendo Django, acabo fazendo tudo do jeito do Django e ficaria "refém" da tech.

Acho que se tornar auto suficiente e independente de tech é a maior habilidade que o programador pode ter, porque isso torna ele adaptável a qualquer mudança de cenário, seja uma troca de cargo, empresa ou mesmo tendências de stack.

2

É verdade, concordo com você.

Mas como se diz na Máxima: Tudo sem suas vantágens e desvantágens.

Posso dar exemplo em dois cenários.
Ex:

  • No ponto de vista do profissional como desenvolvedor é perigoso ficar refém da tech, no entanto é importante o desenvolvedor perceber isso e tomar seus cuidados.

  • No ponto de vista da equipe é ótimo, porque image que você precise de mais um membro da equipe para o desenvolvimento, seria um pouco mais facil e rápido tornar esse novo membro produtivo pois seguimos o 'Padrão' Django de desenvolvimente, em tese não precisarios treiná-lo para ele saber como nosso software funciona, ou ele encontra onde ficam e como as coisas são estruturadas.

1

Siiim, exatamente. Pra uma empresa que quer entregar muitos projetos em pouco tempo padronizar a equipe em Django faz total sentido (o que a propósito é exatamente o cenário da minha empresa). O desenvolvedor só tem que ser consciente e se lembrar de que um dia pode não estar mais naquela empresa e sempre se perguntar: "se um dia eu sair daqui, vou estar competitivo no mercado pra conseguir assumir diferentes projetos?"

É como você disse, tudo tem suas desvantagens. Muitos vão chamar esse ponto de vista de querer ser pato por não se especializar em nada enquanto outros vão achar valor em ser capaz de assumir diversos projetos com facilidade.

Acho que no final a melhor escolha é não ter tech de estimação e saber ser aberto e experimentar. Saber usar Django se precisar de entregas rápidas, mas ser capaz de integrar uma equipe como um fullstack ajudando desde a ponta do CSS até a ponta do SQL.

1

Na impede você de colocar em prática coisas mais avançadas junto ao Django. Python também é orientado a objetos (JavaScript não é, ele meio que força a barra) e funcional. Tem assíncronismo. Você só estará usando outra linguagem.

Você pode colocar regras de negócios fora do Django. Assim, caso tu fique enjoado de Django, você não perde tudo porque deixou tudo acoplado ao Django. Toddos os projetos que vi, são assim e por isso sofrem com problemas para refatorar e migrar parte essencial para algo mais parrudo.

Django é só um framework. Você terá que encarar coisas como Redis, RabbitMQ, Docker e integrar ao Django.

Sobre a parte de Full-stack... Django trabalha com Template. É bem útil de início, mas quando você precisa de uma interface mais bonita, rápida e responsiva, falha miseravelmente. Tem soluções com HTMX + AlpineJS pra manter essa característica de template, mas resolvendo estes problemas. Mas em geral o pessoal prefere colocar um React/Vue no front, por ter mais conteúdo disponível. Então você tem que expor os dados via API e largar o template.

1

Eu concordo que o Django facilita muito a vida do desenvolvedor, muitas coisas já vem prontas para o uso.
Mas posso dizer que ele pode se tornar tão complexo quanto o projeto que você esteja desenvolvendo.
Mesmo não sendo necessário o conhecimento a fundo do SQL para projetos de pequeno e médio porte, tive que aprender sim SQL para projetos maiores. O Django faz tudo por você, mas vai por mim, em algum momento ou outro você terá que saber como as coisas funcionam por baixo dos panos, seja com FBV ou CBV.
Quando comecei a usar o Django fiz vários projetos com TDD e FBV, isso me deu uma maior clareza de como o framework funciona.
Bem, não tenho o que reclamar do Django, em termos de escala e segurança ele é muito maduro.

1

Muuuito obrigado pelo insight. Só por curiosidade, estes projetos que costumou fazer foram usando django apenas como back com DRF ou construindo a aplicação fullstack? Caso tenha sido a segunda opção, sentiu alguma limitação da framework em relação a isso e pensou que seria melhor segregar em dois projetos com um front dedicado?

1

Faço das duas formas.
Uso mais DRF quando o cliente tem a intensão de ter não somente um software web, mas um app mobile também por exemplo.
Quando se trata de um software web ou um site apenas, uso muitas vezes o Django puro e faço o front com HTLM, CSS e JS puro, e nunca tive problemas de integração. As vezes também uso Ajax e asyncio, e da mesma forma, sem problemas de integração.

1

Cara, não sei muito ainda pois estou iniciando no universo Python. Estou na metade do meu curso.
Porém foi muito interessante ler tudo que escreveu, pois abriu algumas duvidas a mais na minha mente, o que não é ruim, pois me preocupo pra qual área seguir. E com tantas coisas sendo feitas de forma automatica, não ficaria para trás em algum aprendizado!? Fico nessa dúvida.
Mas enfim, acho que é uma dúvida extremamente pertinente e gostaria de ouvir mais pessoas sobre o assunto!