На самом деле проблема нетривиальная для новичка. Себя помню вначале пути. Какая же это была головная боль.
И при том, даже с высоты своего опыта посоветовать что-то конкретное не могу. Оно как-то с опытом нарабатывается. Помогают на этом пути общие книги по программированию, Макконел там, Фаулер. Помимо книг можно было бы посоветовать посмотреть код популярных проектов. Но новичку в них тоже бывает сложно разобраться.
Наиболее продуктивный путь, на мой взгляд, это поработать в команде под присмотром более опытных коллег. Они и подскажут и направят в нужное русло.
А если самостоятельно, то запилить какой-то свой проектик и вылизывать его, рефакторить по мере приобретения новых знаний и опыта, вплоть до переписывания с нуля.