> I've been programming since I was about nine. I still love writing software as much as I did the day that I figured out that you could compile code.
> [...]
> I came into engineering because I loved to code, I stayed for the money, but when this career is long gone I'll probably still tinker with code.
Funny, this is my exact story as well. I still remember independently re-inventing the bubble sort algorithm when I was around 10, not knowing you could do better. :)
As for the topic of "mastering software engineering," I'm not sure that's possible. The stuff we learned in school about hard algorithmic problems is not what we deal with on a daily basis; or, rather, it's not what 99% of us deal with.
What I mean is that most software engineering problems are social problems. Most software only has meaning in a social context. That is, its utility and correctness are subject to social forces [0]. This is true any time more than one person is involved in developing or using a given piece of software.
In my experience, this has been true for almost every bit of code I've ever written, the exception being some fancy numerical integration code I worked on in grad school for a bit. Even then, I could probably argue that there was a social component to it, since I was building upon the work of previous grad students.
IMO, the most important skill a software engineer can have is knowing how to identify the social forces behind the software he or she is being asked to write. You aren't paid to write code; you're paid to solve problems, and, as I said, all the real problems are social. Sometimes you can do that without code, or, at least without writing additional code, and those solutions are often the best solutions to the problem.
And, once you've written code, as you said, you're leaving behind an artifact for future software engineers to see. You're communicating with the future every time you write a line of code. Since you don't know how the future is going to interpret what you've written, you should write it as clearly as possible.
It is in this way that I believe software engineering really isn't much like engineering per se, but more like writing a book. Except that it's a book with potentially hundreds of authors.
---
[0]: If you don't believe that, then, how do you explain the existence of product managers? ;-)