Настоятельно рекомендую к незамедлительному прочтению вот эти две книги:
В первой примеры на Java, но очень хорошо описаны, потому сам язык не является препятствием в понимании концепций.
Вопрос не совсем по теме, скорее где-то сбоку. Ты говоришь, много алгоритмов, сложно в голове удержать. А такой вопрос - ты какими паттернами проектирования кода пользуешься? Просто задачи, описываемые тобой выглядят как подпадающие под несколько паттернов, которые сильно облегчают разработку и сопровождение. Например, "слишком много взаимодействий и зависимостей" укладываются в концепцию паттернов "Стратегия", "Посетитель", "Наблюдатель".