One of the most consolidated misconceptions about programming, since the early days, is the idea that such activity is purely technical, completely exact in nature, like Math and Physics. Computation is exact, but programming is not. The first is a result of a machine operation, and the latter is still a human activity.
Programming requires a lot of creativity, on top of the abstract concepts, tools and techniques that we might learn in a classroom; all that theory represents only a tiny portion of what is necessary to build a great developer.
As people are diverse in nature, our motivations, goals and challenges will always be different, since the very start. I can only talk about my personal experience, and my motivations had absolutely nothing to do with a taste for Math or exact sciences.
At age 13, I had my first experience with programming - it was an unusual computer class at school, where we learned how to create some basic stuff with Clipper. The teacher was just tired of teaching Word, Excel and such. It was sort of a mind blowing experience to me, seeing how we could create functional things out of a few lines of code.
Having an artist and an engineer as parents, and getting those influences in my life since I was little, I soon realized that programming combined just the best of both worlds. It's art built on top of logic.
My main and strong motivation with programming, since then, is the ability to create things "out of nothing", bringing ideas to life, with code.
I see programming as a form of art, but you know: not all artists are the same. As with painters, there are many programmers who only replicate things, never coming up with something original.
Genuine artists are different. They come up with new things, they set new standards for the future, they change the current environment for the better. They are not afraid of critique. The "replicators" will try to let them down, by saying "why creating something new if you can use X or Y"?
Because they are not satisfied with X or Y. Because they want to experiment and try by themselves as a learning tool. Because they want to create, they want to express themselves in code. Because they are just free to do it, even if it's not something big that will change the world.
"The most creative people are willing to work in the shadow of uncertainty." - from Creativity, Inc. by Ed Catmull
Respect the work of others, even if you think there is something with a similar purpose already out there. It's their expression. They are not trying to reinvent the wheel. They are trying to create a better wheel, or a wheel that works better for their purposes.
That's how amazing things come to life.
Soft skills are as critical as technical skills for a software engineer. No one works in isolation. Each person has to deal with teammates, colleagues, managers, etc. Therefore team interpersonal skills are essential too. Soft skills include things like good communication, honesty, teamwork, integrity, organization, empathy, etc.