Penso che questo sia un segno molto positivo delle tue capacità. È molto più comune per le persone che hanno difficoltà a trovare il design "migliore" in un team di essere completamente incapaci di riconoscere perché un altro design è migliore.
Hai due punti di forza davvero straordinari (e sorprendentemente rari):
- Sei in grado di valutare obiettivamente i tuoi progetti contro gli altri
- Hai il desiderio e fai uno sforzo per rendere i tuoi progetti ottimali
Hai solo un paio d'anni e hai ancora molta strada da fare, ma con questo atteggiamento ci arriverai sicuramente, ma non arrenderti; ci occupiamo tutti di arretramenti mentali come questo. Ogni volta che ne ho la possibilità, mi piace collegare i Principi di progettazione (NON gli stessi dei modelli di progettazione) e penso che questo sia un esempio perfetto di dove sono utili. Studiali e fai pratica applicandoli nei tuoi progetti, prima di sapere che avrai fatto un altro passo avanti in questo senso.
Alla fine, ricorda, progettare è difficile. Ogni giorno abbiamo a che fare con astrazioni complesse di alto livello, per crearle dal nulla, farle funzionare bene e la facilità di utilizzo da parte dei colleghi è un compito estremamente difficile. Ci vuole pratica, per anni .
Quindi chin up e ricorda: ci sono un sacco di persone là fuori che non sono in grado di valutare due design e di riconoscerne uno come preferibile rispetto ad un altro, quanto pensi che stiano andando d'accordo nella creazione di buoni design?
Modifica:
'altro suggerimento, dopo aver approfondito i principi e aver praticato un po' la loro applicazione, penso che ci sia un'altra gemma da un'altra domanda qui che parla del valore di studiare una varietà di lingue che hanno scopi e regole diverse:
Idealmente, ogni programmatore dovrebbe conoscere una lingua di ogni classe. Cosa potresti imparare:
- Un linguaggio mainstream OOP tipizzato statico: Java, C # (utilizzato principalmente nel software aziendale) e C ++ (programmazione di sistema e applicazioni desktop complesse)
- Un linguaggio OOP basato su prototipo: Javascript (programmazione web lato client)
- Un linguaggio procedurale: C (software integrato e programmazione del sistema)
- Un linguaggio funzionale: Haskell, ML o Lisp (i linguaggi funzionali sono utili per software altamente parallelizzati).
Un linguaggio di programmazione logica (Prolog) probabilmente non è così utile nell'industria, essendo utilizzato principalmente nella ricerca nell'IA.
Ciò contribuirà ad ampliare la varietà di idee che vengono in mente quando si cerca di progettare una soluzione.