Well, in first place i can say experience, I have more than 5 years in the world of development and now i know things that when is started i don't know!
In another case the point of view is so important and when you are a beginner in this world some solutions you may think are ok, doesn't.
With the years and experience you can learn to focus on the problem and making a perspective to get the best solution, this and the new methodologies like BDD, TDD and DDD are making the development more useful.
And the interest of self-evolve and study every day, read articles, post in social networks and forums dedicated to programming and always find new ways to do the development, and maybe learn a little about system (apache, linux, bash)