I remember the joy of saying goodbye to the limits of BASIC when I switched to C. Ah, the power, the control....

After a while, I was sick of debugging memory and having to rely on "libraries" just to do anything useful with strings, and it was such a relief to discover Perl. Talk about power! I was suddenly creating little utility programs for everything. It occurred to me that I could have been writing these utilities in C all along but I never did because the time to write and debug them was more than the time they would have saved. What a joy to discover Perl (which then led into learning the Unix command line and its utilities.)

But after a while, I noticed how often I still had to look up the "clever" syntax of Perl. There were so many other ways to do things that I couldn't read other people's Perl without a reference book beside me and, heaven help me, sometimes I couldn't even read my own. That had never happened in C, But I wanted to create commercial GUI apps. Perl's answer? Use Tk? Yeah, right.

So, I switched to C++ for GUI apps, and what a treat to have that kind of power compared to Perl. But then I rediscovered memory debugging, what it's like to not have a string datatype, and I learned that the usefulness of OOP was offset by all the ridiculous little gotchas that meant you always had irreproducible bugs that you hadn't yet discovered.

What a relief when Java came out. Almost all the power of C++, plus built-in strings, arrays, even Unicode, but without most of the hidden gotchas. I could concentrate on the demands of the problem instead of the demands of C++. Like lots of programmers, I found Java much more fun than C++.

But of course there were things I missed--structs, enums, regular expressions, GUI apps that looked native--and every time I complained to Sun reps in a meeting, they would simply explain to me that they knew more about programming languages than I did, and they knew that I didn't really need these things. They held that position ("No, trust us, you don't really want that") for years.

But the Microsoft reps were always EXTREMELY interested in anything we wanted from Java but that Sun wouldn't give us. "What do you wish Java had and how would you use it?" They took lots of notes. Superb marketing.

When C# was released, it was with great relief that I finally got the language, native GUI app builder, and other things I'd been longing for in Java for so long.

Building GUI apps with C# is still a joy, but I'm always frustrated at being limited to Windows. I use Macs and Linux boxes, too, and Mono has never quite been what I had hoped for. I need to do a lot of web programming, cross-platform number crunching, and all sorts of things. And having to (repeatedly) buy all of those Microsoft tools and be a "registered developer" and all that nonsense, phooey!

Thank goodness, I found Python. Free, available on every platform, great built-ins AND great libraries.... Like Perl, but with a syntax I remember without looking things up. I can read other people's code without a reference.

But I wish it had the flexibility and macros of Lisp, the power I've found in functional programming, the easy GUI creator of C#, the speed of C... and a pony.

I understand the OP's feeling of relief at leaving annoyances behind. Believe me, I do. Every system I've used has had problems I'm glad to rid of and features I still miss. But that's what you get when you change a relationship, move to a new house, sell your car, get a new job. And, with programming languages, you can go back when you need to.

It's often good to move on, but it doesn't mean what you left behind was bad. Sometimes you just need different problems.