Different tools for different tasks. Pretty much every language in widespread use is both very useful and beautiful and very ugly and clunky at the same time, depending on what you're trying to do.
If I really had to pick one it would be Python. Python's probably my favorite for its flexibility -- I like how it lets you mix the imperative, object-oriented, and functional paradigms. I <3 lambda. Being able to fire up an interpreter and actually test a small chunk of code as you write it is absolutely wonderful, too.
Most of my current work is in C++ with Qt. C++ with Qt feels very different from just plain old C++, just like C++ with Boost feels very different from just plain old C++, or C++ with a modern compiler that actually supports most of the language feels very different from old-old C++, for that matter (Qt is mostly a cross-platform GUI toolkit but it also adds a nice structure for dealing with events using "signals" and "slot"). C++ is flexible but in a way that's horribly abused. There's just something perverse yet wonderful about a language that supports metaprogramming (with templates) and yet still lets you dick with naked pointers. Most programmers don't use it, right, I think. C++ is a total mess without some clear idea of just which features of the language you really want to use. If you've got a smart project engineer who can figure out just which style fits a project best and focused team that's capable of following its own standards, you can get somewhere with C++. For more naive development or do-it-yourself learning, though, the language is a pain to work with and produces messy, horrible code. It's no wonder that the languages that have followed in its footsteps (Java, C#) are much more restrictive about just what you can do.
-- Alex