When I started to learn about imperative programming and declarative programming it raised many doubts, like, how are structured, modular and object-oriented programming classified: declarative or imperative?
Do not be too obsessed with it. It is often only buzzwords covering a fuzzy trend (from structured to object oriented) towards better organization of programs, with somewhat different realizations in different languages. It can appear in any programming paradigm, whether imperative or declarative. They are intended to improve readability of programs, good programming practice, maintainability, code reuse in various guises, independence of program parts, information hiding.
What is a lot more important is to understand the specific techniques that can be used, their costs and benefits, the constraints they create and the freedom they provide. The more interesting techniques are based on formal mathematical analysis.
It involves a variety of more precisely definable concepts, such as environments, scoping and binding of variables, typing systems, modularity and interfacing, parameterization of code and modules, exception handling ...
I would think you will be better off concentrating on these identified technical issues than on more popular but fuzzier concept.