Being a programmer has always meant dealing with abstraction layers and climbing up the abstraction ladder.
You are simply learning a new language, whose syntax happens to look like English (or whatever language you speak), but with new, undiscovered, and constantly changing design patterns and best practices.