Понимание приходит само собой.
Я сначала захотел написать аналог одного скрипта, популярного в мобильном интернете. Скрипт был очень херово написан, а поскольку я делал по аналогии, то возникали он получался тоже херовым. При его поддержке приходило понимание какое-то же говно я написал, постепенно он стал трансформироваться в нечто, напоминающее простенькие фреймворки типа Kohana: тоже были своего рода контроллеры (у меня они назывались модули и представляли из себя PHP-файл с кодом, а не класс), были шаблоны, данные в которые передавались из этих самых модулей. Писал много, понимая что получается много избыточного кода. Потом посмотрел на ту же Kohana и очень быстро врубился, потому что в ней было много того, что и у меня, только называлось красивее: контроллеры, представления, роутинг, модели и прочее. Кстати, к Kohana так и не привязался, понимание того, какая она несовершенная стало приходить тоже быстро.
Скорее всего ты пишешь недостаточно много, в противном случае ты бы начал активно наступать на свои же грабли, это становится неприятно, начинаешь что-то менять в коде. Должна быть цель написать качественный скрипт, а не изучить ООП.