Creo que este es un signo muy positivo de tus habilidades. Es mucho más común que las personas que tienen dificultades para encontrar el "mejor" diseño en un equipo sean completamente incapaces de reconocer por qué otro diseño es mejor.
Tienes dos puntos fuertes realmente sorprendentes (y sorprendentemente poco comunes):
- Eres capaz de evaluar tus diseños frente a otros de manera objetiva
- Tienes el deseo y el esfuerzo para hacer que tus diseños sean óptimos
Solo llevas un par de años y tienes un largo camino por recorrer, pero con esta actitud definitivamente llegarás, simplemente no te rindas; Todos lidiamos con problemas mentales como este. Cada vez que tengo la oportunidad, me gusta conectar los Principios de diseño (NO lo mismo que los patrones de diseño) y creo que este es un ejemplo perfecto de dónde son útiles. Estudie y practique aplicarlos en sus diseños, lo hará antes de darse cuenta de que ha dado un paso más en este sentido.
Al final del día recuerda, diseñar es difícil. Estamos lidiando con complejas abstracciones de alto nivel todos los días, crearlas de la nada, hacer que funcionen bien y que los colegas puedan usarlas fácilmente es una tarea extremadamente difícil. Se necesita práctica, por años .
Así que anímate y recuerda: hay un montón de gente por ahí que no puede evaluar dos diseños y realmente reconoce uno como preferible sobre otro, ¿qué tan bien crees que se llevan bien en la creación de buenos diseños?
Editar:
'otro consejo, después de entender los principios y practicar un poco su aplicación, creo que hay otra joya de otra pregunta aquí que habla sobre el valor de estudiar una variedad de idiomas que tienen diferentes propósitos y reglas:
Idealmente, cada programador debe saber un idioma de cada clase. ¿Qué podrías aprender?
- Un lenguaje convencional de OOP de tipo estático: Java, C # (utilizado principalmente en software empresarial) y C ++ (programación del sistema y aplicaciones de escritorio complejas)
- Un lenguaje OOP basado en prototipos: Javascript (programación web del lado del cliente)
- Un lenguaje de procedimiento: C (software incorporado y programación del sistema)
- Un lenguaje funcional: Haskell, ML o Lisp (los lenguajes funcionales son buenos para software altamente paralelo).
Un lenguaje de programación lógica (Prolog) probablemente no sea tan útil en la industria, ya que se usa principalmente en investigación en IA.
Esto ayudará a ampliar la variedad de ideas que vienen a la mente al intentar diseñar una solución.