I believe your question is not worded in a way that actually makes sense. I think what you're really asking is, "Is it good to understand memory and pointers."
Say in C++ we have a class Dog.
Dog a = Dog(); // On stack
Dog *b = new Dog(); // On heap.
'a' holds a value which is a Dog.
'b' holds a value that is a memory address that is on the heap (which we will find a dog hiding there).
'b' takes up space on the stack to hold the address so it'll only take up the size of a pointer on the stack.
'a' takes up space on the stack which is the size of a dog.
Say we want the dogs to bark now though...
a.bark();
b->bark();
We have to treat our dogs differently.
b->bark();
(*b).bark(); // same as above
We have to say, "Go to where b lives, and tell it to bark." Most people don't get the difference and want to say.
b.bark(); // Won't work, might not even build.
Because a pointer is just an location (which is just a number). And a number cannot bark. ('a' is a Dog. 'b' is the location of another dog.)
// We can even change what dog b points to.
b = &a; // b will now hold the location to dog 'a'.
// we will also have a dog that shall be lost forever D=!
b->bark();
a.bark(); // dog 'a' has now barked twice in a row since b points to a.
Do you need to understand this? Depends on what languages and tools you use. In languages like Java and Python all of this is forced on you without you knowing it, it's handled by the language so you don't notice it.
Is it good to understand this? Why yes... yes it is.
Do you have to keep it active in your mind? Well... lets allocate an array.
int stackArray[INT_MAX]; // Probably overflows the stack
int *heapArray = new int[INT_MAX]; // Allocates it all on the heap
// or returns NULL if it cannot find the space.
So yes. At times.
(stackArray will actually be a pointer though... to memory on the stack)