I've been a .NET developer for about six years. In those six years, I've worked at exactly one .NET shop that followed any kind of actual design pattern or industry best practice. That realization has frustrated me where I'm at the point of considering making a switch to Java and leveraging my C# experience because the Java community seems to have a larger handle on proper software engineering than the .NET community, which seems more focused on RAD techniques and quasi-procedural code and don't want to improve at all.
For example, the average Java shop is probably using an MVC framework like Spring, Seam or venerable old Struts, is using Hibernate, is probably writing unit tests, knows how to use source control properly, and while there's the danger of the architecture astronaut is more than likely applying design patterns and following good practices like the SOLID principles.
In contrast, the average .NET shop uses untyped DataSets, writes all the code to solve a problem in event handlers of WebForms, thinks testing means loading up the built-in web server and playing with the application, if they use source control at all use something like Visual SourceSafe and think it's great, and has no idea what the single responsibility principle even means or why it's a good thing. Attempts at introducing things like ORMs, design patterns, unit testing is usually met with a blank stare or outright rejection due to not even understanding why those things are better than the debugger or writing code in an event handler of a widget - it's like talking to a brick wall.
I am aware of "ALT.NET" (I follow it myself), but I am finding an environment that knows about that, let alone follows it, and it seems to be like finding needle in a haystack, and trying to change an organization to use it has always ended badly for me, to the point where I've actually been shown the door and let go for wanting to do things better than the company had been doing before I joined.
Would there be any benefit at all to my trying to leverage C# skills and make a transition to Java? I'm running out of options trying to find a .NET shop that actually follows real software engineering concepts instead of just throwing out code, and I'm starting to think my chances of finding that kind of place will greatly increase if I'm not using a technology stack that pushes the opposite as the right way.