Por el aspecto de la pregunta de revisión de código que hizo, está en la etapa de exagerar. Creo que es un problema bastante común entre las personas que descubren la importancia del buen diseño.
En realidad, es un paso natural y probablemente incluso necesario con cualquier habilidad que elijas. A medida que comienza a aprender algo, cuanto más avance en el conocimiento de una habilidad y más la aplique, mejores serán sus resultados y parecerá que se dirige hacia el dominio. El problema es que su nuevo objetivo no se convierte en la calidad de sus resultados, sino en la cantidad de conocimiento que ha acumulado sobre su habilidad.
El verdadero dominio de una habilidad implica la comprensión de cuándo usarla y cuándo no. El uso excesivo de esa habilidad es probablemente la única forma de desarrollar tal comprensión. Claro, puedes leer sobre esto, pero leer no sustituye la experiencia.
Por un lado, leer sobre patrones de diseño es un mal comienzo en mi humilde opinión. Es mejor leer sobre los principios de diseño de OO, como SOLID y GRASP . Después de familiarizarse con ellos, el estudio de patrones de diseño comunes es una buena idea, porque verá cómo esos principios se pueden aplicar para formar expresiones idiomáticas concretas.
Se afirma que cuando surgen patrones en el uso de un lenguaje, el lenguaje carece de una característica. Si bien esta afirmación es muy radical, hay mucha verdad en ella. Por lo tanto, sugeriría que mire y juegue con otros idiomas para obtener una mejor comprensión de los conceptos que está buscando emplear, y también para aprender sobre nuevos conceptos. Una lista corta sería Squeak, Ruby y Lisp.
En cuanto a List, mi recomendación personal es Estructura e interpretación de programas informáticos , que me enseñó mucho sobre diseño, mostrándome cómo sin esfuerzo se pueden crear soluciones sólidas para problemas complejos, con poco más que una clara abstracción y (des) composición en de arriba hacia abajo.
Entonces, esto es lo que sugiero:
- escribir código (y tratar de entender qué lo hace malo)
- lee el código (y trata de entender lo que lo hace bueno)
- intercambiar conocimientos con otras personas. Pon tus ideas a prueba.