Несколько уточнений:
Кроме ООП есть масса парадигм как избавится от дублирующего кода - например процедурное программирование - когда все пишем в рамках одного класса, а все дублирующие куски кода выносим в методы. Или же делаем сервисный класс, со статическими методами, куда пихаем повторяющиеся куски кода.
По поводу площадки с лекциями, вот вполне себе достойная:
ссылка - бесплатные лекции по Computer Science