I think one of the BIG things that I realize over and over all the time in myriad ways is that the boring details of implementation really matter. It's natural to whinge and moan when some gray-haired old person tells you that you have to learn what bits and bytes are and how integers are encoded versus floating point numbers and how strings are encoded differently than those and what character encodings are and what a stack is and so on etc, etc, etc.
It's all well and good to get new programmers started quickly by thrilling them with a simple program, but when you must solve real-world problems, the hardest ones usually relate to some detail of how things are implemented. For example, the problem of "why do I see weird characters and question marks in my website?" is usually due to character encoding problems. You should have listened when the old gray hair explained the difference between LATIN-1 and UTF-8.
Sadly, it has required long and torturous hours of confusion and failure to learn various lessons. As Ben Franklin said, "experience keeps a dear school, but fools will learn in no other."