Eu vejo alguns problemas sérios com esta pergunta. Vamos começar.
Como parar de perder tempo projetando arquitetura
Esta questão é bastante carregada. Além disso, você não cria arquitetura. Você arquiteta . Arquitetura e design são atividades complementares e relacionadas, mas não são as mesmas, mesmo que possam se sobrepor.
Da mesma forma, da mesma maneira que é possível perder tempo fazendo arquitetura (arquitetando demais), você também pode perder tempo projetando e codificando demais (codificando coisas de uma maneira muito mais complexa do que o necessário ou falhando em código para as coisas necessárias.)
A arquitetura adequada visa evitar esse desperdício na codificação. Isso é feito limitando, restringindo e documentando as maneiras possíveis de um sistema complexo ser 1) projetado, 2) codificado e testado, 3) entregue, 4) mantido, 5) recuperar-se de falhas e 6) finalmente desativado.
Minha experiência foi que as pessoas que apenas gostam de codificar, simplesmente codificam sem pensar em como um sistema deve operar e manter a longo prazo, passando para a próxima batata quente, deixando uma alma pobre para manter um golem feio.
Mas eu discordo ...
É o seguinte: para sistemas simples o suficiente, a arquitetura é auto-evidente e emana de boas práticas de design e implementação.
É apenas para sistemas grandes que envolvem um número bastante grande de pessoas ou software em nível de sistema que faz coisas muito complexas que exigem arquitetura explícita.
Eu me formei recentemente na uni e comecei a trabalhar como programador. Não acho tão difícil resolver problemas "técnicos" ou depurar, coisas que eu diria que têm uma solução.
Esse é o requisito mínimo para esta profissão e fico feliz que você não tenha problemas em fazê-la (eu ficaria preocupado se você o fizesse).
Mas parece haver uma classe de problemas que não têm uma solução
Esses são os pães e a manteiga de nossa profissão, o tipo de problemas pelos quais os empregadores estão dispostos a pagar nossos salários (normalmente) muito acima da média.
De fato, os problemas que vale a pena resolver são aqueles que podem ter mais de uma solução. Problemas do mundo real, eles são assim. E o mundo exige que a nossa experiência, como desenvolvedores de software, tenha vantagens e desvantagens aceitáveis.
- coisas como arquitetura de software.
A arquitetura das coisas é uma característica inevitável do sistema complexo, seja virtual / software ou no mundo concreto. Todo sistema que opera, que recebe entrada e produz saída, será complexo e terá uma arquitetura.
Quando desenvolvemos software para esses sistemas (um sistema bancário, um sistema de monitoramento de energia, um sistema de venda de ingressos etc.), nosso objetivo é produzir um software que imite as funções e os requisitos desse sistema.
Nós simplesmente não podemos simplesmente improvisar e codificá-lo no estilo cowboy. Precisamos de algum tipo de arquitetura. Isso é particularmente verdadeiro se o projeto exigir dezenas de engenheiros, se não mais.
Essas coisas me incomodam e me causam grande angústia.
Está bem. Não é um assunto fácil de aprender ou ensinar, não sem muita prática.
Passo horas e horas tentando decidir como "arquitetar" meus programas e sistemas. Por exemplo, divido essa lógica em 1 ou 2 classes, como nomeio as classes, devo tornar isso privado ou público, etc. Esses tipos de perguntas ocupam muito do meu tempo e isso me frustra bastante. Eu só quero criar o programa, a arquitetura seja condenada.
Infelizmente, isso não é arquitetura de software.
Nem sequer é design, mas apenas codificação. Vou fornecer algumas sugestões na parte inferior deste post.
Como posso passar mais rapidamente a fase de arquitetura e entrar na fase de codificação e depuração, da qual gosto ?
Estou tendo dificuldades para encontrar uma maneira de responder a isso, pois é bastante emocional.
Estamos tentando fazer um trabalho, ou estamos apenas tentando aproveitar a prática? É ótimo quando ambos são um e o mesmo, mas na vida real, muitas vezes eles não são.
É ótimo fazer coisas que gostamos, mas em uma profissão tão complexa como a nossa, focar apenas no que gostamos, que não é condutivo para ter uma carreira frutífera.
Você não progride, não amadurece ou adquire novos conhecimentos.
Há esse ditado no Exército: "abrace a merda".
Outras frases têm conselhos semelhantes. "Se não chupar, não vale a pena" e meu favorito: "Se chupar (e é importante), faça até parar de chupar".
Minhas recomendações:
Parece-me que você ainda está lutando para entender as diferenças entre
codificação (como codificar suas classes, módulos ou não, convenções de nomenclatura, visibilidade de acesso, escopo etc.),
design (quantas camadas, front-end / back-end / db, como cada um se comunica, o que vai aonde) e as decisões implícitas de arquitetura que resultam do design de sistemas simples,
arquitetura (como encontrada em sistemas complexos que exigem milhares, senão centenas de milhares de horas de trabalho).
Então, eu sugiro que você mergulhe profundamente no primeiro assunto (codificação) para levá-lo ao próximo nível.
Código Limpo
O "Código Limpo " de Robert "Tio Bob" Martin é um bom lugar para começar.
Coesão de software
Além disso, sugiro que você se familiarize com uma métrica específica de software orientada a objetos chamada LCOM ou melhor, LCOM4.
Pode ser um pouco matemático e não é à prova de balas, mas seu objetivo deve ser o de entender e detectar empiricamente (ou usar um olho ocular, se desejar) se uma classe é coesa ou se não tem coesão.
http://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
Princípios de Software
Isso está intimamente relacionado com o "Princípio da responsabilidade única" ou SRY, com o qual todos devemos estar familiarizados. O SRY é um dos 5 "SÓLIDOS" com os quais todos precisamos estar familiarizados para nos tornarmos proficientes em codificação.
À medida que avançamos nos princípios do SOLID, também precisamos nos familiarizar com os princípios "GRASP" , que governam, ou melhor, orientam como codificamos as classes.
Livros adicionais
Por fim, também sugiro o seguinte:
"Refatoração", de Martin Fowler e Ken Beck, seria o próximo livro que eu havia lido nesta lista.
"Design by Contract, by Example", de Richard Mitchell, Jim McKim e Bertrand Meyer (o mais recente da fama de Eiffel.) Este livro está esgotado, mas você pode encontrar cópias usadas e baratas na Amazon.
Com isso, você deve ter uma boa noção de como iniciar a codificação e o design e, com a prática, mover e dominar (ou pelo menos entender) a arquitetura de software.
Tenho certeza de que haverá outros profissionais que adicionarão, subtrairão ou contestarão essas sugestões. Eles apresentarão outras sugestões, provavelmente validadas por sua própria experiência.
Tudo o que posso dizer é isso - não há atalhos.
Muito bem sucedida.