We're always trying to abstract away details in software so that we don't have to think about all details all the time. It reduces the cognitive load and allows us to focus our brain's processing power on the details most relevant to the task at hand.

The concept of abstraction is fundamental to software engineering - imagine if we all had to think about memory allocation or scheduling tasks on a processor or routing packets. Abstraction is powerful. It's also a sign of progress within this young industry.

However, often programmers are left thinking about it all the time. In a slightly different way. The thought is something like "I can use this but I don't really intuitively get it" or "I wish I had time to learn this at a deeper level". That lingering thought creates a psychological load of having to be okay with not knowing or not understanding something. Many of us crave details and not knowing exactly how something works is a psychological burden we subconsciously carry.

This is true at all levels of experience as a software developer. Even after decades of programming, there are threads we haven't had a chance to pull at yet and new concepts showing up all the time.  I imagine this can be especially painful for new developers. If typing some code into a browser and having a console print out 'hello world' is not satisfying to you, you're not alone. There are questions that need answering - how? why? what else?

Things do progressively get better. Ongoing practice of programming exposes us to new concepts and gives us a reason to ask questions and seek out answers. Over time you can see patterns and predict outcomes.  Keep a log of things you want to understand deeper and pull at those threads when you can. A deliberate practice of feeding your curiosity.