Dúvida: Overengineering em .NET
Gostaria de entender se é uma percepção minha ou se realmente é algo que todos sofrem...
Estou iniciando e decidi iniciar com .NET, o problema é que todo conteúdo de projeto que encontro está absurdamente lotado de arquiteturas e complexidades que não parecem ser muito condizentes com os projetos pequenos.
Gostaria também de entender a partir de qual momento é bom começar a se apegar nessas questões de arquiteturas.
Obrigado
Sim, isso acontece muito e não é só .NET.
Não costumo trabalhar com sites, mas se preciso entregar um simples, eu procuro algo para começar já perto do que o cliente precisa e nunca acho um simples em .NET. Acho em PHP... antigo, cheio de buracos de segurança que preciso consertar, mas é quase o que preciso. Note que eu não faria isso em algo mais complexo.
Em PHP também tem uma onda de complexidade cada vez maior, a diferença é que cada vez mais o que você encontra é complexo e os exemplos antigos não eram. Houve uma inversão, o que mostra muito sobre o programador PHP.
PHP é uma das 3 linguagens que mais trabalhei na vida, tenho amigos grandes programadores PHP que concordam que estão acabando com o PHP com isso. Ao contrário da crença popular PHP hoje é pior que era antes, apesar de ter algumas melhorias. Se for para fazer em PHP complexo como fazem, Java ou C# é muito melhor. Não à toa o Facebook criou Hack porque eles precisavam de algo mais complexo e tinham que aproveitar a base me PHP, então transformaram PHP em C# (quem cuida de Hack hoje é quem fez boa parte do trabalho de C#). Pseudo programadores de PHP vão ler e odiar isso, vão xingar a minha mãe, vão espernear no chão, porque eles entraram na área assim. Os bons programadores sabem do que estou falando.
Em C# acontece o contrário, era tudo complexo, mas hoje tem como fazer mais simples, só que ainda quase ninguém faz, mas já está aparecendo alguns exemplos pelo menos em parte mais simples. Por exemplo, em .NET, assim como em outras tecnologias, estão abandonando o MVC (ele poderá ser útil em alguns poucos cenários bem específicos) para usar coisas mais simples como Razor Pages ou Minimal APIs, mas faltam exemplos, gente falando delas.
Em PHP nasceu simples, agora as pessoas fazem tudo MVC porque parece que são melhores programadores assim, quando eles estão indo na contramão do mercado, mas eles aprendem tudo na base da gambiarra, suas referências são influencers sem compromisso algum com o sucesso dos seus seguidores.
Eu adoro C# e hoje acho o .NET bem aceitável (para melhorar de vez teria que quebrar compatibilidade, mas quase todos os problemas foram resolvidos, alguns estão à caminho que eu sei), mas admito que para fazer o simples está faltando algum trabalho. Tem melhorado muito, mas quase sempre você terá que fazer bibliotecas simplificadoras. É o preço que se paga pelo poder. Mas o que mais falta mesmo é ter influencers batendo na tecla da simplicidade, fornecendo projetos base mais simples. É preciso explorar as novidades da linguagem, quase ninguém faz, mas tem recursos que podem automatizar algumas coisas complexas, abstrair outras.
Eu sempre falo que a maioria dos projetos não precisa de certas coisas que as pessoas tanto falam. A pessoa quer fazer a tal "Arquitetura Limpa" que de limpa não tem nada, e ela não sabe nem porque está fazendo aquilo, está aceitando a especulação de alguém que nem conhece seu projeto. O mesmo vale para o código limpo, tudo isso tem serventia, inclui algum aprendizado interessante, mas a maioria aplica onde não precisa e complica o que deveria ser simples. SOLID então, abuso de design patterns, só para pôr no currículo, fazer microsserviços que deveria ser algo útil em menos de 0,1% dos projetos. Fazer algo simples não é a mesma coisa que fazer algo ruim, pelo contrário. Várias dicas famosas de escrever código fácil de manutenção pioram a manutenção, até porque foram inventadas por quem nunca deu manutenção, quem fez centenas de projetos em alguns anos. Eu fiz poucos em décadas, eu sei o que é dar manutenção, o que as pessoas precisam ou não no futuro (mesmo assim, bem mais ou menos, porque o futuro é mais imprevisível do que as pessoas pensam). Você não deve pagar por algo que não é útil.
As pessoas precisam parar de programar baseando-se em crenças. E precisam parar de seguir quem as vende para você. A computação quase não tem assunto novo, então ficam inventando coisas, dão exposição para cosias até úteis, mas para o 1%, não para o seu projeto e você acha que não pode ficar de fora.
Aí vem a frase que sempre repito, você aprende errado, treina o erro, faz tanto ele que não consegue parar de defendê-lo e depois ensina errado para outra pessoa.
É bom ver que algumas pessoas notam que tem algo cheirando mal, mesmo que ela ainda não tenha todo o estudo para saber o porquê.
Tem gente que estuda arquitetura antes de saber um if
corretamente. É sério. Muita gente. Arquitetura é a simples, se precisar de uma complexa vai aprender em um time experiente como fazer isso, você não vai arrumar emprego porque sabe fazer o que tá cheio de gente mais experiente que você. Aí torço para entrar em um time bom e que não faz arquiteturas complexas só para pôr no currículo, porque cai no que eu já falei acima.
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
S2
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).
Sim, isso é muito comum na comunidade .NET, sempre está lotada de padrões de projetos que muitas vezes deixa a aplicação super complexa, quando na verdade ela poderia ser muito mais simples... Vejo isso com menos frequência em outras plataformas, como node por exemplo... Mas pensando em forma de estudo isso irá te diferenciar dos demais, caso um dia faça uma transição de stack :)
Sim e Não, isso não é comum da linguagem mas sim do desenvolvedor. Você pode criar um site simples em .NET, embora não seja o adequado pois ele realmente não é feito pra isso, tem outras teclogias mais adequadas, assim como o .NET é mais adequados para certos projetos. Com o tempo você vai entender o que é mais adequado para o que. Eu por exemplo, se vou projetar uma API viu direto no Node, ele é perfeito pra isso, se vou criar um site simples, que vai mais servir conteudo estatico ou dinamico, vou direto ao Astro que é extremamente veloz. É voce que vai definir o que serve para cada proojeto e isso só vem com a experiencia. Por enquanto foca no .NET e mais pra frente vai abrindo o leque.
Eu vejo muito disso, principalmente em alguns tutoriais, o que eu recomendo é partir pra essa parada de arquitetura, principalmente quando você já tiver dominado muito bem orientação a objetos, a maioria das arquieteturas usam os conceitos dela e fica mais fácil pra você usar e entender o que vai servir pra que, mas de começo, foca no código, resolver o problema e aprender sobre a linguagem.
Como desenvolvedor .NET posso dizer que realmente, a maioria dos tutoriais são muito complexos e com muitos conceitos de arquitetura, isso porque o .NET é usado em muitos projetos bancários, de alta escala e até legado, um dos principais motivos da Microsoft ter criado o .NET era para não usar mais o Java, que na epoca ja era gigante e robusto, uma dica que posso dar é, não precisa seguir todos os padrões de arquitetura em todo projeto, todo projeto tem seus requisitos, se seu projeto é apenas um CRUD com autenticação e é preciso entregar pro cliente, faça o básico bem feito e que funciona, crie esse senso crítico de entender o que precisa e o que não precisa em um projeto
Creio que a maior parte já foi respondida pelo maniero e outros, vou falar de "stacks" por que .NET e C# são ligados assim como Node e JavaScript, assim por diante. Muito do que fazemos é utilizar de templates, bibliotecas e frameworks para ajudar no desenvolvimento, e uma aplicação comercial de verdade tem muita coisa pra se preocupar, desde a performance e segurança até monitoramento, ciclo de vida, suporte ao usuário e muitas outras coisas. Em .NET graças ao masoquismo de algumas bibliotecas e através da orientação à objetos, coisas como segurança, logging, tipagem e outras coisas são super simplificadas ao usuário, mas por um custo - seguir a arquitetura deles. Um exemplo disso para JavaScript é o Next.js que facilita o uso de rotas baseadas em arquivo (File-based routing in Next.js).
Você pode seguir arquiteturas muito simples em .NET, nas últimas versões como Minimal APIs nem parece os Controllers MVC de antigamente, mas essas super arquiteturas são "apenas" uma receita para facilitar a implementação de novas features e/ou correções.
Recomendo a leitura de uma forma um pouco menos "técnica" de organizar seus projetos, baseada nas funcionalidades do sistema e não em Controllers, Data e outros
Boa tarde, Bruo! Ótima questão, .Net e Java são linguagens enterprise, são feitas e pensadas em aplicações gigantes para corporações, super ricas para tralhar com arquiteturas avançadas.
Dito isto, também podemos fazer coisas simples nestas tecnologias, mas a cultura e padrões envoltos nela puxam para arquiteturas corporativas, mas podemos ser pro-ativos em entender qual padão e qual arquitetura usar em casa situação, então podemos tambem usar .Net ou Java para fazer sofwtares mais simples.