The real issue is a guy who has been programming for 3 years is trying to compare himself to people who have programmed for 30. Practice makes perfect - if you've only been coding for 3 years, I can almost guarantee that you don't understand a big chunk of the code you use. Once you've been coding for awhile though, you really can get to a stage where you understand everything from the bottom up. At that point, creating new frameworks, languages and algorithms becomes an obvious task.
I've noticed the best programmers are the ones who have actually coded their own compiler, frameworks, etc even if they were only toy implementations. The understanding that comes from building a 3D engine or high performance message bus is usually impossible to obtain in any other way.