Creo que esta es una señal muy positiva de tus habilidades. Es mucho más común que las personas que tienen dificultades para encontrar el diseño "mejor" en un equipo sean completamente incapaces de reconocer por qué otro diseño es mejor.
Tienes dos fortalezas realmente grandes (y sorprendentemente poco comunes) a tu favor:
- Eres capaz de evaluar tus diseños contra otros objetivamente
- Tienes el deseo y el esfuerzo de hacer que tus diseños sean óptimos
Tienes solo un par de años y tienes un largo camino por recorrer, pero con esta actitud definitivamente llegarás, simplemente no te rindas; Todos tratamos con retrocesos mentales como este. Cada vez que tengo la oportunidad, me gusta conectar Principios de diseño (NO es lo mismo que los patrones de diseño ) y creo que este es un ejemplo perfecto de dónde son útiles. Estudíalos y practícalos aplicándolos en tus diseños; antes de que te des cuenta, habrás dado un paso más en este sentido.
Al final del día recuerda, diseñar es difícil. Nos enfrentamos a abstracciones complejas de alto nivel todos los días, para crearlas desde el aire, hacer que funcionen bien y que la tarea de los colegas sea fácil de usar. Es una tarea extremadamente difícil. Lleva práctica, por años .
Entonces, levante la cabeza y recuerde: hay un grupo de personas que no pueden evaluar dos diseños y en realidad reconocen uno como preferible a otro, ¿qué tan bien cree que se están llevando bien en la creación de buenos diseños?
Editar:
'Para más información, después de entender los principios y practicar un poco su aplicación, creo que hay otra joya de otra pregunta que habla del valor de estudiar una variedad de idiomas que tienen diferentes propósitos y reglas:
Idealmente, todos los programadores deben conocer un lenguaje de cada clase. ¿Qué podrías aprender?
- Un lenguaje convencional 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 el software altamente paralelizado).
Un lenguaje de programación lógico (Prolog) probablemente no sea tan útil en la industria, ya que se utiliza 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.