From C to C++ to Java to Python has been an exercise in things getting better all the time. Each step has removed mountains of useless overheads and sources of confusion.
Moving from non-object to object world allows for potentially big design simplifications. The encapsulation principle keep things understandable.
Moving from explicit memory management to garbage collection removes all of the silly overheads of wrong or missing deletes and the attendant crashes. Back in '02 I got an email from someone involved in writing a web server (really!) and it just wouldn't work for more than 20 minutes. "Let me guess," I said, "You're writing it in C++." They were amazed that I could guess the environment from the crashes they were seeing.
Moving from static to dynamic programming has made it even easier to create tidy, clean, working software. I really like prototyping and designing in Python. When the customer demands it, I can then convert to Java with confidence that the design will be really rock-solid.
I flirted with Perl, but the object model didn't make enough sense -- it was so clearly an after-thought that I couldn't get used to it. When I started learning Python (back in '02) there weren't a lot of alternative dynamic languages in wide use.
I really like the Python "standard of excellence": The API should be so simple that you can bang away in the interactive interpreter. If your constructors or methods are too complex to type interactively, you have work to do.
I spent too long with Java -- I tend to develop API's that are too complex to exercise interactively. I'm trying to achieve that level of elegance where I can cut and paste the interactive session into the docstring to make nice, simple doctests.