Primeiro um aviso: eu realmente não sei se essa pergunta se encaixa neste site, mas ainda acho uma questão relevante não apenas para mim, mas para outras pessoas que são iniciantes. Se a pergunta puder ser aprimorada para caber aqui, aponte os comentários. Se não se encaixar, informe-me também e, se possível, informe onde isso pode ser discutido, porque não encontrei bons fóruns para isso.
Aprendi a programar em 2009 quando estudei PHP. Mais tarde, em 2012, mudei para C # e .NET. Enfim, codificar não é o problema, escrever algoritmos não é problema meu. Meu problema real é saber o que deve ser codificado para atingir um requisito e onde ele deve ser codificado.
A maioria dos cursos disponíveis na Web aborda como - como escrever código em um determinado idioma, como usar alguns conjuntos de APIs, etc. Esse não é o meu ponto aqui.
Nestes anos, li muito sobre várias coisas: análise e design orientados a objetos, padrões de design, design orientado a domínio e assim por diante. Entendo, por exemplo, os princípios do SOLID, algumas das principais idéias do DDD, como a necessidade de envolvimento de especialistas em domínio, o desenvolvimento de uma linguagem onipresente e assim por diante. Ousaria dizer que tenho uma base teórica pelo menos razoável.
Mas quando se trata de praticar, sinto que sou um desastre. Algum tempo atrás, eu precisava continuar o desenvolvimento de um sistema financeiro que já estava sendo desenvolvido por outra pessoa. É esse tipo de "sistema antigo" desenvolvido com C # e WinForms. Foi a primeira vez que escolhi um projeto com complexidade de domínio real, com muitas regras de negócios e assim por diante.
Confesso que, quando recebo os requisitos na maioria das vezes, penso "como isso pode ser feito?" - Eu não tenho idéia de como começar a trabalhar nos requisitos para descobrir o que deve ser feito. Minhas principais confusões, acredito, são o que devo codificar, que classes, interfaces e para onde vai cada parte da lógica, em qual classe cada coisa deve estar. O problema é que não sei por onde começar.
Na maioria das vezes, com muito pensamento, acabo com algumas idéias, mas nunca sei como julgar se minha ideia está correta ou não.
Quero dizer, não acho que seja uma falta de teoria, pois disse que li sobre um monte de coisas sobre arquitetura de software e orientação a objetos que me foram recomendadas, mas não ajudou muito a identificar o que deve ser feito na prática. .
Então, como posso aprender a realmente fazer design orientado a objetos? O que eu quero aprender é: dado que os requisitos sabem como começar a trabalhar neles em um processo que leva a descobrir o que precisa ser feito e aonde cada parte do código pertence. Como também posso aprender a julgar se minha ideia está correta ou não?
Acredito que explicar completamente isso como resposta aqui não seria possível. O que eu estou procurando, no entanto, que possa estar de acordo com o estilo do site, são respostas que dão uma visão geral e apontam algumas referências (livros, cursos on-line, etc.) que podem ser usadas para expandir as idéias e realmente aprender essas coisas.