Writing a computer graphics engine during university taught me a couple: 1. I can use math, intuitively, even if I don't know how the exact calculation works. 2. I can use a debugger and replay it again and again to understand what's happening. 3. I can diagram a high level design and not have the complete context in mind and still produce a 10K LoC OpenGL powered computer graphics engine. After that project, program…
So to answer the original question, my epiphany is that something being "hard" is a relative thing and that "hardness" should never be a barrier that keeps me from reaching my goals.