Check out Jeff Atwood’s description of developing in C#:

The second is the C# compilation tax. When working in C#, I’m constantly compiling the solution to ensure that I haven’t broken anything. It’s a ridiculous productivity tax in an endless loop: Write some code. Compile. Write a little more code. Compile. Change a function. Compile. Rename a variable. Compile. Refactor some methods. Compile. Then compile again, just to be sure. Wait a second.. did I compile this yet? Compile!

I am shocked and amazed that Visual Studio doesn’t build a semantic model of your code and proactively let you know whether your code is going to compile. I almost can’t believe that this is true, given that every decent Java IDE does this and has been doing it for years. Eclipse, IntelliJ IDEA, NetBeans, JBuilder, you name it. If you use any modern Java IDE, you are never surprised by a syntax error at compilation time, because your editor lets you know that your code is broken as soon as you make a mistake. Heck, they’ll even warn you about all sorts of other common mistakes that lead to bugs, like unused local variables and uncalled methods.

Apparently some third party C# IDEs provide this functionality, but I am literally stunned that Microsoft hasn’t built it into Visual Studio. I’m blown away.