I was disillusioned by Princeton's Algorithms course when I took it. I felt like I was fighting too hard with eccentricities of Java than actually learning about algorithms. In retrospect, I was wrong, because one of the things I realized that it taught me was that implementation details of algorithms are _hugely_ important, and can cause drastic differences in time and memory utilization. I can easily forget the details, but I haven't forgotten the experience of hacking out my stupid mistakes until the implementations fit the requirements.
That was a learning for me too, but I thoroughly enjoyed the psets. I don't mind Java - setting everything up can be annoying but I find it fairly straightforward and its massive standard library comes in handy for a class like this.