|Think about Loose Coupling|
I learned Perl because one of the programmers at our new ISP (back in 1996) told me I might like it better than shell scripts. He said, "I think it will fit the way you think."
A year later, he was calling me for advice when he was tinkering in Perl. By that time I'd already been dispensing advice (not always good advice...) for months. My first post to CLPM on google helps date me.
I would have remained a hobbyist if not for the fact that that progammer left the company right about the same time I felt the need to have a major project done for my department (I was Tech Support Manager.) I turned in my massive project document only be told there wasn't any web programmer anymore. So I sucked it down and accepted their offer to give up management to code.
As to the second question, I waffle from elegance to efficiency. Things that just need to get done, I do in a scrappy manner. Things that are going to get used over and over buy more attention up front. I try to be meta-efficient by not overworking unimportant code.
The key lesson I've learned is to never give a single thought to how fast something will be. Figure out if it will work at all, first. The time I've seen wasted on over-optimizing code for speed (code that adds barely 1% to the run time in hindsight, at its worst) would amount to more man-hours than I've spent actually programming.
I, personally, have wasted too much time on more than one project in pursuit of beauty. Over optimizing for purity is as bad as pre-optimizing for speed.