gravity
The most notable thing is that emacs encourages you to live in it much more than vim. With vim, I would navigate around in the shell, open up a file in vim, edit, close, repeat. With emacs I'm finding that I spend more time just switching buffers instead of running back to the shell because emacs doesn't simply quit when I kill all my open files. There's always more buffers, so the app stays open and I tend to remain there.
I'm still in the process of getting up to speed with basic editing things, although I've found that the way it manages buffers and what it calls windows (what the rest of the world calls frames these days) is quite easy and quick to use, and I found myself able to navigate around in emacs fairly quickly. All in all, I'm not 100% sure I'll stick with it, but I'm happy so far and I know that I'm still getting over the hump to where I'll be truly productive with it.
Given that you already know C and C++, I'd learn Perl, Python, or Ruby, since they're a very natural extension of C and C++ and can be used very easily in problem domains where you wouldn't want to use C or C++. Learning more than one of these may prove useful if you want to hack on a variety of different open source codebases, so whichever one you pick first isn't so important as picking one and having it in your toolbox.
What's important about this isn't so much that free software didn't fail, but that modern computing could not and would not exist without free software. End of story. Mac classic would be all but dead now, and Windows would have "innovated" us all in to a ditch. Remember what Microsoft did to IE when Netscape wasn't a threat? It'd be the same story. Without free software, there wouldn't be a mozilla, an OSX, or anything like it. Modern computing absolutely requires free software in order to function.
Back when linux was "cool" (when was this? Late 90's?) only geeks tried it. Some stuck with it, others went to OSX, like yourself. Most people, during this time, managed to hear the word linux, but didn't really know what it was. Consequently, they didn't try it. This mythical time when everyone and their grandmother was trying Linux just didn't happen. But just because Free Software didn't work for you back then doesn't mean it failed.
Mac OS, by my standards, failed miserably. Totally. Utterly. So I went to Linux. This was pre-OSX, when Apple was a company that had totally lost its way and was getting demolished by Microsoft. Pretty much everyone said that the Macintosh and Apple had failed and their days were numbered. Now things are different because Apple didn't stop. They never really failed you see, they just kept going. The Free Software community is doing much the same, and I'd be surprised if we're in the same place in another ten years.
Just because something is not meeting your specific needs right now doesn't mean it's failed. Given the enormous progress I've seen over the past ten or so years I think it's fair to say quite the opposite. You actually have a choice to run Linux today where that wasn't really an option a decade ago. If that's failure, then you have a strange definition of failure.
As for the desktop, the work isn't finished, and it'll take a very long time to get to the point where it's a real contender. It's not a QA issue. The Linux desktop of today is actually of very high quality. It's that it's a very difficult space to compete in.