Taking it to the next level...

Josh writes:

I've been working professionally with C# for about 2 years now and am just blown away by the things I can do with it. Lately though, I've felt like I've plateaud at this beginner to intermediate level. Every book I look at is either "Hello, World" or beyond my level of expertise, I feel like I'm always one step behind the game and my code is becoming stale.

That's a very interesting question. I'm not longer a professional programmer (though I was for a little over a decade), so you'll also want to listen to the comments that others are sure to write.

If you haven't read them, there are a couple of books that I'd definitely recommend.

Code Complete
The Pragmatic Programmer

Both of these are currently on my bookshelf (actually, they would be if somebody hadn't walked off with my copy of Code Complete).

To expose yourself to some new ideas, I'd also suggest:

Refactoring: Improving the Design of Existing Code
Extreme Programming Adventures in C#
Test-Driven Development in Microsoft .NET

Whether you agree with these approaches or not, they are certainly thought-provoking.

The best programmers that I've known always have a few side projects going on, where they're exploring new areas, new environments, etc. If you've never done network programming, try writing some socket code, or play around with remoting, or DirectX. Play around with tools, like a profiler, or measure the performance of different options. Get a book on .NET IL and spend some time under the covers (Richter's book is a good guide here).

Finally - and this may seem like weird advice from a C# guy - spend some time writing some code in a language such as Perl. Scripting languages lead to a different mindset that can be useful in language.