I'll second Marc's remarks about performance problems and dissappointing language features. .NET is heavily targeted at what I'll call "directed development" where applications are planned, developed and constructed so that code is the glue that developers create to tie application specific data components to generic UI components. Allot of the development work that I have done over the years (and I suspect this is true of Marc also) has been more generic development of systems that are used to build other systems where both the data components and UI components were largely generic. The glue has been configuration and meta-data. This leads to a different way of thinking about type safety, object creation, etc, that is not always condusive to the way .NET works. I have experienced some serious performance problems with .NET that have prevented me from switching some core applications from C++ to C#/managed code. Even ASP.NET applications can underperform classic ASP under certain circumstances, which is distrurbing at best. Overall, though, .NET is the way to go with most things and most development projects. There are other options, such as C++, that are still valid in the right situations and should not be ignored.