Eu acho que este é um sinal muito positivo de suas habilidades. É muito mais comum que as pessoas que têm dificuldade em criar o design 'melhor' de uma equipe sejam completamente incapazes de reconhecer por que outro design é melhor.
Você tem dois pontos fortes realmente surpreendentes (e surpreendentemente incomuns):
- Você é capaz de avaliar seus projetos em relação a outras pessoas objetivamente
- Você deseja e se esforça para otimizar seus projetos
Você tem apenas alguns anos e ainda tem um longo caminho a percorrer, mas com essa atitude você definitivamente chegará lá, apenas não desista; todos nós lidamos com contratempos mentais como este. Sempre que tenho uma chance, gosto de conectar os Princípios de Design (NÃO os mesmos que os padrões de design) e acho que este é um exemplo perfeito de onde eles são úteis. Estude-os e pratique aplicá-los em seus projetos. Antes que você perceba, deu mais um passo nesse sentido.
No final do dia, lembre-se, projetar é difícil. Estamos lidando com abstrações complexas de alto nível todos os dias, para criá-las do nada, para que funcionem bem e o fácil de usar pelos colegas é uma tarefa extremamente difícil. É preciso prática há anos .
Então, levante a cabeça e lembre-se: há um monte de gente por aí que não pode avaliar dois projetos e realmente reconhece um como preferível a outro, quão bem você acha que eles estão se dando bem na criação de bons projetos?
Edit:
'nother tip, depois de entender os princípios e praticar um pouco a aplicação deles, acho que há outra jóia de outra pergunta aqui falando sobre o valor de estudar uma variedade de idiomas que têm objetivos e regras diferentes:
Idealmente, todo programador deve conhecer um idioma de cada classe. O que você pode aprender:
- Uma linguagem mainstream OOP de tipo estático: Java, C # (usado principalmente em software corporativo) e C ++ (programação do sistema e aplicativos de desktop complexos)
- Uma linguagem OOP baseada em protótipo: Javascript (programação da Web do lado do cliente)
- Uma linguagem processual: C (software incorporado e programação do sistema)
- Uma linguagem funcional: Haskell, ML ou Lisp (linguagens funcionais são boas para softwares altamente paralelizados).
Uma linguagem de programação lógica (Prolog) provavelmente não é tão útil na indústria, sendo usada principalmente em pesquisas em IA.
Isso ajudará a ampliar a variedade de idéias que vêm à mente ao tentar projetar uma solução.